Author: mduerig
Date: Thu Mar 20 13:04:03 2014
New Revision: 1579616

URL: http://svn.apache.org/r1579616
Log:
OAK-1558: Expose FileStoreBackupRestoreMBean for supported NodeStores
RevisionGC for SegmentNodeStoreService

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RevisionGCMBean.java

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=1579616&r1=1579615&r2=1579616&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:03 2014
@@ -16,6 +16,9 @@
  */
 package org.apache.jackrabbit.oak.plugins.segment;
 
+import static com.google.common.base.Preconditions.checkState;
+import static 
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
+
 import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
@@ -32,20 +35,23 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 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.segment.file.FileStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.commit.Observable;
 import org.apache.jackrabbit.oak.spi.commit.Observer;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.spi.state.ProxyNodeStore;
+import org.apache.jackrabbit.oak.spi.state.RevisionGC;
+import org.apache.jackrabbit.oak.spi.state.RevisionGCMBean;
+import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.google.common.base.Preconditions.checkState;
-
 @Component(policy = ConfigurationPolicy.REQUIRE)
 public class SegmentNodeStoreService extends ProxyNodeStore
         implements Observable {
@@ -87,6 +93,8 @@ public class SegmentNodeStoreService ext
     private volatile BlobStore blobStore;
 
     private ServiceRegistration registration;
+    private Registration mBeanRegistration;
+    private WhiteboardExecutor executor;
 
     @Override
     protected synchronized SegmentNodeStore getNodeStore() {
@@ -146,6 +154,20 @@ public class SegmentNodeStoreService ext
         Dictionary<String, String> props = new Hashtable<String, String>();
         props.put(Constants.SERVICE_PID, SegmentNodeStore.class.getName());
         registration = 
context.getBundleContext().registerService(NodeStore.class.getName(), this, 
props);
+
+        OsgiWhiteboard whiteboard = new 
OsgiWhiteboard(context.getBundleContext());
+        executor = new WhiteboardExecutor();
+        executor.start(whiteboard);
+
+        RevisionGC revisionGC = new RevisionGC(new Runnable() {
+            @Override
+            public void run() {
+                store.gc();
+            }
+        }, executor);
+        mBeanRegistration = registerMBean(whiteboard, RevisionGCMBean.class, 
revisionGC,
+                RevisionGCMBean.TYPE, "Segment node store revision garbage 
collection");
+
         log.info("SegmentNodeStore initialized");
     }
 
@@ -186,6 +208,14 @@ public class SegmentNodeStoreService ext
             registration.unregister();
             registration = null;
         }
+        if (mBeanRegistration != null) {
+            mBeanRegistration.unregister();
+            mBeanRegistration = null;
+        }
+        if (executor != null) {
+            executor.stop();
+            executor = null;
+        }
     }
 
     /**

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=1579616&r1=1579615&r2=1579616&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
 Thu Mar 20 13:04:03 2014
@@ -28,6 +28,7 @@ import javax.annotation.Nonnull;
  * @see org.apache.jackrabbit.oak.api.jmx.RepositoryManagementMBean
  */
 public interface RevisionGCMBean {
+    String TYPE = "RevisionGarbageCollection";
 
     /**
      * Initiate a revision garbage collection operation


Reply via email to