Author: mduerig
Date: Thu Mar 20 13:04:18 2014
New Revision: 1579618
URL: http://svn.apache.org/r1579618
Log:
OAK-1559: Expose BlobGCMBean for supported NodeStores
BlobGC for SegmentNodeStoreService
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCMBean.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCMBean.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCMBean.java?rev=1579618&r1=1579617&r2=1579618&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCMBean.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCMBean.java
Thu Mar 20 13:04:18 2014
@@ -28,6 +28,7 @@ import javax.annotation.Nonnull;
* @see org.apache.jackrabbit.oak.api.jmx.RepositoryManagementMBean
*/
public interface BlobGCMBean {
+ String TYPE = "BlobGarbageCollection";
/**
* Initiate a data store garbage collection operation
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1579618&r1=1579617&r2=1579618&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
Thu Mar 20 13:04:18 2014
@@ -36,8 +36,12 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.jackrabbit.oak.osgi.ObserverTracker;
import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
+import org.apache.jackrabbit.oak.plugins.blob.BlobGC;
+import org.apache.jackrabbit.oak.plugins.blob.BlobGCMBean;
+import org.apache.jackrabbit.oak.plugins.blob.MarkSweepGarbageCollector;
import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -93,7 +97,8 @@ public class SegmentNodeStoreService ext
private volatile BlobStore blobStore;
private ServiceRegistration registration;
- private Registration mBeanRegistration;
+ private Registration revisionGCRegistration;
+ private Registration blobGCRegistration;
private WhiteboardExecutor executor;
@Override
@@ -165,9 +170,16 @@ public class SegmentNodeStoreService ext
store.gc();
}
}, executor);
- mBeanRegistration = registerMBean(whiteboard, RevisionGCMBean.class,
revisionGC,
+ revisionGCRegistration = registerMBean(whiteboard,
RevisionGCMBean.class, revisionGC,
RevisionGCMBean.TYPE, "Segment node store revision garbage
collection");
+ if (blobStore instanceof GarbageCollectableBlobStore) {
+ MarkSweepGarbageCollector gc = new MarkSweepGarbageCollector();
+// gc.init(delegate); FIXME OAK-1582 ClassCastException in
MarkSweepGarbageCollector#init()
+ blobGCRegistration = registerMBean(whiteboard, BlobGCMBean.class,
new BlobGC(gc, executor),
+ BlobGCMBean.TYPE, "Segment node store blob garbage
collection");
+ }
+
log.info("SegmentNodeStore initialized");
}
@@ -208,9 +220,13 @@ public class SegmentNodeStoreService ext
registration.unregister();
registration = null;
}
- if (mBeanRegistration != null) {
- mBeanRegistration.unregister();
- mBeanRegistration = null;
+ if (revisionGCRegistration != null) {
+ revisionGCRegistration.unregister();
+ revisionGCRegistration = null;
+ }
+ if (blobGCRegistration != null) {
+ blobGCRegistration.unregister();
+ blobGCRegistration = null;
}
if (executor != null) {
executor.stop();