Author: frm
Date: Mon Sep 26 09:48:06 2016
New Revision: 1762301

URL: http://svn.apache.org/viewvc?rev=1762301&view=rev
Log:
OAK-4813 - Simplify the server side of Cold Standby

Contribution by Andrei Dulceanu.

Added:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
      - copied, changed from r1762294, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySync.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
      - copied, changed from r1762294, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySyncExecution.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerSync.java
   (with props)
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StoreProvider.java
   (with props)
Removed:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySync.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySyncExecution.java
Modified:
    
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/server/StandbyServer.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/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/DataStoreTestBase.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
    
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BenchmarkBase.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BulkTransferBenchmark.java

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=1762301&r1=1762300&r2=1762301&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
 Mon Sep 26 09:48:06 2016
@@ -33,6 +33,7 @@ import io.netty.handler.codec.LengthFiel
 import io.netty.handler.codec.compression.SnappyFramedDecoder;
 import io.netty.handler.codec.string.StringEncoder;
 import io.netty.handler.ssl.SslContext;
+import io.netty.handler.ssl.SslContextBuilder;
 import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
 import io.netty.handler.timeout.ReadTimeoutHandler;
 import io.netty.util.CharsetUtil;
@@ -77,7 +78,7 @@ class StandbyClient implements AutoClose
         final SslContext sslContext;
 
         if (secure) {
-            sslContext = 
SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE);
+            sslContext = 
SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
         } else {
             sslContext = null;
         }

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
 (from r1762294, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySync.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySync.java&r1=1762294&r2=1762301&rev=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySync.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java
 Mon Sep 26 09:48:06 2016
@@ -40,11 +40,11 @@ import org.apache.jackrabbit.oak.segment
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class StandbySync implements ClientStandbyStatusMBean, Runnable, 
Closeable {
+public final class StandbyClientSync implements ClientStandbyStatusMBean, 
Runnable, Closeable {
 
     public static final String CLIENT_ID_PROPERTY_NAME = "standbyID";
 
-    private static final Logger log = 
LoggerFactory.getLogger(StandbySync.class);
+    private static final Logger log = 
LoggerFactory.getLogger(StandbyClientSync.class);
 
     private final String host;
 
@@ -76,7 +76,7 @@ public final class StandbySync implement
 
     private long syncEndTimestamp;
 
-    public StandbySync(String host, int port, FileStore store, boolean secure, 
int readTimeoutMs, boolean autoClean) throws SSLException {
+    public StandbyClientSync(String host, int port, FileStore store, boolean 
secure, int readTimeoutMs, boolean autoClean) throws SSLException {
         this.state = STATUS_INITIALIZING;
         this.lastSuccessfulRequest = -1;
         this.syncStartTimestamp = -1;
@@ -103,6 +103,7 @@ public final class StandbySync implement
         return StandbyStatusMBean.JMX_NAME + ",id=\"" + this.observer.getID() 
+ "\"";
     }
 
+    @Override
     public void close() {
         stop();
         state = STATUS_CLOSING;
@@ -116,6 +117,7 @@ public final class StandbySync implement
         state = STATUS_CLOSED;
     }
 
+    @Override
     public void run() {
         if (!isRunning()) {
             // manually stopped
@@ -138,7 +140,7 @@ public final class StandbySync implement
                 client.connect(host, port);
 
                 long sizeBefore = fileStore.getStats().getApproximateSize();
-                new StandbySyncExecution(fileStore, client, 
newRunningSupplier()).execute();
+                new StandbyClientSyncExecution(fileStore, client, 
newRunningSupplier()).execute();
                 long sizeAfter = fileStore.getStats().getApproximateSize();
 
                 if (autoClean && sizeBefore > 0) {

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
 (from r1762294, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySyncExecution.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySyncExecution.java&r1=1762294&r2=1762301&rev=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbySyncExecution.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSyncExecution.java
 Mon Sep 26 09:48:06 2016
@@ -44,9 +44,9 @@ import org.slf4j.LoggerFactory;
  * temporary state that is supposed to be used for the lifetime of a
  * synchronization run.
  */
-class StandbySyncExecution {
+class StandbyClientSyncExecution {
 
-    private static final Logger log = 
LoggerFactory.getLogger(StandbySyncExecution.class);
+    private static final Logger log = 
LoggerFactory.getLogger(StandbyClientSyncExecution.class);
 
     private final FileStore store;
 
@@ -58,7 +58,7 @@ class StandbySyncExecution {
 
     private final Map<UUID, Segment> cache = newHashMap();
 
-    StandbySyncExecution(FileStore store, StandbyClient client, 
Supplier<Boolean> running) {
+    StandbyClientSyncExecution(FileStore store, StandbyClient client, 
Supplier<Boolean> running) {
         this.store = store;
         this.client = client;
         this.running = running;

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=1762301&r1=1762300&r2=1762301&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
 Mon Sep 26 09:48:06 2016
@@ -19,15 +19,9 @@
 
 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;
@@ -43,67 +37,96 @@ import io.netty.handler.codec.LineBasedF
 import io.netty.handler.codec.compression.SnappyFramedEncoder;
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.ssl.SslContext;
+import io.netty.handler.ssl.SslContextBuilder;
 import io.netty.handler.ssl.util.SelfSignedCertificate;
 import io.netty.util.CharsetUtil;
-import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.standby.codec.GetBlobResponseEncoder;
 import org.apache.jackrabbit.oak.segment.standby.codec.GetHeadResponseEncoder;
 import 
org.apache.jackrabbit.oak.segment.standby.codec.GetSegmentResponseEncoder;
 import org.apache.jackrabbit.oak.segment.standby.codec.RequestDecoder;
-import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
 import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class StandbyServer implements StandbyStatusMBean, Closeable {
+class StandbyServer implements AutoCloseable {
 
-    private static final Logger log = LoggerFactory
-            .getLogger(StandbyServer.class);
+    private static final Logger log = 
LoggerFactory.getLogger(StandbyServer.class);
+
+    static Builder builder(int port, StoreProvider provider) {
+        return new Builder(port, provider);
+    }
 
     private final int port;
 
     private final EventLoopGroup bossGroup;
+
     private final EventLoopGroup workerGroup;
+
     private final ServerBootstrap b;
-    private final CommunicationObserver observer;
+
     private SslContext sslContext;
+
     private ChannelFuture channelFuture;
-    private boolean running;
 
-    private volatile String state;
+    static class Builder {
 
-    public StandbyServer(int port, final FileStore store) throws 
CertificateException, SSLException {
-        this(port, store, null, false);
-    }
+        private final int port;
 
-    public StandbyServer(int port, final FileStore store, boolean secure) 
throws CertificateException, SSLException {
-        this(port, store, null, secure);
-    }
+        private final StoreProvider storeProvider;
+
+        private boolean secure;
+
+        private String[] allowedClientIPRanges;
+
+        private StateConsumer stateConsumer;
+
+        private CommunicationObserver observer;
+
+        private Builder(final int port, final StoreProvider storeProvider) {
+            this.port = port;
+            this.storeProvider = storeProvider;
+        }
+
+        Builder secure(boolean secure) {
+            this.secure = secure;
+            return this;
+        }
+
+        Builder allowIPRanges(String[] alloallowedClientIPRanges) {
+            this.allowedClientIPRanges = alloallowedClientIPRanges;
+
+            return this;
+        }
+
+        Builder withStateConsumer(StateConsumer stateConsumer) {
+            this.stateConsumer = stateConsumer;
+
+            return this;
+        }
+
+        Builder withObserver(CommunicationObserver observer) {
+            this.observer = observer;
+
+            return this;
+        }
+
+        StandbyServer build() throws CertificateException, SSLException {
+            return new StandbyServer(this);
+        }
 
-    public StandbyServer(int port, final FileStore store, String[] 
allowedClientIPRanges) throws CertificateException, SSLException {
-        this(port, store, allowedClientIPRanges, false);
     }
 
-    public StandbyServer(int port, final FileStore store, final String[] 
allowedClientIPRanges, boolean secure) throws CertificateException, 
SSLException {
-        this.port = port;
+    private StandbyServer(final Builder builder) throws CertificateException, 
SSLException {
+        this.port = builder.port;
 
-        if (secure) {
+        if (builder.secure) {
             SelfSignedCertificate ssc = new SelfSignedCertificate();
-            sslContext = SslContext.newServerContext(ssc.certificate(), 
ssc.privateKey());
+            sslContext = SslContextBuilder.forServer(ssc.certificate(), 
ssc.privateKey()).build();
         }
 
-        observer = new CommunicationObserver("primary");
         bossGroup = new NioEventLoopGroup(1);
         workerGroup = new NioEventLoopGroup();
 
-        final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
-        try {
-            jmxServer.registerMBean(new StandardMBean(this, 
StandbyStatusMBean.class), new ObjectName(this.getMBeanName()));
-        }
-        catch (Exception e) {
-            log.error("can't register standby status mbean", e);
-        }
-
         b = new ServerBootstrap();
         b.group(bossGroup, workerGroup);
         b.channel(NioServerSocketChannel.class);
@@ -119,10 +142,10 @@ public class StandbyServer implements St
             public void initChannel(SocketChannel ch) throws Exception {
                 ChannelPipeline p = ch.pipeline();
 
-                p.addLast(new ClientFilterHandler(new 
ClientIpFilter(allowedClientIPRanges)));
+                p.addLast(new ClientFilterHandler(new 
ClientIpFilter(builder.allowedClientIPRanges)));
 
                 if (sslContext != null) {
-                    p.addLast(sslContext.newHandler(ch.alloc()));
+                    p.addLast("ssl", sslContext.newHandler(ch.alloc()));
                 }
 
                 // Decoders
@@ -130,8 +153,8 @@ public class StandbyServer implements St
                 p.addLast(new LineBasedFrameDecoder(8192));
                 p.addLast(new StringDecoder(CharsetUtil.UTF_8));
                 p.addLast(new RequestDecoder());
-                p.addLast(new StateHandler(newStateConsumer()));
-                p.addLast(new RequestObserverHandler(observer));
+                p.addLast(new StateHandler(builder.stateConsumer));
+                p.addLast(new RequestObserverHandler(builder.observer));
 
                 // Encoders
 
@@ -139,120 +162,56 @@ public class StandbyServer implements St
                 p.addLast(new GetHeadResponseEncoder());
                 p.addLast(new GetSegmentResponseEncoder());
                 p.addLast(new GetBlobResponseEncoder());
-                p.addLast(new ResponseObserverHandler(observer));
+                p.addLast(new ResponseObserverHandler(builder.observer));
 
                 // Handlers
 
-                p.addLast(new GetHeadRequestHandler(new 
DefaultStandbyHeadReader(store)));
-                p.addLast(new GetSegmentRequestHandler(new 
DefaultStandbySegmentReader(store)));
-                p.addLast(new GetBlobRequestHandler(new 
DefaultStandbyBlobReader(store)));
+                p.addLast(new GetHeadRequestHandler(new 
DefaultStandbyHeadReader(builder.storeProvider.provideStore())));
+                p.addLast(new GetSegmentRequestHandler(new 
DefaultStandbySegmentReader(builder.storeProvider.provideStore())));
+                p.addLast(new GetBlobRequestHandler(new 
DefaultStandbyBlobReader(builder.storeProvider.provideStore())));
             }
         });
     }
 
-    private StateConsumer newStateConsumer() {
-        return new StateConsumer() {
-
-            @Override
-            public void consumeState(String state) {
-                StandbyServer.this.state = state;
-            }
+    public void start() {
+        channelFuture = b.bind(port);
 
-        };
+        if (channelFuture.awaitUninterruptibly(10, TimeUnit.SECONDS)) {
+            onTimelyConnect();
+        } else {
+            onConnectTimeOut();
+        }
     }
 
-    public String getMBeanName() {
-        return StandbyStatusMBean.JMX_NAME + ",id=" + this.port;
+    public void stop() {
+        channelFuture.channel().disconnect();
     }
 
+    @Override
     public void close() {
         stop();
-        state = STATUS_CLOSING;
-        observer.unregister();
-        final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
-        try {
-            jmxServer.unregisterMBean(new ObjectName(this.getMBeanName()));
-        } catch (InstanceNotFoundException e) {
-            // ignore
-        } catch (Exception e) {
-            log.error("can't unregister standby status mbean", e);
-        }
+
         if (bossGroup != null && !bossGroup.isShuttingDown()) {
             bossGroup.shutdownGracefully(0, 1, 
TimeUnit.SECONDS).syncUninterruptibly();
         }
         if (workerGroup != null && !workerGroup.isShuttingDown()) {
             workerGroup.shutdownGracefully(0, 1, 
TimeUnit.SECONDS).syncUninterruptibly();
         }
-        state = STATUS_CLOSED;
-    }
-
-    @Override
-    public void start() {
-        if (running) {
-            return;
-        }
-
-        state = STATUS_STARTING;
-
-        channelFuture = b.bind(port);
-
-        if (channelFuture.awaitUninterruptibly(10, TimeUnit.SECONDS)) {
-            onTimelyStart();
-        } else {
-            onStartTimeOut();
-        }
     }
 
-    private void onTimelyStart() {
+    private void onTimelyConnect() {
         if (channelFuture.isSuccess()) {
-            onSuccessfulStart();
+            log.debug("Binding was successful");
         }
 
         if (channelFuture.cause() != null) {
-            onUnsuccessfulStart();
+            throw new RuntimeException(channelFuture.cause());
         }
     }
 
-    private void onSuccessfulStart() {
-        log.debug("Binding was successful");
-        state = STATUS_RUNNING;
-        running = true;
-    }
-
-    private void onUnsuccessfulStart() {
-        log.debug("Binding was unsuccessful", channelFuture.cause());
-        state = null;
-        running = false;
-        throw new RuntimeException(channelFuture.cause());
-    }
-
-    private void onStartTimeOut() {
+    private void onConnectTimeOut() {
         log.debug("Binding timed out, canceling");
-        state = null;
-        running = false;
         channelFuture.cancel(true);
     }
 
-    @Override
-    public String getMode() {
-        return "primary";
-    }
-
-    @Override
-    public boolean isRunning() { return running; }
-
-    @Override
-    public void stop() {
-        if (running) {
-            running = false;
-            this.state = STATUS_STOPPED;
-            channelFuture.channel().disconnect();
-        }
-    }
-
-    @Override
-    public String getStatus() {
-        return state == null ? STATUS_INITIALIZING : state;
-    }
-
 }

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerSync.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerSync.java?rev=1762301&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerSync.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StandbyServerSync.java
 Mon Sep 26 09:48:06 2016
@@ -0,0 +1,168 @@
+/*
+ * 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.standby.server;
+
+import java.io.Closeable;
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
+import org.apache.jackrabbit.oak.segment.standby.store.CommunicationObserver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class StandbyServerSync implements StandbyStatusMBean, StateConsumer, 
StoreProvider, Closeable {
+
+    private static final Logger log = 
LoggerFactory.getLogger(StandbyServer.class);
+
+    private final FileStore fileStore;
+
+    private final CommunicationObserver observer;
+
+    private final int port;
+
+    private final String[] allowedClientIPRanges;
+
+    private final boolean secure;
+
+    private volatile String state;
+
+    private final AtomicBoolean running = new AtomicBoolean(false);
+
+    private StandbyServer server;
+
+    public StandbyServerSync(final int port, final FileStore fileStore) {
+        this(port, fileStore, null, false);
+    }
+
+    public StandbyServerSync(final int port, final FileStore fileStore, final 
boolean secure) {
+        this(port, fileStore, null, secure);
+    }
+
+    public StandbyServerSync(final int port, final FileStore fileStore, final 
String[] allowedClientIPRanges) {
+        this(port, fileStore, allowedClientIPRanges, false);
+    }
+
+    public StandbyServerSync(final int port, final FileStore fileStore, final 
String[] allowedClientIPRanges, final boolean secure) {
+        this.port = port;
+        this.fileStore = fileStore;
+        this.allowedClientIPRanges = allowedClientIPRanges;
+        this.secure = secure;
+        this.observer = new CommunicationObserver("primary");
+
+        final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
+
+        try {
+            jmxServer.registerMBean(new StandardMBean(this, 
StandbyStatusMBean.class), new ObjectName(this.getMBeanName()));
+        } catch (Exception e) {
+            log.error("can't register standby status mbean", e);
+        }
+    }
+
+    @Override
+    public void consumeState(String state) {
+        this.state = state;
+    }
+
+    @Override
+    public FileStore provideStore() {
+        return fileStore;
+    }
+
+    @Override
+    public void start() {
+        if (isRunning()) {
+            return;
+        }
+
+        state = STATUS_STARTING;
+
+        try {
+            server = StandbyServer.builder(port, this)
+                    .secure(secure)
+                    .allowIPRanges(allowedClientIPRanges)
+                    .withStateConsumer(this)
+                    .withObserver(observer)
+                    .build();
+            server.start();
+
+            state = STATUS_RUNNING;
+            running.set(true);
+        } catch (Exception e) {
+            log.error("Server could not be started.", e);
+            state = null;
+            running.set(false);
+        }
+    }
+
+    @Override
+    public void stop() {
+        if (server != null) {
+            server.stop();
+        }
+
+        running.set(false);
+        state = STATUS_STOPPED;
+    }
+
+    @Override
+    public void close() {
+        stop();
+        state = STATUS_CLOSING;
+
+        observer.unregister();
+        final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
+        try {
+            jmxServer.unregisterMBean(new ObjectName(this.getMBeanName()));
+        } catch (InstanceNotFoundException e) {
+            // ignore
+        } catch (Exception e) {
+            log.error("can't unregister standby status mbean", e);
+        }
+
+        state = STATUS_CLOSED;
+    }
+
+    @Override
+    public String getMode() {
+        return "primary";
+    }
+
+    @Override
+    public String getStatus() {
+        return state == null ? STATUS_INITIALIZING : state;
+    }
+
+    @Override
+    public boolean isRunning() {
+        return running.get();
+    }
+
+    public String getMBeanName() {
+        return StandbyStatusMBean.JMX_NAME + ",id=" + this.port;
+    }
+
+}

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

Added: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StoreProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StoreProvider.java?rev=1762301&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StoreProvider.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/server/StoreProvider.java
 Mon Sep 26 09:48:06 2016
@@ -0,0 +1,27 @@
+/*
+ * 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.standby.server;
+
+import org.apache.jackrabbit.oak.segment.file.FileStore;
+
+interface StoreProvider {
+
+    FileStore provideStore();
+}

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

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=1762301&r1=1762300&r2=1762301&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
 Mon Sep 26 09:48:06 2016
@@ -38,8 +38,8 @@ import org.apache.jackrabbit.oak.commons
 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.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -94,9 +94,9 @@ public class StandbyStoreService {
 
     private FileStore fileStore;
 
-    private StandbyServer primary = null;
+    private StandbyServerSync serverSync = null;
 
-    private StandbySync sync = null;
+    private StandbyClientSync clientSync = null;
 
     private ServiceRegistration syncReg = null;
 
@@ -128,12 +128,14 @@ public class StandbyStoreService {
 
     @Deactivate
     public synchronized void deactivate() {
-        if (primary != null) {
-            primary.close();
+        if (serverSync != null) {
+            serverSync.close();
         }
-        if (sync != null) {
-            sync.close();
+
+        if (clientSync != null) {
+            clientSync.close();
         }
+
         if (syncReg != null) {
             syncReg.unregister();
         }
@@ -144,8 +146,8 @@ 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, fileStore, ranges, secure);
-        primary.start();
+        serverSync = new StandbyServerSync(port, fileStore, ranges, secure);
+        serverSync.start();
         log.info("started primary on port {} with allowed ip ranges {}.", 
port, ranges);
     }
 
@@ -158,14 +160,14 @@ 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 StandbySync(host, port, fileStore, secure, readTimeout, 
clean);
+        clientSync = new StandbyClientSync(host, port, fileStore, secure, 
readTimeout, clean);
         Dictionary<Object, Object> dictionary = new Hashtable<Object, 
Object>();
         dictionary.put("scheduler.period", interval);
         dictionary.put("scheduler.concurrent", false);
         // dictionary.put("scheduler.runOn", "SINGLE");
 
         syncReg = context.getBundleContext().registerService(
-                Runnable.class.getName(), sync, dictionary);
+                Runnable.class.getName(), clientSync, dictionary);
         log.info("started standby sync with {}:{} at {} sec.", host,
                 port, interval);
     }

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=1762301&r1=1762300&r2=1762301&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
 Mon Sep 26 09:48:06 2016
@@ -25,8 +25,8 @@ import static org.junit.Assert.assertFal
 
 import org.apache.jackrabbit.oak.segment.NetworkErrorProxy;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
 import org.junit.Before;
@@ -121,13 +121,13 @@ public class BrokenNetworkTest extends T
         p.run();
 
         NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
-        final StandbyServer server = new StandbyServer(port, storeS, ssl);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS, ssl);
+        serverSync.start();
         addTestContent(store, "server");
         storeS.flush();  // this speeds up the test a little bit...
 
-        StandbySync cl = newStandbySync(storeC, proxyPort, ssl);
-        cl.run();
+        StandbyClientSync clientSync = newStandbyClientSync(storeC, proxyPort, 
ssl);
+        clientSync.run();
 
         try {
             if (skipBytes > 0 || flipPosition >= 0) {
@@ -139,12 +139,12 @@ public class BrokenNetworkTest extends T
                     addTestContent(store, "server2");
                     storeS.flush();
                 }
-                cl.run();
+                clientSync.run();
             }
             assertEquals(storeS.getHead(), storeC.getHead());
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
             p.close();
         }
     }

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=1762301&r1=1762300&r2=1762301&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
 Mon Sep 26 09:48:06 2016
@@ -42,8 +42,8 @@ import org.apache.jackrabbit.oak.segment
 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.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -107,18 +107,18 @@ public class DataStoreTestBase extends T
         FileStore secondary = getSecondary();
 
         NodeStore store = SegmentNodeStoreBuilders.builder(primary).build();
-        final StandbyServer server = new StandbyServer(port, primary);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
primary);
+        serverSync.start();
         byte[] data = addTestContent(store, "server", blobSize);
         primary.flush();
 
-        StandbySync cl = newStandbySync(secondary);
+        StandbyClientSync cl = newStandbyClientSync(secondary);
         cl.run();
 
         try {
             assertEquals(primary.getHead(), secondary.getHead());
         } finally {
-            server.close();
+            serverSync.close();
             cl.close();
         }
 
@@ -183,13 +183,13 @@ public class DataStoreTestBase extends T
         p.run();
 
         NodeStore store = SegmentNodeStoreBuilders.builder(primary).build();
-        final StandbyServer server = new StandbyServer(port, primary);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
primary);
+        serverSync.start();
         byte[] data = addTestContent(store, "server", blobSize);
         primary.flush();
 
-        StandbySync cl = newStandbySync(secondary, proxyPort);
-        cl.run();
+        StandbyClientSync clientSync = newStandbyClientSync(secondary, 
proxyPort);
+        clientSync.run();
 
         try {
             if (skipBytes > 0 || flipPosition >= 0) {
@@ -202,12 +202,12 @@ public class DataStoreTestBase extends T
                     data = addTestContent(store, "server", blobSize);
                     primary.flush();
                 }
-                cl.run();
+                clientSync.run();
             }
             assertEquals(primary.getHead(), secondary.getHead());
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
             p.close();
         }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeTest.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverIPRangeTest.java
 Mon Sep 26 09:48:06 2016
@@ -24,8 +24,8 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
 import org.junit.Before;
@@ -141,13 +141,13 @@ public class FailoverIPRangeTest extends
 
     private void createTestWithConfig(String host, String[] ipRanges, boolean 
expectedToWork) throws Exception {
         NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
-        final StandbyServer server = new StandbyServer(port, storeS, ipRanges);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS, ipRanges);
+        serverSync.start();
         addTestContent(store, "server");
         storeS.flush();  // this speeds up the test a little bit...
 
-        StandbySync cl = new StandbySync(host, port, storeC, false, timeout, 
false);
-        cl.run();
+        StandbyClientSync clientSync = new StandbyClientSync(host, port, 
storeC, false, timeout, false);
+        clientSync.run();
 
         try {
             if (expectedToWork) {
@@ -157,8 +157,8 @@ public class FailoverIPRangeTest extends
                 assertFalse("stores are equal but shouldn't!", 
storeS.getHead().equals(storeC.getHead()));
             }
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
 
     }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverMultipleClientsTestIT.java
 Mon Sep 26 09:48:06 2016
@@ -23,8 +23,8 @@ import static org.junit.Assert.assertFal
 
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.SegmentTestUtils;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
 import org.junit.Before;
@@ -45,13 +45,13 @@ public class FailoverMultipleClientsTest
     @Test
     public void testMultipleClients() throws Exception {
         NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
-        final StandbyServer server = new StandbyServer(port, storeS);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS);
+        serverSync.start();
         SegmentTestUtils.addTestContent(store, "server");
         storeS.flush();  // this speeds up the test a little bit...
 
-        StandbySync cl1 = newStandbySync(storeC);
-        StandbySync cl2 = newStandbySync(storeC2);
+        StandbyClientSync cl1 = newStandbyClientSync(storeC);
+        StandbyClientSync cl2 = newStandbyClientSync(storeC2);
 
         try {
             assertFalse("first client has invalid initial store!", 
storeS.getHead().equals(storeC.getHead()));
@@ -77,7 +77,7 @@ public class FailoverMultipleClientsTest
             cl1.run();
             assertEquals(storeS.getHead(), storeC.getHead());
         } finally {
-            server.close();
+            serverSync.close();
             cl1.close();
             cl2.close();
         }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/FailoverSslTestIT.java
 Mon Sep 26 09:48:06 2016
@@ -24,8 +24,8 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
 import org.junit.Before;
@@ -47,19 +47,19 @@ public class FailoverSslTestIT extends T
     public void testFailoverSecure() throws Exception {
 
         NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
-        final StandbyServer server = new StandbyServer(port, storeS, true);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS, true);
+        serverSync.start();
         addTestContent(store, "server");
         storeS.flush();  // this speeds up the test a little bit...
 
-        StandbySync cl = newStandbySync(storeC, port, true);
-        cl.run();
+        StandbyClientSync clientSync = newStandbyClientSync(storeC, port, 
true);
+        clientSync.run();
 
         try {
             assertEquals(storeS.getHead(), storeC.getHead());
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
     }
 
@@ -67,19 +67,19 @@ public class FailoverSslTestIT extends T
     public void testFailoverSecureServerPlainClient() throws Exception {
 
         NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
-        final StandbyServer server = new StandbyServer(port, storeS, true);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS, true);
+        serverSync.start();
         addTestContent(store, "server");
         storeS.flush();  // this speeds up the test a little bit...
 
-        StandbySync cl = newStandbySync(storeC);
-        cl.run();
+        StandbyClientSync clientSync = newStandbyClientSync(storeC);
+        clientSync.run();
 
         try {
             assertFalse("stores are equal but shouldn't!", 
storeS.getHead().equals(storeC.getHead()));
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
     }
 
@@ -87,19 +87,19 @@ public class FailoverSslTestIT extends T
     public void testFailoverPlainServerSecureClient() throws Exception {
 
         NodeStore store = SegmentNodeStoreBuilders.builder(storeS).build();
-        final StandbyServer server = new StandbyServer(port, storeS);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS);
+        serverSync.start();
         addTestContent(store, "server");
         storeS.flush();  // this speeds up the test a little bit...
 
-        StandbySync cl = newStandbySync(storeC, port, true);
-        cl.run();
+        StandbyClientSync clientSync = newStandbyClientSync(storeC, port, 
true);
+        clientSync.run();
 
         try {
             assertFalse("stores are equal but shouldn't!", 
storeS.getHead().equals(storeC.getHead()));
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
     }
 }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/MBeanTest.java
 Mon Sep 26 09:48:06 2016
@@ -30,9 +30,9 @@ import java.util.Set;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
 import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -51,8 +51,8 @@ public class MBeanTest extends TestBase
 
     @Test
     public void testServerEmptyConfig() throws Exception {
-        final StandbyServer server = new StandbyServer(TestBase.port, 
this.storeS);
-        server.start();
+        final StandbyServerSync serverSync = new 
StandbyServerSync(TestBase.port, this.storeS);
+        serverSync.start();
 
         final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
         ObjectName status = new ObjectName(StandbyStatusMBean.JMX_NAME + 
",id=*");
@@ -60,7 +60,7 @@ public class MBeanTest extends TestBase
             Set<ObjectName> instances = jmxServer.queryNames(status, null);
             assertEquals(1, instances.size());
             status = instances.toArray(new ObjectName[0])[0];
-            assertEquals(new ObjectName(server.getMBeanName()), status);
+            assertEquals(new ObjectName(serverSync.getMBeanName()), status);
             assertTrue(jmxServer.isRegistered(status));
 
             assertEquals("primary", jmxServer.getAttribute(status, "Mode"));
@@ -78,7 +78,7 @@ public class MBeanTest extends TestBase
             assertEquals(true, jmxServer.getAttribute(status, "Running"));
             assertEquals(StandbyStatusMBean.STATUS_RUNNING, 
jmxServer.getAttribute(status, "Status"));
         } finally {
-            server.close();
+            serverSync.close();
         }
 
         assertTrue(!jmxServer.isRegistered(status));
@@ -86,9 +86,9 @@ public class MBeanTest extends TestBase
 
     @Test
     public void testClientEmptyConfigNoServer() throws Exception {
-        final StandbySync client = newStandbySync(storeC);
-        client.start();
-        client.run();
+        final StandbyClientSync clientSync = newStandbyClientSync(storeC);
+        clientSync.start();
+        clientSync.run();
 
         final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
         ObjectName status = new ObjectName(StandbyStatusMBean.JMX_NAME + 
",id=*");
@@ -96,7 +96,7 @@ public class MBeanTest extends TestBase
             Set<ObjectName> instances = jmxServer.queryNames(status, null);
             assertEquals(1, instances.size());
             status = instances.toArray(new ObjectName[0])[0];
-            assertEquals(new ObjectName(client.getMBeanName()), status);
+            assertEquals(new ObjectName(clientSync.getMBeanName()), status);
             assertTrue(jmxServer.isRegistered(status));
 
             String m = jmxServer.getAttribute(status, "Mode").toString();
@@ -115,7 +115,7 @@ public class MBeanTest extends TestBase
             assertEquals(true, jmxServer.getAttribute(status, "Running"));
             assertEquals(StandbyStatusMBean.STATUS_RUNNING, 
jmxServer.getAttribute(status, "Status"));
         } finally {
-            client.close();
+            clientSync.close();
         }
 
         assertTrue(!jmxServer.isRegistered(status));
@@ -123,13 +123,13 @@ public class MBeanTest extends TestBase
 
     @Test
     public void testClientNoServer() throws Exception {
-        System.setProperty(StandbySync.CLIENT_ID_PROPERTY_NAME, "Foo");
-        final StandbySync client = newStandbySync(storeC);
-        client.start();
-        client.run();
+        System.setProperty(StandbyClientSync.CLIENT_ID_PROPERTY_NAME, "Foo");
+        final StandbyClientSync clientSync = newStandbyClientSync(storeC);
+        clientSync.start();
+        clientSync.run();
 
         final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
-        ObjectName status = new ObjectName(client.getMBeanName());
+        ObjectName status = new ObjectName(clientSync.getMBeanName());
         try {
             assertTrue(jmxServer.isRegistered(status));
             assertEquals("client: Foo", jmxServer.getAttribute(status, 
"Mode"));
@@ -140,7 +140,7 @@ public class MBeanTest extends TestBase
             assertEquals("1", jmxServer.invoke(status, "calcFailedRequests", 
null, null).toString());
             assertEquals("-1", jmxServer.invoke(status, 
"calcSecondsSinceLastSuccess", null, null).toString());
         } finally {
-            client.close();
+            clientSync.close();
         }
 
         assertTrue(!jmxServer.isRegistered(status));
@@ -148,18 +148,18 @@ public class MBeanTest extends TestBase
 
     @Test
     public void testClientAndServerEmptyConfig() throws Exception {
-        final StandbyServer server = new StandbyServer(port, this.storeS);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
this.storeS);
+        serverSync.start();
 
-        System.setProperty(StandbySync.CLIENT_ID_PROPERTY_NAME, "Bar");
-        final StandbySync client = newStandbySync(storeC);
-        client.start();
-        client.run();
+        System.setProperty(StandbyClientSync.CLIENT_ID_PROPERTY_NAME, "Bar");
+        final StandbyClientSync clientSync = newStandbyClientSync(storeC);
+        clientSync.start();
+        clientSync.run();
 
         final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
         ObjectName status = new ObjectName(StandbyStatusMBean.JMX_NAME + 
",id=*");
-        ObjectName clientStatus = new ObjectName(client.getMBeanName());
-        ObjectName serverStatus = new ObjectName(server.getMBeanName());
+        ObjectName clientStatus = new ObjectName(clientSync.getMBeanName());
+        ObjectName serverStatus = new ObjectName(serverSync.getMBeanName());
         try {
             Set<ObjectName> instances = jmxServer.queryNames(status, null);
             assertEquals(3, instances.size());
@@ -224,8 +224,8 @@ public class MBeanTest extends TestBase
             assertEquals(StandbyStatusMBean.STATUS_RUNNING, 
jmxServer.getAttribute(clientStatus, "Status"));
 
         } finally {
-            client.close();
-            server.close();
+            clientSync.close();
+            serverSync.close();
         }
 
         assertTrue(!jmxServer.isRegistered(clientStatus));

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/RecoverTestIT.java
 Mon Sep 26 09:48:06 2016
@@ -24,8 +24,8 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertFalse;
 
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.After;
 import org.junit.Before;
@@ -49,19 +49,19 @@ public class RecoverTestIT extends TestB
         NodeStore store = SegmentNodeStoreBuilders.builder(storeC).build();
         addTestContent(store, "client");
 
-        final StandbyServer server = new StandbyServer(port, storeS);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS);
+        serverSync.start();
         store = SegmentNodeStoreBuilders.builder(storeS).build();
         addTestContent(store, "server");
         storeS.flush();
 
-        StandbySync cl = newStandbySync(storeC);
+        StandbyClientSync cl = newStandbyClientSync(storeC);
         try {
             assertFalse("stores are not expected to be equal", 
storeS.getHead().equals(storeC.getHead()));
             cl.run();
             assertEquals(storeS.getHead(), storeC.getHead());
         } finally {
-            server.close();
+            serverSync.close();
             cl.close();
         }
 

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTest.java
 Mon Sep 26 09:48:06 2016
@@ -35,8 +35,8 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -65,19 +65,19 @@ public class StandbyTest extends TestBas
         FileStore secondary = getSecondary();
 
         NodeStore store = SegmentNodeStoreBuilders.builder(primary).build();
-        final StandbyServer server = new StandbyServer(port, primary);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
primary);
+        serverSync.start();
         byte[] data = addTestContent(store, "server", blobSize, 150);
         primary.flush();
 
-        StandbySync cl = newStandbySync(secondary);
-        cl.run();
+        StandbyClientSync clientSync = newStandbyClientSync(secondary);
+        clientSync.run();
 
         try {
             assertEquals(primary.getHead(), secondary.getHead());
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
 
         assertTrue(primary.getStats().getApproximateSize() > blobSize);

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestIT.java
 Mon Sep 26 09:48:06 2016
@@ -35,8 +35,8 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -91,28 +91,28 @@ public class StandbyTestIT extends TestB
         FileStore secondary = getSecondary();
 
         NodeStore store = SegmentNodeStoreBuilders.builder(primary).build();
-        final StandbyServer server = new StandbyServer(port, primary);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
primary);
+        serverSync.start();
         byte[] data = addTestContent(store, "server", blobSize, dataNodes);
         primary.flush();
 
-        StandbySync cl = newStandbySync(secondary);
+        StandbyClientSync clientSync = newStandbyClientSync(secondary);
 
         try {
 
             for (int i = 0; i < 5; i++) {
                 String cp = store.checkpoint(Long.MAX_VALUE);
                 primary.flush();
-                cl.run();
+                clientSync.run();
                 assertEquals(primary.getHead(), secondary.getHead());
                 assertTrue(store.release(cp));
-                cl.cleanup();
+                clientSync.cleanup();
                 assertTrue(secondary.getStats().getApproximateSize() > 
blobSize);
             }
 
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
 
         assertTrue(primary.getStats().getApproximateSize() > blobSize);

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/TestBase.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/TestBase.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/TestBase.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/TestBase.java
 Mon Sep 26 09:48:06 2016
@@ -30,7 +30,7 @@ import org.apache.commons.lang3.SystemUt
 import org.apache.jackrabbit.oak.commons.CIHelper;
 import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
 import org.apache.jackrabbit.oak.stats.DefaultStatisticsProvider;
 import org.junit.BeforeClass;
 import org.junit.Rule;
@@ -149,16 +149,16 @@ public class TestBase {
         return timeout;
     }
 
-    public StandbySync newStandbySync(FileStore store) throws Exception {
-        return newStandbySync(store, port, false);
+    public StandbyClientSync newStandbyClientSync(FileStore store) throws 
Exception {
+        return newStandbyClientSync(store, port, false);
     }
 
-    public StandbySync newStandbySync(FileStore store, int port) throws 
Exception {
-        return newStandbySync(store, port, false);
+    public StandbyClientSync newStandbyClientSync(FileStore store, int port) 
throws Exception {
+        return newStandbyClientSync(store, port, false);
     }
 
-    public StandbySync newStandbySync(FileStore store, int port, boolean 
secure) throws Exception {
-        return new StandbySync(LOCALHOST, port, store, secure, timeout, false);
+    public StandbyClientSync newStandbyClientSync(FileStore store, int port, 
boolean secure) throws Exception {
+        return new StandbyClientSync(LOCALHOST, port, store, secure, timeout, 
false);
     }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BenchmarkBase.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BenchmarkBase.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BenchmarkBase.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BenchmarkBase.java
 Mon Sep 26 09:48:06 2016
@@ -29,7 +29,7 @@ import java.util.concurrent.ScheduledExe
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
 import org.apache.jackrabbit.oak.segment.file.FileStore;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
 import org.apache.jackrabbit.oak.stats.DefaultStatisticsProvider;
 
 public class BenchmarkBase {
@@ -97,16 +97,16 @@ public class BenchmarkBase {
         return newFileStore(directory, executor);
     }
 
-    public StandbySync newStandbyClient(FileStore store) throws Exception {
-        return newStandbyClient(store, port, false);
+    public StandbyClientSync newStandbyClientSync(FileStore store) throws 
Exception {
+        return newStandbyClientSync(store, port, false);
     }
 
-    public StandbySync newStandbyClient(FileStore store, int port) throws 
Exception {
-        return newStandbyClient(store, port, false);
+    public StandbyClientSync newStandbyClientSync(FileStore store, int port) 
throws Exception {
+        return newStandbyClientSync(store, port, false);
     }
 
-    public StandbySync newStandbyClient(FileStore store, int port, boolean 
secure) throws Exception {
-        return new StandbySync(LOCALHOST, port, store, secure, timeout, false);
+    public StandbyClientSync newStandbyClientSync(FileStore store, int port, 
boolean secure) throws Exception {
+        return new StandbyClientSync(LOCALHOST, port, store, secure, timeout, 
false);
     }
 
     private static File createTmpTargetDir(String name) throws IOException {

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BulkTransferBenchmark.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BulkTransferBenchmark.java?rev=1762301&r1=1762300&r2=1762301&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BulkTransferBenchmark.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/benchmark/BulkTransferBenchmark.java
 Mon Sep 26 09:48:06 2016
@@ -27,9 +27,9 @@ import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
-import org.apache.jackrabbit.oak.segment.standby.client.StandbySync;
+import org.apache.jackrabbit.oak.segment.standby.client.StandbyClientSync;
 import org.apache.jackrabbit.oak.segment.standby.jmx.StandbyStatusMBean;
-import org.apache.jackrabbit.oak.segment.standby.server.StandbyServer;
+import org.apache.jackrabbit.oak.segment.standby.server.StandbyServerSync;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -91,19 +91,19 @@ public class BulkTransferBenchmark exten
         store.merge(rootbuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         storeS.flush();
 
-        final StandbyServer server = new StandbyServer(port, storeS, useSSL);
-        server.start();
+        final StandbyServerSync serverSync = new StandbyServerSync(port, 
storeS, useSSL);
+        serverSync.start();
 
-        System.setProperty(StandbySync.CLIENT_ID_PROPERTY_NAME, "Bar");
-        StandbySync cl = newStandbyClient(storeC, port, useSSL);
+        System.setProperty(StandbyClientSync.CLIENT_ID_PROPERTY_NAME, "Bar");
+        StandbyClientSync clientSync = newStandbyClientSync(storeC, port, 
useSSL);
 
         final MBeanServer jmxServer = 
ManagementFactory.getPlatformMBeanServer();
         ObjectName status = new ObjectName(StandbyStatusMBean.JMX_NAME + 
",id=*");
-        ObjectName clientStatus = new ObjectName(cl.getMBeanName());
-        ObjectName serverStatus = new ObjectName(server.getMBeanName());
+        ObjectName clientStatus = new ObjectName(clientSync.getMBeanName());
+        ObjectName serverStatus = new ObjectName(serverSync.getMBeanName());
 
         long start = System.currentTimeMillis();
-        cl.run();
+        clientSync.run();
 
         try {
             Set<ObjectName> instances = jmxServer.queryNames(status, null);
@@ -118,8 +118,8 @@ public class BulkTransferBenchmark exten
 
             System.out.println("did transfer " + segments + " segments with " 
+ bytes + " bytes in " + (System.currentTimeMillis() - start) / 1000 + " 
seconds.");
         } finally {
-            server.close();
-            cl.close();
+            serverSync.close();
+            clientSync.close();
         }
     }
     


Reply via email to