Refine Cluster Service API

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ce2b7830
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ce2b7830
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ce2b7830

Branch: refs/heads/master
Commit: ce2b7830bb4f29bb523c4e88e2cc443d73cd83f7
Parents: 06aa973
Author: lburgazzoli <lburgazz...@gmail.com>
Authored: Sat Sep 23 14:09:39 2017 +0200
Committer: lburgazzoli <lburgazz...@gmail.com>
Committed: Mon Sep 25 14:21:00 2017 +0200

----------------------------------------------------------------------
 .../mbean/ManagedClusterServiceMBean.java        |  3 +++
 .../org/apache/camel/ha/CamelClusterMember.java  |  2 +-
 .../org/apache/camel/ha/CamelClusterService.java |  8 ++++++++
 .../impl/ha/AbstractCamelClusterService.java     | 19 +++++++++++++++++++
 .../camel/impl/ha/ClusteredRoutePolicy.java      |  4 ++--
 .../management/mbean/ManagedClusterService.java  |  7 +++++++
 .../component/atomix/ha/AtomixClusterView.java   |  4 ++--
 .../ha/AtomixClientClusteredRoutePolicyMain.java |  4 +++-
 .../component/consul/ha/ConsulClusterView.java   |  4 ++--
 .../ha/ConsulClusteredRoutePolicyMain.java       |  5 ++++-
 .../kubernetes/ha/KubernetesClusterView.java     |  2 +-
 .../zookeeper/ha/ZooKeeperClusterView.java       |  4 ++--
 .../ha/ZooKeeperClusteredRoutePolicyMain.java    |  4 +++-
 13 files changed, 57 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedClusterServiceMBean.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedClusterServiceMBean.java
 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedClusterServiceMBean.java
