Repository: camel Updated Branches: refs/heads/master 16d6fc385 -> 03aab77c8
CAMEL-10986: camel-zookeeper-master - Make it install in karaf Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/03aab77c Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/03aab77c Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/03aab77c Branch: refs/heads/master Commit: 03aab77c8ec61e729e9783b9af481154f991a884 Parents: 16d6fc3 Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Mar 10 23:07:34 2017 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Mar 10 23:07:34 2017 +0100 ---------------------------------------------------------------------- components/camel-zookeeper-master/pom.xml | 10 +++- .../group/internal/ZooKeeperGroup.java | 63 ++++++-------------- .../features/src/main/resources/features.xml | 12 ++++ .../itest/karaf/CamelZookeeperMasterTest.java | 34 +++++++++++ 4 files changed, 74 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/03aab77c/components/camel-zookeeper-master/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-zookeeper-master/pom.xml b/components/camel-zookeeper-master/pom.xml index 493a266..a1e89a3 100644 --- a/components/camel-zookeeper-master/pom.xml +++ b/components/camel-zookeeper-master/pom.xml @@ -31,7 +31,15 @@ <description>Camel Zookeeper Master Support</description> <properties> - <camel.osgi.export.pkg>org.apache.camel.component.zookeepermaster.*</camel.osgi.export.pkg> + <camel.osgi.import> + !com.google.common.base;, + !org.apache.camel.component.zookeepermaster.group, + * + </camel.osgi.import> + <camel.osgi.export.pkg> + org.apache.camel.component.zookeepermaster, + org.apache.camel.component.zookeepermaster.group + </camel.osgi.export.pkg> <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=zookeeper-master</camel.osgi.export.service> </properties> http://git-wip-us.apache.org/repos/asf/camel/blob/03aab77c/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ZooKeeperGroup.java ---------------------------------------------------------------------- diff --git a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ZooKeeperGroup.java b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ZooKeeperGroup.java index 6e58f50..f297e43 100644 --- a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ZooKeeperGroup.java +++ b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/group/internal/ZooKeeperGroup.java @@ -24,6 +24,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -31,6 +32,7 @@ import java.util.Set; import java.util.TreeMap; import java.util.UUID; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -38,15 +40,10 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import org.apache.camel.component.zookeepermaster.group.Group; import org.apache.camel.component.zookeepermaster.group.GroupListener; import org.apache.camel.component.zookeepermaster.group.NodeState; @@ -85,7 +82,7 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { private final EnsurePath ensurePath; private final BlockingQueue<Operation> operations = new LinkedBlockingQueue<Operation>(); private final ListenerContainer<GroupListener<T>> listeners = new ListenerContainer<GroupListener<T>>(); - private final ConcurrentMap<String, ChildData<T>> currentData = Maps.newConcurrentMap(); + private final ConcurrentMap<String, ChildData<T>> currentData = new ConcurrentHashMap<>(); private final AtomicBoolean started = new AtomicBoolean(); private final AtomicBoolean connected = new AtomicBoolean(); private final SequenceComparator sequenceComparator = new SequenceComparator(); @@ -166,7 +163,7 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { * Start the cache. The cache is not started automatically. You must call this method. */ public void start() { - LOG.info("Starting ZK Group for path \"" + path + "\""); + LOG.info("Starting ZK Group for path: {}", path); if (started.compareAndSet(false, true)) { connected.set(client.getZookeeperClient().isConnected()); @@ -406,7 +403,9 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { * @return list of children and data */ public List<ChildData> getCurrentData() { - return ImmutableList.copyOf(Sets.<ChildData>newTreeSet(currentData.values())); + List<ChildData> answer = new ArrayList<>(); + answer.addAll(currentData.values()); + return answer; } /** @@ -484,17 +483,14 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { } void callListeners(final GroupListener.GroupEvent event) { - listeners.forEach(new Function<GroupListener<T>, Void>() { - @Override - public Void apply(GroupListener<T> listener) { - try { - listener.groupEvent(ZooKeeperGroup.this, event); - } catch (Exception e) { - handleException(e); - } - return null; - } + listeners.forEach(listener -> { + try { + listener.groupEvent(ZooKeeperGroup.this, event); + } catch (Exception e) { + handleException(e); } + return null; + } ); } @@ -517,7 +513,6 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { } } - @VisibleForTesting protected void remove(String fullPath) { ChildData data = currentData.remove(fullPath); if (data != null) { @@ -525,17 +520,6 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { } } - private void internalRebuildNode(String fullPath) throws Exception { - try { - Stat stat = new Stat(); - byte[] bytes = client.getData().storingStatIn(stat).forPath(fullPath); - currentData.put(fullPath, new ChildData<T>(fullPath, stat, bytes, decode(bytes))); - } catch (KeeperException.NoNodeException ignore) { - // node no longer exists - remove it - currentData.remove(fullPath); - } - } - private void handleStateChange(ConnectionState newState) { switch (newState) { case SUSPENDED: @@ -563,16 +547,9 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { } private void processChildren(List<String> children, RefreshMode mode) throws Exception { - List<String> fullPaths = Lists.newArrayList(Lists.transform( - children, - new Function<String, String>() { - @Override - public String apply(String child) { - return ZKPaths.makePath(path, child); - } - } - )); - Set<String> removedNodes = Sets.newHashSet(currentData.keySet()); + List<String> fullPaths = children.stream().map(c -> ZKPaths.makePath(path, c)).collect(Collectors.toList()); + + Set<String> removedNodes = new HashSet<>(currentData.keySet()); removedNodes.removeAll(fullPaths); for (String fullPath : removedNodes) { @@ -637,7 +614,7 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { if (!operations.contains(operation)) { operations.offer(operation); } -// operations.remove(operation); // avoids herding for refresh operations + // operations.remove(operation); // avoids herding for refresh operations } public static <T> Map<String, T> members(ObjectMapper mapper, CuratorFramework curator, String path, Class<T> clazz) throws Exception { @@ -655,14 +632,12 @@ public class ZooKeeperGroup<T extends NodeState> implements Group<T> { return id; } - @VisibleForTesting void setId(String id) { this.id = id; } /** * Returns an indication that the sequential, ephemeral node may be registered more than once for this group - * @return */ public boolean isUnstable() { return unstable.get(); http://git-wip-us.apache.org/repos/asf/camel/blob/03aab77c/platforms/karaf/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml index a805df4..cb52f64 100644 --- a/platforms/karaf/features/src/main/resources/features.xml +++ b/platforms/karaf/features/src/main/resources/features.xml @@ -2056,5 +2056,17 @@ <bundle dependency='true'>mvn:com.google.guava/guava/${zookeeper-guava-version}</bundle> <bundle>mvn:org.apache.camel/camel-zookeeper/${project.version}</bundle> </feature> + <feature name='camel-zookeeper-master' version='${project.version}' resolver='(obr)' start-level='50'> + <feature version='${project.version}'>camel-core</feature> + <bundle dependency='true'>mvn:org.apache.zookeeper/zookeeper/${zookeeper-version}</bundle> + <bundle dependency='true'>mvn:org.apache.curator/curator-framework/${curator-version}</bundle> + <bundle dependency='true'>mvn:org.apache.curator/curator-client/${curator-version}</bundle> + <bundle dependency='true'>mvn:org.apache.curator/curator-recipes/${curator-version}</bundle> + <bundle dependency='true'>mvn:com.google.guava/guava/${zookeeper-guava-version}</bundle> + <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle> + <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-databind/${jackson2-version}</bundle> + <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson2-version}</bundle> + <bundle>mvn:org.apache.camel/camel-zookeeper-master/${project.version}</bundle> + </feature> </features> http://git-wip-us.apache.org/repos/asf/camel/blob/03aab77c/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelZookeeperMasterTest.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelZookeeperMasterTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelZookeeperMasterTest.java new file mode 100644 index 0000000..58617a6 --- /dev/null +++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelZookeeperMasterTest.java @@ -0,0 +1,34 @@ +/** + * 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.camel.itest.karaf; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.junit.PaxExam; + +@RunWith(PaxExam.class) +public class CamelZookeeperMasterTest extends BaseKarafTest { + + public static final String COMPONENT = extractName(CamelZookeeperMasterTest.class); + + @Test + public void test() throws Exception { + testComponent(COMPONENT); + } + + +}