Author: alexparvulescu
Date: Mon Feb 23 11:32:46 2015
New Revision: 1661643

URL: http://svn.apache.org/r1661643
Log:
OAK-2535 TARMK Cold Standby allow cleanup on standby instance

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/client/StandbyClientHandler.java
    
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStoreService.java
    
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/resources/OSGI-INF/metatype/metatype.properties

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=1661643&r1=1661642&r2=1661643&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
 Mon Feb 23 11:32:46 2015
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.plugins.segment.standby.client;
 
+import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
 import static 
org.apache.jackrabbit.oak.plugins.segment.standby.codec.Messages.newGetBlobReq;
 import static 
org.apache.jackrabbit.oak.plugins.segment.standby.codec.Messages.newGetSegmentReq;
 import io.netty.channel.ChannelHandlerContext;
@@ -55,6 +56,7 @@ public class SegmentLoaderHandler extend
     private final EventExecutorGroup loaderExecutor;
     private final AtomicBoolean running;
     private final int readTimeoutMs;
+    private final boolean autoClean;
 
     private ChannelHandlerContext ctx;
 
@@ -62,13 +64,14 @@ public class SegmentLoaderHandler extend
 
     public SegmentLoaderHandler(final StandbyStore store, RecordId head,
             EventExecutorGroup loaderExecutor,
-            String clientID, AtomicBoolean running, int readTimeoutMs) {
+            String clientID, AtomicBoolean running, int readTimeoutMs, boolean 
autoClean) {
         this.store = store;
         this.head = head;
         this.loaderExecutor = loaderExecutor;
         this.clientID = clientID;
         this.running = running;
         this.readTimeoutMs = readTimeoutMs;
+        this.autoClean = autoClean;
     }
 
     @Override
