123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- #! /usr/bin/env bash
- #
- # 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
- #
- # https://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.
- #
- # This is the port where zookeeper server runs on.
- ZOOPORT=${ZOOPORT:-"22181"}
- # Some tests are setting the maxClientConnections. When it is not set, we fallback to default 100
- ZKMAXCNXNS=${ZKMAXCNXNS:-"100"}
- EXTRA_JVM_ARGS=${EXTRA_JVM_ARGS:-""}
- if [[ -z $1 ]]; then
- echo "USAGE: $0 startClean|start|startCleanReadOnly|startRequireSASLAuth [jaasConf] [readOnly]|stop"
- exit 2
- fi
- # =====
- # ===== cleanup old executions
- # =====
- case "$(uname)" in
- CYGWIN* | MINGW*) cygwin=true ;;
- *) cygwin=false ;;
- esac
- if $cygwin; then
- # cygwin has a "kill" in the shell itself, gets confused
- KILL='/bin/kill'
- else
- KILL='kill'
- fi
- # Make sure nothing is left over from before
- if [[ -r "/tmp/zk.pid" ]]; then
- pid=$(cat /tmp/zk.pid)
- $KILL -9 "$pid"
- rm -f /tmp/zk.pid
- fi
- if [[ -r "$base_dir/build/tmp/zk.pid" ]]; then
- pid=$(cat "$base_dir/build/tmp/zk.pid")
- $KILL -9 "$pid"
- rm -f "$base_dir/build/tmp/zk.pid"
- fi
- # [ZOOKEEPER-820] If lsof command is present, look for a process listening
- # on ZOOPORT and kill it.
- if which lsof &>/dev/null; then
- pid=$(lsof -i ":$ZOOPORT" | grep LISTEN | awk '{print $2}')
- if [[ -n $pid ]]; then
- $KILL -9 "$pid"
- fi
- fi
- # =====
- # ===== build classpath
- # =====
- if [[ -z $base_dir ]]; then
- zk_base="../../../"
- else
- zk_base="$base_dir"
- fi
- CLASSPATH="$CLASSPATH:$zk_base/build/classes"
- CLASSPATH="$CLASSPATH:$zk_base/conf"
- CLASSPATH="$CLASSPATH:$zk_base/zookeeper-server/target/classes"
- for i in "$zk_base"/build/lib/*.jar; do
- CLASSPATH="$CLASSPATH:$i"
- done
- for d in "$zk_base"/zookeeper-server/target/lib/*.jar; do
- CLASSPATH="$d:$CLASSPATH"
- done
- for i in "$zk_base"/zookeeper-server/src/main/resource/lib/*.jar; do
- CLASSPATH="$CLASSPATH:$i"
- done
- CLASSPATH="$CLASSPATH:$CLOVER_HOME/lib/clover*.jar"
- if $cygwin; then
- CLASSPATH=$(cygpath -wp "$CLASSPATH")
- fi
- export CLASSPATH
- # =====
- # ===== initialize JVM arguments
- # =====
- read_only=
- # shellcheck disable=SC2206
- PROPERTIES=($EXTRA_JVM_ARGS "-Dzookeeper.extendedTypesEnabled=true" "-Dznode.container.checkIntervalMs=100")
- if [[ $1 == "xstartRequireSASLAuth" ]]; then
- PROPERTIES=("-Dzookeeper.sessionRequireClientSASLAuth=true" "${PROPERTIES[@]}"
- "-Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider")
- if [[ -n $2 ]]; then
- PROPERTIES=("${PROPERTIES[@]}" "-Djava.security.auth.login.config=$2")
- fi
- if [[ -n $3 ]]; then
- PROPERTIES=("-Dreadonlymode.enabled=true" "${PROPERTIES[@]}")
- read_only=true
- fi
- fi
- if [[ $1 == "startCleanReadOnly" ]]; then
- PROPERTIES=("-Dreadonlymode.enabled=true" "${PROPERTIES[@]}")
- read_only=true
- fi
- # =====
- # ===== initialize data and test directories
- # =====
- if [[ -z $base_dir ]]; then
- tmp_dir="/tmp"
- tests_dir="tests"
- else
- tmp_dir="$base_dir/build/tmp"
- tests_dir=$base_dir/zookeeper-client/zookeeper-client-c/tests
- fi
- # =====
- # ===== start the ZooKeeper server
- # =====
- case $1 in
- start | startClean | startRequireSASLAuth | startCleanReadOnly)
- if [[ $1 == "startClean" ]] || [[ $1 == "startCleanReadOnly" ]]; then
- rm -rf "$tmp_dir/zkdata"
- fi
- mkdir -p "$tmp_dir/zkdata"
- # ===== initialize certificates
- certs_dir="/tmp/certs"
- rm -rf "$certs_dir"
- mkdir -p "$certs_dir"
- cp "$tests_dir"/../ssl/gencerts.sh "$certs_dir/" >/dev/null
- (
- cd "$certs_dir" >/dev/null &&
- # GitHub is providing us hostnames with more than 64 characters now.
- # And there are no cppunit tests do hostname verification currently,
- # so we could set CN to arbitrary hostname for now.
- ./gencerts.sh tests.zookeeper.apache.org >./gencerts.stdout 2>./gencerts.stderr
- )
- # ===== prepare the configs
- sed "s#TMPDIR#$tmp_dir#g;s#CERTDIR#$certs_dir#g;s#MAXCLIENTCONNECTIONS#$ZKMAXCNXNS#g;s#CLIENTPORT#$ZOOPORT#g" "$tests_dir/zoo.cfg" >"$tmp_dir/zoo.cfg"
- if [[ -n $read_only ]]; then
- # we can put the new server to read-only mode by starting only a single instance of a three node server
- {
- echo "server.1=localhost:22881:33881"
- echo "server.2=localhost:22882:33882"
- echo "server.3=localhost:22883:33883"
- } >>"$tmp_dir/zoo.cfg"
- echo "1" >"$tmp_dir/zkdata/myid"
- main_class="org.apache.zookeeper.server.quorum.QuorumPeerMain"
- else
- main_class="org.apache.zookeeper.server.ZooKeeperServerMain"
- fi
- # ===== start the server
- java "${PROPERTIES[@]}" "$main_class" "$tmp_dir/zoo.cfg" &>"$tmp_dir/zk.log" &
- pid=$!
- echo -n $! >/tmp/zk.pid
- # ===== wait for the server to start
- if [[ $1 == "startRequireSASLAuth" ]] || [[ $1 == "startCleanReadOnly" ]]; then
- # ===== in these cases we can not connect simply with the java client, so we are just waiting...
- sleep 4
- success=true
- else
- # ===== wait max 120 seconds for server to be ready to server clients (this handles testing on slow hosts)
- success=false
- for i in {1..120}; do
- if ps -p $pid >/dev/null; then
- if ! java "${PROPERTIES[@]}" org.apache.zookeeper.ZooKeeperMain -server "localhost:$ZOOPORT" ls / &>/dev/null; then
- # server not up yet - wait
- sleep 1
- else
- # server is up and serving client connections
- success=true
- break
- fi
- else
- # server died - exit now
- echo -n " ZooKeeper server process failed"
- break
- fi
- done
- fi
- if $success; then
- ## in case for debug, but generally don't use as it messes up the
- ## console test output
- echo -n " ZooKeeper server started"
- else
- echo -n " ZooKeeper server NOT started"
- fi
- ;;
- stop)
- # Already killed above
- ;;
- *)
- echo "Unknown command $1"
- exit 2
- ;;
- esac
|