From 34e22802e6495522b89ac021bdc66b6971f32864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Tue, 9 Feb 2021 12:46:53 +0100 Subject: [PATCH] HSEARCH-4153 Merge the purge operation into the delete operation in PojoIndexingPlan/PojoIndexer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because a purge is just a delete with a null entity, and because we're going to support passing a null entity for all operations in the next few commits. Signed-off-by: Yoann Rodière --- .../orm/session/SearchIndexingPlanBaseIT.java | 20 -------------- .../pojo/work/PojoIndexingPlanBaseIT.java | 2 +- .../mapper/pojo/work/PojoIndexingPurgeIT.java | 12 ++++----- .../testsupport/junit/SearchITHelper.java | 2 +- .../mapper/javabean/work/SearchIndexer.java | 2 +- .../javabean/work/SearchIndexingPlan.java | 2 +- .../javabean/work/impl/SearchIndexerImpl.java | 4 +-- .../work/impl/SearchIndexingPlanImpl.java | 4 +-- .../orm/work/impl/SearchIndexingPlanImpl.java | 4 +-- .../impl/IdentifierMappingImplementor.java | 2 -- .../impl/PropertyIdentifierMapping.java | 19 +++++++------ .../impl/ProvidedIdentifierMapping.java | 7 +---- .../search/mapper/pojo/logging/impl/Log.java | 10 +++---- .../impl/AbstractPojoTypeIndexingPlan.java | 4 +-- .../impl/PojoContainedTypeIndexingPlan.java | 10 ------- .../impl/PojoIndexedTypeIndexingPlan.java | 12 --------- .../pojo/work/impl/PojoIndexerImpl.java | 4 +-- .../pojo/work/impl/PojoIndexingPlanImpl.java | 6 ----- .../pojo/work/impl/PojoTypeIndexer.java | 4 +-- .../mapper/pojo/work/spi/PojoIndexer.java | 2 +- .../pojo/work/spi/PojoIndexingPlan.java | 27 +++++++------------ 21 files changed, 48 insertions(+), 111 deletions(-) diff --git a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/session/SearchIndexingPlanBaseIT.java b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/session/SearchIndexingPlanBaseIT.java index d23c7cf9fe7..f3f76afcfca 100644 --- a/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/session/SearchIndexingPlanBaseIT.java +++ b/integrationtest/mapper/orm/src/test/java/org/hibernate/search/integrationtest/mapper/orm/session/SearchIndexingPlanBaseIT.java @@ -177,26 +177,6 @@ public void purgeByEntityClass_invalidClass() { } ); } - @Test - public void purgeByEntityClass_invalidClass_contained() { - SessionFactory sessionFactory = setup( AutomaticIndexingStrategyName.NONE ); - - Class invalidClass = ContainedEntity.class; - - withinTransaction( sessionFactory, session -> { - SearchIndexingPlan indexingPlan = Search.session( session ).indexingPlan(); - assertThatThrownBy( - () -> indexingPlan.purge( invalidClass, 42, null ) - ) - .isInstanceOf( SearchException.class ) - .hasMessageContainingAll( - "Unable to purge entity of type '" + ContainedEntity.class.getName() - + "' with identifier '42': " - + " this type is contained in an indexed type but is not itself indexed." - ); - } ); - } - @Test public void purgeByEntityName() { SessionFactory sessionFactory = setup( AutomaticIndexingStrategyName.NONE ); diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPlanBaseIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPlanBaseIT.java index 8f01f29714e..d8ada5d1280 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPlanBaseIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPlanBaseIT.java @@ -64,7 +64,7 @@ public void success() { session.indexingPlan().add( entity1 ); session.indexingPlan().addOrUpdate( entity2 ); session.indexingPlan().delete( entity3 ); - session.indexingPlan().purge( IndexedEntity.class, 4, null ); + session.indexingPlan().delete( IndexedEntity.class, 4, null ); backendMock.expectWorks( IndexedEntity.INDEX ) .add( b -> b diff --git a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPurgeIT.java b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPurgeIT.java index 3ecc58db854..ea83100d6b4 100644 --- a/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPurgeIT.java +++ b/integrationtest/mapper/pojo-base/src/test/java/org/hibernate/search/integrationtest/mapper/pojo/work/PojoIndexingPurgeIT.java @@ -27,31 +27,31 @@ protected void expectOperation(BackendMock.DocumentWorkCallListContext context, @Override protected void addTo(SearchIndexingPlan indexingPlan, int id) { - indexingPlan.purge( IndexedEntity.class, id, null ); + indexingPlan.delete( IndexedEntity.class, id, null ); } @Override protected void addTo(SearchIndexingPlan indexingPlan, Object providedId, int id) { - indexingPlan.purge( IndexedEntity.class, providedId, null ); + indexingPlan.delete( IndexedEntity.class, providedId, null ); } @Override protected void addTo(SearchIndexingPlan indexingPlan, Object providedId, String providedRoutingKey, int id) { - indexingPlan.purge( IndexedEntity.class, providedId, providedRoutingKey ); + indexingPlan.delete( IndexedEntity.class, providedId, providedRoutingKey ); } @Override protected CompletionStage execute(SearchIndexer indexer, int id) { - return indexer.purge( IndexedEntity.class, id, null ); + return indexer.delete( IndexedEntity.class, id, null ); } @Override protected CompletionStage execute(SearchIndexer indexer, Object providedId, int id) { - return indexer.purge( IndexedEntity.class, providedId, null ); + return indexer.delete( IndexedEntity.class, providedId, null ); } @Override protected CompletionStage execute(SearchIndexer indexer, Object providedId, String providedRoutingKey, int id) { - return indexer.purge( IndexedEntity.class, providedId, providedRoutingKey ); + return indexer.delete( IndexedEntity.class, providedId, providedRoutingKey ); } } diff --git a/integrationtest/v5migrationhelper/engine/src/test/java/org/hibernate/search/testsupport/junit/SearchITHelper.java b/integrationtest/v5migrationhelper/engine/src/test/java/org/hibernate/search/testsupport/junit/SearchITHelper.java index 43c7b702edb..21b6964d1a7 100644 --- a/integrationtest/v5migrationhelper/engine/src/test/java/org/hibernate/search/testsupport/junit/SearchITHelper.java +++ b/integrationtest/v5migrationhelper/engine/src/test/java/org/hibernate/search/testsupport/junit/SearchITHelper.java @@ -204,7 +204,7 @@ private CompletionStage executeWork(SearchIndexer indexer, Work w) { case INDEX: return indexer.addOrUpdate( w.providedId, w.entity ); case DELETE: - return indexer.purge( w.entityType, w.providedId, null ); + return indexer.delete( w.entityType, w.providedId, null ); default: throw new AssertionFailure( "Unexpected work type: " + w.workType ); } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexer.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexer.java index d3f29615d70..e3b565dc25e 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexer.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexer.java @@ -176,6 +176,6 @@ default CompletionStage delete(Object providedId, Object entity) { * Leave {@code null} if sharding is disabled or if you don't use a custom {@link org.hibernate.search.mapper.pojo.bridge.RoutingBridge}. * @return A {@link CompletionStage} reflecting the completion state of the operation. */ - CompletionStage purge(Class entityClass, Object providedId, String providedRoutingKey); + CompletionStage delete(Class entityClass, Object providedId, String providedRoutingKey); } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexingPlan.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexingPlan.java index 9a4470909ac..fc98c1f84f6 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexingPlan.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/SearchIndexingPlan.java @@ -139,6 +139,6 @@ public interface SearchIndexingPlan { * @throws org.hibernate.search.util.common.SearchException If the entity type is not indexed directly * ({@link org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed}). */ - void purge(Class entityClass, Object providedId, String providedRoutingKey); + void delete(Class entityClass, Object providedId, String providedRoutingKey); } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexerImpl.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexerImpl.java index b5100f8b2a6..5529c801d99 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexerImpl.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexerImpl.java @@ -50,8 +50,8 @@ public CompletionStage delete(Object providedId, String providedRoutingKey, O } @Override - public CompletionStage purge(Class entityClass, Object providedId, String providedRoutingKey) { - return delegate.purge( getTypeIdentifier( entityClass ), providedId, providedRoutingKey, + public CompletionStage delete(Class entityClass, Object providedId, String providedRoutingKey) { + return delegate.delete( getTypeIdentifier( entityClass ), providedId, providedRoutingKey, commitStrategy, refreshStrategy ); } diff --git a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexingPlanImpl.java b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexingPlanImpl.java index 9f2c67c7b3c..c2209ba7108 100644 --- a/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexingPlanImpl.java +++ b/mapper/javabean/src/main/java/org/hibernate/search/mapper/javabean/work/impl/SearchIndexingPlanImpl.java @@ -73,8 +73,8 @@ public void delete(Object providedId, String providedRoutingKey, Object entity) } @Override - public void purge(Class entityClass, Object providedId, String providedRoutingKey) { - delegate.purge( getTypeIdentifier( entityClass ), providedId, providedRoutingKey ); + public void delete(Class entityClass, Object providedId, String providedRoutingKey) { + delegate.delete( getTypeIdentifier( entityClass ), providedId, providedRoutingKey, null ); } public CompletableFuture execute() { diff --git a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/work/impl/SearchIndexingPlanImpl.java b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/work/impl/SearchIndexingPlanImpl.java index 5d6aac15a57..2464c263c37 100644 --- a/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/work/impl/SearchIndexingPlanImpl.java +++ b/mapper/orm/src/main/java/org/hibernate/search/mapper/orm/work/impl/SearchIndexingPlanImpl.java @@ -37,13 +37,13 @@ public void delete(Object entity) { @Override public void purge(Class entityClass, Object providedId, String providedRoutingKey) { delegate( true ) - .purge( getTypeIdentifier( entityClass ), providedId, providedRoutingKey ); + .delete( getTypeIdentifier( entityClass ), providedId, providedRoutingKey, null ); } @Override public void purge(String entityName, Object providedId, String providedRoutingKey) { delegate( true ) - .purge( getTypeIdentifier( entityName ), providedId, providedRoutingKey ); + .delete( getTypeIdentifier( entityName ), providedId, providedRoutingKey, null ); } @Override diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/IdentifierMappingImplementor.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/IdentifierMappingImplementor.java index bf9bb966115..6b54e101fa2 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/IdentifierMappingImplementor.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/IdentifierMappingImplementor.java @@ -21,8 +21,6 @@ public interface IdentifierMappingImplementor extends IdentifierMapping, A default void close() { } - I getIdentifier(Object providedId); - I getIdentifier(Object providedId, Supplier entitySupplier); String toDocumentIdentifier(I identifier, BridgeMappingContext context); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/PropertyIdentifierMapping.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/PropertyIdentifierMapping.java index f3462145fc1..23f96276a05 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/PropertyIdentifierMapping.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/PropertyIdentifierMapping.java @@ -6,19 +6,24 @@ */ package org.hibernate.search.mapper.pojo.bridge.runtime.impl; +import java.lang.invoke.MethodHandles; import java.util.function.Supplier; import org.hibernate.search.engine.environment.bean.BeanHolder; import org.hibernate.search.mapper.pojo.bridge.IdentifierBridge; import org.hibernate.search.mapper.pojo.bridge.runtime.spi.BridgeMappingContext; import org.hibernate.search.mapper.pojo.bridge.runtime.spi.BridgeSessionContext; +import org.hibernate.search.mapper.pojo.logging.impl.Log; import org.hibernate.search.mapper.pojo.model.spi.PojoCaster; +import org.hibernate.search.util.common.logging.impl.LoggerFactory; import org.hibernate.search.util.common.reflect.spi.ValueReadHandle; import org.hibernate.search.util.common.impl.Closer; public class PropertyIdentifierMapping implements IdentifierMappingImplementor { + private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); + private final PojoCaster caster; private final ValueReadHandle property; private final BeanHolder> bridgeHolder; @@ -48,16 +53,14 @@ public void close() { @Override @SuppressWarnings( "unchecked" ) // We can only cast to the raw type, if I is generic we need an unchecked cast - public I getIdentifier(Object providedId) { - return (I) caster.cast( providedId ); - } - - @Override - public I getIdentifier(Object providedId, Supplier entitySupplier) { + public I getIdentifier(Object providedId, Supplier entitySupplierOrNull) { if ( providedId != null ) { - return getIdentifier( providedId ); + return (I) caster.cast( providedId ); + } + if ( entitySupplierOrNull == null ) { + throw log.nullProvidedIdentifierAndEntity(); } - return property.get( entitySupplier.get() ); + return property.get( entitySupplierOrNull.get() ); } @Override diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/ProvidedIdentifierMapping.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/ProvidedIdentifierMapping.java index c9762cae987..c162921d549 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/ProvidedIdentifierMapping.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/bridge/runtime/impl/ProvidedIdentifierMapping.java @@ -49,18 +49,13 @@ public void close() { } @Override - public Object getIdentifier(Object providedId) { + public Object getIdentifier(Object providedId, Supplier entityProvider) { if ( providedId == null ) { throw log.nullProvidedIdentifier(); } return providedId; } - @Override - public Object getIdentifier(Object providedId, Supplier entityProvider) { - return getIdentifier( providedId ); - } - @Override public String toDocumentIdentifier(Object identifier, BridgeMappingContext context) { return bridgeHolder.get().toDocumentIdentifier( identifier, context.identifierBridgeToDocumentIdentifierContext() ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java index 6a408446e1d..a3b4c177afd 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/logging/impl/Log.java @@ -381,12 +381,6 @@ SearchException invalidFieldEncodingForScaledNumberFieldMapping(IndexFieldTypeOp SearchException cannotResolveContainerExtractorName(String extractorName, @FormatWith(ClassFormatter.class) Class builtinExtractorConstantsClass); - @Message(id = ID_OFFSET + 55, - value = "Unable to purge entity of type '%1$s' with identifier '%2$s': " - + " this type is contained in an indexed type but is not itself indexed." - ) - SearchException cannotPurgeNonIndexedContainedType(PojoRawTypeIdentifier type, Object providedId); - @Message(id = ID_OFFSET + 58, value = "Incorrect binder implementation: binder '%1$s' did not call context.bridge(...).") SearchException missingBridgeForBinder(Object binder); @@ -552,4 +546,8 @@ void arbitraryMemberSelection(@FormatWith(PojoTypeModelFormatter.class) PojoRawT value = "Unexpected entity name for entity loading: '%1$s'. Expected one of %2$s.") SearchException unexpectedEntityNameForEntityLoading(String entityName, Collection expectedNames); + @Message(id = ID_OFFSET + 87, value = "Invalid indexing request:" + + " if the entity is null, the identifier must be provided explicitly." ) + SearchException nullProvidedIdentifierAndEntity(); + } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/AbstractPojoTypeIndexingPlan.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/AbstractPojoTypeIndexingPlan.java index b9c45224a8b..94aa887be38 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/AbstractPojoTypeIndexingPlan.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/AbstractPojoTypeIndexingPlan.java @@ -51,13 +51,11 @@ void addOrUpdate(Object providedId, String providedRoutingKey, Object entity, Bi } void delete(Object providedId, String providedRoutingKey, Object entity) { - Supplier entitySupplier = typeContext().toEntitySupplier( sessionContext, entity ); + Supplier entitySupplier = entity == null ? null : typeContext().toEntitySupplier( sessionContext, entity ); I identifier = toIdentifier( providedId, entitySupplier ); getState( identifier ).delete( entitySupplier, providedRoutingKey ); } - abstract void purge(Object providedId, String providedRoutingKey); - void resolveDirty(PojoReindexingCollector containingEntityCollector) { for ( S state : statesPerId.values() ) { state.resolveDirty( containingEntityCollector ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoContainedTypeIndexingPlan.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoContainedTypeIndexingPlan.java index aa1c5a14a5f..7c168704057 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoContainedTypeIndexingPlan.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoContainedTypeIndexingPlan.java @@ -6,12 +6,9 @@ */ package org.hibernate.search.mapper.pojo.work.impl; -import java.lang.invoke.MethodHandles; import java.util.function.Supplier; -import org.hibernate.search.mapper.pojo.logging.impl.Log; import org.hibernate.search.mapper.pojo.work.spi.PojoWorkSessionContext; -import org.hibernate.search.util.common.logging.impl.LoggerFactory; /** * @param The contained entity type. @@ -19,8 +16,6 @@ public class PojoContainedTypeIndexingPlan extends AbstractPojoTypeIndexingPlan.ContainedEntityState> { - private static final Log log = LoggerFactory.make( Log.class, MethodHandles.lookup() ); - private final PojoWorkContainedTypeContext typeContext; public PojoContainedTypeIndexingPlan(PojoWorkContainedTypeContext typeContext, @@ -29,11 +24,6 @@ public PojoContainedTypeIndexingPlan(PojoWorkContainedTypeContext typeContext this.typeContext = typeContext; } - @Override - void purge(Object providedId, String providedRoutingKey) { - throw log.cannotPurgeNonIndexedContainedType( typeContext.typeIdentifier(), providedId ); - } - @Override PojoWorkContainedTypeContext typeContext() { return typeContext; diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexedTypeIndexingPlan.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexedTypeIndexingPlan.java index 03117fa6af6..08e254374c0 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexedTypeIndexingPlan.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexedTypeIndexingPlan.java @@ -37,12 +37,6 @@ public PojoIndexedTypeIndexingPlan(PojoWorkIndexedTypeContext typeContext, this.delegate = delegate; } - @Override - void purge(Object providedId, String providedRoutingKey) { - I identifier = typeContext.identifierMapping().getIdentifier( providedId ); - getState( identifier ).purge( providedRoutingKey ); - } - void updateBecauseOfContained(Object entity) { Supplier entitySupplier = typeContext.toEntitySupplier( sessionContext, entity ); I identifier = typeContext.identifierMapping().getIdentifier( null, entitySupplier ); @@ -150,12 +144,6 @@ void delete(Supplier entitySupplier, String providedRoutingKey) { updatedBecauseOfContained = false; } - void purge(String providedRoutingKey) { - // This is a purge: assume the document exists in order to force deletion. - this.initialStatus = EntityStatus.PRESENT; - delete( null, providedRoutingKey ); - } - void sendCommandsToDelegate() { switch ( currentStatus ) { case UNKNOWN: diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexerImpl.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexerImpl.java index 8ff71218fad..60750f1e44f 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexerImpl.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexerImpl.java @@ -55,10 +55,10 @@ public CompletableFuture delete(PojoRawTypeIdentifier typeIdentifier, Obje } @Override - public CompletableFuture purge(PojoRawTypeIdentifier typeIdentifier, Object providedId, + public CompletableFuture delete(PojoRawTypeIdentifier typeIdentifier, Object providedId, String providedRoutingKey, DocumentCommitStrategy commitStrategy, DocumentRefreshStrategy refreshStrategy) { - return getDelegate( typeIdentifier ).purge( providedId, providedRoutingKey, commitStrategy, refreshStrategy ); + return getDelegate( typeIdentifier ).delete( providedId, providedRoutingKey, commitStrategy, refreshStrategy ); } private PojoTypeIndexer getDelegate(PojoRawTypeIdentifier typeIdentifier) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexingPlanImpl.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexingPlanImpl.java index 8ed7497bbf7..83692d2ce2e 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexingPlanImpl.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoIndexingPlanImpl.java @@ -81,12 +81,6 @@ public void delete(PojoRawTypeIdentifier typeIdentifier, Object providedId, S delegate.delete( providedId, providedRoutingKey, entity ); } - @Override - public void purge(PojoRawTypeIdentifier typeIdentifier, Object providedId, String providedRoutingKey) { - AbstractPojoTypeIndexingPlan delegate = getDelegate( typeIdentifier ); - delegate.purge( providedId, providedRoutingKey ); - } - @Override public void process() { if ( isProcessing ) { diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoTypeIndexer.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoTypeIndexer.java index 2123d49b33c..30544e1d947 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoTypeIndexer.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/impl/PojoTypeIndexer.java @@ -110,9 +110,9 @@ CompletableFuture delete(Object providedId, String providedRoutingKey, Object (deletePreviousResult, deleteResult) -> deleteResult ); } - CompletableFuture purge(Object providedId, String providedRoutingKey, + CompletableFuture delete(Object providedId, String providedRoutingKey, DocumentCommitStrategy commitStrategy, DocumentRefreshStrategy refreshStrategy) { - I identifier = typeContext.identifierMapping().getIdentifier( providedId ); + I identifier = typeContext.identifierMapping().getIdentifier( providedId, null ); String documentIdentifier = typeContext.toDocumentIdentifier( sessionContext, identifier ); DocumentReferenceProvider referenceProvider = new PojoDocumentReferenceProvider( documentIdentifier, providedRoutingKey, identifier ); diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexer.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexer.java index 344e8ff46f6..426e391213b 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexer.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexer.java @@ -101,7 +101,7 @@ CompletableFuture delete(PojoRawTypeIdentifier typeIdentifier, Object prov * @param refreshStrategy How to handle the refresh. * @return A {@link CompletableFuture} reflecting the completion state of the operation. */ - CompletableFuture purge(PojoRawTypeIdentifier typeIdentifier, Object providedId, String providedRoutingKey, + CompletableFuture delete(PojoRawTypeIdentifier typeIdentifier, Object providedId, String providedRoutingKey, DocumentCommitStrategy commitStrategy, DocumentRefreshStrategy refreshStrategy); } diff --git a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexingPlan.java b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexingPlan.java index 1c396120a05..321c14dc455 100644 --- a/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexingPlan.java +++ b/mapper/pojo-base/src/main/java/org/hibernate/search/mapper/pojo/work/spi/PojoIndexingPlan.java @@ -88,32 +88,25 @@ void addOrUpdate(PojoRawTypeIdentifier typeIdentifier, Object providedId, Str /** * Delete an entity from the index. *

+ * Entities to reindex as a result of this operation will not be resolved. + *

* No effect on the index if the entity is not in the index. * * @param typeIdentifier The identifier of the entity type. * @param providedId A value to extract the document ID from. * Generally the expected value is the entity ID, but a different value may be expected depending on the mapping. - * If {@code null}, Hibernate Search will attempt to extract the ID from the entity. + * If the provided ID is {@code null}, + * Hibernate Search will attempt to extract the ID from the entity (which must be non-{@code null} in that case). * @param providedRoutingKey The routing key to route the delete request to the appropriate index shard. - * Leave {@code null} if sharding is disabled - * or to have Hibernate Search compute the value through the assigned {@link org.hibernate.search.mapper.pojo.bridge.RoutingBridge}. - * @param entity The entity to delete from the index. + * Leave {@code null} if sharding is disabled, + * or if you don't use a custom {@link org.hibernate.search.mapper.pojo.bridge.RoutingBridge}, + * or to have Hibernate Search compute the value through the assigned {@link org.hibernate.search.mapper.pojo.bridge.RoutingBridge} + * (requires a non-null {@code entity}). + * @param entity The entity to delete from the index. May be {@code null} if {@code providedId} is non-{@code null}. + * @throws IllegalArgumentException If both {@code providedId} and {@code entity} are {@code null}. */ void delete(PojoRawTypeIdentifier typeIdentifier, Object providedId, String providedRoutingKey, Object entity); - /** - * Purge an entity from the index. - *

- * Entities to reindex as a result of this operation will not be resolved. - *

- * No effect on the index if the entity is not in the index. - * @param typeIdentifier The identifier of the entity type. - * @param providedId A value to extract the document ID from. - * @param providedRoutingKey The routing key to route the purge request to the appropriate index shard. - * Leave {@code null} if sharding is disabled or if you don't use a custom {@link org.hibernate.search.mapper.pojo.bridge.RoutingBridge}. - */ - void purge(PojoRawTypeIdentifier typeIdentifier, Object providedId, String providedRoutingKey); - /** * Extract all data from objects passed to the indexing plan so far, * create documents to be indexed and put them into an internal buffer,