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
