Author: alexparvulescu
Date: Thu Feb 19 14:54:32 2015
New Revision: 1660903

URL: http://svn.apache.org/r1660903
Log:
OAK-2535 TARMK Cold Standby allow cleanup on standby instance
 - added cleanup operation, also exposed via JMX
 - added automatic cleanup call once the sync size > 25% of the store to 
account for the compaction scenario 

Modified:
    
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/SegmentLoaderHandler.java
    
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClient.java
    
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/jmx/ClientStandbyStatusMBean.java
    
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStore.java

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/SegmentLoaderHandler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/SegmentLoaderHandler.java?rev=1660903&r1=1660902&r2=1660903&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/SegmentLoaderHandler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/SegmentLoaderHandler.java
 Thu Feb 19 14:54:32 2015
@@ -88,6 +88,7 @@ public class SegmentLoaderHandler extend
     private void initSync() {
         log.debug("new head id " + head);
         long t = System.currentTimeMillis();
+        long preSyncSize = store.size();
 
         try {
             store.setLoader(this);
@@ -124,6 +125,16 @@ public class SegmentLoaderHandler extend
             boolean ok = store.setHead(before, builder.getNodeState());
             log.debug("updated head state successfully: {} in {}ms.", ok,
                     System.currentTimeMillis() - t);
+            // check is a cleanup is needed
+            long postSyncSize = store.size();
+            // if size gain is over 25% call cleanup
+            if (preSyncSize > 0
+                    && postSyncSize - preSyncSize > 0.25 * preSyncSize) {
+                log.debug(
+                        "Store size increased from {} to {}, will run 
cleanup.",
+                        preSyncSize, postSyncSize);
+                store.cleanup();
+            }
         } finally {
             close();
         }

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClient.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClient.java?rev=1660903&r1=1660902&r2=1660903&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClient.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClient.java
 Thu Feb 19 14:54:32 2015
@@ -248,4 +248,9 @@ public final class StandbyClient impleme
     public int calcSecondsSinceLastSuccess() {
         return this.getSecondsSinceLastSuccess();
     }
+
+    @Override
+    public void cleanup() {
+        store.cleanup();
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/jmx/ClientStandbyStatusMBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/jmx/ClientStandbyStatusMBean.java?rev=1660903&r1=1660902&r2=1660903&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/jmx/ClientStandbyStatusMBean.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/jmx/ClientStandbyStatusMBean.java
 Thu Feb 19 14:54:32 2015
@@ -35,4 +35,7 @@ public interface ClientStandbyStatusMBea
     @Description("number of seconds since last successful request")
     int calcSecondsSinceLastSuccess();
 
+    @Description("Runs garbage collection")
+    void cleanup();
+
 }

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStore.java?rev=1660903&r1=1660902&r2=1660903&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStore.java
 Thu Feb 19 14:54:32 2015
@@ -29,11 +29,13 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentTracker;
+import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class StandbyStore implements SegmentStore {
+
     private static final Logger log = 
LoggerFactory.getLogger(StandbyStore.class);
 
     private final SegmentTracker tracker = new SegmentTracker(this);
@@ -143,4 +145,26 @@ public class StandbyStore implements Seg
         this.loader = loader;
     }
 
+    public long size() {
+        if (delegate instanceof FileStore) {
+            try {
+                return ((FileStore) delegate).size();
+            } catch (IOException e) {
+                log.error("Error getting delegate size", e);
+            }
+        }
+        return -1;
+    }
+
+    public void cleanup() {
+        if (delegate instanceof FileStore) {
+            try {
+                ((FileStore) delegate).cleanup();
+            } catch (IOException e) {
+                log.error("Error running cleanup", e);
+            }
+        } else {
+            log.warn("Delegate is not a FileStore, ignoring cleanup call");
+        }
+    }
 }


Reply via email to