Skip to content

Commit

Permalink
HSEARCH-4771 Deprecate the concept of "DetachedBackendSessionContext"
Browse files Browse the repository at this point in the history
  • Loading branch information
yrodiere committed Jan 4, 2023
1 parent f996c4f commit 7dd57f3
Show file tree
Hide file tree
Showing 28 changed files with 122 additions and 153 deletions.
Expand Up @@ -31,7 +31,6 @@
import org.hibernate.search.engine.backend.schema.management.spi.IndexSchemaManager;
import org.hibernate.search.engine.backend.scope.spi.IndexScopeBuilder;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy;
import org.hibernate.search.engine.backend.work.execution.DocumentRefreshStrategy;
import org.hibernate.search.engine.backend.work.execution.spi.DocumentContributor;
Expand Down Expand Up @@ -200,10 +199,8 @@ public IndexIndexer createIndexer(BackendSessionContext sessionContext) {
}

@Override
public IndexWorkspace createWorkspace(DetachedBackendSessionContext sessionContext) {
return backendContext.createWorkspace(
this, sessionContext
);
public IndexWorkspace createWorkspace(BackendMappingContext mappingContext, String tenantId) {
return backendContext.createWorkspace( this, tenantId );
}

@Override
Expand Down
Expand Up @@ -36,7 +36,6 @@
import org.hibernate.search.backend.elasticsearch.work.execution.impl.WorkExecutionIndexManagerContext;
import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.DocumentRefreshStrategy;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexer;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexingPlan;
Expand Down Expand Up @@ -123,13 +122,12 @@ public IndexIndexer createIndexer(
}

@Override
public IndexWorkspace createWorkspace(WorkExecutionIndexManagerContext indexManagerContext,
DetachedBackendSessionContext sessionContext) {
multiTenancyStrategy.documentIdHelper().checkTenantId( sessionContext.tenantIdentifier(), eventContext );
public IndexWorkspace createWorkspace(WorkExecutionIndexManagerContext indexManagerContext, String tenantId) {
multiTenancyStrategy.documentIdHelper().checkTenantId( tenantId, eventContext );

return new ElasticsearchIndexWorkspace(
link.getWorkFactory(), multiTenancyStrategy, generalPurposeOrchestrator,
indexManagerContext, sessionContext
indexManagerContext, tenantId
);
}

Expand Down
Expand Up @@ -15,7 +15,6 @@
import org.hibernate.search.backend.elasticsearch.util.spi.URLEncodedString;
import org.hibernate.search.backend.elasticsearch.work.factory.impl.ElasticsearchWorkFactory;
import org.hibernate.search.engine.backend.work.execution.spi.IndexWorkspace;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.OperationSubmitter;

import com.google.gson.JsonArray;
Expand All @@ -27,17 +26,17 @@ public class ElasticsearchIndexWorkspace implements IndexWorkspace {
private final MultiTenancyStrategy multiTenancyStrategy;
private final ElasticsearchParallelWorkOrchestrator orchestrator;
private final URLEncodedString indexName;
private final DetachedBackendSessionContext sessionContext;
private final String tenantId;

public ElasticsearchIndexWorkspace(ElasticsearchWorkFactory workFactory,
MultiTenancyStrategy multiTenancyStrategy, ElasticsearchParallelWorkOrchestrator orchestrator,
WorkExecutionIndexManagerContext indexManagerContext,
DetachedBackendSessionContext sessionContext) {
String tenantId) {
this.workFactory = workFactory;
this.multiTenancyStrategy = multiTenancyStrategy;
this.orchestrator = orchestrator;
this.indexName = indexManagerContext.getElasticsearchIndexWriteName();
this.sessionContext = sessionContext;
this.tenantId = tenantId;
}

@Override
Expand All @@ -48,7 +47,7 @@ public CompletableFuture<?> mergeSegments(OperationSubmitter operationSubmitter)
@Override
public CompletableFuture<?> purge(Set<String> routingKeys, OperationSubmitter operationSubmitter) {
JsonArray filters = new JsonArray();
JsonObject filter = multiTenancyStrategy.filterOrNull( sessionContext.tenantIdentifier() );
JsonObject filter = multiTenancyStrategy.filterOrNull( tenantId );
if ( filter != null ) {
filters.add( filter );
}
Expand Down
Expand Up @@ -11,7 +11,6 @@
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexer;
import org.hibernate.search.engine.backend.work.execution.spi.IndexWorkspace;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexingPlan;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;

/**
Expand All @@ -38,7 +37,6 @@ IndexIndexer createIndexer(
WorkExecutionIndexManagerContext indexManagerContext,
BackendSessionContext sessionContext);

IndexWorkspace createWorkspace(WorkExecutionIndexManagerContext indexManagerContext,
DetachedBackendSessionContext sessionContext);
IndexWorkspace createWorkspace(WorkExecutionIndexManagerContext indexManagerContext, String tenantId);

}
Expand Up @@ -42,7 +42,6 @@
import org.hibernate.search.backend.lucene.work.impl.LuceneWorkFactory;
import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy;
import org.hibernate.search.engine.backend.work.execution.DocumentRefreshStrategy;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexer;
Expand Down Expand Up @@ -138,10 +137,10 @@ public IndexIndexer createIndexer(

@Override
public IndexWorkspace createWorkspace(WorkExecutionIndexManagerContext indexManagerContext,
DetachedBackendSessionContext sessionContext) {
multiTenancyStrategy.checkTenantId( sessionContext.tenantIdentifier(), eventContext );
String tenantId) {
multiTenancyStrategy.checkTenantId( tenantId, eventContext );

return new LuceneIndexWorkspace( workFactory, indexManagerContext, sessionContext );
return new LuceneIndexWorkspace( workFactory, indexManagerContext, tenantId );
}

@Override
Expand Down
Expand Up @@ -28,7 +28,6 @@
import org.hibernate.search.engine.backend.schema.management.spi.IndexSchemaManager;
import org.hibernate.search.engine.backend.scope.spi.IndexScopeBuilder;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.OperationSubmitter;
import org.hibernate.search.engine.common.resources.spi.SavedState;
import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy;
Expand Down Expand Up @@ -138,8 +137,8 @@ public IndexIndexer createIndexer(BackendSessionContext sessionContext) {
}

@Override
public IndexWorkspace createWorkspace(DetachedBackendSessionContext sessionContext) {
return backendContext.createWorkspace( shardHolder, sessionContext );
public IndexWorkspace createWorkspace(BackendMappingContext mappingContext, String tenantId) {
return backendContext.createWorkspace( shardHolder, tenantId );
}

@Override
Expand Down
Expand Up @@ -14,21 +14,20 @@
import org.hibernate.search.backend.lucene.work.impl.IndexManagementWork;
import org.hibernate.search.backend.lucene.work.impl.LuceneWorkFactory;
import org.hibernate.search.engine.backend.work.execution.spi.IndexWorkspace;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.OperationSubmitter;

public class LuceneIndexWorkspace implements IndexWorkspace {

private final LuceneWorkFactory factory;
private final WorkExecutionIndexManagerContext indexManagerContext;
private final DetachedBackendSessionContext sessionContext;
private final String tenantId;

public LuceneIndexWorkspace(LuceneWorkFactory factory,
WorkExecutionIndexManagerContext indexManagerContext,
DetachedBackendSessionContext sessionContext) {
String tenantId) {
this.factory = factory;
this.indexManagerContext = indexManagerContext;
this.sessionContext = sessionContext;
this.tenantId = tenantId;
}

@Override
Expand All @@ -40,7 +39,7 @@ public CompletableFuture<?> mergeSegments(OperationSubmitter operationSubmitter)
public CompletableFuture<?> purge(Set<String> routingKeys, OperationSubmitter operationSubmitter) {
return doSubmit(
indexManagerContext.managementOrchestrators( routingKeys ),
factory.deleteAll( sessionContext.tenantIdentifier(), routingKeys ),
factory.deleteAll( tenantId, routingKeys ),
true, operationSubmitter
);
}
Expand Down
Expand Up @@ -8,7 +8,6 @@

import org.hibernate.search.backend.lucene.document.impl.LuceneIndexEntryFactory;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy;
import org.hibernate.search.engine.backend.work.execution.DocumentRefreshStrategy;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexer;
Expand Down Expand Up @@ -39,5 +38,5 @@ IndexIndexer createIndexer(
BackendSessionContext sessionContext);

IndexWorkspace createWorkspace(WorkExecutionIndexManagerContext indexManagerContext,
DetachedBackendSessionContext sessionContext);
String tenantId);
}
Expand Up @@ -19,7 +19,6 @@
import org.hibernate.search.engine.backend.work.execution.spi.IndexWorkspace;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexingPlan;
import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;

/**
Expand Down Expand Up @@ -86,7 +85,7 @@ IndexIndexingPlan createIndexingPlan(BackendSessionContext sessionContext,

IndexIndexer createIndexer(BackendSessionContext sessionContext);

IndexWorkspace createWorkspace(DetachedBackendSessionContext sessionContext);
IndexWorkspace createWorkspace(BackendMappingContext mappingContext, String tenantId);

IndexScopeBuilder createScopeBuilder(BackendMappingContext mappingContext);

Expand Down
Expand Up @@ -24,7 +24,11 @@
* {@link org.hibernate.search.engine.backend.index.spi.IndexManagerImplementor#createIndexingPlan(BackendSessionContext, DocumentCommitStrategy, DocumentRefreshStrategy) indexing plans}
* or {@link org.hibernate.search.engine.backend.index.spi.IndexManagerImplementor#createIndexer(BackendSessionContext) indexers}
* because these may need access to the session.
*
* @deprecated SPIs should simply pass around a string representing the tenant ID instead of using this class.
* In cases where the mapping context is also necessary, it should be passed around as a separate parameter.
*/
@Deprecated
public final class DetachedBackendSessionContext {

public static DetachedBackendSessionContext of(BackendSessionContext sessionContext) {
Expand Down
Expand Up @@ -17,7 +17,6 @@
import org.hibernate.search.engine.mapper.scope.spi.MappedIndexScopeBuilder;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexingPlan;
import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.mapper.mapping.spi.MappedIndexManager;

Expand Down Expand Up @@ -58,8 +57,14 @@ public IndexIndexer createIndexer(BackendSessionContext sessionContext) {
}

@Override
public IndexWorkspace createWorkspace(DetachedBackendSessionContext sessionContext) {
return implementor.createWorkspace( sessionContext );
@Deprecated
public IndexWorkspace createWorkspace(org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext sessionContext) {
return createWorkspace( sessionContext.mappingContext(), sessionContext.tenantIdentifier() );
}

@Override
public IndexWorkspace createWorkspace(BackendMappingContext mappingContext, String tenantId) {
return implementor.createWorkspace( mappingContext, tenantId );
}

@Override
Expand Down
Expand Up @@ -15,7 +15,6 @@
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexingPlan;
import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.engine.mapper.scope.spi.MappedIndexScopeBuilder;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;

/**
Expand All @@ -34,7 +33,15 @@ IndexIndexingPlan createIndexingPlan(BackendSessionContext sessionContext,

IndexIndexer createIndexer(BackendSessionContext sessionContext);

IndexWorkspace createWorkspace(DetachedBackendSessionContext sessionContext);
/**
* @param sessionContext The detached session context.
* @return An {@link IndexWorkspace}.
* @deprecated Use {@link #createWorkspace(BackendMappingContext, String)} instead.
*/
@Deprecated
IndexWorkspace createWorkspace(org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext sessionContext);

IndexWorkspace createWorkspace(BackendMappingContext mappingContext, String tenantId);

<R, E> MappedIndexScopeBuilder<R, E> createScopeBuilder(BackendMappingContext mappingContext);

Expand Down
Expand Up @@ -8,12 +8,9 @@

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import org.hibernate.search.engine.backend.scope.IndexScopeExtension;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.search.aggregation.dsl.SearchAggregationFactory;
import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory;
import org.hibernate.search.engine.search.projection.dsl.SearchProjectionFactory;
Expand Down Expand Up @@ -87,11 +84,7 @@ public SearchWorkspace workspace() {

@Override
public SearchWorkspace workspace(String tenantId) {
return workspace( DetachedBackendSessionContext.of( mappingContext, tenantId ) );
}

public SearchWorkspace workspace(DetachedBackendSessionContext detachedSessionContext) {
return new SearchWorkspaceImpl( delegate.workspace( detachedSessionContext ) );
return new SearchWorkspaceImpl( delegate.workspace( tenantId ) );
}

@Override
Expand All @@ -106,35 +99,23 @@ public MassIndexer massIndexer(String tenantId) {

@Override
public MassIndexer massIndexer(Collection<String> tenantIds) {
List<DetachedBackendSessionContext> contexts;
if ( tenantIds.isEmpty() ) {
// Let's see if we are in multi-tenant environment and try to get the tenant ids
Set<String> configuredTenants = tenancyConfiguration.tenantIdsOrFail();
if ( configuredTenants.isEmpty() ) {
// if we didn't fail with exception - single tenant is used so just create an empty session:
contexts = Collections.singletonList( DetachedBackendSessionContext.of( mappingContext, null ) );
tenantIds = Collections.singletonList( null );
}
else {
contexts = configuredTenants.stream()
.map( id -> DetachedBackendSessionContext.of( mappingContext, id ) )
.collect( Collectors.toList() );
tenantIds = configuredTenants;
}
}
else {
contexts = tenantIds.stream()
.map( id -> DetachedBackendSessionContext.of( mappingContext, id ) )
.collect( Collectors.toList() );
}

return massIndexer( contexts );
}

public MassIndexer massIndexer(List<DetachedBackendSessionContext> detachedSessionContexts) {
HibernateOrmMassIndexingContext massIndexingContext = new HibernateOrmMassIndexingContext( mappingContext,
mappingContext.typeContextProvider() );
mappingContext.typeContextProvider() );

PojoMassIndexer massIndexerDelegate = delegate
.massIndexer( massIndexingContext, detachedSessionContexts );
.massIndexer( massIndexingContext, tenantIds );

return new HibernateOrmMassIndexer( massIndexerDelegate, massIndexingContext );
}
Expand Down
Expand Up @@ -7,8 +7,8 @@
package org.hibernate.search.mapper.orm.session.impl;

import java.lang.invoke.MethodHandles;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import javax.persistence.EntityManager;
import javax.transaction.Synchronization;

Expand All @@ -20,7 +20,6 @@
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.search.engine.backend.common.DocumentReference;
import org.hibernate.search.engine.backend.common.spi.DocumentReferenceConverter;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.search.query.dsl.SearchQuerySelectStep;
import org.hibernate.search.mapper.orm.automaticindexing.session.AutomaticIndexingSynchronizationStrategy;
import org.hibernate.search.mapper.orm.automaticindexing.session.impl.ConfiguredAutomaticIndexingSynchronizationStrategy;
Expand Down Expand Up @@ -150,12 +149,12 @@ public SearchSchemaManager schemaManager(Collection<? extends Class<?>> types) {

@Override
public SearchWorkspace workspace(Collection<? extends Class<?>> types) {
return scope( types ).workspace( DetachedBackendSessionContext.of( this ) );
return scope( types ).workspace( tenantIdentifier() );
}

@Override
public MassIndexer massIndexer(Collection<? extends Class<?>> types) {
return scope( types ).massIndexer( Arrays.asList( DetachedBackendSessionContext.of( this ) ) );
return scope( types ).massIndexer( Collections.singleton( tenantIdentifier() ) );
}

@Override
Expand Down
Expand Up @@ -11,7 +11,6 @@

import org.hibernate.search.engine.backend.mapping.spi.BackendMappingContext;
import org.hibernate.search.engine.backend.schema.management.spi.IndexSchemaManager;
import org.hibernate.search.engine.backend.session.spi.DetachedBackendSessionContext;
import org.hibernate.search.engine.backend.work.execution.DocumentCommitStrategy;
import org.hibernate.search.engine.backend.work.execution.DocumentRefreshStrategy;
import org.hibernate.search.engine.backend.work.execution.spi.IndexIndexer;
Expand Down Expand Up @@ -115,8 +114,8 @@ public IndexIndexer createIndexer(PojoWorkSessionContext sessionContext) {
}

@Override
public IndexWorkspace createWorkspace(DetachedBackendSessionContext sessionContext) {
return indexManager.createWorkspace( sessionContext );
public IndexWorkspace createWorkspace(BackendMappingContext mappingContext, String tenantId) {
return indexManager.createWorkspace( mappingContext, tenantId );
}

@Override
Expand Down

0 comments on commit 7dd57f3

Please sign in to comment.