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() {