Skip to content

Commit

Permalink
HSEARCH-4203 Move mass indexing options out of MassIndexingThreadContext
Browse files Browse the repository at this point in the history
1. They complicate the already very complicated interceptor code.
2. We can just pass these options explicitly where they are necessary.
  • Loading branch information
yrodiere committed May 7, 2021
1 parent 3798136 commit 924c65d
Show file tree
Hide file tree
Showing 21 changed files with 119 additions and 143 deletions.
Expand Up @@ -262,13 +262,13 @@ public static ExceptingMapIndexingStrategy exeptingStrategy() {
public static class ExceptingMapIndexingStrategy<E> implements MassIndexingEntityLoadingStrategy<E, JavaBeanIndexingOptions> {

@Override
public EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext<JavaBeanIndexingOptions> context,
public EntityIdentifierScroll createIdentifierScroll(JavaBeanIndexingOptions options, MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<? extends E> loadingTypeGroup) {
throw new SimulatedFailure( loadingTypeGroup.includedEntityMap().keySet().stream().collect( Collectors.joining( "," ) ) );
}

@Override
public EntityLoader<E> createLoader(MassIndexingThreadContext<JavaBeanIndexingOptions> context,
public EntityLoader<E> createLoader(JavaBeanIndexingOptions options, MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<? extends E> loadingTypeGroup) {
return identifiers -> null;
}
Expand Down
Expand Up @@ -16,7 +16,7 @@ public interface LoadingOptions {

<T> void massIndexingLoadingStrategy(Class<T> type, MassIndexingEntityLoadingStrategy<T, JavaBeanIndexingOptions> loadingStrategy);

void identifierInterceptor(LoadingInterceptor<JavaBeanIndexingOptions> interceptor);
void identifierInterceptor(LoadingInterceptor interceptor);

void documentInterceptor(LoadingInterceptor<JavaBeanIndexingOptions> interceptor);
void documentInterceptor(LoadingInterceptor interceptor);
}
Expand Up @@ -35,8 +35,8 @@ public final class JavaBeanSearchLoadingContext implements PojoLoadingContext,

private final Map<PojoRawTypeIdentifier<?>, PojoLoader<?>> loaderByType;
private final Map<PojoRawTypeIdentifier<?>, MassIndexingEntityLoadingStrategy<?, ?>> indexLoadingStrategyByType;
private final List<LoadingInterceptor<? super JavaBeanIndexingOptions>> identifierInterceptors;
private final List<LoadingInterceptor<? super JavaBeanIndexingOptions>> documentInterceptors;
private final List<LoadingInterceptor> identifierInterceptors;
private final List<LoadingInterceptor> documentInterceptors;

private JavaBeanSearchLoadingContext(Builder builder) {
this.loaderByType = builder.loaderByType == null ? Collections.emptyMap() : builder.loaderByType;
Expand Down Expand Up @@ -96,21 +96,21 @@ public <T> MassIndexingEntityLoadingStrategy<? super T, JavaBeanIndexingOptions>
}

@Override
public List<LoadingInterceptor<? super JavaBeanIndexingOptions>> identifierInterceptors() {
public List<LoadingInterceptor> identifierInterceptors(JavaBeanIndexingOptions options) {
return identifierInterceptors;
}

@Override
public List<LoadingInterceptor<? super JavaBeanIndexingOptions>> documentInterceptors() {
public List<LoadingInterceptor> documentInterceptors(JavaBeanIndexingOptions options) {
return documentInterceptors;
}

public static final class Builder implements JavaBeanLoadingContextBuilder, LoadingOptions {
private final LoadingTypeContextProvider typeContextProvider;
private Map<PojoRawTypeIdentifier<?>, PojoLoader<?>> loaderByType;
private Map<PojoRawTypeIdentifier<?>, MassIndexingEntityLoadingStrategy<?, ?>> indexeStrategyByType;
private final List<LoadingInterceptor<? super JavaBeanIndexingOptions>> identifierInterceptors = new ArrayList<>();
private final List<LoadingInterceptor<? super JavaBeanIndexingOptions>> documentInterceptors = new ArrayList<>();
private final List<LoadingInterceptor> identifierInterceptors = new ArrayList<>();
private final List<LoadingInterceptor> documentInterceptors = new ArrayList<>();

public Builder(LoadingTypeContextProvider typeContextProvider, JavaBeanMassIndexingMappingContext mappingContext) {
this.typeContextProvider = typeContextProvider;
Expand Down Expand Up @@ -148,12 +148,12 @@ public <T> void massIndexingLoadingStrategy(Class<T> type, MassIndexingEntityLoa
}

@Override
public void identifierInterceptor(LoadingInterceptor<JavaBeanIndexingOptions> interceptor) {
public void identifierInterceptor(LoadingInterceptor interceptor) {
identifierInterceptors.add( interceptor );
}

@Override
public void documentInterceptor(LoadingInterceptor<JavaBeanIndexingOptions> interceptor) {
public void documentInterceptor(LoadingInterceptor interceptor) {
documentInterceptors.add( interceptor );
}

Expand Down
Expand Up @@ -34,7 +34,8 @@ public JavaBeanMapIndexingStrategy(Map<?, E> source) {
}

@Override
public EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext<JavaBeanIndexingOptions> context,
public EntityIdentifierScroll createIdentifierScroll(JavaBeanIndexingOptions options,
MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<? extends E> loadingTypeGroup) {
Set<?> identifiers = source.entrySet().stream()
.filter( ent -> loadingTypeGroup.includesInstance( ent.getValue() ) )
Expand All @@ -48,7 +49,7 @@ public long totalCount() {

@Override
public List<?> next() {
int batchSize = context.options().batchSizeToLoadObjects();
int batchSize = options.batchSizeToLoadObjects();

List<Object> destination = new ArrayList<>( batchSize );
while ( iterator.hasNext() ) {
Expand All @@ -67,7 +68,7 @@ public List<?> next() {
}

@Override
public EntityLoader<E> createLoader(MassIndexingThreadContext<JavaBeanIndexingOptions> context,
public EntityLoader<E> createLoader(JavaBeanIndexingOptions options, MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<? extends E> loadingTypeGroup) {
return identifiers -> identifiers.stream().map( source::get ).collect( Collectors.toList() );

Expand Down
Expand Up @@ -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<JavaBeanIndexingOptions> {
public class JavaBeanSessionContextInterceptor implements LoadingInterceptor {

private final JavaBeanMassIndexingMappingContext mappingContext;

public static LoadingInterceptor<JavaBeanIndexingOptions> of(JavaBeanMassIndexingMappingContext mappingContext) {
public static LoadingInterceptor of(JavaBeanMassIndexingMappingContext mappingContext) {
return new JavaBeanSessionContextInterceptor( mappingContext );
}

Expand All @@ -24,7 +23,7 @@ public static LoadingInterceptor<JavaBeanIndexingOptions> of(JavaBeanMassIndexin
}

@Override
public void intercept(LoadingInvocationContext<? extends JavaBeanIndexingOptions> ictx) throws Exception {
public void intercept(LoadingInvocationContext ictx) throws Exception {
PojoMassIndexingSessionContext sessionContext = mappingContext.sessionContext();
ictx.context( PojoMassIndexingSessionContext.class, sessionContext );
ictx.proceed();
Expand Down
Expand Up @@ -66,33 +66,34 @@ abstract class AbstractHibernateOrmLoadingStrategy<E, I> implements
}

@Override
public EntityIdentifierScroll createIdentifierScroll(MassIndexingThreadContext<HibernateOrmMassIndexingOptions> context,
public EntityIdentifierScroll createIdentifierScroll(HibernateOrmMassIndexingOptions options,
MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<? extends E> loadingTypeGroup) {
HibernateOrmQueryLoader<E, ?> typeQueryLoader = createQueryLoader( loadingTypeGroup.includedEntityMap() );
return new HibernateOrmEntityIdentifierScroll<>( typeQueryLoader, context, loadingTypeGroup );
return new HibernateOrmEntityIdentifierScroll<>( typeQueryLoader, options, context, loadingTypeGroup );
}

@Override
public EntityLoader<E> createLoader(MassIndexingThreadContext<HibernateOrmMassIndexingOptions> context,
public EntityLoader<E> createLoader(HibernateOrmMassIndexingOptions options, MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<? extends E> loadingTypeGroup) {
HibernateOrmQueryLoader<E, ?> typeQueryLoader = createQueryLoader( loadingTypeGroup.includedEntityMap() );
return new HibernateOrmEntityLoader<>( typeQueryLoader, context );
return new HibernateOrmEntityLoader<>( typeQueryLoader, options, context );
}

private static class HibernateOrmEntityIdentifierScroll<E, I> implements EntityIdentifierScroll {
private final MassIndexingEntityLoadingTypeGroup<E> loadingTypeGroup;
private final MassIndexingThreadContext<HibernateOrmMassIndexingOptions> context;
private final MassIndexingThreadContext context;
private Long totalCount;
private final ScrollableResults results;
private final int batchSize;

public HibernateOrmEntityIdentifierScroll(HibernateOrmQueryLoader<? super E, ?> typeQueryLoader,
MassIndexingThreadContext<HibernateOrmMassIndexingOptions> context,
HibernateOrmMassIndexingOptions options,
MassIndexingThreadContext context,
MassIndexingEntityLoadingTypeGroup<E> loadingTypeGroup) {
this.context = context;
this.loadingTypeGroup = loadingTypeGroup;

HibernateOrmMassIndexingOptions options = context.options();
int fetchSize = options.idFetchSize();
batchSize = options.batchSizeToLoadObjects();
long objectsLimit = options.objectsLimit();
Expand Down Expand Up @@ -157,14 +158,15 @@ public void close() {

private static class HibernateOrmEntityLoader<E> implements EntityLoader<E> {
private final HibernateOrmQueryLoader<E, ?> typeQueryLoader;
private final MassIndexingThreadContext<HibernateOrmMassIndexingOptions> context;
private final MassIndexingThreadContext context;
private final CacheMode cacheMode;

public HibernateOrmEntityLoader(HibernateOrmQueryLoader<E, ?> typeGroupLoader,
MassIndexingThreadContext<HibernateOrmMassIndexingOptions> context) {
HibernateOrmMassIndexingOptions options,
MassIndexingThreadContext context) {
this.typeQueryLoader = typeGroupLoader;
this.context = context;
cacheMode = context.options().cacheMode();
cacheMode = options.cacheMode();

}

Expand Down
Expand Up @@ -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<HibernateOrmMassIndexingOptions> {
private final HibernateOrmMassIndexingMappingContext mappingContext;
private final HibernateOrmSessionTypeContextProvider typeContextProvider;
private final List<LoadingInterceptor<HibernateOrmMassIndexingOptions>> identifierProducerInterceptors = new ArrayList<>();
private final List<LoadingInterceptor<HibernateOrmMassIndexingOptions>> 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
Expand All @@ -38,13 +36,13 @@ public <T> MassIndexingEntityLoadingStrategy<? super T, HibernateOrmMassIndexing
}

@Override
public List<LoadingInterceptor<HibernateOrmMassIndexingOptions>> identifierInterceptors() {
return identifierProducerInterceptors;
public List<LoadingInterceptor> identifierInterceptors(HibernateOrmMassIndexingOptions options) {
return Collections.singletonList( new HibernateOrmMassIndexingIdentifierProducerInterceptor( mappingContext, options ) );
}

@Override
public List<LoadingInterceptor<HibernateOrmMassIndexingOptions>> documentInterceptors() {
return documentProducerInterceptors;
public List<LoadingInterceptor> documentInterceptors(HibernateOrmMassIndexingOptions options) {
return Collections.singletonList( new HibernateOrmMassIndexingDocumentProducerInterceptor( mappingContext, options ) );
}

}
Expand Up @@ -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<HibernateOrmMassIndexingOptions> {
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) {
Expand All @@ -50,8 +53,7 @@ private static TransactionManager lookupTransactionManager(SessionFactoryImpleme
}

@Override
public void intercept(LoadingInvocationContext<? extends HibernateOrmMassIndexingOptions> 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();
Expand Down
Expand Up @@ -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<HibernateOrmMassIndexingOptions> {
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) {
Expand All @@ -52,8 +55,7 @@ private static TransactionManager lookupTransactionManager(SessionFactoryImpleme
}

@Override
public void intercept(LoadingInvocationContext<? extends HibernateOrmMassIndexingOptions> 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();
Expand All @@ -79,7 +81,7 @@ public void intercept(LoadingInvocationContext<? extends HibernateOrmMassIndexin
}
}

private void inTransactionWrapper(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 ) {
Expand Down
Expand Up @@ -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 <O> The options for loading process
*/
public interface LoadingInvocationContext<O> {

/**
* @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.
Expand Down

0 comments on commit 924c65d

Please sign in to comment.