This is an automated email from the ASF dual-hosted git repository.
andor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new d3dbe78 ZOOKEEPER-1426: add version command to the zookeeper server
d3dbe78 is described below
commit d3dbe787f37eb9e17402e4a3d55a441ca43b2160
Author: szepet <[email protected]>
AuthorDate: Fri May 31 22:16:29 2019 +0200
ZOOKEEPER-1426: add version command to the zookeeper server
Adding a version command to the zkServer.sh.
This is an open/unresolved issue, however, a really nice feature to have.
The implementation is already provided by Eli Reisman on the issue page and got
several +1 back then, but has not been committed. I just rebased the patch.
Author: szepet <[email protected]>
Reviewers: [email protected], [email protected]
Closes #923 from szepet/ZOOKEEPER-1426 and squashes the following commits:
d9108bda1 [szepet] test-scripts.sh improved to work with ant build as well
cd6a0bf7d [szepet] ZOOKEEPER-1426: add version command to the zookeeper
server
---
bin/zkServer-initialize.sh | 25 +++++-------
bin/zkServer.sh | 6 ++-
.../org/apache/zookeeper/version/util/VerGen.java | 46 ++++++++++++++++++++--
.../src/test/resources/findbugsExcludeFile.xml | 7 ++++
.../src/test/resources/test-scripts.sh | 8 ++--
5 files changed, 67 insertions(+), 25 deletions(-)
diff --git a/bin/zkServer-initialize.sh b/bin/zkServer-initialize.sh
index 12bd419..062e265 100755
--- a/bin/zkServer-initialize.sh
+++ b/bin/zkServer-initialize.sh
@@ -47,15 +47,6 @@ usage() {
exit 1
}
-OPTS=$(getopt \
- -n $0 \
- -o 'h' \
- -l 'help' \
- -l 'configfile:' \
- -l 'myid:' \
- -l 'force' \
- -- "$@")
-
if [ $? != 0 ] ; then
usage
exit 1
@@ -117,15 +108,20 @@ initialize() {
touch "$ZOO_DATADIR/initialize"
}
-eval set -- "${OPTS}"
-while true; do
+while [ ! -z "$1" ]; do
case "$1" in
--configfile)
ZOOCFG=$2; shift 2
;;
+ --configfile=?*)
+ ZOOCFG=${1#*=}; shift 1
+ ;;
--myid)
MYID=$2; shift 2
;;
+ --myid=?*)
+ MYID=${1#*=}; shift 1
+ ;;
--force)
FORCE=1; shift 1
;;
@@ -135,14 +131,11 @@ while true; do
--help)
usage
;;
- --)
- initialize
- break
- ;;
*)
echo "Unknown option: $1"
usage
exit 1
;;
esac
-done
+done
+initialize
diff --git a/bin/zkServer.sh b/bin/zkServer.sh
index e4e01e8..b83848a 100755
--- a/bin/zkServer.sh
+++ b/bin/zkServer.sh
@@ -216,6 +216,10 @@ stop)
fi
exit 0
;;
+version)
+ ZOOMAIN=org.apache.zookeeper.version.VersionInfoMain
+ $JAVA -cp "$CLASSPATH" $ZOOMAIN 2> /dev/null
+ ;;
restart)
shift
"$0" stop ${@}
@@ -272,6 +276,6 @@ status)
fi
;;
*)
- echo "Usage: $0 [--config <conf-dir>]
{start|start-foreground|stop|restart|status|print-cmd}" >&2
+ echo "Usage: $0 [--config <conf-dir>]
{start|start-foreground|stop|version|restart|status|print-cmd}" >&2
esac
diff --git
a/zookeeper-server/src/main/java/org/apache/zookeeper/version/util/VerGen.java
b/zookeeper-server/src/main/java/org/apache/zookeeper/version/util/VerGen.java
index 737c401..b84dacd 100644
---
a/zookeeper-server/src/main/java/org/apache/zookeeper/version/util/VerGen.java
+++
b/zookeeper-server/src/main/java/org/apache/zookeeper/version/util/VerGen.java
@@ -28,7 +28,8 @@ import java.util.regex.Pattern;
public class VerGen {
private static final String PACKAGE_NAME = "org.apache.zookeeper.version";
- private static final String TYPE_NAME = "Info";
+ private static final String VERSION_CLASS_NAME = "VersionInfoMain";
+ private static final String VERSION_INTERFACE_NAME = "Info";
static void printUsage() {
System.out.print("Usage:\tjava -cp <classpath> org.apache.zookeeper."
@@ -53,7 +54,7 @@ public class VerGen {
System.exit(ExitCode.UNEXPECTED_ERROR.getValue());
}
- try (FileWriter w = new FileWriter(new File(pkgdir, TYPE_NAME +
".java"))) {
+ try (FileWriter w = new FileWriter(new File(pkgdir,
VERSION_INTERFACE_NAME + ".java"))) {
w.write("// Do not edit!\n// File generated by
org.apache.zookeeper"
+ ".version.util.VerGen.\n");
w.write("/**\n");
@@ -75,7 +76,7 @@ public class VerGen {
w.write("*/\n");
w.write("\n");
w.write("package " + PACKAGE_NAME + ";\n\n");
- w.write("public interface " + TYPE_NAME + " {\n");
+ w.write("public interface " + VERSION_INTERFACE_NAME + " {\n");
w.write(" int MAJOR=" + version.maj + ";\n");
w.write(" int MINOR=" + version.min + ";\n");
w.write(" int MICRO=" + version.micro + ";\n");
@@ -96,6 +97,45 @@ public class VerGen {
+ e.getMessage());
System.exit(ExitCode.UNEXPECTED_ERROR.getValue());
}
+
+ // Generate a main class to display version data
+ // that can be exec'd in zkServer.sh
+ try (FileWriter w = new FileWriter(new File(pkgdir, VERSION_CLASS_NAME
+ ".java"))) {
+ w.write("// Do not edit!\n// File generated by
org.apache.zookeeper"
+ + ".version.util.VerGen.\n");
+ w.write("/**\n");
+ w.write("* Licensed to the Apache Software Foundation (ASF) under
one\n");
+ w.write("* or more contributor license agreements. See the NOTICE
file\n");
+ w.write("* distributed with this work for additional
information\n");
+ w.write("* regarding copyright ownership. The ASF licenses this
file\n");
+ w.write("* to you under the Apache License, Version 2.0 (the\n");
+ w.write("* \"License\"); you may not use this file except in
compliance\n");
+ w.write("* with the License. You may obtain a copy of the License
at\n");
+ w.write("*\n");
+ w.write("* http://www.apache.org/licenses/LICENSE-2.0\n");
+ w.write("*\n");
+ w.write("* Unless required by applicable law or agreed to in
writing, software\n");
+ w.write("* distributed under the License is distributed on an \"AS
IS\" BASIS,\n");
+ w.write("* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied.\n");
+ w.write("* See the License for the specific language governing
permissions and\n");
+ w.write("* limitations under the License.\n");
+ w.write("*/\n");
+ w.write("\n");
+ w.write("package " + PACKAGE_NAME + ";\n\n");
+ w.write("public class " + VERSION_CLASS_NAME + " implements " +
+ PACKAGE_NAME + ".Info {\n");
+ w.write(" public static void main(String[] args) {\n");
+ w.write(" final String VER_STRING = MAJOR + \".\" + MINOR +
\".\" + MICRO +");
+ w.write(" (QUALIFIER == null ? \"\" : \"-\" +
QUALIFIER) + \" \" +");
+ w.write(" BUILD_DATE;" + "\n");
+ w.write(" System.out.println(\"Apache ZooKeeper, version \"
+ VER_STRING);\n");
+ w.write(" }\n");
+ w.write("}\n");
+ } catch (IOException e) {
+ System.out.println("Unable to generate version.VersionInfoMain
file: "
+ + e.getMessage());
+ System.exit(1);
+ }
}
public static class Version {
diff --git a/zookeeper-server/src/test/resources/findbugsExcludeFile.xml
b/zookeeper-server/src/test/resources/findbugsExcludeFile.xml
index fac9030..bc69be1 100644
--- a/zookeeper-server/src/test/resources/findbugsExcludeFile.xml
+++ b/zookeeper-server/src/test/resources/findbugsExcludeFile.xml
@@ -207,4 +207,11 @@
<Field name="ss"/>
<Bug code="IS"/>
</Match>
+
+ <!-- References code in a generated file that may or maynot be null -->
+ <Match>
+ <Class name="org.apache.zookeeper.version.VersionInfoMain" />
+ <Method name="main" />
+ <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE" />
+ </Match>
</FindBugsFilter>
diff --git a/zookeeper-server/src/test/resources/test-scripts.sh
b/zookeeper-server/src/test/resources/test-scripts.sh
index ad175ba..25854b8 100755
--- a/zookeeper-server/src/test/resources/test-scripts.sh
+++ b/zookeeper-server/src/test/resources/test-scripts.sh
@@ -23,11 +23,6 @@ if [ ! -d "conf" ]; then
exit 1
fi
-if [ ! `ls build/zookeeper*.jar` ]; then
- echo "first compile the zk jar file"
- exit 1
-fi
-
DATADIR=test-scripts_datadir
DATALOGDIR=test-scripts_datalogdir
@@ -217,6 +212,9 @@ stop
$ZKSI --force --myid=1 --configfile "$ZOOCFGDIR/$ZOOCFG" || fail $LINENO
+#test version script
+TEST_PRINT_VERSION=`$ZKS version 2>/dev/null`
+[ "$TEST_PRINT_VERSION" != "" ] || fail $LINENO
#done, cleanup and exit
clear_tmp