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:10:14 UTC

svn commit: r1764117 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ main/java/org/apache/jackrabbit/oak/segment/compaction/ main/java/org/apache/jackrabbit/oak/segment/file/ test/java/org/apache/jackrabbit/...

Author: mduerig
Date: Mon Oct 10 15:10:14 2016
New Revision: 1764117

URL: http://svn.apache.org/viewvc?rev=1764117&view=rev
Log:
OAK-4617: Align SegmentRevisionGC MBean with new generation based GC
Remove GCMonitorMBean and expose its endpoints through the SegmentRevisionGCMBean

Removed:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/GCMonitorMBean.java
Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGC.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreGCMonitor.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1764117&r1=1764116&r2=1764117&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java Mon Oct 10 15:10:14 2016
@@ -77,7 +77,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
 import org.apache.jackrabbit.oak.segment.file.FileStoreStatsMBean;
-import org.apache.jackrabbit.oak.segment.file.GCMonitorMBean;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
@@ -392,16 +391,6 @@ public class SegmentNodeStoreService ext
             return false;
         }
 
-        // Expose an MBean to provide information about the gc options
-
-        registrations.add(registerMBean(
-                whiteboard,
-                SegmentRevisionGC.class,
-                new SegmentRevisionGCMBean(store, gcOptions),
-                SegmentRevisionGC.TYPE,
-                "Segment node store gc options"
-        ));
-
         // Expose stats about the segment cache
 
         CacheStatsMBean segmentCacheStats = store.getSegmentCacheStats();
@@ -463,14 +452,25 @@ public class SegmentNodeStoreService ext
         executor = new WhiteboardExecutor();
         executor.start(whiteboard);
 
-        // Expose an MBean to trigger garbage collection
+        // Expose an MBean to managing and monitoring garbage collection
+
+        FileStoreGCMonitor fsgcm = new FileStoreGCMonitor(Clock.SIMPLE);
+        registrations.add(new CompositeRegistration(
+            whiteboard.register(GCMonitor.class, fsgcm, emptyMap()),
+            registerMBean(
+                whiteboard,
+                SegmentRevisionGC.class,
+                new SegmentRevisionGCMBean(store, gcOptions, fsgcm),
+                SegmentRevisionGC.TYPE,
+                "Segment node store revision garbage collection"
+            )));
 
         registrations.add(registerMBean(
                 whiteboard,
                 RevisionGCMBean.class,
                 new RevisionGC(store.getGCRunner(), executor),
                 RevisionGCMBean.TYPE,
-                "Segment node store revision garbage collection"
+                "Revision garbage collection"
         ));
 
         // Expose statistics about the FileStore
@@ -483,21 +483,6 @@ public class SegmentNodeStoreService ext
                 "FileStore statistics"
         ));
 
