From c57e8306b8d677623b6a7a248f99ccdabbf8391e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Tue, 28 Feb 2012 16:43:24 +0000 Subject: [PATCH] Automatically refresh the MSG brokers in configuration, without automatic daemons reloading. --- org.glite.lb.logger-msg/Makefile | 16 +++-- org.glite.lb.logger-msg/config/msg.cron.in | 1 + .../project/debian.glite-lb-logger-msg.dirs | 1 + .../project/debian.glite-lb-logger-msg.install | 1 + .../project/glite-lb-logger-msg.spec | 3 +- org.glite.lb.logger-msg/src/msg-config.in | 72 ++++++++++++++++++++++ .../config/functions/config_glite_lb.in | 22 ++----- 7 files changed, 93 insertions(+), 23 deletions(-) create mode 100644 org.glite.lb.logger-msg/config/msg.cron.in create mode 100755 org.glite.lb.logger-msg/src/msg-config.in diff --git a/org.glite.lb.logger-msg/Makefile b/org.glite.lb.logger-msg/Makefile index b7c9542..6fe72d8 100644 --- a/org.glite.lb.logger-msg/Makefile +++ b/org.glite.lb.logger-msg/Makefile @@ -19,7 +19,7 @@ version=${module.version} CC=gcc CXX=gcc -VPATH:=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/doc:${top_srcdir}/examples +VPATH:=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/doc:${top_srcdir}/examples:${top_srcdir}/config VERSION=-DVERSION=\"GLite-${version}\" @@ -68,6 +68,9 @@ PLUGIN_LIB:=activemq_cpp_plugin.la EXAMPLES=glite-lb-cmsclient +SCRIPTS_SRC=msg.cron.in msg-config.in +SCRIPTS=${SCRIPTS_SRC:.in=.new} + ifeq (${thrflavour},) default_flavour= else @@ -76,7 +79,7 @@ endif default: all -all compile: ${PLUGIN_LIB} ${EXAMPLES} +all compile: ${PLUGIN_LIB} ${EXAMPLES} ${SCRIPTS} ${PLUGIN_LIB}: ${PLUGIN_LOBJS} ${SOLINK} -o $@ ${PLUGIN_LOBJS} ${EXT_LIB} -lglite_lb_common${default_flavour} -lglite_jobid -lglite_lbu_log @@ -105,18 +108,23 @@ check: install: -mkdir -p ${DESTDIR}${PREFIX}${prefix}/${libdir}/glite-lb/examples -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version} - -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/glite-lb + -mkdir -p ${DESTDIR}${PREFIX}${prefix}/sbin -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb + -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/cron.d ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version} ${INSTALL} -m 755 ${PLUGIN_LIB} ${DESTDIR}${PREFIX}${prefix}/${libdir} ${INSTALL} -m 755 ${EXAMPLES} ${DESTDIR}${PREFIX}${prefix}/${libdir}/glite-lb/examples ( cd ${top_srcdir}/project && ${INSTALL} -m 644 ChangeLog package.description package.summary ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version} ) ${INSTALL} -m 644 ${top_srcdir}/config/msg.conf.example ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb - ${INSTALL} -m 755 ${top_srcdir}/src/msg-brokers ${DESTDIR}${PREFIX}${prefix}/share/glite-lb + ${INSTALL} -m 755 ${top_srcdir}/src/msg-brokers ${DESTDIR}${PREFIX}${prefix}/sbin/glite-lb-msg-brokers + ${INSTALL} -m 755 msg-config.new ${DESTDIR}${PREFIX}${prefix}/sbin/glite-lb-msg-config + ${INSTALL} -m 644 msg.cron.new ${DESTDIR}${PREFIX}${sysconfdir}/cron.d/glite-lb-logger-msg.cron %.lo %.o: %.cpp ${COMPILEXX} -c $< -o $@ +%.new: %.in + sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' $< > $@ clean: rm -rvf .libs/ *.o *.lo ${PLUGIN_LIB} ${MAN_GZ} ${EXAMPLES} diff --git a/org.glite.lb.logger-msg/config/msg.cron.in b/org.glite.lb.logger-msg/config/msg.cron.in new file mode 100644 index 0000000..20b018a --- /dev/null +++ b/org.glite.lb.logger-msg/config/msg.cron.in @@ -0,0 +1 @@ +50 */4 * * * root @glite_prefix@/sbin/glite-lb-msg-config @glite_etc@/glite-lb/msg.conf >/tmp/msg-config.log.$$ 2>&1; if test $? -eq 0; then pri=user.notice; else pri=user.error; fi; logger -t glite-lb-msg-config -f /tmp/msg-config.log.$$ -p $pri; rm -f /tmp/msg-config.log.$$ diff --git a/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.dirs b/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.dirs index c39db3c..2e877df 100644 --- a/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.dirs +++ b/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.dirs @@ -1,5 +1,6 @@ etc/glite-lb usr/lib/glite-lb usr/lib/glite-lb/examples +usr/sbin usr/share/doc/glite-lb-logger-msg usr/share/glite-lb diff --git a/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.install b/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.install index 2c81cea..7f61de3 100644 --- a/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.install +++ b/org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.install @@ -1,5 +1,6 @@ etc/glite-lb/* usr/lib/activemq_cpp_plugin.so* usr/lib/glite-lb/examples/* +usr/sbin/glite-lb-msg-* usr/share/doc/glite-lb-logger-msg/* usr/share/glite-lb/* diff --git a/org.glite.lb.logger-msg/project/glite-lb-logger-msg.spec b/org.glite.lb.logger-msg/project/glite-lb-logger-msg.spec index d6dfe90..d280b20 100644 --- a/org.glite.lb.logger-msg/project/glite-lb-logger-msg.spec +++ b/org.glite.lb.logger-msg/project/glite-lb-logger-msg.spec @@ -54,7 +54,6 @@ rm -rf $RPM_BUILD_ROOT %dir /usr/%{_lib}/glite-lb/ %dir /usr/%{_lib}/glite-lb/examples/ %dir /usr/share/doc/%{name}-%{version}/ -%dir /usr/share/glite-lb/ %config(missingok) /etc/glite-lb/msg.conf.example /usr/%{_lib}/activemq_cpp_plugin.so /usr/%{_lib}/activemq_cpp_plugin.so.0 @@ -64,7 +63,7 @@ rm -rf $RPM_BUILD_ROOT /usr/share/doc/%{name}-%{version}/LICENSE /usr/share/doc/%{name}-%{version}/package.summary /usr/share/doc/%{name}-%{version}/package.description -/usr/share/glite-lb/* +/usr/sbin/glite-lb-msg-* %changelog diff --git a/org.glite.lb.logger-msg/src/msg-config.in b/org.glite.lb.logger-msg/src/msg-config.in new file mode 100755 index 0000000..d4272d6 --- /dev/null +++ b/org.glite.lb.logger-msg/src/msg-config.in @@ -0,0 +1,72 @@ +#! /bin/bash + +test -f /etc/profile.d/grid-env.sh && . /etc/profile.d/grid-env.sh + +GLITE_LOCATION=${GLITE_LOCATION:-'@glite_prefix@'} +LCG_GFAL_INFOSYS=${LCG_GFAL_INFOSYS:-'lcg-bdii.cern.ch:2170'} +GLITE_LB_MSG_NETWORK=${GLITE_LB_MSG_NETWORK:-'PROD'} + +CONF=/tmp/msg.$$ +TEMPLATE=$1 +TARGET=$2 + +if [ -z "$TEMPLATE" ]; then + echo "Usage: $0 TEMPLATE [TARGET]" + exit 1 +fi +if [ -z "$TARGET" ]; then + TARGET=$TEMPLATE +fi + +# removing and resurrecting +if [ "$GLITE_LB_MSG_BROKER" = 'false' ]; then + if [ -f "$TARGET" ]; then + mv $TARGET $TARGET.disabled + echo "disabled, configuration removed" + fi + exit 0 +fi +if [ ! -s "$TEMPLATE" ]; then + if [ -f "$TEMPLATE.disabled" ]; then + mv $TEMPLATE.disabled $TEMPLATE + else + cat <$TEMPLATE +# automatically generated by glite-lb-msg-config + +[interlogd] +plugin = activemq_cpp_plugin.so + +[msg] +EOF + fi +fi + +HEADER="`cat $TEMPLATE | grep -B 1000 '^\[msg\]'`" +PREFIX="`cat $TEMPLATE | grep -A 1000 '^\[msg\]' | grep prefix | head -n -1`" + +if [ "$GLITE_LB_MSG_BROKER" = 'true' -o "$GLITE_LB_MSG_BROKER" = 'auto' -o -z "$GLITE_LB_MSG_BROKER" ]; then + GLITE_LB_MSG_BROKER="`$GLITE_LOCATION/sbin/glite-lb-msg-brokers --bdii $LCG_GFAL_INFOSYS --network $GLITE_LB_MSG_NETWORK --sort find`" || exit $? + # bend for using in L&B configuration: + # 1) stomp not supported + # 2) translate openwire -> tcp, openwire+ssl -> ssl + # 3) temporary disable the ssl + GLITE_LB_MSG_BROKER=`echo "$GLITE_LB_MSG_BROKER" | grep -v ^stomp | sed -e 's,openwire://,tcp://,' -e 's,openwire+ssl://,ssl://,g' | grep -v ^ssl` + GLITE_LB_MSG_BROKER=`echo $GLITE_LB_MSG_BROKER` +fi + +if [ -z "$GLITE_LB_MSG_BROKER" ]; then + exit 2 +fi + +[ -z "$HEADER" ] || echo "$HEADER" > $CONF +[ -z "$PREFIX" ] || echo "$PREFIX" >> $CONF +[ -z "$GLITE_LB_MSG_BROKER" ] || echo 'broker =' $GLITE_LB_MSG_BROKER >> $CONF + +if [ ! -f $TARGET ]; then touch $TARGET; fi +diff -b $TARGET $CONF >/dev/null +case $? in + 0) ;; + 1) mv $CONF $TARGET; echo "new brokers '$GLITE_LB_MSG_BROKER'" ;; + 2) rm -f $CONF; exit 2 ;; +esac +rm -f $CONF diff --git a/org.glite.lb.yaim/config/functions/config_glite_lb.in b/org.glite.lb.yaim/config/functions/config_glite_lb.in index 3e64a00..7cf6b01 100644 --- a/org.glite.lb.yaim/config/functions/config_glite_lb.in +++ b/org.glite.lb.yaim/config/functions/config_glite_lb.in @@ -306,23 +306,11 @@ EOF lcas_plugin="$GLITE_LB_LOCATION/$lcas_libarch/modules/lcas_lb.mod" echo "pluginname=\"$lcas_plugin\"" > ${GLITE_LB_LOCATION_ETC}/glite-lb/lcas.db - # MSG publish - if [ "$GLITE_LB_MSG_BROKER" = 'false' ]; then - rm -f "$GLITE_LB_LOCATION_ETC/glite-lb/msg.conf" - else - if [ "$GLITE_LB_MSG_BROKER" = 'true' -o "$GLITE_LB_MSG_BROKER" = 'auto' -o -z "$GLITE_LB_MSG_BROKER" ]; then - GLITE_LB_MSG_BROKER="`${GLITE_LB_LOCATION}/share/glite-lb/msg-brokers --bdii $LCG_GFAL_INFOSYS --network $GLITE_LB_MSG_NETWORK --sort find | head -n 1 | sed 's,openwire://,tcp://,'`"; - fi - if [ ! -z "$GLITE_LB_MSG_BROKER" ]; then - cat > "$GLITE_LB_LOCATION_ETC/glite-lb/msg.conf" <