From 924c65d07b6cb896876382e67d1fe6f41a7e152b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 26 Apr 2021 11:20:39 +0200 Subject: [PATCH] HSEARCH-4203 Move mass indexing options out of MassIndexingThreadContext 1. They complicate the already very complicated interceptor code. 2. We can just pass these options explicitly where they are necessary. --- ...sIndexingIncludedEntityMapHierarchyIT.java | 4 +-- .../javabean/loading/LoadingOptions.java | 4 +-- .../impl/JavaBeanSearchLoadingContext.java | 16 +++++----- .../impl/JavaBeanMapIndexingStrategy.java | 7 ++-- .../JavaBeanSessionContextInterceptor.java | 7 ++-- .../AbstractHibernateOrmLoadingStrategy.java | 22 +++++++------ .../impl/HibernateOrmMassIndexingContext.java | 20 ++++++------ ...ssIndexingDocumentProducerInterceptor.java | 16 ++++++---- ...IndexingIdentifierProducerInterceptor.java | 18 ++++++----- .../LoadingInvocationContext.java | 8 +---- .../spi/PojoInterceptingHandler.java | 32 +++++++------------ .../spi/PojoInterceptingInvoker.java | 4 +-- .../pojo/loading/LoadingInterceptor.java | 6 ++-- ...ojoMassIndexingBatchIndexingWorkspace.java | 20 +++++------- ...assIndexingFailureInterceptingHandler.java | 16 ++++------ .../PojoMassIndexingIndexedTypeGroup.java | 9 +++--- .../impl/PojoMassIndexingThreadContext.java | 11 ++----- .../impl/PojoMassIndexingTypeProcessor.java | 18 ++++++----- .../MassIndexingEntityLoadingStrategy.java | 8 +++-- .../loader/MassIndexingThreadContext.java | 8 +---- .../spi/PojoMassIndexingContext.java | 8 +++-- 21 files changed, 119 insertions(+), 143 deletions(-) diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/MassIndexingIncludedEntityMapHierarchyIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/MassIndexingIncludedEntityMapHierarchyIT.java index 0ff36e8d221..f620dc5d7a3 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/MassIndexingIncludedEntityMapHierarchyIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/massindexing/MassIndexingIncludedEntityMapHierarchyIT.java @@ -262,13 +262,13 @@ public static ExceptingMapIndexingStrategy exeptingStrategy() { public static class ExceptingMapIndexingStrategy implements MassIndexingEntityLoadingStrategy { @Override - public EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext context, + public EntityIdentifierScroll createIdentifierScroll(JavaBeanIndexingOptions options, MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { throw new SimulatedFailure( loadingTypeGroup.includedEntityMap().keySet().stream().collect( Collectors.joining( "," ) ) ); } @Override - public EntityLoader createLoader(MassIndexingThreadContext context, + public EntityLoader createLoader(JavaBeanIndexingOptions options, MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { return identifiers -> null; } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/LoadingOptions.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/LoadingOptions.java index 0d6c74434ca..bf8a996ff4b 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/LoadingOptions.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/LoadingOptions.java @@ -16,7 +16,7 @@ public interface LoadingOptions { void massIndexingLoadingStrategy(Class type, MassIndexingEntityLoadingStrategy loadingStrategy); - void identifierInterceptor(LoadingInterceptor interceptor); + void identifierInterceptor(LoadingInterceptor interceptor); - void documentInterceptor(LoadingInterceptor interceptor); + void documentInterceptor(LoadingInterceptor interceptor); } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/impl/JavaBeanSearchLoadingContext.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/impl/JavaBeanSearchLoadingContext.java index 15de8bc786b..56c3fe6294b 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/impl/JavaBeanSearchLoadingContext.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/loading/impl/JavaBeanSearchLoadingContext.java @@ -35,8 +35,8 @@ public final class JavaBeanSearchLoadingContext implements PojoLoadingContext, private final Map, PojoLoader> loaderByType; private final Map, MassIndexingEntityLoadingStrategy> indexLoadingStrategyByType; - private final List> identifierInterceptors; - private final List> documentInterceptors; + private final List identifierInterceptors; + private final List documentInterceptors; private JavaBeanSearchLoadingContext(Builder builder) { this.loaderByType = builder.loaderByType == null ? Collections.emptyMap() : builder.loaderByType; @@ -96,12 +96,12 @@ public MassIndexingEntityLoadingStrategy } @Override - public List> identifierInterceptors() { + public List identifierInterceptors(JavaBeanIndexingOptions options) { return identifierInterceptors; } @Override - public List> documentInterceptors() { + public List documentInterceptors(JavaBeanIndexingOptions options) { return documentInterceptors; } @@ -109,8 +109,8 @@ public static final class Builder implements JavaBeanLoadingContextBuilder, Load private final LoadingTypeContextProvider typeContextProvider; private Map, PojoLoader> loaderByType; private Map, MassIndexingEntityLoadingStrategy> indexeStrategyByType; - private final List> identifierInterceptors = new ArrayList<>(); - private final List> documentInterceptors = new ArrayList<>(); + private final List identifierInterceptors = new ArrayList<>(); + private final List documentInterceptors = new ArrayList<>(); public Builder(LoadingTypeContextProvider typeContextProvider, JavaBeanMassIndexingMappingContext mappingContext) { this.typeContextProvider = typeContextProvider; @@ -148,12 +148,12 @@ public void massIndexingLoadingStrategy(Class type, MassIndexingEntityLoa } @Override - public void identifierInterceptor(LoadingInterceptor interceptor) { + public void identifierInterceptor(LoadingInterceptor interceptor) { identifierInterceptors.add( interceptor ); } @Override - public void documentInterceptor(LoadingInterceptor interceptor) { + public void documentInterceptor(LoadingInterceptor interceptor) { documentInterceptors.add( interceptor ); } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanMapIndexingStrategy.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanMapIndexingStrategy.java index b298495ab92..5a5ecb15a38 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanMapIndexingStrategy.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanMapIndexingStrategy.java @@ -34,7 +34,8 @@ public JavaBeanMapIndexingStrategy(Map source) { } @Override - public EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext context, + public EntityIdentifierScroll createIdentifierScroll(JavaBeanIndexingOptions options, + MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { Set identifiers = source.entrySet().stream() .filter( ent -> loadingTypeGroup.includesInstance( ent.getValue() ) ) @@ -48,7 +49,7 @@ public long totalCount() { @Override public List next() { - int batchSize = context.options().batchSizeToLoadObjects(); + int batchSize = options.batchSizeToLoadObjects(); List destination = new ArrayList<>( batchSize ); while ( iterator.hasNext() ) { @@ -67,7 +68,7 @@ public List next() { } @Override - public EntityLoader createLoader(MassIndexingThreadContext context, + public EntityLoader createLoader(JavaBeanIndexingOptions options, MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { return identifiers -> identifiers.stream().map( source::get ).collect( Collectors.toList() ); diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanSessionContextInterceptor.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanSessionContextInterceptor.java index e34aeb69fd1..d488b6e4007 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanSessionContextInterceptor.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/massindexing/impl/JavaBeanSessionContextInterceptor.java @@ -6,16 +6,15 @@ */ package org.hibernate.search.mapper.javabean.massindexing.impl; -import org.hibernate.search.mapper.javabean.massindexing.loader.JavaBeanIndexingOptions; import org.hibernate.search.mapper.pojo.intercepting.LoadingInvocationContext; import org.hibernate.search.mapper.pojo.loading.LoadingInterceptor; import org.hibernate.search.mapper.pojo.massindexing.spi.PojoMassIndexingSessionContext; -public class JavaBeanSessionContextInterceptor implements LoadingInterceptor { +public class JavaBeanSessionContextInterceptor implements LoadingInterceptor { private final JavaBeanMassIndexingMappingContext mappingContext; - public static LoadingInterceptor of(JavaBeanMassIndexingMappingContext mappingContext) { + public static LoadingInterceptor of(JavaBeanMassIndexingMappingContext mappingContext) { return new JavaBeanSessionContextInterceptor( mappingContext ); } @@ -24,7 +23,7 @@ public static LoadingInterceptor of(JavaBeanMassIndexin } @Override - public void intercept(LoadingInvocationContext ictx) throws Exception { + public void intercept(LoadingInvocationContext ictx) throws Exception { PojoMassIndexingSessionContext sessionContext = mappingContext.sessionContext(); ictx.context( PojoMassIndexingSessionContext.class, sessionContext ); ictx.proceed(); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmLoadingStrategy.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmLoadingStrategy.java index fcefaad72b6..8ae510118e2 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmLoadingStrategy.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/AbstractHibernateOrmLoadingStrategy.java @@ -66,33 +66,34 @@ abstract class AbstractHibernateOrmLoadingStrategy implements } @Override - public EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext context, + public EntityIdentifierScroll createIdentifierScroll(HibernateOrmMassIndexingOptions options, + MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { HibernateOrmQueryLoader typeQueryLoader = createQueryLoader( loadingTypeGroup.includedEntityMap() ); - return new HibernateOrmEntityIdentifierScroll<>( typeQueryLoader, context, loadingTypeGroup ); + return new HibernateOrmEntityIdentifierScroll<>( typeQueryLoader, options, context, loadingTypeGroup ); } @Override - public EntityLoader createLoader(MassIndexingThreadContext context, + public EntityLoader createLoader(HibernateOrmMassIndexingOptions options, MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { HibernateOrmQueryLoader typeQueryLoader = createQueryLoader( loadingTypeGroup.includedEntityMap() ); - return new HibernateOrmEntityLoader<>( typeQueryLoader, context ); + return new HibernateOrmEntityLoader<>( typeQueryLoader, options, context ); } private static class HibernateOrmEntityIdentifierScroll implements EntityIdentifierScroll { private final MassIndexingEntityLoadingTypeGroup loadingTypeGroup; - private final MassIndexingThreadContext context; + private final MassIndexingThreadContext context; private Long totalCount; private final ScrollableResults results; private final int batchSize; public HibernateOrmEntityIdentifierScroll(HibernateOrmQueryLoader typeQueryLoader, - MassIndexingThreadContext context, + HibernateOrmMassIndexingOptions options, + MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) { this.context = context; this.loadingTypeGroup = loadingTypeGroup; - HibernateOrmMassIndexingOptions options = context.options(); int fetchSize = options.idFetchSize(); batchSize = options.batchSizeToLoadObjects(); long objectsLimit = options.objectsLimit(); @@ -157,14 +158,15 @@ public void close() { private static class HibernateOrmEntityLoader implements EntityLoader { private final HibernateOrmQueryLoader typeQueryLoader; - private final MassIndexingThreadContext context; + private final MassIndexingThreadContext context; private final CacheMode cacheMode; public HibernateOrmEntityLoader(HibernateOrmQueryLoader typeGroupLoader, - MassIndexingThreadContext context) { + HibernateOrmMassIndexingOptions options, + MassIndexingThreadContext context) { this.typeQueryLoader = typeGroupLoader; this.context = context; - cacheMode = context.options().cacheMode(); + cacheMode = options.cacheMode(); } diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIndexingContext.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIndexingContext.java index 811357e2b0d..0377ed2d28a 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIndexingContext.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/loading/impl/HibernateOrmMassIndexingContext.java @@ -6,28 +6,26 @@ */ package org.hibernate.search.mapper.orm.loading.impl; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; + import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingDocumentProducerInterceptor; import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingIdentifierProducerInterceptor; import org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingMappingContext; import org.hibernate.search.mapper.orm.session.impl.HibernateOrmSessionTypeContextProvider; import org.hibernate.search.mapper.pojo.loading.LoadingInterceptor; import org.hibernate.search.mapper.pojo.massindexing.loader.MassIndexingEntityLoadingStrategy; - -import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeIdentifier; import org.hibernate.search.mapper.pojo.massindexing.spi.PojoMassIndexingContext; +import org.hibernate.search.mapper.pojo.model.spi.PojoRawTypeIdentifier; public final class HibernateOrmMassIndexingContext implements PojoMassIndexingContext { + private final HibernateOrmMassIndexingMappingContext mappingContext; private final HibernateOrmSessionTypeContextProvider typeContextProvider; - private final List> identifierProducerInterceptors = new ArrayList<>(); - private final List> documentProducerInterceptors = new ArrayList<>(); public HibernateOrmMassIndexingContext(HibernateOrmMassIndexingMappingContext mappingContext, HibernateOrmSessionTypeContextProvider typeContextContainer) { + this.mappingContext = mappingContext; this.typeContextProvider = typeContextContainer; - identifierProducerInterceptors.add( new HibernateOrmMassIndexingIdentifierProducerInterceptor( mappingContext ) ); - documentProducerInterceptors.add( new HibernateOrmMassIndexingDocumentProducerInterceptor( mappingContext ) ); } @Override @@ -38,13 +36,13 @@ public MassIndexingEntityLoadingStrategy> identifierInterceptors() { - return identifierProducerInterceptors; + public List identifierInterceptors(HibernateOrmMassIndexingOptions options) { + return Collections.singletonList( new HibernateOrmMassIndexingIdentifierProducerInterceptor( mappingContext, options ) ); } @Override - public List> documentInterceptors() { - return documentProducerInterceptors; + public List documentInterceptors(HibernateOrmMassIndexingOptions options) { + return Collections.singletonList( new HibernateOrmMassIndexingDocumentProducerInterceptor( mappingContext, options ) ); } } diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingDocumentProducerInterceptor.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingDocumentProducerInterceptor.java index 9d289b5159f..5107bdacac1 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingDocumentProducerInterceptor.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingDocumentProducerInterceptor.java @@ -23,20 +23,23 @@ import org.hibernate.search.mapper.pojo.intercepting.LoadingInvocationContext; import org.hibernate.search.mapper.orm.loading.impl.HibernateOrmMassIndexingOptions; -public class HibernateOrmMassIndexingDocumentProducerInterceptor implements LoadingInterceptor { +public class HibernateOrmMassIndexingDocumentProducerInterceptor implements LoadingInterceptor { private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - final SessionFactoryImplementor factory; - final TransactionManager transactionManager; - final TransactionCoordinatorBuilder transactionCoordinatorBuilder; private final HibernateOrmMassIndexingMappingContext mappingContext; + private final SessionFactoryImplementor factory; + private final TransactionManager transactionManager; + private final TransactionCoordinatorBuilder transactionCoordinatorBuilder; + private final HibernateOrmMassIndexingOptions options; - public HibernateOrmMassIndexingDocumentProducerInterceptor(HibernateOrmMassIndexingMappingContext mappingContext) { + public HibernateOrmMassIndexingDocumentProducerInterceptor(HibernateOrmMassIndexingMappingContext mappingContext, + HibernateOrmMassIndexingOptions options) { this.mappingContext = mappingContext; this.factory = mappingContext.sessionFactory(); this.transactionManager = lookupTransactionManager( factory ); this.transactionCoordinatorBuilder = lookupTransactionCoordinatorBuilder( factory ); + this.options = options; } private static TransactionCoordinatorBuilder lookupTransactionCoordinatorBuilder(SessionFactoryImplementor sessionFactory) { @@ -50,8 +53,7 @@ private static TransactionManager lookupTransactionManager(SessionFactoryImpleme } @Override - public void intercept(LoadingInvocationContext ictx) throws Exception { - HibernateOrmMassIndexingOptions options = ictx.options(); + public void intercept(LoadingInvocationContext ictx) throws Exception { CacheMode cacheMode = options.cacheMode(); Integer transactionTimeout = options.transactionTimeout(); String tenantId = options.tenantIdentifier(); diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingIdentifierProducerInterceptor.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingIdentifierProducerInterceptor.java index bf5976c234d..698363c9193 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingIdentifierProducerInterceptor.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/massindexing/impl/HibernateOrmMassIndexingIdentifierProducerInterceptor.java @@ -27,18 +27,21 @@ import org.hibernate.search.mapper.pojo.intercepting.LoadingNextInvocation; import org.hibernate.search.mapper.orm.loading.impl.HibernateOrmMassIndexingOptions; -public class HibernateOrmMassIndexingIdentifierProducerInterceptor implements LoadingInterceptor { +public class HibernateOrmMassIndexingIdentifierProducerInterceptor implements LoadingInterceptor { private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - final SessionFactoryImplementor factory; - final TransactionManager transactionManager; - final TransactionCoordinatorBuilder transactionCoordinatorBuilder; + private final SessionFactoryImplementor factory; + private final TransactionManager transactionManager; + private final TransactionCoordinatorBuilder transactionCoordinatorBuilder; + private final HibernateOrmMassIndexingOptions options; - public HibernateOrmMassIndexingIdentifierProducerInterceptor(HibernateOrmMassIndexingMappingContext mappingContext) { + public HibernateOrmMassIndexingIdentifierProducerInterceptor(HibernateOrmMassIndexingMappingContext mappingContext, + HibernateOrmMassIndexingOptions options) { this.factory = mappingContext.sessionFactory(); this.transactionManager = lookupTransactionManager( factory ); this.transactionCoordinatorBuilder = lookupTransactionCoordinatorBuilder( factory ); + this.options = options; } private static TransactionCoordinatorBuilder lookupTransactionCoordinatorBuilder(SessionFactoryImplementor sessionFactory) { @@ -52,8 +55,7 @@ private static TransactionManager lookupTransactionManager(SessionFactoryImpleme } @Override - public void intercept(LoadingInvocationContext ictx) throws Exception { - HibernateOrmMassIndexingOptions options = ictx.options(); + public void intercept(LoadingInvocationContext ictx) throws Exception { Integer transactionTimeout = options.transactionTimeout(); String tenantId = options.tenantIdentifier(); boolean wrapInTransaction = wrapInTransaction(); @@ -79,7 +81,7 @@ public void intercept(LoadingInvocationContext ictx, StatelessSession upperSession, String tenantId) throws Exception { + private void inTransactionWrapper(LoadingInvocationContext ictx, StatelessSession upperSession, String tenantId) throws Exception { StatelessSession session = upperSession; if ( upperSession == null ) { if ( tenantId == null ) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/LoadingInvocationContext.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/LoadingInvocationContext.java index 65525de95a7..90422eb828a 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/LoadingInvocationContext.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/LoadingInvocationContext.java @@ -10,14 +10,8 @@ * Exposes contextual information about the intercepted invocation and * operations that enable interceptor methods to control the behavior * of the invocation chain. - * @param The options for loading process */ -public interface LoadingInvocationContext { - - /** - * @return The mass options for loading process. - */ - O options(); +public interface LoadingInvocationContext { /** * Enables an interceptor to retrieve or update the data associated with the invocation by another interceptor. diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingHandler.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingHandler.java index e51bfcdf98a..7d8a0a6eb8a 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingHandler.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingHandler.java @@ -15,25 +15,22 @@ import org.hibernate.search.mapper.pojo.intercepting.LoadingInvocationContext; import org.hibernate.search.mapper.pojo.intercepting.LoadingInvocationInterceptor; -public class PojoInterceptingHandler { +public class PojoInterceptingHandler { - private final O options; - private final List> interceptors; - private final PojoInterceptingInvoker loadingProcess; + private final List interceptors; + private final PojoInterceptingInvoker loadingProcess; - public PojoInterceptingHandler(O options, - List> interceptors, - PojoInterceptingInvoker loadingProcess) { - this.options = options; + public PojoInterceptingHandler(List interceptors, + PojoInterceptingInvoker loadingProcess) { this.interceptors = interceptors; this.loadingProcess = loadingProcess; } public void invoke() throws Exception { - Iterator> iterator = interceptors.iterator(); + Iterator iterator = interceptors.iterator(); List handlers = new ArrayList<>(); - LoadingInvocationContext ictx = new PojoInvocationContext( (nctx, next) -> { + LoadingInvocationContext ictx = new PojoInvocationContext( (nctx, next) -> { if ( next != null ) { handlers.add( next ); } @@ -66,19 +63,14 @@ private void invokeNextInvocations(Iterator iterat } } - private class PojoInvocationContext implements LoadingInvocationContext { + private static class PojoInvocationContext implements LoadingInvocationContext { Map, Object> contextData = new HashMap<>(); - InvokationContextConsumer consumer; + InvokationContextConsumer consumer; - public PojoInvocationContext(InvokationContextConsumer consumer) { + public PojoInvocationContext(InvokationContextConsumer consumer) { this.consumer = consumer; } - @Override - public O options() { - return options; - } - @Override public T context(Class contextType) { return (T) contextData.get( contextType ); @@ -100,8 +92,8 @@ public void proceed(LoadingInvocationInterceptor next) throws Exception { } } - interface InvokationContextConsumer { - void invoke(LoadingInvocationContext nctx, LoadingInvocationInterceptor next) throws Exception; + interface InvokationContextConsumer { + void invoke(LoadingInvocationContext nctx, LoadingInvocationInterceptor next) throws Exception; } } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingInvoker.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingInvoker.java index 3107d294cd6..e349894e8fa 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingInvoker.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/intercepting/spi/PojoInterceptingInvoker.java @@ -8,7 +8,7 @@ import org.hibernate.search.mapper.pojo.intercepting.LoadingInvocationContext; -public interface PojoInterceptingInvoker { +public interface PojoInterceptingInvoker { - void invoke(LoadingInvocationContext ictx, PojoInterceptingNextInvoker invoker) throws Exception; + void invoke(LoadingInvocationContext ictx, PojoInterceptingNextInvoker invoker) throws Exception; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/loading/LoadingInterceptor.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/loading/LoadingInterceptor.java index 3210001f7fc..ab384241ada 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/loading/LoadingInterceptor.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/loading/LoadingInterceptor.java @@ -10,11 +10,9 @@ /** * A mass indexing loading interceptor. - * - * @param The options for loading process */ -public interface LoadingInterceptor { +public interface LoadingInterceptor { - void intercept(LoadingInvocationContext ictx) throws Exception; + void intercept(LoadingInvocationContext ictx) throws Exception; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingBatchIndexingWorkspace.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingBatchIndexingWorkspace.java index fcdc63ec150..0554a4f97b3 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingBatchIndexingWorkspace.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingBatchIndexingWorkspace.java @@ -33,7 +33,7 @@ public class PojoMassIndexingBatchIndexingWorkspace extends PojoMassIndexingF private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - private final O indexingOptions; + private final O options; private final int documentBuilderThreads; private final List> identifierProducingFutures = new ArrayList<>(); @@ -43,14 +43,14 @@ public class PojoMassIndexingBatchIndexingWorkspace extends PojoMassIndexingF private final PojoMassIndexingTypeProcessor typeProcessor; private final PojoMassIndexingIndexedTypeGroup typeGroup; - PojoMassIndexingBatchIndexingWorkspace(O indexingOptions, + PojoMassIndexingBatchIndexingWorkspace(O options, PojoMassIndexingContext indexingContext, PojoMassIndexingMappingContext mappingContext, PojoMassIndexingNotifier notifier, PojoMassIndexingIndexedTypeGroup typeGroup, int documentBuilderThreads) { super( notifier ); - this.indexingOptions = indexingOptions; + this.options = options; this.typeGroup = typeGroup; //thread pool sizing: @@ -60,9 +60,7 @@ public class PojoMassIndexingBatchIndexingWorkspace extends PojoMassIndexingF this.mappingContext = mappingContext; //type options for dsl index invoke - typeProcessor = new PojoMassIndexingTypeProcessor<>( - notifier, - typeGroup ); + typeProcessor = new PojoMassIndexingTypeProcessor<>( options, notifier, typeGroup ); } @@ -103,9 +101,8 @@ private void cancelPendingTasks() { } private void startProducingPrimaryKeys() { - final Runnable primaryKeyOutputter = new PojoMassIndexingFailureInterceptingHandler<>( - indexingOptions, - indexingContext.identifierInterceptors(), + final Runnable primaryKeyOutputter = new PojoMassIndexingFailureInterceptingHandler( + indexingContext.identifierInterceptors( options ), getNotifier(), typeProcessor.identifierProducer() ); //execIdentifiersLoader has size 1 and is not configurable: ensures the list is consistent as produced by one transaction @@ -122,9 +119,8 @@ private void startProducingPrimaryKeys() { } private void startIndexing() { - final Runnable documentOutputter = new PojoMassIndexingFailureInterceptingHandler( - indexingOptions, - indexingContext.documentInterceptors(), + final Runnable documentOutputter = new PojoMassIndexingFailureInterceptingHandler( + indexingContext.documentInterceptors( options ), getNotifier(), typeProcessor.documentProducer() ); final ThreadPoolExecutor indexingExecutor = mappingContext.threadPoolProvider().newFixedThreadPool( diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingFailureInterceptingHandler.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingFailureInterceptingHandler.java index 6b1ce2239b7..b1efe2c82bf 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingFailureInterceptingHandler.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingFailureInterceptingHandler.java @@ -18,20 +18,17 @@ /** * Wraps the execution of a {@code Runnable} in a list of {@link LoadingInterceptor}. */ -public class PojoMassIndexingFailureInterceptingHandler extends PojoMassIndexingFailureHandledRunnable { +public class PojoMassIndexingFailureInterceptingHandler extends PojoMassIndexingFailureHandledRunnable { private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - private final PojoInterceptingInvoker consumer; - private final O options; - private final List> interceptors; + private final PojoInterceptingInvoker consumer; + private final List interceptors; - PojoMassIndexingFailureInterceptingHandler(O options, - List> interceptors, + PojoMassIndexingFailureInterceptingHandler(List interceptors, PojoMassIndexingNotifier notifier, - PojoInterceptingInvoker consumer) { + PojoInterceptingInvoker consumer) { super( notifier ); - this.options = options; this.interceptors = interceptors; this.consumer = consumer; } @@ -39,8 +36,7 @@ public class PojoMassIndexingFailureInterceptingHandler extends PojoMassIndex @Override public void runWithFailureHandler() { try { - PojoInterceptingHandler handler = new PojoInterceptingHandler<>( - options, interceptors, consumer ); + PojoInterceptingHandler handler = new PojoInterceptingHandler( interceptors, consumer ); handler.invoke(); } catch (Exception e) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingIndexedTypeGroup.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingIndexedTypeGroup.java index 35c4462f0bf..29d9efd36f4 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingIndexedTypeGroup.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingIndexedTypeGroup.java @@ -149,12 +149,13 @@ public Object extractIdentifier(PojoMassIndexingIndexedTypeContext type typeContext.toEntitySupplier( sessionContext, entity ) ); } - EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext context, PojoMassIndexingSessionContext sessionContext) throws InterruptedException { - return loadingStrategy.createIdentifierScroll( context, createLoadingTypeGroup( sessionContext ) ); + EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext context, O options, + PojoMassIndexingSessionContext sessionContext) throws InterruptedException { + return loadingStrategy.createIdentifierScroll( options, context, createLoadingTypeGroup( sessionContext ) ); } - EntityLoader createLoader(MassIndexingThreadContext context, PojoMassIndexingSessionContext sessionContext) throws InterruptedException { - return loadingStrategy.createLoader( context, createLoadingTypeGroup( sessionContext ) ); + EntityLoader createLoader(MassIndexingThreadContext context, O options, PojoMassIndexingSessionContext sessionContext) throws InterruptedException { + return loadingStrategy.createLoader( options, context, createLoadingTypeGroup( sessionContext ) ); } private MassIndexingEntityLoadingTypeGroup createLoadingTypeGroup(PojoMassIndexingSessionContext sessionContext) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingThreadContext.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingThreadContext.java index 6a5660448aa..2e8de3c6434 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingThreadContext.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingThreadContext.java @@ -9,19 +9,14 @@ import org.hibernate.search.mapper.pojo.intercepting.LoadingInvocationContext; import org.hibernate.search.mapper.pojo.massindexing.loader.MassIndexingThreadContext; -public class PojoMassIndexingThreadContext implements MassIndexingThreadContext { +public class PojoMassIndexingThreadContext implements MassIndexingThreadContext { - private final LoadingInvocationContext invocationContext; + private final LoadingInvocationContext invocationContext; - public PojoMassIndexingThreadContext(LoadingInvocationContext invocationContext) { + public PojoMassIndexingThreadContext(LoadingInvocationContext invocationContext) { this.invocationContext = invocationContext; } - @Override - public O options() { - return invocationContext.options(); - } - @Override public T context(Class contextType) { return invocationContext.context( contextType ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingTypeProcessor.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingTypeProcessor.java index a2595818090..16babd76a25 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingTypeProcessor.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/impl/PojoMassIndexingTypeProcessor.java @@ -29,14 +29,16 @@ class PojoMassIndexingTypeProcessor { private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); + private final O options; private final PojoMassIndexingNotifier notifier; private final PojoMassIndexingIndexedTypeGroup typeGroup; private final PojoProducerConsumerQueue> primaryKeyStream; - public PojoMassIndexingTypeProcessor( + public PojoMassIndexingTypeProcessor(O options, PojoMassIndexingNotifier notifier, PojoMassIndexingIndexedTypeGroup typeGroup) { + this.options = options; this.notifier = notifier; this.typeGroup = typeGroup; @@ -44,7 +46,7 @@ public PojoMassIndexingTypeProcessor( this.primaryKeyStream = new PojoProducerConsumerQueue<>( 1 ); } - public PojoInterceptingInvoker identifierProducer() { + public PojoInterceptingInvoker identifierProducer() { return (ictx, invoker) -> { log.trace( "started" ); try { @@ -64,7 +66,7 @@ public PojoInterceptingInvoker identifierProducer() { }; } - public PojoInterceptingInvoker documentProducer() { + public PojoInterceptingInvoker documentProducer() { return (ictx, invoker) -> { log.trace( "started" ); try { @@ -80,10 +82,10 @@ public PojoInterceptingInvoker documentProducer() { }; } - private void loadAllIdentifiers(LoadingInvocationContext ictx) throws InterruptedException { + private void loadAllIdentifiers(LoadingInvocationContext ictx) throws InterruptedException { PojoMassIndexingSessionContext sessionContext = ictx.context( PojoMassIndexingSessionContext.class ); try ( EntityIdentifierScroll identifierScroll = typeGroup - .createIdentifierScroll( new PojoMassIndexingThreadContext<>( ictx ), sessionContext ) ) { + .createIdentifierScroll( new PojoMassIndexingThreadContext( ictx ), options, sessionContext ) ) { long totalCount = identifierScroll.totalCount(); notifier.notifyAddedTotalCount( totalCount ); @@ -101,7 +103,7 @@ private void loadAllIdentifiers(LoadingInvocationContext ictx) throws Interru } } - private void loadAndIndexAllFromQueue(LoadingInvocationContext ictx, PojoInterceptingNextInvoker invoker) throws Exception { + private void loadAndIndexAllFromQueue(LoadingInvocationContext ictx, PojoInterceptingNextInvoker invoker) throws Exception { PojoMassIndexingSessionContext sessionContext = ictx.context( PojoMassIndexingSessionContext.class ); PojoIndexer indexer = sessionContext.createIndexer(); try { @@ -121,14 +123,14 @@ private void loadAndIndexAllFromQueue(LoadingInvocationContext ictx, PojoInte } } - private void loadAndIndexList(LoadingInvocationContext ictx, List listIds, + private void loadAndIndexList(LoadingInvocationContext ictx, List listIds, PojoMassIndexingSessionContext sessionContext, PojoIndexer indexer, PojoInterceptingNextInvoker invoker) throws Exception { invoker.invoke( () -> { try ( EntityLoader entityLoader = typeGroup - .createLoader( new PojoMassIndexingThreadContext<>( ictx ), sessionContext ) ) { + .createLoader( new PojoMassIndexingThreadContext( ictx ), options, sessionContext ) ) { List result = entityLoader.load( listIds ); indexList( sessionContext, indexer, result ); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingEntityLoadingStrategy.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingEntityLoadingStrategy.java index b5aedcad2de..ce61ae87424 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingEntityLoadingStrategy.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingEntityLoadingStrategy.java @@ -13,30 +13,32 @@ * A start loader for entity loading entities during mass indexing. * * @param The resulting entity type (output) - * @param The options for mass indexing proccess. + * @param The type of options passed to the mass indexer. */ public interface MassIndexingEntityLoadingStrategy { /** * Streams the identifiers of entities to reindex. * + * @param options Options passed to the mass indexer. * @param context A mass indexing context for objects to load. * @param loadingTypeGroup The grouping types of loaded objects. * @return A {@link EntityIdentifierScroll}. * @throws java.lang.InterruptedException except where loading interrupted */ - EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext context, + EntityIdentifierScroll createIdentifierScroll(O options, MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) throws InterruptedException; /** * Loads the entities corresponding to the given identifiers. * + * @param options Options passed to the mass indexer. * @param context A mass indexing context for objects to load. * @param loadingTypeGroup The grouping types of loaded objects. * @return A {@link EntityLoader}. * @throws java.lang.InterruptedException except where loading interrupted */ - EntityLoader createLoader(MassIndexingThreadContext context, + EntityLoader createLoader(O options, MassIndexingThreadContext context, MassIndexingEntityLoadingTypeGroup loadingTypeGroup) throws InterruptedException; } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingThreadContext.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingThreadContext.java index 9a311aeaca5..c6b1e24c51f 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingThreadContext.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/loader/MassIndexingThreadContext.java @@ -8,14 +8,8 @@ /** * Contextual information about a mass indexing proccess. - * @param The options for mass indexing proccess. */ -public interface MassIndexingThreadContext { - - /** - * @return The mass options for loading process. - */ - O options(); +public interface MassIndexingThreadContext { /** * Get the context contributed by interceptors. diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/spi/PojoMassIndexingContext.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/spi/PojoMassIndexingContext.java index d2e621500f1..9731edcc4db 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/spi/PojoMassIndexingContext.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/massindexing/spi/PojoMassIndexingContext.java @@ -13,7 +13,7 @@ /** * Contextual information about a mass indexing proccess. - * @param The options for mass indexing proccess. + * @param The type of options passed to the mass indexer. */ public interface PojoMassIndexingContext { @@ -26,13 +26,15 @@ public interface PojoMassIndexingContext { MassIndexingEntityLoadingStrategy indexLoadingStrategy(PojoRawTypeIdentifier expectedType); /** + * @param options Options passed to the mass indexer. * @return A list {@link LoadingInterceptor} of entityIdentifier interceptors. */ - List> identifierInterceptors(); + List identifierInterceptors(O options); /** + * @param options Options passed to the mass indexer. * @return A list {@link LoadingInterceptor} of entity interceptors. */ - List> documentInterceptors(); + List documentInterceptors(O options); }