You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2016/10/10 15:09:57 UTC

svn commit: r1764115 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ oak-core/src/main/java/org/apache/jackrabbit/oak/management/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ oak-core/src/main...

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"
         );