From 5cad4d3fe94f2e3823a8d9a2588b3a580d69605c Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Tue, 10 Nov 2015 14:39:07 -0500 Subject: [PATCH] refactor zookeeper into a slightly more generic dlm module This attempts to make the zookeeper installation a bit more modular (assuming that other folks will want to add other dlms as plugins), and addresses the service start issues with zookeeper under ubuntu/upstart. Zookeeper is not going to be installed by default. Services need to ask for it with use_dlm. Change-Id: I33525e2b83a4497a57ec95f62880e0308c88b34f --- lib/dlm | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/zookeeper | 91 ------------------------------------------ stack.sh | 20 +++------- stackrc | 2 +- unstack.sh | 2 +- 5 files changed, 115 insertions(+), 108 deletions(-) create mode 100644 lib/dlm delete mode 100644 lib/zookeeper diff --git a/lib/dlm b/lib/dlm new file mode 100644 index 0000000000..f68ee26b4b --- /dev/null +++ b/lib/dlm @@ -0,0 +1,108 @@ +#!/bin/bash +# +# lib/dlm +# +# Functions to control the installation and configuration of software +# that provides a dlm (and possibly other functions). The default is +# **zookeeper**, and is going to be the only backend supported in the +# devstack tree. + +# Dependencies: +# +# - ``functions`` file + +# ``stack.sh`` calls the entry points in this order: +# +# - is_dlm_enabled +# - install_dlm +# - configure_dlm +# - cleanup_dlm + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set +o xtrace + + +# Defaults +# -------- + +# + +# Set up default directories +ZOOKEEPER_DATA_DIR=$DEST/data/zookeeper +ZOOKEEPER_CONF_DIR=/etc/zookeeper + + +# Entry Points +# ------------ +# +# NOTE(sdague): it is expected that when someone wants to implement +# another one of these out of tree, they'll implement the following +# functions: +# +# - dlm_backend +# - install_dlm +# - configure_dlm +# - cleanup_dlm + +# This should be declared in the settings file of any plugin or +# service that needs to have a dlm in their enviroment. +function use_dlm { + enable_service $(dlm_backend) +} + +# A function to return the name of the backend in question, some users +# are going to need to know this. +function dlm_backend { + echo "zookeeper" +} + +# Test if a dlm is enabled (defaults to a zookeeper specific check) +function is_dlm_enabled { + [[ ,${ENABLED_SERVICES}, =~ ,"$(dlm_backend)", ]] && return 0 + return 1 +} + +# cleanup_dlm() - Remove residual data files, anything left over from previous +# runs that a clean run would need to clean up +function cleanup_dlm { + # NOTE(sdague): we don't check for is_enabled here because we + # should just delete this regardless. Some times users updated + # their service list before they run cleanup. + sudo rm -rf $ZOOKEEPER_DATA_DIR +} + +# configure_dlm() - Set config files, create data dirs, etc +function configure_dlm { + if is_dlm_enabled; then + sudo cp $FILES/zookeeper/* $ZOOKEEPER_CONF_DIR + sudo sed -i -e 's|.*dataDir.*|dataDir='$ZOOKEEPER_DATA_DIR'|' $ZOOKEEPER_CONF_DIR/zoo.cfg + # clean up from previous (possibly aborted) runs + # create required data files + sudo rm -rf $ZOOKEEPER_DATA_DIR + sudo mkdir -p $ZOOKEEPER_DATA_DIR + # restart after configuration, there is no reason to make this + # another step, because having data files that don't match the + # zookeeper running is just going to cause tears. + restart_service zookeeper + fi +} + +# install_dlm() - Collect source and prepare +function install_dlm { + if is_dlm_enabled; then + if is_ubuntu; then + install_package zookeeperd + else + die $LINENO "Don't know how to install zookeeper on this platform" + fi + fi +} + +# Restore xtrace +$XTRACE + +# Tell emacs to use shell-script-mode +## Local variables: +## mode: shell-script +## End: diff --git a/lib/zookeeper b/lib/zookeeper deleted file mode 100644 index 6637d52bca..0000000000 --- a/lib/zookeeper +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash -# -# lib/zookeeper -# Functions to control the installation and configuration of **zookeeper** - -# Dependencies: -# -# - ``functions`` file - -# ``stack.sh`` calls the entry points in this order: -# -# - is_zookeeper_enabled -# - install_zookeeper -# - configure_zookeeper -# - init_zookeeper -# - start_zookeeper -# - stop_zookeeper -# - cleanup_zookeeper - -# Save trace setting -XTRACE=$(set +o | grep xtrace) -set +o xtrace - - -# Defaults -# -------- - -# - -# Set up default directories -ZOOKEEPER_DATA_DIR=$DEST/data/zookeeper -ZOOKEEPER_CONF_DIR=/etc/zookeeper - - -# Entry Points -# ------------ - -# Test if any zookeeper service us enabled -# is_zookeeper_enabled -function is_zookeeper_enabled { - [[ ,${ENABLED_SERVICES}, =~ ,"zookeeper", ]] && return 0 - return 1 -} - -# cleanup_zookeeper() - Remove residual data files, anything left over from previous -# runs that a clean run would need to clean up -function cleanup_zookeeper { - sudo rm -rf $ZOOKEEPER_DATA_DIR -} - -# configure_zookeeper() - Set config files, create data dirs, etc -function configure_zookeeper { - sudo cp $FILES/zookeeper/* $ZOOKEEPER_CONF_DIR - sudo sed -i -e 's|.*dataDir.*|dataDir='$ZOOKEEPER_DATA_DIR'|' $ZOOKEEPER_CONF_DIR/zoo.cfg -} - -# init_zookeeper() - Initialize databases, etc. -function init_zookeeper { - # clean up from previous (possibly aborted) runs - # create required data files - sudo rm -rf $ZOOKEEPER_DATA_DIR - sudo mkdir -p $ZOOKEEPER_DATA_DIR -} - -# install_zookeeper() - Collect source and prepare -function install_zookeeper { - install_package zookeeperd -} - -# start_zookeeper() - Start running processes, including screen -function start_zookeeper { - # Starting twice Zookeeper on Ubuntu exits with error code 1. See LP#1513741 - # Match both systemd and sysvinit output - local running="(active \(running\)|start/running)" - if ! is_ubuntu || ! sudo /usr/sbin/service zookeeper status | egrep -q "$running"; then - start_service zookeeper - fi -} - -# stop_zookeeper() - Stop running processes (non-screen) -function stop_zookeeper { - stop_service zookeeper -} - -# Restore xtrace -$XTRACE - -# Tell emacs to use shell-script-mode -## Local variables: -## mode: shell-script -## End: diff --git a/stack.sh b/stack.sh index 68b932e4b1..3cc21586d7 100755 --- a/stack.sh +++ b/stack.sh @@ -539,7 +539,7 @@ source $TOP_DIR/lib/heat source $TOP_DIR/lib/neutron-legacy source $TOP_DIR/lib/ldap source $TOP_DIR/lib/dstat -source $TOP_DIR/lib/zookeeper +source $TOP_DIR/lib/dlm # Extras Source # -------------- @@ -724,11 +724,10 @@ run_phase stack pre-install install_rpc_backend -if is_service_enabled zookeeper; then - cleanup_zookeeper - configure_zookeeper - init_zookeeper -fi +# NOTE(sdague): dlm install is conditional on one being enabled by configuration +install_dlm +configure_dlm + if is_service_enabled $DATABASE_BACKENDS; then install_database fi @@ -968,15 +967,6 @@ save_stackenv $LINENO start_dstat -# Zookeeper -# ----- - -# zookeeper for use with tooz for Distributed Lock Management capabilities etc., -if is_service_enabled zookeeper; then - start_zookeeper -fi - - # Keystone # -------- diff --git a/stackrc b/stackrc index 76a5756dde..f4a162b50c 100644 --- a/stackrc +++ b/stackrc @@ -69,7 +69,7 @@ if ! isset ENABLED_SERVICES ; then # Dashboard ENABLED_SERVICES+=,horizon # Additional services - ENABLED_SERVICES+=,rabbit,tempest,mysql,dstat,zookeeper + ENABLED_SERVICES+=,rabbit,tempest,mysql,dstat fi # SQLAlchemy supports multiple database drivers for each database server diff --git a/unstack.sh b/unstack.sh index 0cace3254a..8eded837fd 100755 --- a/unstack.sh +++ b/unstack.sh @@ -69,7 +69,7 @@ source $TOP_DIR/lib/heat source $TOP_DIR/lib/neutron-legacy source $TOP_DIR/lib/ldap source $TOP_DIR/lib/dstat -source $TOP_DIR/lib/zookeeper +source $TOP_DIR/lib/dlm # Extras Source # --------------