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 fr...@apache.org on 2016/08/25 14:51:36 UTC

svn commit: r1757699 [1/2] - in /jackrabbit/oak/trunk/oak-segment-tar: ./ src/main/java/org/apache/jackrabbit/oak/segment/ src/main/java/org/apache/jackrabbit/oak/segment/standby/ src/main/java/org/apache/jackrabbit/oak/segment/standby/client/ src/main...

Author: frm
Date: Thu Aug 25 14:51:36 2016
New Revision: 1757699

URL: http://svn.apache.org/viewvc?rev=1757699&view=rev
Log:
OAK-4704 - Copy and adapt the cold standby code to the oak-segment-tar bundle

Added:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStoreProvider.java   (with props)
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/
      - copied from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/main/java/org/apache/jackrabbit/oak/plugins/segment/standby/
    jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/
      - copied from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/main/resources/OSGI-INF/
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NetworkErrorProxy.java
      - copied, changed from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/NetworkErrorProxy.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentTestUtils.java
      - copied, changed from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTestUtils.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/
      - copied from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/standby/
Removed:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentDecoder.java
Modified:
    jackrabbit/oak/trunk/oak-segment-tar/pom.xml
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/PropertyTemplate.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/FailedRequestListener.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/SegmentLoaderHandler.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyApplyDiff.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientHandler.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/BlobEncoder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/IdArrayBasedBlob.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/Messages.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdDecoder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdEncoder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ReplyDecoder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentEncoder.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentReply.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ClientStandbyStatusMBean.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ObservablePartnerMBean.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/StandbyStatusMBean.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerHandler.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/CommunicationObserver.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/RemoteSegmentLoader.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/metatype/metatype.properties
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BulkTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/DataStoreTestBase.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalSharedStoreIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/TestBase.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/pom.xml?rev=1757699&r1=1757698&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/pom.xml Thu Aug 25 14:51:36 2016
@@ -35,6 +35,7 @@
 
     <properties>
         <oak.version>1.5.5</oak.version>
+        <netty.version>4.0.23.Final</netty.version>
     </properties>
 
     <scm>
@@ -51,7 +52,24 @@
                 <configuration>
                     <instructions>
                         <Export-Package />
-                        <Embed-Dependency>commons-math3</Embed-Dependency>
+                        <Embed-Dependency>
+                            commons-math3,
+                            netty-*
+                        </Embed-Dependency>
+                        <Import-Package>
+                            com.google.protobuf.*;resolution:=optional,
+                            com.jcraft.jzlib.*;resolution:=optional,
+                            javassist.*;resolution:=optional,
+                            org.apache.tomcat.jni.*;resolution:=optional,
+                            org.bouncycastle.*;resolution:=optional,
+                            org.eclipse.jetty.npn.*;resolution:=optional,
+                            org.jboss.marshalling.*;resolution:=optional,
+                            sun.misc.*;resolution:=optional,
+                            sun.nio.ch.*;resolution:=optional,
+                            sun.security.util.*;resolution:=optional,
+                            sun.security.x509.*;resolution:=optional,
+                            *
+                        </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
@@ -60,11 +78,49 @@
                 <artifactId>maven-scr-plugin</artifactId>
             </plugin>
             <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>1.12</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>reserve-network-port</goal>
+                        </goals>
+                        <phase>process-test-resources</phase>
+                        <configuration>
+                            <portNames>
+                                <portName>standby.server.port</portName>
+                                <portName>standby.proxy.port</portName>
+                            </portNames>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.19.1</version>
+                <configuration>
+                    <systemPropertyVariables>
+                        <standby.server.port>${standby.server.port}</standby.server.port>
+                        <standby.proxy.port>${standby.proxy.port}</standby.proxy.port>
+                    </systemPropertyVariables>
+                    <excludes>
+                        <exclude>**/BulkTest.java</exclude>
+                        <exclude>**/MBeanTest.java</exclude>
+                        <exclude>**/FailoverIPRangeTest.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-failsafe-plugin</artifactId>
+                <version>2.19.1</version>
                 <configuration>
                     <systemPropertyVariables>
                         <nsfixtures>SEGMENT_TAR</nsfixtures>
+                        <standby.server.port>${standby.server.port}</standby.server.port>
+                        <standby.proxy.port>${standby.proxy.port}</standby.proxy.port>
                     </systemPropertyVariables>
                 </configuration>
                 <executions>
@@ -208,6 +264,39 @@
             <scope>provided</scope>
         </dependency>
 
