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"); + } + } }
