Author: mduerig
Date: Thu Mar 20 13:04:29 2014
New Revision: 1579619

URL: http://svn.apache.org/r1579619
Log:
OAK-1559: Expose BlobGCMBean for supported NodeStores
BlobGC for DocumentNodeStoreService

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java

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=1579619&r1=1579618&r2=1579619&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
 Thu Mar 20 13:04:29 2014
@@ -18,8 +18,9 @@
  */
 package org.apache.jackrabbit.oak.plugins.document;
 
+import static 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
+
 import java.io.IOException;
-import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.Hashtable;
@@ -43,12 +44,17 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
 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.document.cache.CachingDocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
 import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
@@ -56,8 +62,6 @@ import org.osgi.service.component.Compon
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
-
 /**
  * The OSGi service to start/stop a DocumentNodeStore instance.
  */
@@ -108,6 +112,7 @@ public class DocumentNodeStoreService {
 
     private ServiceRegistration reg;
     private final List<Registration> registrations = new 
ArrayList<Registration>();
+    private WhiteboardExecutor executor;
 
     @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY,
             policy = ReferencePolicy.DYNAMIC)
@@ -130,7 +135,7 @@ public class DocumentNodeStoreService {
         }
     }
 
-    protected void registerNodeStore() throws UnknownHostException {
+    protected void registerNodeStore() throws IOException {
         if(context == null){
             log.info("Component still not activated. Ignoring the 
initialization call");
             return;
@@ -241,9 +246,14 @@ public class DocumentNodeStoreService {
         if (mk != null) {
             mk.dispose();
         }
+
+        if (executor != null) {
+            executor.stop();
+            executor = null;
+        }
     }
 
-    private void registerJMXBeans(DocumentNodeStore store, BundleContext 
context) {
+    private void registerJMXBeans(DocumentNodeStore store, BundleContext 
context) throws IOException {
         Whiteboard wb = new OsgiWhiteboard(context);
         registrations.add(
                 registerMBean(wb,
@@ -288,6 +298,14 @@ public class DocumentNodeStoreService {
                             cds.getCacheStats().getName())
             );
         }
+        if (blobStore instanceof GarbageCollectableBlobStore) {
+            executor = new WhiteboardExecutor();
+            executor.start(wb);
+            MarkSweepGarbageCollector gc = new MarkSweepGarbageCollector();
+            gc.init(store);  // FIXME OAK-1582 ClassCastException in 
MarkSweepGarbageCollector#init()
+            registrations.add(registerMBean(wb, BlobGCMBean.class, new 
BlobGC(gc, executor),
+                    BlobGCMBean.TYPE, "Segment node store blob garbage 
collection"));
+        }
 
         //TODO Register JMX bean for Off Heap Cache stats
     }


Reply via email to