+        <!-- Netty -->
+
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-common</artifactId>
+            <version>${netty.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-buffer</artifactId>
+            <version>${netty.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-transport</artifactId>
+            <version>${netty.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-codec</artifactId>
+            <version>${netty.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-handler</artifactId>
+            <version>${netty.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
         <!-- Dependencies on Oak testing modules -->
 
         <dependency>

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/PropertyTemplate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/PropertyTemplate.java?rev=1757699&r1=1757698&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/PropertyTemplate.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/PropertyTemplate.java Thu Aug 25 14:51:36 2016
@@ -31,7 +31,7 @@ import com.google.common.collect.Compari
  * A property definition within a template (the property name, the type, and the
  * index within the list of properties for the given node).
  */
-class PropertyTemplate implements Comparable<PropertyTemplate> {
+public class PropertyTemplate implements Comparable<PropertyTemplate> {
 
     /**
      * The index of this property within the list of properties in the node

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java?rev=1757699&r1=1757698&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java Thu Aug 25 14:51:36 2016
@@ -30,9 +30,12 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.segment.SegmentWriter.BLOCK_SIZE;
 
 import java.io.IOException;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.WritableByteChannel;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.UUID;
@@ -584,4 +587,12 @@ public class Segment {
         }
     }
 
+    public void writeTo(OutputStream stream) throws IOException {
+        ByteBuffer buffer = data.duplicate();
+        WritableByteChannel channel = Channels.newChannel(stream);
+        while (buffer.hasRemaining()) {
+            channel.write(buffer);
+        }
+    }
+
 }

Added: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStoreProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStoreProvider.java?rev=1757699&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStoreProvider.java (added)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStoreProvider.java Thu Aug 25 14:51:36 2016
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.segment;
+
+public interface SegmentStoreProvider {
+
+    SegmentStore getSegmentStore();
+
+}

Propchange: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStoreProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/FailedRequestListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/FailedRequestListener.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/FailedRequestListener.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/FailedRequestListener.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.client;
+package org.apache.jackrabbit.oak.segment.standby.client;
 
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelFutureListener;

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/SegmentLoaderHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/SegmentLoaderHandler.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/SegmentLoaderHandler.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/SegmentLoaderHandler.java Thu Aug 25 14:51:36 2016
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.client;
+package org.apache.jackrabbit.oak.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 static org.apache.jackrabbit.oak.segment.standby.codec.Messages.newGetBlobReq;
+import static org.apache.jackrabbit.oak.segment.standby.codec.Messages.newGetSegmentReq;
 
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
@@ -32,14 +32,14 @@ import java.util.concurrent.atomic.Atomi
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
 import org.apache.jackrabbit.oak.api.Blob;
-import org.apache.jackrabbit.oak.plugins.segment.RecordId;
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeBuilder;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNotFoundException;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.SegmentReply;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.RemoteSegmentLoader;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.StandbyStore;
+import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.Segment;
+import org.apache.jackrabbit.oak.segment.SegmentNodeBuilder;
+import org.apache.jackrabbit.oak.segment.SegmentNodeState;
+import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
+import org.apache.jackrabbit.oak.segment.standby.codec.SegmentReply;
+import org.apache.jackrabbit.oak.segment.standby.store.RemoteSegmentLoader;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -131,7 +131,7 @@ public class SegmentLoaderHandler extend
             SegmentNodeState before = store.getHead();
             SegmentNodeBuilder builder = before.builder();
 
-            SegmentNodeState current = new SegmentNodeState(head);
+            SegmentNodeState current = store.newSegmentNodeState(head);
             do {
                 try {
                     current.compareAgainstBaseState(before,

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyApplyDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyApplyDiff.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyApplyDiff.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyApplyDiff.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.client;
+
+package org.apache.jackrabbit.oak.segment.standby.client;
 
 import static org.apache.jackrabbit.oak.api.Type.BINARIES;
 import static org.apache.jackrabbit.oak.api.Type.BINARY;
@@ -27,11 +28,11 @@ import org.apache.jackrabbit.oak.api.Blo
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
-import org.apache.jackrabbit.oak.plugins.segment.RecordId;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentBlob;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.RemoteSegmentLoader;
+import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.SegmentBlob;
+import org.apache.jackrabbit.oak.segment.SegmentNodeState;
+import org.apache.jackrabbit.oak.segment.standby.store.RemoteSegmentLoader;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
@@ -45,7 +46,7 @@ class StandbyApplyDiff implements NodeSt
 
     private final NodeBuilder builder;
 
-    private final SegmentStore store;
+    private final StandbyStore store;
 
     private final boolean hasDataStore;
 
@@ -60,12 +61,12 @@ class StandbyApplyDiff implements NodeSt
      */
     private final boolean logOnly;
 
-    public StandbyApplyDiff(NodeBuilder builder, SegmentStore store,
+    public StandbyApplyDiff(NodeBuilder builder, StandbyStore store,
             RemoteSegmentLoader loader) {
         this(builder, store, loader, "/", false);
     }
 
-    private StandbyApplyDiff(NodeBuilder builder, SegmentStore store,
+    private StandbyApplyDiff(NodeBuilder builder, StandbyStore store,
             RemoteSegmentLoader loader, String path, boolean logOnly) {
         this.builder = builder;
         this.store = store;
@@ -179,7 +180,7 @@ class StandbyApplyDiff implements NodeSt
             }
             if (!logOnly) {
                 RecordId id = ((SegmentNodeState) after).getRecordId();
-                builder.setChildNode(name, new SegmentNodeState(id));
+                builder.setChildNode(name, store.newSegmentNodeState(id));
             }
             if ("checkpoints".equals(name)) {
                 // if we're on the /checkpoints path, there's no need for a deep

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClient.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.client;
+package org.apache.jackrabbit.oak.segment.standby.client;
 
 import java.io.Closeable;
 import java.lang.management.ManagementFactory;
@@ -44,12 +44,13 @@ import io.netty.handler.ssl.SslContext;
 import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
 import io.netty.handler.timeout.ReadTimeoutHandler;
 import io.netty.util.CharsetUtil;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.RecordIdDecoder;
-import org.apache.jackrabbit.oak.plugins.segment.standby.jmx.ClientStandbyStatusMBean;
-import org.apache.jackrabbit.oak.plugins.segment.standby.jmx.StandbyStatusMBean;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.CommunicationObserver;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.StandbyStore;
+import org.apache.jackrabbit.oak.segment.SegmentStore;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.standby.codec.RecordIdDecoder;
+import org.apache.jackrabbit.oak.segment.standby.jmx.ClientStandbyStatusMBean;
+import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
+import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -80,7 +81,7 @@ public final class StandbyClient impleme
     private long syncStartTimestamp;
     private long syncEndTimestamp;
 
-    public StandbyClient(String host, int port, SegmentStore store,
+    public StandbyClient(String host, int port, FileStore store,
             boolean secure, int readTimeoutMs, boolean autoClean)
             throws SSLException {
         this.state = STATUS_INITIALIZING;

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientHandler.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientHandler.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientHandler.java Thu Aug 25 14:51:36 2016
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.client;
 
-import static org.apache.jackrabbit.oak.plugins.segment.standby.codec.Messages.newGetHeadReq;
+package org.apache.jackrabbit.oak.segment.standby.client;
+
+import static org.apache.jackrabbit.oak.segment.standby.codec.Messages.newGetHeadReq;
 
 import java.io.Closeable;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -26,11 +27,11 @@ import java.util.concurrent.atomic.Atomi
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.SimpleChannelInboundHandler;
 import io.netty.handler.timeout.ReadTimeoutHandler;
-import org.apache.jackrabbit.oak.plugins.segment.RecordId;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.RecordIdDecoder;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.ReplyDecoder;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.CommunicationObserver;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.StandbyStore;
+import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.standby.codec.RecordIdDecoder;
+import org.apache.jackrabbit.oak.segment.standby.codec.ReplyDecoder;
+import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/BlobEncoder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/BlobEncoder.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/BlobEncoder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/BlobEncoder.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/IdArrayBasedBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/IdArrayBasedBlob.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/IdArrayBasedBlob.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/IdArrayBasedBlob.java Thu Aug 25 14:51:36 2016
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 import org.apache.jackrabbit.oak.plugins.memory.ArrayBasedBlob;
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/Messages.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/Messages.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/Messages.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/Messages.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 public class Messages {
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdDecoder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdDecoder.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdDecoder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdDecoder.java Thu Aug 25 14:51:36 2016
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 import java.io.IOException;
 
@@ -25,9 +25,8 @@ import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
 import io.netty.util.CharsetUtil;
-
-import org.apache.jackrabbit.oak.plugins.segment.RecordId;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
+import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.SegmentStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +54,7 @@ public class RecordIdDecoder extends Len
         String id = frame.toString(CharsetUtil.UTF_8);
         try {
             log.debug("received type {} with id {}", type, id);
-            return RecordId.fromString(store.getTracker(), id);
+            return RecordId.fromString(store, id);
         } catch (IllegalArgumentException e) {
             log.error(e.getMessage(), e);
         }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdEncoder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdEncoder.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdEncoder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/RecordIdEncoder.java Thu Aug 25 14:51:36 2016
@@ -17,14 +17,14 @@
  * under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToByteEncoder;
 import io.netty.util.CharsetUtil;
 
-import org.apache.jackrabbit.oak.plugins.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.RecordId;
 
 public class RecordIdEncoder extends MessageToByteEncoder<RecordId> {
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ReplyDecoder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ReplyDecoder.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ReplyDecoder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/ReplyDecoder.java Thu Aug 25 14:51:36 2016
@@ -17,26 +17,24 @@
  * under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.ReplayingDecoder;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.util.List;
 import java.util.UUID;
 
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentId;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.ReplyDecoder.DecodingState;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ReplayingDecoder;
+import org.apache.jackrabbit.oak.segment.Segment;
+import org.apache.jackrabbit.oak.segment.SegmentId;
+import org.apache.jackrabbit.oak.segment.standby.codec.ReplyDecoder.DecodingState;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ReplyDecoder extends ReplayingDecoder<DecodingState> {
 
@@ -47,12 +45,12 @@ public class ReplyDecoder extends Replay
     private static final Logger log = LoggerFactory
             .getLogger(ReplyDecoder.class);
 
-    private final SegmentStore store;
+    private final StandbyStore store;
 
     private int length = -1;
     private byte type = -1;
 
-    public ReplyDecoder(SegmentStore store) {
+    public ReplyDecoder(StandbyStore store) {
         super(DecodingState.HEADER);
         this.store = store;
     }
@@ -128,9 +126,8 @@ public class ReplyDecoder extends Replay
         Hasher hasher = Hashing.murmur3_32().newHasher();
         long check = hasher.putBytes(segment).hash().padToLong();
         if (hash == check) {
-            SegmentId id = new SegmentId(store.getTracker(), msb, lsb);
-            Segment s = new Segment(store.getTracker(), id,
-                    ByteBuffer.wrap(segment));
+            SegmentId id = store.newSegmentId(msb, lsb);
+            Segment s = store.newSegment(id, ByteBuffer.wrap(segment));
             log.debug("received segment with id {} and size {}", id, s.size());
             return s;
         }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentEncoder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentEncoder.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentEncoder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentEncoder.java Thu Aug 25 14:51:36 2016
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
@@ -25,8 +25,8 @@ import io.netty.handler.codec.MessageToB
 
 import java.io.ByteArrayOutputStream;
 
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentId;
+import org.apache.jackrabbit.oak.segment.Segment;
+import org.apache.jackrabbit.oak.segment.SegmentId;
 
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentReply.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentReply.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentReply.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/codec/SegmentReply.java Thu Aug 25 14:51:36 2016
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.codec;
+package org.apache.jackrabbit.oak.segment.standby.codec;
 
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
+import org.apache.jackrabbit.oak.segment.Segment;
 
 public class SegmentReply {
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ClientStandbyStatusMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ClientStandbyStatusMBean.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ClientStandbyStatusMBean.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ClientStandbyStatusMBean.java Thu Aug 25 14:51:36 2016
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.jmx;
+package org.apache.jackrabbit.oak.segment.standby.jmx;
 
 import org.apache.jackrabbit.oak.commons.jmx.Description;
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ObservablePartnerMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ObservablePartnerMBean.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ObservablePartnerMBean.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/ObservablePartnerMBean.java Thu Aug 25 14:51:36 2016
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.jmx;
+package org.apache.jackrabbit.oak.segment.standby.jmx;
 
 import org.apache.jackrabbit.oak.commons.jmx.Description;
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/StandbyStatusMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/StandbyStatusMBean.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/StandbyStatusMBean.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/jmx/StandbyStatusMBean.java Thu Aug 25 14:51:36 2016
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.jackrabbit.oak.plugins.segment.standby.jmx;
+package org.apache.jackrabbit.oak.segment.standby.jmx;
 
 import org.apache.jackrabbit.oak.commons.jmx.Description;
 import javax.annotation.Nonnull;

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServer.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.server;
+
+package org.apache.jackrabbit.oak.segment.standby.server;
+
+import java.io.Closeable;
+import java.lang.management.ManagementFactory;
+import java.security.cert.CertificateException;
+import java.util.concurrent.TimeUnit;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+import javax.net.ssl.SSLException;
 
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.channel.ChannelFuture;
@@ -35,27 +47,17 @@ import io.netty.handler.ssl.SslContext;
 import io.netty.handler.ssl.util.SelfSignedCertificate;
 import io.netty.util.CharsetUtil;
 import io.netty.util.concurrent.Future;
-
-import java.io.Closeable;
-import java.lang.management.ManagementFactory;
-import java.security.cert.CertificateException;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.BlobEncoder;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.RecordIdEncoder;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.SegmentEncoder;
-import org.apache.jackrabbit.oak.plugins.segment.standby.jmx.StandbyStatusMBean;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.CommunicationObserver;
+import org.apache.jackrabbit.oak.segment.SegmentStore;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.standby.codec.BlobEncoder;
+import org.apache.jackrabbit.oak.segment.standby.codec.RecordIdEncoder;
+import org.apache.jackrabbit.oak.segment.standby.codec.SegmentEncoder;
+import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
+import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.management.StandardMBean;
-import javax.net.ssl.SSLException;
-
 public class StandbyServer implements StandbyStatusMBean, Closeable {
 
     private static final Logger log = LoggerFactory
@@ -72,23 +74,19 @@ public class StandbyServer implements St
     private ChannelFuture channelFuture;
     private boolean running;
 
-    public StandbyServer(int port, final SegmentStore store)
-            throws CertificateException, SSLException {
+    public StandbyServer(int port, final FileStore store) throws CertificateException, SSLException {
         this(port, store, null, false);
     }
 
-    public StandbyServer(int port, final SegmentStore store, boolean secure)
-            throws CertificateException, SSLException {
+    public StandbyServer(int port, final FileStore store, boolean secure) throws CertificateException, SSLException {
         this(port, store, null, secure);
     }
 
-    public StandbyServer(int port, final SegmentStore store, String[] allowedClientIPRanges)
-            throws CertificateException, SSLException {
+    public StandbyServer(int port, final FileStore store, String[] allowedClientIPRanges) throws CertificateException, SSLException {
         this(port, store, allowedClientIPRanges, false);
     }
 
-    public StandbyServer(int port, final SegmentStore store, String[] allowedClientIPRanges, boolean secure)
-            throws CertificateException, SSLException {
+    public StandbyServer(int port, final FileStore store, String[] allowedClientIPRanges, boolean secure) throws CertificateException, SSLException {
         this.port = port;
 
         if (secure) {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerHandler.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerHandler.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerHandler.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.server;
+
+package org.apache.jackrabbit.oak.segment.standby.server;
 
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -28,15 +29,17 @@ import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandler.Sharable;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.SimpleChannelInboundHandler;
-
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.IllegalRepositoryStateException;
-import org.apache.jackrabbit.oak.plugins.segment.RecordId;
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentId;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.codec.Messages;
-import org.apache.jackrabbit.oak.plugins.segment.standby.store.CommunicationObserver;
+import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob;
+import org.apache.jackrabbit.oak.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.Segment;
+import org.apache.jackrabbit.oak.segment.SegmentId;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.standby.codec.Messages;
+import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver;
+import org.apache.jackrabbit.oak.segment.standby.store.StandbyStore;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,12 +49,12 @@ public class StandbyServerHandler extend
     private static final Logger log = LoggerFactory
             .getLogger(StandbyServerHandler.class);
 
-    private final SegmentStore store;
+    private final FileStore store;
     private final CommunicationObserver observer;
     private final String[] allowedIPRanges;
     public String state;
 
-    public StandbyServerHandler(SegmentStore store, CommunicationObserver observer, String[] allowedIPRanges) {
+    public StandbyServerHandler(FileStore store, CommunicationObserver observer, String[] allowedIPRanges) {
         this.store = store;
         this.observer = observer;
         this.allowedIPRanges = allowedIPRanges;
@@ -154,9 +157,7 @@ public class StandbyServerHandler extend
 
                 for (int i = 0; i < 10; i++) {
                     try {
-                        s = store.readSegment(new SegmentId(store.getTracker(),
-                                uuid.getMostSignificantBits(), uuid
-                                .getLeastSignificantBits()));
+                        s = store.readSegment(store.newSegmentId(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()));
                     } catch (IllegalRepositoryStateException e) {
                         // segment not found
                         log.debug("waiting for segment. Got exception: " + e.getMessage());
@@ -174,7 +175,7 @@ public class StandbyServerHandler extend
             } else if (request.startsWith(Messages.GET_BLOB)) {
                 String bid = request.substring(Messages.GET_BLOB.length());
                 log.debug("request blob id {}", bid);
-                Blob b = store.readBlob(bid);
+                Blob b = readBlob(bid);
                 log.debug("sending blob " + bid + " to " + client);
                 ctx.writeAndFlush(b);
                 observer.didSendBinariesBytes(clientID,
@@ -203,4 +204,15 @@ public class StandbyServerHandler extend
             log.error("Exception occurred: " + cause.getMessage(), cause);
         }
     }
+
+    private Blob readBlob(String blobId) {
+        BlobStore blobStore = store.getBlobStore();
+
+        if (blobStore != null) {
+            return new BlobStoreBlob(blobStore, blobId);
+        }
+
+        throw new IllegalStateException("Attempt to read external blob with blobId [" + blobId + "] without specifying BlobStore");
+    }
+
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/CommunicationObserver.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/CommunicationObserver.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/CommunicationObserver.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/CommunicationObserver.java Thu Aug 25 14:51:36 2016
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.store;
+package org.apache.jackrabbit.oak.segment.standby.store;
 
 
-import org.apache.jackrabbit.oak.plugins.segment.standby.jmx.StandbyStatusMBean;
-import org.apache.jackrabbit.oak.plugins.segment.standby.jmx.ObservablePartnerMBean;
+import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
+import org.apache.jackrabbit.oak.segment.standby.jmx.ObservablePartnerMBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/RemoteSegmentLoader.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/RemoteSegmentLoader.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/RemoteSegmentLoader.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/RemoteSegmentLoader.java Thu Aug 25 14:51:36 2016
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.store;
+package org.apache.jackrabbit.oak.segment.standby.store;
 
 import org.apache.jackrabbit.oak.api.Blob;
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
+import org.apache.jackrabbit.oak.segment.Segment;
 
 public interface RemoteSegmentLoader {
 

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStore.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStore.java Thu Aug 25 14:51:36 2016
@@ -14,59 +14,66 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.store;
+
+package org.apache.jackrabbit.oak.segment.standby.store;
 
 import static com.google.common.collect.Sets.newHashSet;
 import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
 
 import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
 import java.io.IOException;
+import java.nio.ByteBuffer;
 import java.util.ArrayDeque;
+import java.util.ArrayList;
 import java.util.Deque;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.UUID;
+
+import javax.annotation.Nonnull;
 
-import org.apache.jackrabbit.oak.api.Blob;
-import org.apache.jackrabbit.oak.plugins.segment.Segment;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentId;
-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.segment.RecordId;
+import org.apache.jackrabbit.oak.segment.Segment;
+import org.apache.jackrabbit.oak.segment.SegmentId;
+import org.apache.jackrabbit.oak.segment.SegmentNodeState;
+import org.apache.jackrabbit.oak.segment.SegmentStore;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class StandbyStore implements SegmentStore {
+public class StandbyStore implements SegmentStore, Closeable {
 
     private static final Logger log = LoggerFactory.getLogger(StandbyStore.class);
 
-    private final SegmentTracker tracker = new SegmentTracker(this);
-
-    private final SegmentStore delegate;
+    private final FileStore delegate;
 
     private RemoteSegmentLoader loader;
 
-    public StandbyStore(SegmentStore delegate) {
+    public StandbyStore(FileStore delegate) {
         this.delegate = delegate;
     }
 
+    @Nonnull
     @Override
-    public SegmentTracker getTracker() {
-        return tracker;
+    public SegmentId newSegmentId(long msb, long lsb) {
+        return delegate.newSegmentId(msb, lsb);
     }
 
+    @Nonnull
     @Override
-    public SegmentNodeState getHead() {
-        return delegate.getHead();
+    public SegmentId newBulkSegmentId() {
+        return delegate.newBulkSegmentId();
     }
 
+    @Nonnull
     @Override
-    public boolean setHead(SegmentNodeState base, SegmentNodeState head) {
-        return delegate.setHead(base, head);
+    public SegmentId newDataSegmentId() {
+        return delegate.newDataSegmentId();
     }
 
     @Override
@@ -74,6 +81,19 @@ public class StandbyStore implements Seg
         return delegate.containsSegment(id);
     }
 
+    private List<SegmentId> getReferencedIds(Segment s) {
+        List<SegmentId> segmentIds = new ArrayList<>();
+
+        for (int i = 0; i < s.getReferencedSegmentIdCount(); i++) {
+            UUID uuid = s.getReferencedSegmentId(i);
+            long msb = uuid.getMostSignificantBits();
+            long lsb = uuid.getLeastSignificantBits();
+            segmentIds.add(delegate.newSegmentId(msb, lsb));
+        }
+
+        return segmentIds;
+    }
+
     @Override
     public Segment readSegment(SegmentId sid) {
         callId++;
@@ -114,7 +134,7 @@ public class StandbyStore implements Seg
                             s.size());
                     if (id.isDataSegmentId()) {
                         boolean hasPendingRefs = false;
-                        List<SegmentId> refs = s.getReferencedIds();
+                        List<SegmentId> refs = getReferencedIds(s);
                         if (logRefs) {
                             log.debug("{} -> {}", id, refs);
                         }
@@ -181,8 +201,7 @@ public class StandbyStore implements Seg
     }
 
     public void persist(SegmentId in, Segment s) {
-        SegmentId id = delegate.getTracker().getSegmentId(
-                in.getMostSignificantBits(), in.getLeastSignificantBits());
+        SegmentId id = delegate.newSegmentId(in.getMostSignificantBits(), in.getLeastSignificantBits());
         log.debug("persisting segment {} with size {}", id, s.size());
         try {
             ByteArrayOutputStream bout = new ByteArrayOutputStream(s.size());
@@ -220,38 +239,36 @@ public class StandbyStore implements Seg
         delegate.close();
     }
 
-    @Override
-    public Blob readBlob(String reference) {
-        return delegate.readBlob(reference);
+    public long size() {
+        return delegate.getStats().getApproximateSize();
     }
 
-    @Override
-    public BlobStore getBlobStore() {
-        return delegate.getBlobStore();
+    public void cleanup() {
+        try {
+            delegate.flush();
+        } catch (IOException e) {
+            log.error("Error running cleanup", e);
+        }
     }
 
-    @Override
-    public void gc() {
-        delegate.gc();
+    public SegmentNodeState getHead() {
+        return delegate.getHead();
     }
 
-    public long size() {
-        if (delegate instanceof FileStore) {
-            return ((FileStore) delegate).size();
-        }
-        return -1;
+    public SegmentNodeState newSegmentNodeState(RecordId id) {
+        return delegate.getReader().readNode(id);
     }
 
-    public void cleanup() {
-        if (delegate instanceof FileStore) {
-            try {
-                delegate.getTracker().getWriter().dropCache();
-                ((FileStore) delegate).flush(true);
-            } catch (IOException e) {
-                log.error("Error running cleanup", e);
-            }
-        } else {
-            log.warn("Delegate is not a FileStore, ignoring cleanup call");
-        }
+    public boolean setHead(@Nonnull SegmentNodeState expected, @Nonnull SegmentNodeState head) {
+        return delegate.getRevisions().setHead(expected.getRecordId(), head.getRecordId());
+    }
+
+    public Segment newSegment(SegmentId segmentId, ByteBuffer buffer) {
+        return new Segment(delegate, delegate.getReader(), segmentId, buffer);
+    }
+
+    public BlobStore getBlobStore() {
+        return delegate.getBlobStore();
     }
+
 }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/store/StandbyStoreService.java Thu Aug 25 14:51:36 2016
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby.store;
+package org.apache.jackrabbit.oak.segment.standby.store;
 
 import static java.lang.String.valueOf;
 import static org.apache.felix.scr.annotations.ReferencePolicy.STATIC;
@@ -35,10 +35,11 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.PropertyOption;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStoreProvider;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.client.StandbyClient;
-import org.apache.jackrabbit.oak.plugins.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.SegmentStore;
+import org.apache.jackrabbit.oak.segment.SegmentStoreProvider;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClient;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -91,7 +92,7 @@ public class StandbyStoreService {
     @Reference(policy = STATIC, policyOption = GREEDY)
     private SegmentStoreProvider storeProvider = null;
 
-    private SegmentStore segmentStore;
+    private FileStore fileStore;
 
     private StandbyServer primary = null;
     private StandbyClient sync = null;
@@ -100,12 +101,18 @@ public class StandbyStoreService {
 
     @Activate
     private void activate(ComponentContext context) throws IOException, CertificateException {
-        if (storeProvider != null) {
-            segmentStore = storeProvider.getSegmentStore();
-        } else {
-            throw new IllegalArgumentException(
-                    "Missing SegmentStoreProvider service");
+        if (storeProvider == null) {
+            throw new IllegalArgumentException("Missing SegmentStoreProvider service");
         }
+
+        SegmentStore segmentStore = storeProvider.getSegmentStore();
+
+        if (!(segmentStore instanceof FileStore)) {
+            throw new IllegalArgumentException("Unexpected SegmentStore implementation");
+        }
+
+        fileStore = (FileStore) segmentStore;
+
         String mode = valueOf(context.getProperties().get(MODE));
         if (MODE_PRIMARY.equals(mode)) {
             bootstrapMaster(context);
@@ -136,7 +143,7 @@ public class StandbyStoreService {
         int port = PropertiesUtil.toInteger(props.get(PORT), PORT_DEFAULT);
         String[] ranges = PropertiesUtil.toStringArray(props.get(ALLOWED_CLIENT_IP_RANGES), ALLOWED_CLIENT_IP_RANGES_DEFAULT);
         boolean secure = PropertiesUtil.toBoolean(props.get(SECURE), SECURE_DEFAULT);
-        primary = new StandbyServer(port, segmentStore, ranges, secure);
+        primary = new StandbyServer(port, fileStore, ranges, secure);
         primary.start();
         log.info("started primary on port {} with allowed ip ranges {}.", port, ranges);
     }
@@ -150,7 +157,7 @@ public class StandbyStoreService {
         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, clean);
+        sync = new StandbyClient(host, port, fileStore, 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-segment-tar/src/main/resources/OSGI-INF/metatype/metatype.properties
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/metatype/metatype.properties (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/resources/OSGI-INF/metatype/metatype.properties Thu Aug 25 14:51:36 2016
@@ -19,8 +19,8 @@
 
 # suppress inspection "UnusedProperty" for whole file
 
-org.apache.jackrabbit.oak.plugins.segment.standby.store.StandbyStoreService.name = Apache Jackrabbit Oak TarMK Cold Standby service
-org.apache.jackrabbit.oak.plugins.segment.standby.store.StandbyStoreService.description = Provides continuous backups of TarMK based repositories
+org.apache.jackrabbit.oak.segment.standby.store.StandbyStoreService.name = Apache Jackrabbit Oak Segment Tar Cold Standby Service
+org.apache.jackrabbit.oak.segment.standby.store.StandbyStoreService.description = Provides continuous backups of repositories based on Segment Tar
 
 mode.name = Mode
 mode.description = TarMK Cold Standby mode (primary or standby)

Copied: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NetworkErrorProxy.java (from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/NetworkErrorProxy.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NetworkErrorProxy.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NetworkErrorProxy.java&p1=jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/NetworkErrorProxy.java&r1=1756619&r2=1757699&rev=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/NetworkErrorProxy.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NetworkErrorProxy.java Thu Aug 25 14:51:36 2016
@@ -16,34 +16,44 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment;
+
+package org.apache.jackrabbit.oak.segment;
+
+import java.util.concurrent.TimeUnit;
 
 import io.netty.bootstrap.Bootstrap;
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.buffer.ByteBuf;
-import io.netty.channel.*;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandler;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.EventLoopGroup;
 import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.socket.SocketChannel;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.channel.socket.nio.NioSocketChannel;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.concurrent.TimeUnit;
-
 public class NetworkErrorProxy {
+
     static final Logger log = LoggerFactory
             .getLogger(NetworkErrorProxy.class);
 
     private final int inboundPort;
+
     private final int outboundPort;
+
     private final String host;
+
     private ChannelFuture f;
 
     private ForwardHandler fh;
 
     EventLoopGroup bossGroup = new NioEventLoopGroup();
+
     EventLoopGroup workerGroup = new NioEventLoopGroup();
 
     public NetworkErrorProxy(int inboundPort, String outboundHost, int outboundPort) {
@@ -68,6 +78,7 @@ public class NetworkErrorProxy {
             b.group(bossGroup, workerGroup)
                     .channel(NioServerSocketChannel.class)
                     .childHandler(new ChannelInitializer<SocketChannel>() {
+
                         @Override
                         public void initChannel(SocketChannel ch) throws Exception {
                             ch.pipeline().addLast(NetworkErrorProxy.this.fh);
@@ -105,12 +116,19 @@ public class NetworkErrorProxy {
 }
 
 class ForwardHandler extends ChannelInboundHandlerAdapter {
+
     private final String targetHost;
+
     private final int targetPort;
+
     public long transferredBytes;
+
     public int skipPosition;
+
     public int skipBytes;
+
     public int flipPosition;
+
     private ChannelFuture remote;
 
     public ForwardHandler(String host, int port) {
@@ -128,13 +146,13 @@ class ForwardHandler extends ChannelInbo
         cb.channel(NioSocketChannel.class);
 
         cb.handler(new ChannelInitializer<SocketChannel>() {
+
             @Override
             public void initChannel(SocketChannel ch) throws Exception {
                 SendBackHandler sbh = new SendBackHandler(c);
                 if (ForwardHandler.this.flipPosition >= 0) {
                     sbh = new BitFlipHandler(c, ForwardHandler.this.flipPosition);
-                }
-                else if (ForwardHandler.this.skipBytes > 0) {
+                } else if (ForwardHandler.this.skipBytes > 0) {
                     sbh = new SwallowingHandler(c, ForwardHandler.this.skipPosition, ForwardHandler.this.skipBytes);
                 }
                 ch.pipeline().addFirst(sbh);
@@ -155,7 +173,7 @@ class ForwardHandler extends ChannelInbo
     @Override
     public void channelRead(ChannelHandlerContext ctx, Object msg) {
         if (msg instanceof ByteBuf) {
-            ByteBuf bb = (ByteBuf)msg;
+            ByteBuf bb = (ByteBuf) msg;
             this.transferredBytes += (bb.writerIndex() - bb.readerIndex());
         }
         remote.channel().write(msg);
@@ -174,7 +192,9 @@ class ForwardHandler extends ChannelInbo
 }
 
 class SendBackHandler implements ChannelInboundHandler {
+
     private final ChannelHandlerContext target;
+
     public long transferredBytes;
 
     public SendBackHandler(ChannelHandlerContext ctx) {
@@ -199,7 +219,7 @@ class SendBackHandler implements Channel
 
     public int messageSize(Object msg) {
         if (msg instanceof ByteBuf) {
-            ByteBuf bb = (ByteBuf)msg;
+            ByteBuf bb = (ByteBuf) msg;
             return (bb.writerIndex() - bb.readerIndex());
         }
         // unknown
@@ -240,7 +260,9 @@ class SendBackHandler implements Channel
 }
 
 class SwallowingHandler extends SendBackHandler {
+
     private int skipStartingPos;
+
     private int nrOfBytes;
 
     public SwallowingHandler(ChannelHandlerContext ctx, int skipStartingPos, int numberOfBytes) {
@@ -251,13 +273,12 @@ class SwallowingHandler extends SendBack
 
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         if (msg instanceof ByteBuf) {
-            ByteBuf bb = (ByteBuf)msg;
+            ByteBuf bb = (ByteBuf) msg;
             if (this.nrOfBytes > 0) {
                 if (this.transferredBytes >= this.skipStartingPos) {
                     bb.skipBytes(this.nrOfBytes);
                     this.nrOfBytes = 0;
-                }
-                else {
+                } else {
                     this.skipStartingPos -= messageSize(msg);
                 }
             }
@@ -268,6 +289,7 @@ class SwallowingHandler extends SendBack
 }
 
 class BitFlipHandler extends SendBackHandler {
+
     private static final Logger log = LoggerFactory
             .getLogger(BitFlipHandler.class);
 
@@ -280,11 +302,11 @@ class BitFlipHandler extends SendBackHan
 
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
         if (msg instanceof ByteBuf) {
-            ByteBuf bb = (ByteBuf)msg;
+            ByteBuf bb = (ByteBuf) msg;
             log.debug("FlipHandler. Got Buffer size: " + bb.readableBytes());
             if (this.startingPos >= 0) {
                 if (this.transferredBytes + bb.readableBytes() >= this.startingPos) {
-                    int i = this.startingPos - (int)this.transferredBytes;
+                    int i = this.startingPos - (int) this.transferredBytes;
                     log.info("FlipHandler flips byte at offset " + (this.transferredBytes + i));
                     byte b = (byte) (bb.getByte(i) ^ 0x01);
                     bb.setByte(i, b);

Copied: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentTestUtils.java (from r1756619, jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTestUtils.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentTestUtils.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentTestUtils.java&p1=jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTestUtils.java&r1=1756619&r2=1757699&rev=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-tarmk-standby/src/test/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTestUtils.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentTestUtils.java Thu Aug 25 14:51:36 2016
@@ -16,19 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment;
+
+package org.apache.jackrabbit.oak.segment;
 
 import static java.io.File.createTempFile;
-import static org.apache.jackrabbit.oak.plugins.segment.Segment.MAX_SEGMENT_SIZE;
-import static org.apache.jackrabbit.oak.plugins.segment.Segment.RECORD_ALIGN_BITS;
-import static org.junit.Assert.assertEquals;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Random;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -36,27 +32,7 @@ import org.apache.jackrabbit.oak.spi.sta
 
 public final class SegmentTestUtils {
 
-    private SegmentTestUtils() { }
-
-    public static int newValidOffset(Random random) {
-        return random.nextInt(MAX_SEGMENT_SIZE >> RECORD_ALIGN_BITS) << RECORD_ALIGN_BITS;
-    }
-
-    public static RecordId newRecordId(SegmentTracker factory, Random random) {
-        SegmentId id = factory.newDataSegmentId();
-        RecordId r = new RecordId(id, newValidOffset(random));
-        return r;
-    }
-
-    public static void assertEqualStores(File d1, File d2) throws Exception {
-        FileStore f1 = FileStore.builder(d1).withMaxFileSize(1).withMemoryMapping(false).build();
-        FileStore f2 = FileStore.builder(d2).withMaxFileSize(1).withMemoryMapping(false).build();
-        try {
-            assertEquals(f1.getHead(), f2.getHead());
-        } finally {
-            f1.close();
-            f2.close();
-        }
+    private SegmentTestUtils() {
     }
 
     public static void addTestContent(NodeStore store, String child)

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkTest.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BrokenNetworkTest.java Thu Aug 25 14:51:36 2016
@@ -16,21 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby;
 
-import org.apache.jackrabbit.oak.plugins.segment.NetworkErrorProxy;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.client.StandbyClient;
-import org.apache.jackrabbit.oak.plugins.segment.standby.server.StandbyServer;
+package org.apache.jackrabbit.oak.segment.standby;
+
+import static org.apache.jackrabbit.oak.segment.SegmentTestUtils.addTestContent;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import org.apache.jackrabbit.oak.segment.NetworkErrorProxy;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClient;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.apache.jackrabbit.oak.plugins.segment.SegmentTestUtils.addTestContent;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
 public class BrokenNetworkTest extends TestBase {
 
     @Before
@@ -119,7 +120,7 @@ public class BrokenNetworkTest extends T
         p.flipByte(flipPosition);
         p.run();
 
-        NodeStore store = SegmentNodeStore.builder(storeS).build();
+        NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
         final StandbyServer server = new StandbyServer(port, storeS, ssl);
         server.start();
         addTestContent(store, "server");

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BulkTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BulkTest.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BulkTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/BulkTest.java Thu Aug 25 14:51:36 2016
@@ -16,12 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby;
 
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.client.StandbyClient;
-import org.apache.jackrabbit.oak.plugins.segment.standby.jmx.StandbyStatusMBean;
-import org.apache.jackrabbit.oak.plugins.segment.standby.server.StandbyServer;
+package org.apache.jackrabbit.oak.segment.standby;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.lang.management.ManagementFactory;
+import java.util.Set;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClient;
+import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -30,16 +41,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-import java.lang.management.ManagementFactory;
-import java.util.Set;
-
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertTrue;
-import static org.junit.Assert.assertEquals;
-
 public class BulkTest extends TestBase {
 
     @Before
@@ -97,7 +98,7 @@ public class BulkTest extends TestBase {
 
     private void test(int number, int minExpectedSegments, int maxExpectedSegments, long minExpectedBytes, long maxExpectedBytes,
                       boolean useSSL) throws Exception {
-        NodeStore store = SegmentNodeStore.builder(storeS).build();
+        NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
         NodeBuilder rootbuilder = store.getRoot().builder();
         NodeBuilder b = rootbuilder.child("store");
         for (int j=0; j<=number / 1000; j++) {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/DataStoreTestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/DataStoreTestBase.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/DataStoreTestBase.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/DataStoreTestBase.java Thu Aug 25 14:51:36 2016
@@ -16,7 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby;
+
+package org.apache.jackrabbit.oak.segment.standby;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
@@ -36,11 +37,12 @@ import org.apache.jackrabbit.oak.api.Com
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
-import org.apache.jackrabbit.oak.plugins.segment.NetworkErrorProxy;
-import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
-import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
-import org.apache.jackrabbit.oak.plugins.segment.standby.client.StandbyClient;
-import org.apache.jackrabbit.oak.plugins.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.NetworkErrorProxy;
+import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClient;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -62,12 +64,15 @@ public class DataStoreTestBase extends T
         fds.setMinRecordLength(4092);
         fds.init(path);
         DataStoreBlobStore blobStore = new DataStoreBlobStore(fds);
-        return FileStore.builder(d)
-            .withMaxFileSize(1)
-            .withMemoryMapping(false)
-            .withNoCache()
-            .withBlobStore(blobStore)
-            .build();
+        return FileStoreBuilder.fileStoreBuilder(d)
+                .withMaxFileSize(1)
+                .withMemoryMapping(false)
+                .withNodeDeduplicationCacheSize(0)
+                .withSegmentCacheSize(0)
+                .withStringCacheSize(0)
+                .withTemplateCacheSize(0)
+                .withBlobStore(blobStore)
+                .build();
     }
 
     protected byte[] addTestContent(NodeStore store, String child, int size)
@@ -92,7 +97,7 @@ public class DataStoreTestBase extends T
         FileStore primary = getPrimary();
         FileStore secondary = getSecondary();
 
-        NodeStore store = SegmentNodeStore.builder(primary).build();
+        NodeStore store = SegmentNodeStoreBuilders.builder(primary).build();
         final StandbyServer server = new StandbyServer(port, primary);
         server.start();
         byte[] data = addTestContent(store, "server", blobSize);
@@ -108,8 +113,8 @@ public class DataStoreTestBase extends T
             cl.close();
         }
 
-        assertTrue(primary.size() < mb);
-        assertTrue(secondary.size() < mb);
+        assertTrue(primary.getStats().getApproximateSize() < mb);
+        assertTrue(secondary.getStats().getApproximateSize() < mb);
 
         PropertyState ps = secondary.getHead().getChildNode("root")
                 .getChildNode("server").getProperty("testBlob");
@@ -168,7 +173,7 @@ public class DataStoreTestBase extends T
         p.flipByte(flipPosition);
         p.run();
 
-        NodeStore store = SegmentNodeStore.builder(primary).build();
+        NodeStore store = SegmentNodeStoreBuilders.builder(primary).build();
         final StandbyServer server = new StandbyServer(port, primary);
         server.start();
         byte[] data = addTestContent(store, "server", blobSize);
@@ -197,8 +202,8 @@ public class DataStoreTestBase extends T
             p.close();
         }
 
-        assertTrue(primary.size() < mb);
-        assertTrue(secondary.size() < mb);
+        assertTrue(primary.getStats().getApproximateSize() < mb);
+        assertTrue(secondary.getStats().getApproximateSize() < mb);
 
         PropertyState ps = secondary.getHead().getChildNode("root")
                 .getChildNode("server").getProperty("testBlob");

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java?rev=1757699&r1=1756619&r2=1757699&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/ExternalPrivateStoreIT.java Thu Aug 25 14:51:36 2016
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.plugins.segment.standby;
+package org.apache.jackrabbit.oak.segment.standby;
 
-import static org.apache.jackrabbit.oak.plugins.segment.SegmentTestUtils.createTmpTargetDir;
+import static org.apache.jackrabbit.oak.segment.SegmentTestUtils.createTmpTargetDir;
 
 import java.io.File;
 import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.junit.After;