Skip to content

Commit

Permalink
HSEARCH-1383 Use filter to prevent ORM events from processing
Browse files Browse the repository at this point in the history
  • Loading branch information
marko-bekhta committed Mar 31, 2023
1 parent 0febdab commit b8c10ca
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.search.mapper.orm.common.impl.HibernateOrmUtils;
import org.hibernate.search.mapper.orm.logging.impl.Log;
import org.hibernate.search.mapper.pojo.automaticindexing.filter.spi.PojoAutomaticIndexingTypeFilterHolder;
import org.hibernate.search.mapper.pojo.work.spi.PojoIndexingPlan;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;

Expand All @@ -59,11 +60,14 @@ public final class HibernateSearchEventListener implements PostDeleteEventListen
private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() );

private final HibernateOrmListenerContextProvider contextProvider;
private final PojoAutomaticIndexingTypeFilterHolder indexingTypeFilterHolder;
private final boolean dirtyCheckingEnabled;

public HibernateSearchEventListener(HibernateOrmListenerContextProvider contextProvider,
PojoAutomaticIndexingTypeFilterHolder indexingTypeFilterHolder,
boolean dirtyCheckingEnabled) {
this.contextProvider = contextProvider;
this.indexingTypeFilterHolder = indexingTypeFilterHolder;
this.dirtyCheckingEnabled = dirtyCheckingEnabled;
log.debug( "Hibernate Search dirty checks " + ( dirtyCheckingEnabled ? "enabled" : "disabled" ) );
}
Expand Down Expand Up @@ -274,7 +278,12 @@ private PojoIndexingPlan getCurrentIndexingPlanIfExisting(SessionImplementor ses

private HibernateOrmListenerTypeContext getTypeContextOrNull(EntityPersister entityPersister) {
String entityName = entityPersister.getEntityName();
return contextProvider.typeContextProvider().byHibernateOrmEntityName().getOrNull( entityName );
HibernateOrmListenerTypeContext typeContext = contextProvider.typeContextProvider().byHibernateOrmEntityName()
.getOrNull( entityName );
if ( typeContext != null && indexingTypeFilterHolder.filter().isIncluded( typeContext.typeIdentifier() ) ) {
return typeContext;
}
return null;
}

private void processCollectionEvent(AbstractCollectionEvent event) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.hibernate.search.mapper.orm.event.impl.HibernateOrmListenerContextProvider;
import org.hibernate.search.mapper.orm.event.impl.HibernateSearchEventListener;
import org.hibernate.search.mapper.orm.logging.impl.Log;
import org.hibernate.search.mapper.pojo.automaticindexing.filter.spi.PojoAutomaticIndexingTypeFilterHolder;
import org.hibernate.search.mapper.pojo.work.IndexingPlanSynchronizationStrategy;
import org.hibernate.search.mapper.pojo.work.spi.ConfiguredIndexingPlanSynchronizationStrategy;
import org.hibernate.search.mapper.pojo.work.spi.PojoIndexingPlan;
Expand Down Expand Up @@ -68,6 +69,7 @@ public final class ConfiguredAutomaticIndexingStrategy {

private final Function<AutomaticIndexingEventSendingSessionContext, AutomaticIndexingQueueEventSendingPlan> senderFactory;
private final boolean enlistsInTransaction;
private final PojoAutomaticIndexingTypeFilterHolder indexingTypeFilterHolder = new PojoAutomaticIndexingTypeFilterHolder();

private HibernateOrmSearchSessionMappingContext mappingContext;
private BeanHolder<? extends IndexingPlanSynchronizationStrategy> defaultSynchronizationStrategyHolder;
Expand Down Expand Up @@ -103,14 +105,20 @@ public void start(HibernateOrmSearchSessionMappingContext mappingContext,
.orElse( true ) ) {
log.debug( "Hibernate Search event listeners activated" );
HibernateSearchEventListener hibernateSearchEventListener = new HibernateSearchEventListener(
contextProvider, AUTOMATIC_INDEXING_ENABLE_DIRTY_CHECK.get( startContext.configurationPropertySource() ) );
contextProvider, indexingTypeFilterHolder,
AUTOMATIC_INDEXING_ENABLE_DIRTY_CHECK.get( startContext.configurationPropertySource() )
);
hibernateSearchEventListener.registerTo( mappingContext.sessionFactory() );
}
else {
log.debug( "Hibernate Search event listeners deactivated" );
}
}

public PojoAutomaticIndexingTypeFilterHolder indexingTypeFilterHolder() {
return indexingTypeFilterHolder;
}

private void resolveDefaultSyncStrategyHolder(AutomaticIndexingStrategyStartContext startContext) {
ConfigurationPropertySource configurationSource = startContext.configurationPropertySource();
boolean legacyStrategySet = AUTOMATIC_INDEXING_SYNCHRONIZATION_STRATEGY.get( configurationSource ).isPresent();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ public static HibernateOrmSearchSession get(HibernateOrmSearchSessionMappingCont
private final SessionImplementor sessionImplementor;
private final HibernateOrmRuntimeIntrospector runtimeIntrospector;
private final ConfiguredAutomaticIndexingStrategy automaticIndexingStrategy;
private final PojoAutomaticIndexingTypeFilterHolder automaticIndexingTypeFilterHolder;
private ConfiguredIndexingPlanSynchronizationStrategy<EntityReference> indexingPlanSynchronizationStrategy;

private SearchIndexingPlanImpl indexingPlan;
Expand All @@ -117,7 +116,6 @@ private HibernateOrmSearchSession(Builder builder) {
this.automaticIndexingStrategy = builder.automaticIndexingStrategy;
this.sessionImplementor = builder.sessionImplementor;
this.runtimeIntrospector = builder.buildRuntimeIntrospector();
this.automaticIndexingTypeFilterHolder = new PojoAutomaticIndexingTypeFilterHolder();
this.indexingPlanSynchronizationStrategy = automaticIndexingStrategy.defaultIndexingPlanSynchronizationStrategy();
}

Expand Down Expand Up @@ -214,12 +212,12 @@ public void indexingPlanSynchronizationStrategy(IndexingPlanSynchronizationStrat
public void automaticIndexingFilter(PojoAutomaticIndexingTypeFilterConfigurer configurer) {
HibernateOrmAutomaticIndexingTypeFilterContext context = new HibernateOrmAutomaticIndexingTypeFilterContext( typeContextProvider );
configurer.configure( context );
automaticIndexingTypeFilterHolder.filter( context.createFilter( PojoAutomaticIndexingTypeFilter.ACCEPT_ALL ) );
automaticIndexingStrategy.indexingTypeFilterHolder().filter( context.createFilter( PojoAutomaticIndexingTypeFilter.ACCEPT_ALL ) );
}

@Override
public PojoAutomaticIndexingTypeFilterHolder indexingTypeFilterHolder() {
return automaticIndexingTypeFilterHolder;
return automaticIndexingStrategy.indexingTypeFilterHolder();
}

@Override
Expand Down

0 comments on commit b8c10ca

Please sign in to comment.