@@ -88,7 +91,10 @@ public class SegmentLoaderHandler extend
     private void initSync() {
         log.debug("new head id " + head);
         long t = System.currentTimeMillis();
-        long preSyncSize = store.size();
+        long preSyncSize = -1;
+        if (autoClean) {
+            preSyncSize = store.size();
+        }
 
         try {
             store.setLoader(this);
@@ -125,15 +131,17 @@ 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();
+
+            if (autoClean && preSyncSize > 0) {
+                long postSyncSize = store.size();
+                // if size gain is over 25% call cleanup
+                if (postSyncSize - preSyncSize > 0.25 * preSyncSize) {
+                    log.info(
+                            "Store size increased from {} to {}, will run 
cleanup.",
+                            humanReadableByteCount(preSyncSize),
+                            humanReadableByteCount(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=1661643&r1=1661642&r2=1661643&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
 Mon Feb 23 11:32:46 2015
@@ -65,6 +65,7 @@ public final class StandbyClient impleme
     private final String host;
     private final int port;
     private final int readTimeoutMs;
+    private final boolean autoClean;
 
     private final StandbyStore store;
     private final CommunicationObserver observer;
@@ -84,7 +85,14 @@ public final class StandbyClient impleme
         this(host, port, store, false, 10000);
     }
 
-    public StandbyClient(String host, int port, SegmentStore store, boolean 
secure, int readTimeoutMs) throws SSLException {
+    public StandbyClient(String host, int port, SegmentStore store,
+            boolean secure, int readTimeoutMs) throws SSLException {
+        this(host, port, store, secure, readTimeoutMs, false);
+    }
+
+    public StandbyClient(String host, int port, SegmentStore store,
+            boolean secure, int readTimeoutMs, boolean autoClean)
+            throws SSLException {
         this.state = STATUS_INITIALIZING;
         this.lastSuccessfulRequest = -1;
         this.failedRequests = 0;
@@ -94,6 +102,7 @@ public final class StandbyClient impleme
             this.sslContext = 
SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE);
         }
         this.readTimeoutMs = readTimeoutMs;
+        this.autoClean = autoClean;
         this.store = new StandbyStore(store);
         String s = System.getProperty(CLIENT_ID_PROPERTY_NAME);
         this.observer = new CommunicationObserver((s == null || s.length() == 
0) ? UUID.randomUUID().toString() : s);
@@ -140,7 +149,7 @@ public final class StandbyClient impleme
             state = STATUS_STARTING;
             executor = new DefaultEventExecutorGroup(4);
             handler = new StandbyClientHandler(this.store, executor, observer,
-                    running, readTimeoutMs);
+                    running, readTimeoutMs, autoClean);
             group = new NioEventLoopGroup();
 
             b = new Bootstrap();

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClientHandler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClientHandler.java?rev=1661643&r1=1661642&r2=1661643&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClientHandler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/client/StandbyClientHandler.java
 Mon Feb 23 11:32:46 2015
@@ -47,18 +47,20 @@ public class StandbyClientHandler extend
     private final CommunicationObserver observer;
     private final AtomicBoolean running;
     private final int readTimeoutMs;
+    private final boolean autoClean;
 
     private EventExecutorGroup loaderExecutor;
     private ChannelHandlerContext ctx;
 
     public StandbyClientHandler(final StandbyStore store,
             EventExecutorGroup executor, CommunicationObserver observer,
-            AtomicBoolean running, int readTimeoutMs) {
+            AtomicBoolean running, int readTimeoutMs, boolean autoClean) {
         this.store = store;
         this.executor = executor;
         this.observer = observer;
         this.running = running;
         this.readTimeoutMs = readTimeoutMs;
+        this.autoClean = autoClean;
     }
 
     @Override
@@ -96,7 +98,8 @@ public class StandbyClientHandler extend
 
         loaderExecutor = new DefaultEventExecutorGroup(4);
         SegmentLoaderHandler h2 = new SegmentLoaderHandler(store, head,
-                loaderExecutor, this.observer.getID(), running, readTimeoutMs);
+                loaderExecutor, this.observer.getID(), running, readTimeoutMs,
+                autoClean);
         ctx.pipeline().addLast(loaderExecutor, h2);
 
         h2.channelActive(ctx);

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStoreService.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStoreService.java?rev=1661643&r1=1661642&r2=1661643&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStoreService.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/store/StandbyStoreService.java
 Mon Feb 23 11:32:46 2015
@@ -84,6 +84,10 @@ public class StandbyStoreService {
     @Property(intValue = READ_TIMEOUT_DEFAULT)
     public static final String READ_TIMEOUT = "standby.readtimeout";
 
+    public static final boolean AUTO_CLEAN_DEFAULT = false;
+    @Property(boolValue = AUTO_CLEAN_DEFAULT)
+    public static final String AUTO_CLEAN = "standby.autoclean";
+
     @Reference(policy = STATIC, policyOption = GREEDY)
     private SegmentStoreProvider storeProvider = null;
 
@@ -144,8 +148,9 @@ public class StandbyStoreService {
         String host = PropertiesUtil.toString(props.get(PRIMARY_HOST), 
PRIMARY_HOST_DEFAULT);
         boolean secure = PropertiesUtil.toBoolean(props.get(SECURE), 
SECURE_DEFAULT);
         int readTimeout = PropertiesUtil.toInteger(props.get(READ_TIMEOUT), 
READ_TIMEOUT_DEFAULT);
+        boolean clean = PropertiesUtil.toBoolean(props.get(AUTO_CLEAN), 
AUTO_CLEAN_DEFAULT);
 
-        sync = new StandbyClient(host, port, segmentStore, secure, 
readTimeout);
+        sync = new StandbyClient(host, port, segmentStore, secure, 
readTimeout, clean);
         Dictionary<Object, Object> dictionary = new Hashtable<Object, 
Object>();
         dictionary.put("scheduler.period", interval);
         dictionary.put("scheduler.concurrent", false);

Modified: 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/resources/OSGI-INF/metatype/metatype.properties
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-tarmk-standby/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1661643&r1=1661642&r2=1661643&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/resources/OSGI-INF/metatype/metatype.properties
 (original)
+++ 
jackrabbit/oak/trunk/oak-tarmk-standby/src/main/resources/OSGI-INF/metatype/metatype.properties
 Mon Feb 23 11:32:46 2015
@@ -44,4 +44,7 @@ org.apache.sling.installer.configuration
 org.apache.sling.installer.configuration.persist.description = Must be always 
disabled to avoid storing the configuration in the repository
 
 standby.readtimeout.name = Standby Read Timeout
-standby.readtimeout.description = Timeout for requests issued from the standby 
instance in milliseconds
\ No newline at end of file
+standby.readtimeout.description = Timeout for requests issued from the standby 
instance in milliseconds
+
+standby.autoclean.name = Standby Automatic Cleanup
+standby.autoclean.description = Call the cleanup method if the size of the 
store increases over 25% on a sync cycle


Reply via email to