From c590830bf900cf09eb5450d6d3ce383b631e052b Mon Sep 17 00:00:00 2001 From: gustavonalle Date: Wed, 9 Nov 2016 08:37:28 +0000 Subject: [PATCH] HSEARCH-2445 Expose IndexManager in the ErrorContext --- .../backend/impl/lucene/IndexWriterHolder.java | 5 ++++- .../backend/impl/lucene/LuceneBackendQueueTask.java | 5 +++-- .../backend/impl/lucene/LuceneBackendResources.java | 8 ++++++++ .../hibernate/search/exception/ErrorContext.java | 3 +++ .../search/exception/impl/ErrorContextBuilder.java | 8 ++++++++ .../search/exception/impl/ErrorContextImpl.java | 12 ++++++++++++ .../test/errorhandling/LuceneErrorHandlingTest.java | 1 + .../search/test/errorhandling/MockErrorHandler.java | 13 +++++++++++++ 8 files changed, 52 insertions(+), 3 deletions(-) diff --git a/engine/src/main/java/org/hibernate/search/backend/impl/lucene/IndexWriterHolder.java b/engine/src/main/java/org/hibernate/search/backend/impl/lucene/IndexWriterHolder.java index f2a9fdb8dae..710ec4faa61 100644 --- a/engine/src/main/java/org/hibernate/search/backend/impl/lucene/IndexWriterHolder.java +++ b/engine/src/main/java/org/hibernate/search/backend/impl/lucene/IndexWriterHolder.java @@ -27,6 +27,7 @@ import org.hibernate.search.exception.ErrorHandler; import org.hibernate.search.exception.impl.ErrorContextBuilder; import org.hibernate.search.indexes.spi.DirectoryBasedIndexManager; +import org.hibernate.search.indexes.spi.IndexManager; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.logging.impl.Log; import org.hibernate.search.util.logging.impl.LoggerFactory; @@ -40,6 +41,7 @@ class IndexWriterHolder { private final ErrorHandler errorHandler; private final ParameterSet indexParameters; private final DirectoryProvider directoryProvider; + private final IndexManager indexManager; private final String indexName; // variable state: @@ -64,6 +66,7 @@ class IndexWriterHolder { IndexWriterHolder(ErrorHandler errorHandler, DirectoryBasedIndexManager indexManager) { this.errorHandler = errorHandler; + this.indexManager = indexManager; this.indexName = indexManager.getIndexName(); this.luceneParameters = indexManager.getIndexingParameters(); this.indexParameters = luceneParameters.getIndexParameters(); @@ -250,7 +253,7 @@ private void handleIOException(IOException ioe, ErrorContextBuilder errorContext } final ErrorContext errorContext; if ( errorContextBuilder != null ) { - errorContext = errorContextBuilder.errorThatOccurred( ioe ).createErrorContext(); + errorContext = errorContextBuilder.errorThatOccurred( ioe ).indexManager( indexManager ).createErrorContext(); this.errorHandler.handle( errorContext ); } else { diff --git a/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueTask.java b/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueTask.java index 57002a1a562..edf76738796 100644 --- a/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueTask.java +++ b/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueTask.java @@ -62,7 +62,7 @@ public void run() { private void handleException(Exception e) { ErrorContextBuilder builder = new ErrorContextBuilder(); builder.allWorkToBeDone( workList ); - builder.errorThatOccurred( e ); + builder.errorThatOccurred( e ).indexManager( resources.getIndexManager() ); resources.getErrorHandler().handle( builder.createErrorContext() ); } @@ -75,6 +75,7 @@ private void applyUpdates() throws InterruptedException, ExecutionException { AbstractWorkspaceImpl workspace = resources.getWorkspace(); ErrorContextBuilder errorContextBuilder = new ErrorContextBuilder(); + errorContextBuilder.indexManager( resources.getIndexManager() ); errorContextBuilder.allWorkToBeDone( workList ); IndexWriterDelegate delegate = workspace.getIndexWriterDelegate( errorContextBuilder ); @@ -96,7 +97,7 @@ private void applyUpdates() throws InterruptedException, ExecutionException { someFailureHappened = false; } catch (RuntimeException re) { - errorContextBuilder.errorThatOccurred( re ); + errorContextBuilder.errorThatOccurred( re ).indexManager( resources.getIndexManager() ); if ( currentOperation != null ) { errorContextBuilder.addWorkThatFailed( currentOperation ); } diff --git a/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendResources.java b/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendResources.java index 6733015462a..78d9b488078 100755 --- a/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendResources.java +++ b/engine/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendResources.java @@ -20,6 +20,7 @@ import org.hibernate.search.exception.ErrorHandler; import org.hibernate.search.indexes.impl.PropertiesParseHelper; import org.hibernate.search.indexes.spi.DirectoryBasedIndexManager; +import org.hibernate.search.indexes.spi.IndexManager; import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.util.impl.Executors; import org.hibernate.search.util.logging.impl.Log; @@ -40,6 +41,7 @@ public final class LuceneBackendResources { private final ErrorHandler errorHandler; private final int maxQueueLength; private final String indexName; + private final IndexManager indexManager; private final ReadLock readLock; private final WriteLock writeLock; @@ -48,6 +50,7 @@ public final class LuceneBackendResources { LuceneBackendResources(WorkerBuildContext context, DirectoryBasedIndexManager indexManager, Properties props, AbstractWorkspaceImpl workspace) { this.indexName = indexManager.getIndexName(); + this.indexManager = indexManager; this.errorHandler = context.getErrorHandler(); this.workspace = workspace; this.maxQueueLength = PropertiesParseHelper.extractMaxQueueSize( indexName, props ); @@ -57,6 +60,7 @@ public final class LuceneBackendResources { } private LuceneBackendResources(LuceneBackendResources previous) { + this.indexManager = previous.indexManager; this.indexName = previous.indexName; this.errorHandler = previous.errorHandler; this.workspace = previous.workspace; @@ -95,6 +99,10 @@ public String getIndexName() { return indexName; } + public IndexManager getIndexManager() { + return indexManager; + } + public IndexWorkVisitor getWorkVisitor() { if ( workVisitor == null ) { workVisitor = new IndexUpdateVisitor( workspace ); diff --git a/engine/src/main/java/org/hibernate/search/exception/ErrorContext.java b/engine/src/main/java/org/hibernate/search/exception/ErrorContext.java index 4ecc0b0008f..549539bc465 100644 --- a/engine/src/main/java/org/hibernate/search/exception/ErrorContext.java +++ b/engine/src/main/java/org/hibernate/search/exception/ErrorContext.java @@ -9,6 +9,7 @@ import java.util.List; import org.hibernate.search.backend.LuceneWork; +import org.hibernate.search.indexes.spi.IndexManager; /** * @author Amin Mohammed-Coleman @@ -24,4 +25,6 @@ public interface ErrorContext { boolean hasErrors(); + IndexManager getIndexManager(); + } diff --git a/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextBuilder.java b/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextBuilder.java index a66d3c160e2..d9a9a2557c2 100644 --- a/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextBuilder.java +++ b/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextBuilder.java @@ -12,6 +12,7 @@ import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.exception.ErrorContext; +import org.hibernate.search.indexes.spi.IndexManager; /** * @author Amin Mohammed-Coleman @@ -23,6 +24,7 @@ public class ErrorContextBuilder { private Iterable workToBeDone; private List failingOperations; private List operationsThatWorked; + private IndexManager indexManager; public ErrorContextBuilder errorThatOccurred(Throwable th) { this.th = th; @@ -45,6 +47,11 @@ public ErrorContextBuilder workCompleted(LuceneWork luceneWork) { } + public ErrorContextBuilder indexManager(IndexManager indexName) { + this.indexManager = indexName; + return this; + } + public ErrorContextBuilder allWorkToBeDone(Iterable workOnWriter) { this.workToBeDone = workOnWriter; return this; @@ -71,6 +78,7 @@ public ErrorContext createErrorContext() { } } context.setFailingOperations( getFailingOperations() ); + context.setIndexManager( indexManager ); return context; } diff --git a/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextImpl.java b/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextImpl.java index b432d6caf0a..78650d9fe5c 100644 --- a/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextImpl.java +++ b/engine/src/main/java/org/hibernate/search/exception/impl/ErrorContextImpl.java @@ -11,6 +11,7 @@ import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.exception.ErrorContext; +import org.hibernate.search.indexes.spi.IndexManager; /** * @author Amin Mohammed-Coleman @@ -24,6 +25,8 @@ class ErrorContextImpl implements ErrorContext { private Throwable throwable; + private IndexManager indexManager; + @Override public List getFailingOperations() { if ( failingOperations == null ) { @@ -59,4 +62,13 @@ public boolean hasErrors() { return failingOperations != null && failingOperations.size() > 0; } + @Override + public IndexManager getIndexManager() { + return indexManager; + } + + public void setIndexManager(IndexManager indexManager) { + this.indexManager = indexManager; + } + } diff --git a/orm/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java b/orm/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java index 560e8fccd24..add1733606d 100644 --- a/orm/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java +++ b/orm/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java @@ -87,6 +87,7 @@ public void testErrorHandling() { Assert.assertEquals( expectedErrorMessage.toString() , errorMessage ); Assert.assertTrue( exception instanceof SearchException ); Assert.assertEquals( "failed work message", exception.getMessage() ); + Assert.assertEquals( indexManager, mockErrorHandler.getIndexManager() ); } private MockErrorHandler getErrorHandlerAndAssertCorrectTypeIsUsed() { diff --git a/orm/src/test/java/org/hibernate/search/test/errorhandling/MockErrorHandler.java b/orm/src/test/java/org/hibernate/search/test/errorhandling/MockErrorHandler.java index ebf255cc9a1..b624abf1f17 100644 --- a/orm/src/test/java/org/hibernate/search/test/errorhandling/MockErrorHandler.java +++ b/orm/src/test/java/org/hibernate/search/test/errorhandling/MockErrorHandler.java @@ -6,7 +6,9 @@ */ package org.hibernate.search.test.errorhandling; +import org.hibernate.search.exception.ErrorContext; import org.hibernate.search.exception.impl.LogErrorHandler; +import org.hibernate.search.indexes.spi.IndexManager; /** * This is a LogErrorHandler used for testing only, @@ -20,6 +22,13 @@ public class MockErrorHandler extends LogErrorHandler { private volatile String errorMessage; private volatile Throwable lastException; + private IndexManager indexManager; + + @Override + public void handle(ErrorContext context) { + indexManager = context.getIndexManager(); + super.handle( context ); + } @Override public void handleException(String errorMsg, Throwable exceptionThatOccurred) { @@ -35,4 +44,8 @@ public Throwable getLastException() { return lastException; } + public IndexManager getIndexManager() { + return indexManager; + } + }