Author: mduerig Date: Mon Oct 10 15:09:57 2016 New Revision: 1764115 URL: http://svn.apache.org/viewvc?rev=1764115&view=rev Log: OAK-4835: Provide generic option to interrupt online revision cleanup Expose cancelling revision gc through RepositoryManagementMBean and RevisionGCMBean
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGC.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGCMBean.java jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java Mon Oct 10 15:09:57 2016 @@ -162,6 +162,15 @@ public interface RepositoryManagementMBe CompositeData startRevisionGC(); /** + * Cancel a running revision garbage collection operation. Does nothing + * if revision garbage collection is not running. + * + * @return the status of the operation right after it was initiated + */ + @Nonnull + CompositeData cancelRevisionGC(); + + /** * Revision garbage collection status * * @return the status of the ongoing operation or if none the terminal Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java Mon Oct 10 15:09:57 2016 @@ -15,7 +15,7 @@ * limitations under the License. */ -@Version("3.3.0") +@Version("4.0.0") @Export(optional = "provide:=true") package org.apache.jackrabbit.oak.api.jmx; Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java Mon Oct 10 15:09:57 2016 @@ -174,6 +174,18 @@ public class RepositoryManager extends A }).toCompositeData(); } + @Nonnull + @Override + public CompositeData cancelRevisionGC() { + return execute(RevisionGCMBean.class, new Function<RevisionGCMBean, Status>() { + @Nonnull + @Override + public Status apply(RevisionGCMBean revisionGCService) { + return fromCompositeData(revisionGCService.cancelRevisionGC()); + } + }).toCompositeData(); + } + @Override public CompositeData getRevisionGCStatus() { return execute(RevisionGCMBean.class, new Function<RevisionGCMBean, Status>() { Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java Mon Oct 10 15:09:57 2016 @@ -796,7 +796,7 @@ public class DocumentNodeStoreService { BlobGCMBean.TYPE, "Document node store blob garbage collection")); } - RevisionGC revisionGC = new RevisionGC(new Runnable() { + Runnable startGC = new Runnable() { @Override public void run() { try { @@ -805,7 +805,14 @@ public class DocumentNodeStoreService { log.warn("Error occurred while executing the Version Garbage Collector", e); } } - }, executor); + }; + Runnable cancelGC = new Runnable() { + @Override + public void run() { + throw new UnsupportedOperationException("Cancelling revision garbage collection is not supported"); + } + }; + RevisionGC revisionGC = new RevisionGC(startGC, cancelGC, executor); registrations.add(registerMBean(whiteboard, RevisionGCMBean.class, revisionGC, RevisionGCMBean.TYPE, "Document node store revision garbage collection")); Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGC.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGC.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGC.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGC.java Mon Oct 10 15:09:57 2016 @@ -41,19 +41,24 @@ public class RevisionGC implements Revis public static final String OP_NAME = "Revision garbage collection"; - private final Runnable gc; + @Nonnull + private final Runnable runGC; + private final Runnable cancelGC; private final Executor executor; private ManagementOperation<String> gcOp = done(OP_NAME, ""); /** - * @param gc Revision garbage collector - * @param executor executor for running the garbage collection task + * @param runGC Revision garbage collector + * @param cancelGC Executor for cancelling the garbage collection task + * @param executor Executor for initiating the garbage collection task */ public RevisionGC( - @Nonnull Runnable gc, + @Nonnull Runnable runGC, + @Nonnull Runnable cancelGC, @Nonnull Executor executor) { - this.gc = checkNotNull(gc); + this.runGC = checkNotNull(runGC); + this.cancelGC = checkNotNull(cancelGC); this.executor = checkNotNull(executor); } @@ -64,7 +69,7 @@ public class RevisionGC implements Revis gcOp = newManagementOperation(OP_NAME, new Callable<String>() { @Override public String call() throws Exception { - gc.run(); + runGC.run(); return "Revision GC initiated"; } }); @@ -72,6 +77,21 @@ public class RevisionGC implements Revis } return getRevisionGCStatus(); } + + @Nonnull + @Override + public CompositeData cancelRevisionGC() { + if (!gcOp.isDone()) { + executor.execute(newManagementOperation(OP_NAME, new Callable<String>() { + @Override + public String call() throws Exception { + cancelGC.run(); + return "Revision GC cancelled"; + } + })); + } + return getRevisionGCStatus(); + } @Nonnull @Override Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGCMBean.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGCMBean.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGCMBean.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGCMBean.java Mon Oct 10 15:09:57 2016 @@ -40,6 +40,15 @@ public interface RevisionGCMBean { CompositeData startRevisionGC(); /** + * Cancel a running revision garbage collection operation. Does nothing + * if revision garbage collection is not running. + * + * @return the status of the operation right after it was initiated + */ + @Nonnull + CompositeData cancelRevisionGC(); + + /** * Revision garbage collection status * * @return the status of the ongoing operation or if none the terminal Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1764115&r1=1764114&r2=1764115&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java (original) +++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Mon Oct 10 15:09:57 2016 @@ -502,10 +502,16 @@ public class SegmentNodeStoreService ext }; + Runnable cancelGarbageCollection = new Runnable() { + @Override + public void run() { + throw new UnsupportedOperationException("Cancelling revision garbage collection is not supported"); + } + }; revisionGCRegistration = registerMBean( whiteboard, RevisionGCMBean.class, - new RevisionGC(triggerGarbageCollection, executor), + new RevisionGC(triggerGarbageCollection, cancelGarbageCollection, executor), RevisionGCMBean.TYPE, "Segment node store revision garbage collection" );