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