Repository: ignite Updated Branches: refs/heads/ignite-zk [created] d151e402a
zk Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d151e402 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d151e402 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d151e402 Branch: refs/heads/ignite-zk Commit: d151e402a330fb6477b91dc5a01bc829bfbbd950 Parents: f52f8f9 Author: sboikov <[email protected]> Authored: Wed Nov 8 14:40:07 2017 +0300 Committer: sboikov <[email protected]> Committed: Wed Nov 8 14:40:07 2017 +0300 ---------------------------------------------------------------------- .../src/main/resources/log4j.properties | 58 ++++++++ .../tcp/ipfinder/zk/ZKClusterNode.java | 144 +++++++++++++++++++ 2 files changed, 202 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/d151e402/modules/zookeeper/src/main/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/modules/zookeeper/src/main/resources/log4j.properties b/modules/zookeeper/src/main/resources/log4j.properties new file mode 100644 index 0000000..9825970 --- /dev/null +++ b/modules/zookeeper/src/main/resources/log4j.properties @@ -0,0 +1,58 @@ +# Define some default values that can be overridden by system properties +zookeeper.root.logger=INFO, CONSOLE +zookeeper.console.threshold=INFO +zookeeper.log.dir=. +zookeeper.log.file=zookeeper.log +zookeeper.log.threshold=DEBUG +zookeeper.tracelog.dir=. +zookeeper.tracelog.file=zookeeper_trace.log + +# +# ZooKeeper Logging Configuration +# + +# Format is "<default threshold> (, <appender>)+ + +# DEFAULT: console appender only +log4j.rootLogger=${zookeeper.root.logger} + +# Example with rolling log file +#log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE + +# Example with rolling log file and tracing +#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE + +# +# Log INFO level and above messages to the console +# +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold} +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n + +# +# Add ROLLINGFILE to rootLogger to get log file output +# Log DEBUG level and above messages to a log file +log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender +log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold} +log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file} + +# Max log file size of 10MB +log4j.appender.ROLLINGFILE.MaxFileSize=10MB +# uncomment the next line to limit number of backup files +#log4j.appender.ROLLINGFILE.MaxBackupIndex=10 + +log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout +log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n + + +# +# Add TRACEFILE to rootLogger to get log file output +# Log DEBUG level and above messages to a log file +log4j.appender.TRACEFILE=org.apache.log4j.FileAppender +log4j.appender.TRACEFILE.Threshold=TRACE +log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file} + +log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout +### Notice we are including log4j's NDC here (%x) +log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n http://git-wip-us.apache.org/repos/asf/ignite/blob/d151e402/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/ZKClusterNode.java ---------------------------------------------------------------------- diff --git a/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/ZKClusterNode.java b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/ZKClusterNode.java new file mode 100644 index 0000000..459df23 --- /dev/null +++ b/modules/zookeeper/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/zk/ZKClusterNode.java @@ -0,0 +1,144 @@ +/* + * 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.ignite.spi.discovery.tcp.ipfinder.zk; + +import java.util.List; +import java.util.concurrent.CountDownLatch; +import org.apache.zookeeper.AsyncCallback; +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.WatchedEvent; +import org.apache.zookeeper.Watcher; +import org.apache.zookeeper.ZooDefs; +import org.apache.zookeeper.ZooKeeper; +import org.apache.zookeeper.data.Stat; + +/** + * + */ +public class ZKClusterNode implements Watcher { + /** */ + static final String CLUSTER_PATH = "/cluster"; + + /** */ + private ZooKeeper zk; + + /** */ + volatile String nodePath; + + /** */ + List<String> curNodes; + + /** */ + private NodesUpdateCallback nodesUpdateCallback; + + /** */ + final String nodeName; + + /** */ + final CountDownLatch connectLatch = new CountDownLatch(1); + + public ZKClusterNode(String nodeName) { + this.nodeName = nodeName; + + nodesUpdateCallback = new NodesUpdateCallback(); + } + + private void log(String msg) { + System.out.println(nodeName + ": " + msg); + } + + @Override public void process(WatchedEvent event) { + log("Process event: " + event.getType() + " " + event.getPath()); + + if (event.getType() == Event.EventType.NodeChildrenChanged && event.getPath().equals(CLUSTER_PATH)) { + zk.getChildren(CLUSTER_PATH, true, nodesUpdateCallback, null); + } + } + + /** + * + */ + class NodesUpdateCallback implements AsyncCallback.Children2Callback { + @Override public void processResult(int rc, String path, Object ctx, List<String> children, Stat stat) { + log("Nodes changed: " + children); + + curNodes = children; + } + } + + public void join(String connectString) throws Exception { + log("Start connect " + connectString); + + zk = new ZooKeeper(connectString, 1000, this); + + if (zk.exists(CLUSTER_PATH, false) == null) { + try { + zk.create(CLUSTER_PATH, new byte[]{}, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); + } + catch (KeeperException.NodeExistsException e) { + // Ignore. + } + } + + zk.getChildren(CLUSTER_PATH, true, nodesUpdateCallback, null); + + + zk.create(CLUSTER_PATH + "/node-", new byte[]{}, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL, + new AsyncCallback.StringCallback() { + @Override public void processResult(int rc, String path, Object ctx, String name) { + nodePath = name; + + log("Node created: " + name); + +// if (name.endsWith("0000000001")) { +// try { +// Thread.sleep(10_000); +// } +// catch (Exception e) { +// e.printStackTrace(); +// } +// } + + connectLatch.countDown(); + } + }, + null); + + connectLatch.await(); + } + + /** + * + */ + public void stop() { + try { + if (zk != null) + zk.close(); + } + catch (Exception e) { + log("Closed failed: " + e); + } + } + + public static void main(String[] args) throws Exception { + new ZKClusterNode(args[0]).join(args[1]); + + Thread.sleep(Long.MAX_VALUE); + } +}
