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 2017/12/08 09:07:10 UTC

svn commit: r1817476 - /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java

Author: frm
Date: Fri Dec  8 09:07:10 2017
New Revision: 1817476

URL: http://svn.apache.org/viewvc?rev=1817476&view=rev
Log:
OAK-7027 - Simplify synchronization of StandbyClientSync

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.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?rev=1817476&r1=1817475&r2=1817476&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/standby/client/StandbyClientSync.java Fri Dec  8 09:07:10 2017
@@ -63,7 +63,15 @@ public final class StandbyClientSync imp
 
     private final boolean secure;
 
-    private boolean active = false;
+    private final FileStore fileStore;
+
+    private final NioEventLoopGroup group;
+
+    private final File spoolFolder;
+
+    private final StandbyClientSyncExecution execution;
+
+    private final AtomicBoolean active = new AtomicBoolean(false);
 
     private int failedRequests;
 
@@ -71,22 +79,12 @@ public final class StandbyClientSync imp
 
     private volatile String state;
 
-    private final Object sync = new Object();
-
-    private final FileStore fileStore;
-
-    private final AtomicBoolean running = new AtomicBoolean(true);
+    private volatile boolean running = true;
 
     private long syncStartTimestamp;
 
     private long syncEndTimestamp;
 
-    private final NioEventLoopGroup group;
-
-    private final File spoolFolder;
-
-    private final StandbyClientSyncExecution execution;
-
     private static String clientId() {
         String s = System.getProperty(CLIENT_ID_PROPERTY_NAME);
 
@@ -111,7 +109,7 @@ public final class StandbyClientSync imp
         this.fileStore = store;
         this.observer = new CommunicationObserver(clientId());
         this.group = new NioEventLoopGroup(0, new NamedThreadFactory("standby"));
-        this.execution = new StandbyClientSyncExecution(fileStore, running::get);
+        this.execution = new StandbyClientSyncExecution(fileStore, () -> running);
         this.spoolFolder = spoolFolder;
         try {
             ManagementFactory.getPlatformMBeanServer().registerMBean(new StandardMBean(this, ClientStandbyStatusMBean.class), new ObjectName(this.getMBeanName()));
@@ -146,21 +144,18 @@ public final class StandbyClientSync imp
         try {
             Thread.currentThread().setName("standby-run-" + standbyRunCounter.incrementAndGet());
 
-            if (!isRunning()) {
-                // manually stopped
+            if (!running) {
                 return;
             }
 
             state = STATUS_STARTING;
 
-            synchronized (sync) {
-                if (active) {
-                    return;
-                }
-                state = STATUS_RUNNING;
-                active = true;
+            if (!active.compareAndSet(false, true)) {
+                return;
             }
 
+            state = STATUS_RUNNING;
+
             try {
                 long startTimestamp = System.currentTimeMillis();
 
@@ -187,9 +182,7 @@ public final class StandbyClientSync imp
                 this.failedRequests++;
                 log.error("Failed synchronizing state.", e);
             } finally {
-                synchronized (this.sync) {
-                    this.active = false;
-                }
+                active.set(false);
             }
         } finally {
             Thread.currentThread().setName(name);
@@ -213,18 +206,18 @@ public final class StandbyClientSync imp
 
     @Override
     public boolean isRunning() {
-        return running.get();
+        return running;
     }
 
     @Override
     public void start() {
-        running.set(true);
+        running = true;
         state = STATUS_RUNNING;
     }
 
     @Override
     public void stop() {
-        running.set(false);
+        running = false;
         state = STATUS_STOPPED;
     }