index 81ec33a..82346b6 100644
--- 
a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedClusterServiceMBean.java
+++ 
b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedClusterServiceMBean.java
@@ -42,4 +42,7 @@ public interface ManagedClusterServiceMBean {
 
     @ManagedOperation(description = "Stop the View")
     void stopView(String namespace) throws Exception;
+
+    @ManagedOperation(description = "If the local view is leader")
+    boolean isLeader(String namespace);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/camel-core/src/main/java/org/apache/camel/ha/CamelClusterMember.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/ha/CamelClusterMember.java 
b/camel-core/src/main/java/org/apache/camel/ha/CamelClusterMember.java
index cfe0a79..285c7aa 100644
--- a/camel-core/src/main/java/org/apache/camel/ha/CamelClusterMember.java
+++ b/camel-core/src/main/java/org/apache/camel/ha/CamelClusterMember.java
@@ -22,5 +22,5 @@ public interface CamelClusterMember extends HasId {
     /**
      * @return true if this member is the master.
      */
-    boolean isMaster();
+    boolean isLeader();
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/camel-core/src/main/java/org/apache/camel/ha/CamelClusterService.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/ha/CamelClusterService.java 
b/camel-core/src/main/java/org/apache/camel/ha/CamelClusterService.java
index 6e99afb..c8aff74 100644
--- a/camel-core/src/main/java/org/apache/camel/ha/CamelClusterService.java
+++ b/camel-core/src/main/java/org/apache/camel/ha/CamelClusterService.java
@@ -60,6 +60,14 @@ public interface CamelClusterService extends Service, 
CamelContextAware, IdAware
     void stopView(String namespace) throws Exception;
 
     /**
+     * Check if the service is the leader on the given namespace.
+     *
+     * @param namespace the namespace.
+     * @return
+     */
+    boolean isLeader(String namespace);
+
+    /**
      * Access the underlying concrete CamelClusterService implementation to
      * provide access to further features.
      *

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/camel-core/src/main/java/org/apache/camel/impl/ha/AbstractCamelClusterService.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/ha/AbstractCamelClusterService.java
 
b/camel-core/src/main/java/org/apache/camel/impl/ha/AbstractCamelClusterService.java
index 35175db..1e33442 100644
--- 
a/camel-core/src/main/java/org/apache/camel/impl/ha/AbstractCamelClusterService.java
+++ 
b/camel-core/src/main/java/org/apache/camel/impl/ha/AbstractCamelClusterService.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import java.util.concurrent.locks.StampedLock;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ha.CamelClusterMember;
 import org.apache.camel.ha.CamelClusterService;
 import org.apache.camel.ha.CamelClusterView;
 import org.apache.camel.support.ServiceSupport;
@@ -189,6 +190,24 @@ public abstract class AbstractCamelClusterService<T 
extends CamelClusterView> ex
         );
     }
 
+    @Override
+    public boolean isLeader(String namespace) {
+        return LockHelper.supplyWithReadLock(
+            lock,
+            () -> {
+                ViewHolder<T> holder = views.get(namespace);
+                if (holder != null) {
+                    CamelClusterMember member = holder.get().getLocalMember();
+                    if (member != null) {
+                        return member.isLeader();
+                    }
+                }
+
+                return false;
+            }
+        );
+    }
+
     // **********************************
     // Implementation
     // **********************************

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/camel-core/src/main/java/org/apache/camel/impl/ha/ClusteredRoutePolicy.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/ha/ClusteredRoutePolicy.java 
b/camel-core/src/main/java/org/apache/camel/impl/ha/ClusteredRoutePolicy.java
index 30a2641..26cee62 100644
--- 
a/camel-core/src/main/java/org/apache/camel/impl/ha/ClusteredRoutePolicy.java
+++ 
b/camel-core/src/main/java/org/apache/camel/impl/ha/ClusteredRoutePolicy.java
@@ -253,7 +253,7 @@ public class ClusteredRoutePolicy extends 
RoutePolicySupport implements CamelCon
         );
 
         clusterView.addEventListener(leadershipEventListener);
-        setLeader(clusterView.getLocalMember().isMaster());
+        setLeader(clusterView.getLocalMember().isLeader());
     }
 
     // ****************************************************
@@ -263,7 +263,7 @@ public class ClusteredRoutePolicy extends 
RoutePolicySupport implements CamelCon
     private class CamelClusterLeadershipListener implements 
CamelClusterEventListener.Leadership {
         @Override
         public void leadershipChanged(CamelClusterView view, 
CamelClusterMember leader) {
-            setLeader(clusterView.getLocalMember().isMaster());
+            setLeader(clusterView.getLocalMember().isLeader());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedClusterService.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedClusterService.java
 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedClusterService.java
index 3261b69..7bb3197 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedClusterService.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedClusterService.java
@@ -104,4 +104,11 @@ public class ManagedClusterService implements 
ManagedClusterServiceMBean {
             service.get().stopView(namespace);
         }
     }
+
+    @Override
+    public boolean isLeader(String namespace) {
+        return CamelClusterServiceHelper.lookupService(context)
+            .map(s -> s.isLeader(namespace))
+            .orElse(false);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/ha/AtomixClusterView.java
----------------------------------------------------------------------
diff --git 
a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/ha/AtomixClusterView.java
 
b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/ha/AtomixClusterView.java
index e8c1dcb..be24d64 100644
--- 
a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/ha/AtomixClusterView.java
+++ 
b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/ha/AtomixClusterView.java
@@ -145,7 +145,7 @@ final class AtomixClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             if (member == null) {
                 return false;
             }
@@ -212,7 +212,7 @@ final class AtomixClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             if (group == null) {
                 return false;
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/ha/AtomixClientClusteredRoutePolicyMain.java
----------------------------------------------------------------------
diff --git 
a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/ha/AtomixClientClusteredRoutePolicyMain.java
 
b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/ha/AtomixClientClusteredRoutePolicyMain.java
index ca9944c..ada4ab9 100644
--- 
a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/ha/AtomixClientClusteredRoutePolicyMain.java
+++ 
b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/ha/AtomixClientClusteredRoutePolicyMain.java
@@ -27,7 +27,9 @@ import org.apache.camel.impl.ha.ClusteredRoutePolicyFactory;
 import org.apache.camel.main.Main;
 import org.apache.camel.main.MainListenerSupport;
 
-public class AtomixClientClusteredRoutePolicyMain {
+public final class AtomixClientClusteredRoutePolicyMain {
+    private AtomixClientClusteredRoutePolicyMain() {
+    }
 
     public static void main(String[] args) throws Exception {
         final String id = UUID.randomUUID().toString();

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-consul/src/main/java/org/apache/camel/component/consul/ha/ConsulClusterView.java
----------------------------------------------------------------------
diff --git 
a/components/camel-consul/src/main/java/org/apache/camel/component/consul/ha/ConsulClusterView.java
 
b/components/camel-consul/src/main/java/org/apache/camel/component/consul/ha/ConsulClusterView.java
index dfa85d2..ae84168 100644
--- 
a/components/camel-consul/src/main/java/org/apache/camel/component/consul/ha/ConsulClusterView.java
+++ 
b/components/camel-consul/src/main/java/org/apache/camel/component/consul/ha/ConsulClusterView.java
@@ -160,7 +160,7 @@ final class ConsulClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             return master.get();
         }
 
@@ -198,7 +198,7 @@ final class ConsulClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             if (keyValueClient == null) {
                 return false;
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-consul/src/test/java/org/apache/camel/component/consul/ha/ConsulClusteredRoutePolicyMain.java
----------------------------------------------------------------------
diff --git 
a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ha/ConsulClusteredRoutePolicyMain.java
 
b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ha/ConsulClusteredRoutePolicyMain.java
index b629899..6f0cb00 100644
--- 
a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ha/ConsulClusteredRoutePolicyMain.java
+++ 
b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ha/ConsulClusteredRoutePolicyMain.java
@@ -25,7 +25,10 @@ import org.apache.camel.impl.ha.ClusteredRoutePolicyFactory;
 import org.apache.camel.main.Main;
 import org.apache.camel.main.MainListenerSupport;
 
-public class ConsulClusteredRoutePolicyMain {
+public final class ConsulClusteredRoutePolicyMain {
+    private ConsulClusteredRoutePolicyMain() {        
+    }
+
     public static void main(String[] args) throws Exception {
         final String id = UUID.randomUUID().toString();
 

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/ha/KubernetesClusterView.java
----------------------------------------------------------------------
diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/ha/KubernetesClusterView.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/ha/KubernetesClusterView.java
index a67b662..148f47d 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/ha/KubernetesClusterView.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/ha/KubernetesClusterView.java
@@ -148,7 +148,7 @@ public class KubernetesClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             return currentLeader.isPresent() && 
currentLeader.get().getId().equals(podName);
         }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusterView.java
----------------------------------------------------------------------
diff --git 
a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusterView.java
 
b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusterView.java
index fd3ab73..6310ded 100644
--- 
a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusterView.java
+++ 
b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusterView.java
@@ -137,7 +137,7 @@ final class ZooKeeperClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             return master.get();
         }
 
@@ -160,7 +160,7 @@ final class ZooKeeperClusterView extends 
AbstractCamelClusterView {
         }
 
         @Override
-        public boolean isMaster() {
+        public boolean isLeader() {
             try {
                 return leaderSelector.getLeader().equals(this.participant);
             } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/camel/blob/ce2b7830/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusteredRoutePolicyMain.java
----------------------------------------------------------------------
diff --git 
a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusteredRoutePolicyMain.java
 
b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusteredRoutePolicyMain.java
index 6be67f2..7b263c5 100644
--- 
a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusteredRoutePolicyMain.java
+++ 
b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ha/ZooKeeperClusteredRoutePolicyMain.java
@@ -26,9 +26,11 @@ import org.apache.camel.main.Main;
 import org.apache.camel.main.MainListenerSupport;
 
 public final class ZooKeeperClusteredRoutePolicyMain {
+    private ZooKeeperClusteredRoutePolicyMain() {        
+    }
 
     public static void main(String[] args) throws Exception {
-        final  String id = UUID.randomUUID().toString();
+        final String id = UUID.randomUUID().toString();
 
         Main main = new Main();
         main.addMainListener(new MainListenerSupport() {

Reply via email to