-        // Register a monitor for the garbage collection of the FileStore
-
-        FileStoreGCMonitor fsgcm = new FileStoreGCMonitor(Clock.SIMPLE);
-
-        registrations.add((new CompositeRegistration(
-                whiteboard.register(GCMonitor.class, fsgcm, emptyMap()),
-                registerMBean(
-                        whiteboard,
-                        GCMonitorMBean.class,
-                        fsgcm,
-                        GCMonitorMBean.TYPE,
-                        "File Store garbage collection monitor"
-                )
-        )));
-
         // Register a factory service to expose the FileStore
 
         providerRegistration = context.getBundleContext().registerService(SegmentStoreProvider.class.getName(), this, null);

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGC.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGC.java?rev=1764117&r1=1764116&r2=1764117&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGC.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGC.java Mon Oct 10 15:10:14 2016
@@ -19,8 +19,14 @@
 
 package org.apache.jackrabbit.oak.segment.compaction;
 
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
+
 /**
- * This MBean exposes the settings from {@link SegmentGCOptions}.
+ * This MBean exposes the settings from {@link SegmentGCOptions} and
+ * reflects the GC status as reported by the {@link GCMonitor}.
  */
 public interface SegmentRevisionGC {
     String TYPE = "SegmentRevisionGarbageCollection";
@@ -111,4 +117,39 @@ public interface SegmentRevisionGC {
      * if revision garbage collection is not running.
      */
     void cancelRevisionGC();
+
+    /**
+     * @return  timestamp of the last compaction or {@code null} if none.
+     */
+    @CheckForNull
+    String getLastCompaction();
+
+    /**
+     * @return  timestamp of the last cleanup or {@code null} if none.
+     */
+    @CheckForNull
+    String getLastCleanup();
+
+    /**
+     * @return  repository size after the last cleanup.
+     */
+    long getLastRepositorySize();
+
+    /**
+     * @return  reclaimed size during the last cleanup.
+     */
+    long getLastReclaimedSize();
+
+    /**
+     * @return  last error or {@code null} if none.
+     */
+    @CheckForNull
+    String getLastError();
+
+    /**
+     * @return  current status.
+     */
+    @Nonnull
+    String getStatus();
+
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java?rev=1764117&r1=1764116&r2=1764117&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/compaction/SegmentRevisionGCMBean.java Mon Oct 10 15:10:14 2016
@@ -23,10 +23,12 @@ import static com.google.common.base.Pre
 
 import java.io.IOException;
 
+import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.commons.jmx.AnnotatedStandardMBean;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
 
 // FIXME OAK-4617: Align SegmentRevisionGC MBean with new generation based GC
 public class SegmentRevisionGCMBean
@@ -39,12 +41,21 @@ public class SegmentRevisionGCMBean
     @Nonnull
     private final SegmentGCOptions gcOptions;
 
-    public SegmentRevisionGCMBean(@Nonnull FileStore fileStore, @Nonnull SegmentGCOptions gcOptions) {
+    @Nonnull
+    private final FileStoreGCMonitor fileStoreGCMonitor;
+
+    public SegmentRevisionGCMBean(
+            @Nonnull FileStore fileStore,
+            @Nonnull SegmentGCOptions gcOptions,
+            @Nonnull FileStoreGCMonitor fileStoreGCMonitor) {
         super(SegmentRevisionGC.class);
         this.fileStore = checkNotNull(fileStore);
         this.gcOptions = checkNotNull(gcOptions);
+        this.fileStoreGCMonitor = checkNotNull(fileStoreGCMonitor);
     }
 
+    //------------------------------------------------------------< SegmentRevisionGC >---
+
     @Override
     public boolean isPausedCompaction() {
         return gcOptions.isPaused();
@@ -115,4 +126,37 @@ public class SegmentRevisionGCMBean
         fileStore.cancelGC();
     }
 
+    @CheckForNull
+    @Override
+    public String getLastCompaction() {
+        return fileStoreGCMonitor.getLastCompaction();
+    }
+
+    @CheckForNull
+    @Override
+    public String getLastCleanup() {
+        return fileStoreGCMonitor.getLastCleanup();
+    }
+
+    @Override
+    public long getLastRepositorySize() {
+        return fileStoreGCMonitor.getLastReclaimedSize();
+    }
+
+    @Override
+    public long getLastReclaimedSize() {
+        return fileStoreGCMonitor.getLastReclaimedSize();
+    }
+
+    @CheckForNull
+    @Override
+    public String getLastError() {
+        return fileStoreGCMonitor.getLastError();
+    }
+
+    @Nonnull
+    @Override
+    public String getStatus() {
+        return fileStoreGCMonitor.getStatus();
+    }
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreGCMonitor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreGCMonitor.java?rev=1764117&r1=1764116&r2=1764117&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreGCMonitor.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreGCMonitor.java Mon Oct 10 15:10:14 2016
@@ -29,17 +29,13 @@ import java.util.Date;
 
 import javax.annotation.Nonnull;
 
-import org.apache.jackrabbit.oak.commons.jmx.AnnotatedStandardMBean;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
 import org.apache.jackrabbit.oak.stats.Clock;
 
 /**
- * {@link GCMonitor} implementation providing the file store gc status
- * as {@link GCMonitorMBean}.
- *
+ * {@link GCMonitor} implementation providing the file store gc status.
  */
-public class FileStoreGCMonitor extends AnnotatedStandardMBean
-        implements GCMonitor, GCMonitorMBean {
+public class FileStoreGCMonitor implements GCMonitor {
     private final Clock clock;
 
     private long lastCompaction;
@@ -50,7 +46,6 @@ public class FileStoreGCMonitor extends
     private String status = "NA";
 
     public FileStoreGCMonitor(@Nonnull Clock clock) {
-        super(GCMonitorMBean.class);
         this.clock = checkNotNull(clock);
     }
 
@@ -91,24 +86,18 @@ public class FileStoreGCMonitor extends
         lastRepositorySize = current;
     }
 
-    //------------------------------------------------------------< GCMonitorMBean >---
-
-    @Override
     public String getLastCompaction() {
         return toString(lastCompaction);
     }
 
-    @Override
     public String getLastCleanup() {
         return toString(lastCleanup);
     }
 
-    @Override
     public long getLastRepositorySize() {
         return lastRepositorySize;
     }
 
-    @Override
     public long getLastReclaimedSize() {
         return lastReclaimedSize;
     }
@@ -121,13 +110,11 @@ public class FileStoreGCMonitor extends
         }
     }
 
-    @Override
     public String getLastError() {
         return lastError;
     }
 
     @Nonnull
-    @Override
     public String getStatus() {
         return status;
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java?rev=1764117&r1=1764116&r2=1764117&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java Mon Oct 10 15:10:14 2016
@@ -82,7 +82,6 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGCMBean;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
-import org.apache.jackrabbit.oak.segment.file.GCMonitorMBean;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
@@ -109,7 +108,6 @@ import org.slf4j.LoggerFactory;
  * All of which can be interactively modified through the accompanying
  * {@link SegmentCompactionITMBean}, the
  * {@link SegmentRevisionGC} and the
- * {@link GCMonitorMBean}.</p>
  *
  *<p>The test is <b>disabled</b> by default, to run it you need to set the {@code SegmentCompactionIT} system property:<br>
  * {@code mvn test -Dtest=SegmentCompactionIT -Dtest.opts.memory=-Xmx4G}
@@ -236,10 +234,8 @@ public class SegmentCompactionIT {
         List<Registration> registrations = newArrayList();
         registrations.add(registerMBean(segmentCompactionMBean,
                 new ObjectName("IT:TYPE=Segment Compaction")));
-        registrations.add(registerMBean(new SegmentRevisionGCMBean(fileStore, gcOptions),
+        registrations.add(registerMBean(new SegmentRevisionGCMBean(fileStore, gcOptions, fileStoreGCMonitor),
                 new ObjectName("IT:TYPE=Segment Revision GC")));
-        registrations.add(registerMBean(fileStoreGCMonitor,
-                new ObjectName("IT:TYPE=GC Monitor")));
         CacheStatsMBean segmentCacheStats = fileStore.getSegmentCacheStats();
         registrations.add(registerMBean(segmentCacheStats,
                 new ObjectName("IT:TYPE=" + segmentCacheStats.getName())));