Skip to content

Commit

Permalink
ZOOKEEPER-1426: add version command to the zookeeper server
Browse files Browse the repository at this point in the history
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 apache#923 from szepet/ZOOKEEPER-1426 and squashes the following commits:

d9108bd [szepet] test-scripts.sh improved to work with ant build as well
cd6a0bf [szepet] ZOOKEEPER-1426: add version command to the zookeeper server
  • Loading branch information
szepet authored and anmolnar committed May 31, 2019
1 parent ca4b124 commit d3dbe78
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 25 deletions.
25 changes: 9 additions & 16 deletions bin/zkServer-initialize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
;;
Expand All @@ -135,14 +131,11 @@ while true; do
--help)
usage
;;
--)
initialize
break
;;
*)
echo "Unknown option: $1"
usage
exit 1
;;
esac
done
done
initialize
6 changes: 5 additions & 1 deletion bin/zkServer.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 ${@}
Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@

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."
Expand All @@ -53,7 +54,7 @@ public static void generateFile(File outputDir, Version version, String rev, Str
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");
Expand All @@ -75,7 +76,7 @@ public static void generateFile(File outputDir, Version version, String rev, Str
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");
Expand All @@ -96,6 +97,45 @@ public static void generateFile(File outputDir, Version version, String rev, Str
+ 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 {
Expand Down
7 changes: 7 additions & 0 deletions zookeeper-server/src/test/resources/findbugsExcludeFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
8 changes: 3 additions & 5 deletions zookeeper-server/src/test/resources/test-scripts.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d3dbe78

Please sign in to comment.