From pcaulfield@sourceware.org Wed Jan 2 09:27:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 09:27:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080102092712.6480.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-02 09:27:12 Modified files: cman/daemon : commands.c Log message: totempg_ifaces_get() always copies INTERFACE_MAX addresses so make sure we alloate enough space for them all. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.77&r2=1.78 From pcaulfield@sourceware.org Wed Jan 2 10:02:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 10:02:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080102100245.7071.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: pcaulfield@sourceware.org 2008-01-02 10:02:44 Modified files: cman/daemon : commands.c Log message: totempg_ifaces_get() always copies INTERFACE_MAX addresses so make sure we allocate enough space for them all. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.55.2.15&r2=1.55.2.16 From pcaulfield@sourceware.org Wed Jan 2 10:56:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 10:56:00 -0000 Subject: cluster/cman/daemon Makefile ais.c Message-ID: <20080102105621.2418.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: pcaulfield@sourceware.org 2008-01-02 10:56:21 Modified files: cman/daemon : Makefile ais.c Log message: Errorstring fixes from Fabio. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.47.2.1&r2=1.47.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/ais.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.3&r2=1.44.2.4 From pcaulfield@sourceware.org Wed Jan 2 11:03:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 11:03:00 -0000 Subject: cluster/cman/daemon Makefile Message-ID: <20080102110323.12115.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: pcaulfield@sourceware.org 2008-01-02 11:03:23 Modified files: cman/daemon : Makefile Log message: Oops, I didn't mean to commit that last private change Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.47.2.2&r2=1.47.2.3 From pcaulfield@sourceware.org Wed Jan 2 11:05:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 11:05:00 -0000 Subject: cluster/cman/daemon ais.c Message-ID: <20080102110533.14334.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: pcaulfield@sourceware.org 2008-01-02 11:05:33 Modified files: cman/daemon : ais.c Log message: Don't know why I bothered coming in to work today Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/ais.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.4&r2=1.44.2.5 From fabbione@sourceware.org Wed Jan 2 11:40:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 02 Jan 2008 11:40:00 -0000 Subject: cluster/rgmanager ChangeLog src/resources/ocf- ... Message-ID: <20080102114058.28784.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-02 11:40:58 Modified files: rgmanager : ChangeLog rgmanager/src/resources: ocf-shellfuncs Log message: Add interpreter to ocf-shellfuncs. Patch by Frederik Sch????ler Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&r1=1.70&r2=1.71 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/ocf-shellfuncs.diff?cvsroot=cluster&r1=1.5&r2=1.6 From fabbione@sourceware.org Wed Jan 2 11:48:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 02 Jan 2008 11:48:00 -0000 Subject: cluster cman/man/cman.5 cman/man/qdisk.5 dlm/m ... Message-ID: <20080102114855.4570.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-02 11:48:55 Modified files: cman/man : cman.5 qdisk.5 dlm/man : libdlm.3 fence/man : fence.8 gfs/man : gfs.8 gfs2/man : gfs2.8 gnbd/man : gnbd.8 Log message: Cleanup manpages to work with whatis. Patch from Frederik Sch????ler Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/man/cman.5.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/man/qdisk.5.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/man/libdlm.3.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/man/fence.8.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/man/gfs.8.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/man/gfs2.8.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gnbd/man/gnbd.8.diff?cvsroot=cluster&r1=1.3&r2=1.4 From wcheng@sourceware.org Wed Jan 2 15:07:00 2008 From: wcheng@sourceware.org (wcheng@sourceware.org) Date: Wed, 02 Jan 2008 15:07:00 -0000 Subject: cluster/gfs-kernel/src/gfs ops_export.c Message-ID: <20080102150707.5345.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: wcheng@sourceware.org 2008-01-02 15:07:07 Modified files: gfs-kernel/src/gfs: ops_export.c Log message: Dmitry Monakhov from OpenVZ linux kernel team reports about wrong locking order in gfs_get_parent(). Patch submitted by Vasily Averin (vvs@sw.ru) under Red Hat bugzilla 400651 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_export.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.3&r2=1.8.2.4 From pcaulfield@sourceware.org Wed Jan 2 16:23:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 16:23:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080102162329.20112.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-02 16:23:29 Modified files: cman/daemon : commands.c Log message: Lets see if I can do this commit properly... Fix swab of an int to be swab32 rather than swab16 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.78&r2=1.79 From pcaulfield@sourceware.org Wed Jan 2 16:35:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 02 Jan 2008 16:35:00 -0000 Subject: cluster/cman/daemon ais.c barrier.c cmanccs.c ... Message-ID: <20080102163544.1408.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-02 16:35:44 Modified files: cman/daemon : ais.c barrier.c cmanccs.c commands.c config.c daemon.c logging.c Log message: Use define CMAN_NAME for the purpose for which it was intended Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/ais.c.diff?cvsroot=cluster&r1=1.58&r2=1.59 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/barrier.c.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/cmanccs.c.diff?cvsroot=cluster&r1=1.38&r2=1.39 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.79&r2=1.80 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/config.c.diff?cvsroot=cluster&r1=1.19&r2=1.20 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/daemon.c.diff?cvsroot=cluster&r1=1.38&r2=1.39 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/logging.c.diff?cvsroot=cluster&r1=1.17&r2=1.18 From rmccabe@sourceware.org Wed Jan 2 17:36:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 17:36:00 -0000 Subject: conga/luci cluster/cluster_config-macros clust ... Message-ID: <20080102173652.21770.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 17:36:52 Modified files: luci/cluster : cluster_config-macros validate_config_fence.js validate_config_general.js validate_config_gulm.js validate_config_multicast.js validate_config_qdisk.js luci/plone-custom: conga.js luci.css Log message: Fix display issues with the cluster properties dialog on some browsers Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_fence.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_general.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_gulm.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&r1=1.2&r2=1.3 From wcheng@sourceware.org Wed Jan 2 18:45:00 2008 From: wcheng@sourceware.org (wcheng@sourceware.org) Date: Wed, 02 Jan 2008 18:45:00 -0000 Subject: cluster/gfs-kernel/src/gfs rgrp.c Message-ID: <20080102184507.19985.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: wcheng@sourceware.org 2008-01-02 18:45:07 Modified files: gfs-kernel/src/gfs: rgrp.c Log message: Bugzilla 227892: * Warn people about the RG corruption and request a gfs_fsck * Upon error detection, perform a minimum error data collection Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/rgrp.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.1&r2=1.19.2.2 From wcheng@sourceware.org Wed Jan 2 19:17:00 2008 From: wcheng@sourceware.org (wcheng@sourceware.org) Date: Wed, 02 Jan 2008 19:17:00 -0000 Subject: cluster/gfs-kernel/src/gfs rgrp.c Message-ID: <20080102191709.7857.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: wcheng@sourceware.org 2008-01-02 19:17:09 Modified files: gfs-kernel/src/gfs: rgrp.c Log message: Bugzilla 227892: 1. Warn people about the RG corruption and request a gfs_fsck 2. Upon error detection, perform a minimum error data collection. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/rgrp.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.14.2.4&r2=1.14.2.5 From lhh@sourceware.org Wed Jan 2 19:54:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 02 Jan 2008 19:54:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080102195428.19547.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-02 19:54:28 Modified files: rgmanager/src/daemons: rg_state.c Log message: Fix endian issue on big-endian arches Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&r1=1.44&r2=1.45 From rmccabe@sourceware.org Wed Jan 2 20:47:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 20:47:00 -0000 Subject: conga/ricci Makefile common/ClientSocket.cpp c ... Message-ID: <20080102204738.13756.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 20:47:38 Modified files: ricci : Makefile ricci/common : ClientSocket.cpp Except.cpp File.cpp Logger.cpp Makefile Module.cpp Network.cpp Random.cpp ServerSocket.cpp Socket.cpp Thread.cpp Time.cpp Variable.cpp XML.cpp daemon_init.c executils.cpp executils_test.cpp signals.c sys_util.c sys_util.h utils.cpp ricci/include : APIerror.h Except.h File.h Logger.h Module.h Mutex.h Network.h Random.h Socket.h String.h Thread.h Time.h Variable.h XML.h XML_tags.h array_auto_ptr.h counting_auto_ptr.cpp counting_auto_ptr.h executils.h executils_test.h signals.h utils.h ricci/init.d : Makefile ricci ricci/modules : Makefile ricci/modules/cluster: ClusterConf.cpp ClusterConf.h ClusterModule.cpp ClusterModule.h ClusterStatus.cpp ClusterStatus.h Clusvcadm.cpp Clusvcadm.h Fence.cpp Fence.h Makefile NoServiceManager.h Virt.cpp Virt.h main.cpp ricci/modules/cluster/clumon: Makefile ricci/modules/cluster/clumon/init.d: Makefile modclusterd ricci/modules/cluster/clumon/man: Makefile ricci/modules/cluster/clumon/src: Makefile ricci/modules/cluster/clumon/src/cim-provider: ClusterProvider.cpp ClusterProvider.h ClusterProviderMain.cpp Makefile SmartHandler.h clusterCIM_test.cpp clusterCIM_test.h ricci/modules/cluster/clumon/src/common: Cluster.cpp ClusterMonitor.cpp Makefile Node.cpp Service.cpp ricci/modules/cluster/clumon/src/daemon: Communicator.cpp Communicator.h Makefile Monitor.cpp Monitor.h Peer.cpp Peer.h main.cpp ricci/modules/cluster/clumon/src/include: Cluster.h ClusterMonitor.h clumond_globals.h ricci/modules/cluster/clumon/src/snmp-agent: Makefile clusterMIB.cpp clusterMIB.h clusterMonitorSnmp.cpp clusterMonitorSnmp.h nodesMIB.cpp nodesMIB.h nodesMIB_access.cpp nodesMIB_access.h nodesMIB_checkfns_local.cpp nodesMIB_checkfns_local.h nodesMIB_columns.h nodesMIB_enums.h servicesMIB.cpp servicesMIB.h servicesMIB_access.cpp servicesMIB_access.h servicesMIB_checkfns_local.cpp servicesMIB_checkfns_local.h servicesMIB_columns.h servicesMIB_enums.h ricci/modules/log: LogParser.cpp LogParser.h LoggingModule.cpp LoggingModule.h Makefile main.cpp ricci/modules/rpm: Makefile PackageHandler.cpp PackageHandler.h RpmModule.cpp RpmModule.h main.cpp ricci/modules/service: Makefile ServiceManager.cpp ServiceManager.h ServiceModule.cpp ServiceModule.h main.cpp ricci/modules/storage: ClusterNotRunningError.h FSController.cpp LVMClusterLockingError.h Makefile MountHandler.cpp StorageModule.cpp SwapFS.cpp System.cpp defines.h ricci/pam.d : Makefile ricci/ricci : Auth.cpp Auth.h ClientInstance.cpp ClientInstance.h DBusController.cpp DBusController.h Makefile QueueLocker.cpp QueueLocker.h RebootModule.cpp RebootModule.h Ricci.cpp Ricci.h RicciWorker.cpp RicciWorker.h SSLInstance.cpp SSLInstance.h Server.cpp Server.h dbus_test.cpp main.cpp ricci_defines.h Log message: Update copyright date range Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Makefile.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ClientSocket.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Except.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/File.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Logger.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Makefile.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Module.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Network.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Random.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ServerSocket.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Socket.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Thread.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Time.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Variable.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/XML.cpp.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/daemon_init.c.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils.cpp.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils_test.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/signals.c.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.c.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.h.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/utils.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/APIerror.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Except.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/File.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Logger.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Module.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Mutex.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Network.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Random.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Socket.h.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/String.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Thread.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Time.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Variable.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/XML.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/XML_tags.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/array_auto_ptr.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/executils.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/executils_test.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/signals.h.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/utils.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/Makefile.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/ricci.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.cpp.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.h.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.cpp.diff?cvsroot=cluster&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Makefile.diff?cvsroot=cluster&r1=1.19&r2=1.20 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/NoServiceManager.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/main.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/Makefile.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/Makefile.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/modclusterd.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/man/Makefile.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/Makefile.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProviderMain.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/Makefile.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/SmartHandler.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/clusterCIM_test.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/clusterCIM_test.h.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Cluster.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Makefile.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Node.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Service.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Communicator.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Communicator.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Makefile.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.cpp.diff?cvsroot=cluster&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.h.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Peer.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Peer.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/main.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/Cluster.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/clumond_globals.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_columns.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_enums.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_columns.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_enums.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/Makefile.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/main.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/Makefile.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.18&r2=1.19 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/main.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/Makefile.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.h.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/main.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotRunningError.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVMClusterLockingError.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Makefile.diff?cvsroot=cluster&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/defines.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/pam.d/Makefile.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Auth.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Auth.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/DBusController.cpp.diff?cvsroot=cluster&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/DBusController.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Makefile.diff?cvsroot=cluster&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/QueueLocker.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/QueueLocker.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RebootModule.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RebootModule.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.cpp.diff?cvsroot=cluster&r1=1.29&r2=1.30 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.h.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.cpp.diff?cvsroot=cluster&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.h.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.cpp.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.h.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/dbus_test.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ricci_defines.h.diff?cvsroot=cluster&r1=1.10&r2=1.11 From rmccabe@sourceware.org Wed Jan 2 20:52:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 20:52:00 -0000 Subject: conga/luci cluster/Makefile cluster/cluster_co ... Message-ID: <20080102205224.16034.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 20:52:24 Modified files: luci/cluster : Makefile cluster_config-macros cluster_svc-macros fdom-macros fence-macros fence_device.js form-chooser form-macros resource-form-macros resource_form_handlers.js system_svc-macros validate_config_fence.js validate_config_general.js validate_config_gulm.js validate_config_multicast.js validate_config_qdisk.js validate_create_gulm.js validate_fdom.js validate_fence.js validate_sys_svc.js validate_xvm_key.js luci/conga_ssl : Makefile SSLClient.cpp conga_ssl_lib.cpp luci/homebase : Makefile form-chooser form-macros homebase_common.js validate_cluster_add.js validate_cluster_add_initial.js validate_perm.js validate_sys_add.js validate_sys_remove.js validate_user_add.js validate_user_del.js luci/init.d : Makefile luci luci/logs : Makefile luci/plone-custom: Makefile conga.js conga_ajax.js luci.css sys_svc.css luci/storage : Makefile cache_report check-batch cylinder_select.js form-chooser form-macros mappings_macros mappings_provider storage_async.js storage_content.js storage_probing.js storage_svs.js storage_utils.js storage_validation.js validate_html luci/sysconfig : Makefile luci/test : cleaner.py conga_Helpers.py luci/utils : Makefile luci_admin luci_cleanup luci_manage Log message: Update copyright date ranges Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fdom-macros.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence_device.js.diff?cvsroot=cluster&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&r1=1.22&r2=1.23 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.217&r2=1.218 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&r1=1.46&r2=1.47 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.41&r2=1.42 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_fence.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_general.js.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_gulm.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_create_gulm.js.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fdom.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_sys_svc.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_xvm_key.js.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/Makefile.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/conga_ssl_lib.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-chooser.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.62&r2=1.63 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&r1=1.22&r2=1.23 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add.js.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_perm.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_add.js.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_remove.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_add.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_del.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/Makefile.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/luci.diff?cvsroot=cluster&r1=1.18&r2=1.19 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/logs/Makefile.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/Makefile.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_ajax.js.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/sys_svc.css.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cache_report.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/check-batch.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cylinder_select.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-chooser.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&r1=1.30&r2=1.31 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_macros.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_provider.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_async.js.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_content.js.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_probing.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_svs.js.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_utils.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_validation.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/validate_html.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/sysconfig/Makefile.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/cleaner.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/conga_Helpers.py.diff?cvsroot=cluster&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/Makefile.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&r1=1.57&r2=1.58 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_cleanup.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_manage.diff?cvsroot=cluster&r1=1.4&r2=1.5 From rmccabe@sourceware.org Wed Jan 2 20:56:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 20:56:00 -0000 Subject: conga/luci/site/luci/Extensions/ClusterModel A ... Message-ID: <20080102205608.18829.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 20:56:08 Modified files: luci/site/luci/Extensions/ClusterModel: Altname.py Apache.py BaseResource.py Cluster.py ClusterNode.py ClusterNodes.py Clusterfs.py Cman.py Device.py FailoverDomain.py FailoverDomainNode.py FailoverDomains.py Fence.py FenceDaemon.py FenceDevice.py FenceDeviceAttr.py FenceDevices.py FenceXVMd.py Fs.py Gulm.py Heuristic.py Ip.py LVM.py Lockserver.py Method.py ModelBuilder.py Multicast.py MySQL.py NFSClient.py NFSExport.py Netfs.py OpenLDAP.py Postgres8.py QuorumD.py RefObject.py Resources.py Rm.py SAPDatabase.py SAPInstance.py Samba.py Script.py Service.py TagObject.py Tomcat5.py Totem.py Vm.py Log message: Update date ranges in copyright notices Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Altname.py.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Apache.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/BaseResource.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cluster.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNodes.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Clusterfs.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cman.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Device.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomain.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomainNode.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomains.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fence.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevices.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceXVMd.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fs.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Gulm.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Heuristic.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Ip.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/LVM.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Lockserver.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Method.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Multicast.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/MySQL.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/NFSClient.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/NFSExport.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Netfs.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OpenLDAP.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Postgres8.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/QuorumD.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/RefObject.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Resources.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Rm.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SAPDatabase.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SAPInstance.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Samba.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Script.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Service.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/TagObject.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Tomcat5.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Totem.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Vm.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 From rmccabe@sourceware.org Wed Jan 2 21:00:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 21:00:00 -0000 Subject: conga/luci/site/luci/Extensions FenceHandler.p ... Message-ID: <20080102210032.22673.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 21:00:32 Modified files: luci/site/luci/Extensions: FenceHandler.py HelperFunctions.py LuciClusterInfo.py LuciSyslog.py LuciValidation.py LuciZope.py LuciZopeAsync.py LuciZopeClusterPortal.py LuciZopeExternal.py LuciZopePerm.py PropsObject.py ResourceHandler.py Variable.py cluster_adapters.py conga_constants.py conga_ssl.py conga_storage_constants.py homebase_adapters.py ricci_communicator.py ricci_defines.py system_adapters.py Log message: Update date ranges in copyright notices Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.28&r2=1.29 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciSyslog.py.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeClusterPortal.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopePerm.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/Variable.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.276&r2=1.277 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&r1=1.46&r2=1.47 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_ssl.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_storage_constants.py.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.53&r2=1.54 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&r1=1.31&r2=1.32 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_defines.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/system_adapters.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 From rmccabe@sourceware.org Wed Jan 2 21:06:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 21:06:00 -0000 Subject: conga/luci load_site.py Message-ID: <20080102210631.26227.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 21:06:31 Modified files: luci : load_site.py Log message: *.vpy and *.cpt files are not properly imported, so skip them Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/load_site.py.diff?cvsroot=cluster&r1=1.17&r2=1.18 From rmccabe@sourceware.org Wed Jan 2 21:08:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 21:08:00 -0000 Subject: conga/luci Makefile pack.py docs/Makefile site ... Message-ID: <20080102210828.2052.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-02 21:08:28 Modified files: luci : Makefile pack.py luci/docs : Makefile luci/site : Makefile Log message: Update date ranges in copyright notices Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/Makefile.diff?cvsroot=cluster&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/pack.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/Makefile.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/Makefile.diff?cvsroot=cluster&r1=1.17&r2=1.18 From rmccabe@sourceware.org Wed Jan 2 22:45:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 02 Jan 2008 22:45:00 -0000 Subject: conga ./clustermon.spec.in.in make/version.in Message-ID: <20080102224533.13787.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL4 Changes by: rmccabe@sourceware.org 2008-01-02 22:45:33 Modified files: . : clustermon.spec.in.in make : version.in Log message: fix 426189: Conga attempts to free a null pointer Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.25.2.9&r2=1.25.2.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.28.2.8&r2=1.28.2.9 From fabbione@sourceware.org Thu Jan 3 06:48:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Thu, 03 Jan 2008 06:48:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080103064812.25408.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-03 06:48:12 Modified files: cman/daemon : commands.c Log message: Fix buffer align. So far this one makes the entire stack run on sparc up to fenced. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.80&r2=1.81 From rmccabe@sourceware.org Thu Jan 3 16:27:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 03 Jan 2008 16:27:00 -0000 Subject: conga ./conga.spec.in.in luci/homebase/form-macros Message-ID: <20080103162750.25173.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-03 16:27:49 Modified files: . : conga.spec.in.in luci/homebase : form-macros Log message: Fixed bz253720: "trust" box shouldn't be an option if it is required Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.90&r2=1.91 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.63&r2=1.64 From pcaulfield@sourceware.org Thu Jan 3 16:35:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Thu, 03 Jan 2008 16:35:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080103163555.28417.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-03 16:35:55 Modified files: cman/daemon : commands.c Log message: Get rid of redundant totemip_parse() call. This was in a bad place and could cause aisexec stalls and disallowed nodes, particularly at startup. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.81&r2=1.82 From pcaulfield@sourceware.org Thu Jan 3 16:36:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Thu, 03 Jan 2008 16:36:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080103163652.28777.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: pcaulfield@sourceware.org 2008-01-03 16:36:52 Modified files: cman/daemon : commands.c Log message: Get rid of redundant totemip_parse() call. This was in a bad place and could cause aisexec stalls and disallowed nodes, particularly at startup. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.55.2.16&r2=1.55.2.17 From jbrassow@sourceware.org Thu Jan 3 20:35:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 03 Jan 2008 20:35:00 -0000 Subject: cluster/rgmanager/src/resources Makefile No ta ... Message-ID: <20080103203539.17586.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: jbrassow@sourceware.org 2008-01-03 20:35:39 Modified files: rgmanager/src/resources: Makefile No tag lvm.sh Added files: rgmanager/src/resources: lvm.metadata lvm_by_lv.sh lvm_by_vg.sh Log message: BUG 427377 HA LVM now allows multiple LVs/VG as long as they move together Package builder, please note the addition of 3 new files. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.metadata.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_lv.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_vg.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.11&r2=1.4.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9&r2=1.10 From jbrassow@sourceware.org Thu Jan 3 20:45:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 03 Jan 2008 20:45:00 -0000 Subject: cluster/rgmanager/src/resources Makefile lvm.s ... Message-ID: <20080103204537.22117.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-03 20:45:37 Modified files: rgmanager/src/resources: Makefile lvm.sh Added files: rgmanager/src/resources: lvm.metadata lvm_by_lv.sh lvm_by_vg.sh Log message: Bug 427378 HA LVM now allows multiple LVs/VG as long as they move together Package builder, note the extra files. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.metadata.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_lv.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_vg.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.13.2.7&r2=1.13.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.6.6&r2=1.1.6.7 From jbrassow@sourceware.org Thu Jan 3 20:56:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 03 Jan 2008 20:56:00 -0000 Subject: cluster/rgmanager/src/resources lvm.sh Message-ID: <20080103205649.29101.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-01-03 20:56:49 Modified files: rgmanager/src/resources: lvm.sh Log message: s/validate/verify/ Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&r1=1.10&r2=1.11 From jbrassow@sourceware.org Thu Jan 3 21:02:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 03 Jan 2008 21:02:00 -0000 Subject: cluster/rgmanager/src/resources Makefile lvm.s ... Message-ID: <20080103210253.508.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-01-03 21:02:53 Modified files: rgmanager/src/resources: Makefile lvm.sh Added files: rgmanager/src/resources: lvm.metadata lvm_by_lv.sh lvm_by_vg.sh Log message: lvm resource script now allows multiple LVs per VG as long as they move together (exist on the same machine). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.metadata.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_lv.sh.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_vg.sh.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&r1=1.11&r2=1.12 From fabbione@sourceware.org Fri Jan 4 05:11:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 04 Jan 2008 05:11:00 -0000 Subject: cluster/make clean.mk Message-ID: <20080104051135.17750.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-04 05:11:35 Modified files: make : clean.mk Log message: Fix clean target. core files have pid attached to them. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/make/clean.mk.diff?cvsroot=cluster&r1=1.1&r2=1.2 From teigland@sourceware.org Fri Jan 4 16:12:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Fri, 04 Jan 2008 16:12:00 -0000 Subject: cluster/dlm-kernel/src lockqueue.c Message-ID: <20080104161205.22720.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: teigland@sourceware.org 2008-01-04 16:12:05 Modified files: dlm-kernel/src : lockqueue.c Log message: Some message gets out of place, but there's no need to panic the machine; just ignore it. bz 427531 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/lockqueue.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.37.2.10&r2=1.37.2.11 From jbrassow@sourceware.org Fri Jan 4 20:01:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 04 Jan 2008 20:01:00 -0000 Subject: cluster/rgmanager/src/resources lvm_by_lv.sh Message-ID: <20080104200150.24489.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: jbrassow@sourceware.org 2008-01-04 20:01:50 Modified files: rgmanager/src/resources: lvm_by_lv.sh Log message: - a regression... When tagging at the LV-level, the script should complain if there is more than one LV / VG. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_lv.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 From jbrassow@sourceware.org Fri Jan 4 20:02:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 04 Jan 2008 20:02:00 -0000 Subject: cluster/rgmanager/src/resources lvm_by_lv.sh Message-ID: <20080104200250.25028.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-04 20:02:50 Modified files: rgmanager/src/resources: lvm_by_lv.sh Log message: - a regression... When tagging at the LV-level, the script should complain if there is more than one LV / VG. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_lv.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 From jbrassow@sourceware.org Fri Jan 4 20:02:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 04 Jan 2008 20:02:00 -0000 Subject: cluster/rgmanager/src/resources lvm_by_lv.sh Message-ID: <20080104200220.24710.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-01-04 20:02:20 Modified files: rgmanager/src/resources: lvm_by_lv.sh Log message: - a regression... When tagging at the LV-level, the script should complain if there is more than one LV / VG. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_lv.sh.diff?cvsroot=cluster&r1=1.2&r2=1.3 From fabbione@sourceware.org Mon Jan 7 05:52:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 07 Jan 2008 05:52:00 -0000 Subject: cluster ./configure ccs/ccs_tool/editconf.c cc ... Message-ID: <20080107055229.32492.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-07 05:52:29 Modified files: . : configure ccs/ccs_tool : editconf.c update.c ccs/daemon : ccsd.c cluster_mgr.c cnx_mgr.c globals.h ccs/lib : libccs.c cman/daemon : cmanccs.c cman/init.d : Makefile fence/agents/xvm: options.c simple_auth.h fence/fenced : main.c make : defines.mk.input rgmanager/init.d: Makefile rgmanager/src/daemons: rg_locks.c rgmanager/src/resources: Makefile Added files: cman/init.d : cman.in rgmanager/init.d: rgmanager.in rgmanager/src/resources/utils: config-utils.sh.in Removed files: cman/init.d : cman rgmanager/init.d: rgmanager rgmanager/src/resources/utils: config-utils.sh Log message: makes it possible to change the default configuration file by setting --confdir (default to /etc/cluster) and --conffile (cluster.conf). NOTE: manpages with hardencoded /etc/cluster/cluster.conf are not updated. If you dare to change these defaults you know what you are doing. NOTE to developers: you will need to re-run ./configure to set the new vars. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/configure.diff?cvsroot=cluster&r1=1.45&r2=1.46 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/ccs_tool/editconf.c.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/ccs_tool/update.c.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/ccsd.c.diff?cvsroot=cluster&r1=1.29&r2=1.30 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/cluster_mgr.c.diff?cvsroot=cluster&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/cnx_mgr.c.diff?cvsroot=cluster&r1=1.44&r2=1.45 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/globals.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/lib/libccs.c.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/cmanccs.c.diff?cvsroot=cluster&r1=1.39&r2=1.40 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/cman.in.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/Makefile.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/cman.diff?cvsroot=cluster&r1=1.34&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/options.c.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/simple_auth.h.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/main.c.diff?cvsroot=cluster&r1=1.45&r2=1.46 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/make/defines.mk.input.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/rgmanager.in.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/rgmanager.diff?cvsroot=cluster&r1=1.7&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_locks.c.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/utils/config-utils.sh.in.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/utils/config-utils.sh.diff?cvsroot=cluster&r1=1.6&r2=NONE From lhh@sourceware.org Mon Jan 7 18:53:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 07 Jan 2008 18:53:00 -0000 Subject: cluster/cman/lib libcman.c Message-ID: <20080107185315.18757.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-07 18:53:15 Modified files: cman/lib : libcman.c Log message: Correct signed vs. unsigned comparison on sparc64 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/lib/libcman.c.diff?cvsroot=cluster&r1=1.40&r2=1.41 From lhh@sourceware.org Mon Jan 7 18:58:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 07 Jan 2008 18:58:00 -0000 Subject: cluster configure Message-ID: <20080107185829.20001.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-07 18:58:29 Modified files: . : configure Log message: Figure out where slang is installed. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/configure.diff?cvsroot=cluster&r1=1.46&r2=1.47 From cfeist@sourceware.org Mon Jan 7 19:17:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Mon, 07 Jan 2008 19:17:00 -0000 Subject: cluster/group/dlm_controld Makefile Message-ID: <20080107191707.769.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: cfeist@sourceware.org 2008-01-07 19:17:07 Modified files: group/dlm_controld: Makefile Log message: Include dlm directory so we can use libdlm.h Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/dlm_controld/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 From cfeist@sourceware.org Mon Jan 7 20:10:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Mon, 07 Jan 2008 20:10:00 -0000 Subject: cluster/group/dlm_controld Makefile Message-ID: <20080107201024.32355.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: cfeist@sourceware.org 2008-01-07 20:10:24 Modified files: group/dlm_controld: Makefile Log message: Include dlm lib directory so we can use the libdlm library. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/dlm_controld/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.2&r2=1.4.2.3 From fabbione@sourceware.org Tue Jan 8 04:46:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 08 Jan 2008 04:46:00 -0000 Subject: cluster cman/init.d/Makefile rgmanager/src/res ... Message-ID: <20080108044632.29692.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-08 04:46:32 Modified files: cman/init.d : Makefile rgmanager/src/resources: Makefile make : install.mk rgmanager/init.d: Makefile Log message: Fix "off the source tree" install. This was a small regression introduced with the /etc/cluster/cluster.conf configure bits. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/Makefile.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/make/install.mk.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/Makefile.diff?cvsroot=cluster&r1=1.8&r2=1.9 From lhh@sourceware.org Tue Jan 8 15:03:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 08 Jan 2008 15:03:00 -0000 Subject: cluster/fence/agents/xvm ip_lookup.c Message-ID: <20080108150302.3386.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-08 15:03:02 Modified files: fence/agents/xvm: ip_lookup.c Log message: Fix build problem reported by Chris Feist Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/ip_lookup.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.2&r2=1.2.2.3 From lhh@sourceware.org Tue Jan 8 15:05:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 08 Jan 2008 15:05:00 -0000 Subject: cluster/fence/agents/xvm ip_lookup.c Message-ID: <20080108150524.3991.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-08 15:05:24 Modified files: fence/agents/xvm: ip_lookup.c Log message: Fix build problem reported by Chris Feist Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/ip_lookup.c.diff?cvsroot=cluster&r1=1.4&r2=1.5 From lhh@sourceware.org Tue Jan 8 22:12:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 08 Jan 2008 22:12:00 -0000 Subject: cluster/fence/agents/xvm ip_lookup.c Message-ID: <20080108221219.11241.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-08 22:12:19 Modified files: fence/agents/xvm: ip_lookup.c Log message: Roll back previous patch to ip_lookup.c Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/ip_lookup.c.diff?cvsroot=cluster&r1=1.5&r2=1.6 From fabbione@sourceware.org Wed Jan 9 11:56:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 09 Jan 2008 11:56:00 -0000 Subject: cluster/rgmanager/src/resources Makefile Message-ID: <20080109115608.9123.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-09 11:56:08 Modified files: rgmanager/src/resources: Makefile Log message: Fix mkdir invokation to not fail when dir already exists Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&r1=1.27&r2=1.28 From lhh@sourceware.org Wed Jan 9 18:54:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 09 Jan 2008 18:54:00 -0000 Subject: cluster/magma-plugins Makefile sm/sm.c Message-ID: <20080109185446.7128.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-09 18:54:46 Modified files: magma-plugins : Makefile magma-plugins/sm: sm.c Log message: Fix #294491 - make magma_sm.so retry in dlm EINPROG condition Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/magma-plugins/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/magma-plugins/sm/sm.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.12&r2=1.9.2.13 From lhh@sourceware.org Wed Jan 9 18:55:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 09 Jan 2008 18:55:00 -0000 Subject: cluster/magma-plugins Makefile Message-ID: <20080109185512.7393.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-09 18:55:12 Modified files: magma-plugins : Makefile Log message: Fix #294491 - make magma_sm.so retry in dlm EINPROG condition Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/magma-plugins/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 From rpeterso@sourceware.org Wed Jan 9 21:30:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Wed, 09 Jan 2008 21:30:00 -0000 Subject: cluster/gfs2/man gfs2_tool.8 Message-ID: <20080109213020.1421.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: rpeterso@sourceware.org 2008-01-09 21:30:20 Modified files: gfs2/man : gfs2_tool.8 Log message: Resolves: bz 426670: GFS2: man page for gfs2_tool has commented lockdump section Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/man/gfs2_tool.8.diff?cvsroot=cluster&r1=1.7&r2=1.8 From rpeterso@sourceware.org Wed Jan 9 21:30:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Wed, 09 Jan 2008 21:30:00 -0000 Subject: cluster/gfs2/man gfs2_tool.8 Message-ID: <20080109213050.1636.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: rpeterso@sourceware.org 2008-01-09 21:30:50 Modified files: gfs2/man : gfs2_tool.8 Log message: Resolves: bz 426670: GFS2: man page for gfs2_tool has commented lockdump section Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/man/gfs2_tool.8.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.4&r2=1.3.2.5 From fabbione@sourceware.org Thu Jan 10 09:28:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Thu, 10 Jan 2008 09:28:00 -0000 Subject: cluster/rgmanager include/message.h include/ms ... Message-ID: <20080110092841.1533.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-10 09:28:41 Modified files: rgmanager/include: message.h msgsimple.h platform.h rgmanager/src/clulib: msg_cluster.c msgtest.c rgmanager/src/daemons: main.c Log message: Fix alignment issues in rgmanager. This makes it possible to run rgmanager on sparc. Patch by Lon. Tested by both of us on x86, x86_64, parisc, ia64, sparc. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/message.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/msgsimple.h.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/platform.h.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/clulib/msg_cluster.c.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/clulib/msgtest.c.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/main.c.diff?cvsroot=cluster&r1=1.46&r2=1.47 From fabbione@sourceware.org Thu Jan 10 10:22:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Thu, 10 Jan 2008 10:22:00 -0000 Subject: cluster/rgmanager/src/resources apache.metadata Message-ID: <20080110102242.21467.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-10 10:22:42 Modified files: rgmanager/src/resources: apache.metadata Log message: Whitespace cleanup Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/apache.metadata.diff?cvsroot=cluster&r1=1.4&r2=1.5 From pcaulfield@sourceware.org Thu Jan 10 10:39:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Thu, 10 Jan 2008 10:39:00 -0000 Subject: cluster/cman cman_tool/join.c daemon/cmanccs.c Message-ID: <20080110103917.25838.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-10 10:39:17 Modified files: cman/cman_tool : join.c cman/daemon : cmanccs.c Log message: Add command-line override for 2node mode. Because of the way cman re-reads CCS it is quite possible to start up a cluster in 2 node mode manually, then add a third node via CCS (I think) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/join.c.diff?cvsroot=cluster&r1=1.52&r2=1.53 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/cmanccs.c.diff?cvsroot=cluster&r1=1.40&r2=1.41 From pcaulfield@sourceware.org Fri Jan 11 14:22:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Fri, 11 Jan 2008 14:22:00 -0000 Subject: cluster/cman/cman_tool join_ccs.c Message-ID: <20080111142212.13300.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: pcaulfield@sourceware.org 2008-01-11 14:22:11 Modified files: cman/cman_tool : join_ccs.c Log message: Always use the nodename in cluster.conf for cluster name. bz#428219 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/join_ccs.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.8&r2=1.7.2.9 From pcaulfield@sourceware.org Fri Jan 11 14:24:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Fri, 11 Jan 2008 14:24:00 -0000 Subject: cluster/cman/cman_tool join_ccs.c Message-ID: <20080111142419.14818.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL46 Changes by: pcaulfield@sourceware.org 2008-01-11 14:24:19 Modified files: cman/cman_tool : join_ccs.c Log message: Always the node name from cluster.conf as the node name. Fix fixes fencing and routing problems too in some circumstances. bz#428219 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/join_ccs.c.diff?cvsroot=cluster&only_with_tag=RHEL46&r1=1.7.2.8&r2=1.7.2.8.4.1 From jbrassow@sourceware.org Fri Jan 11 21:32:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 11 Jan 2008 21:32:00 -0000 Subject: cluster/rgmanager/src/resources lvm_by_vg.sh Message-ID: <20080111213255.20157.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-11 21:32:55 Modified files: rgmanager/src/resources: lvm_by_vg.sh Log message: - Bug #428448 - HA LVM service fails to relocate when I/O is running Was failing to add new tag when relocating. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_vg.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 From jbrassow@sourceware.org Fri Jan 11 21:32:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 11 Jan 2008 21:32:00 -0000 Subject: cluster/rgmanager/src/resources lvm_by_vg.sh Message-ID: <20080111213251.20133.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-01-11 21:32:51 Modified files: rgmanager/src/resources: lvm_by_vg.sh Log message: - Bug #428448 - HA LVM service fails to relocate when I/O is running Was failing to add new tag when relocating. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_vg.sh.diff?cvsroot=cluster&r1=1.2&r2=1.3 From jbrassow@sourceware.org Fri Jan 11 21:33:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 11 Jan 2008 21:33:00 -0000 Subject: cluster/rgmanager/src/resources lvm_by_vg.sh Message-ID: <20080111213331.20486.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: jbrassow@sourceware.org 2008-01-11 21:33:31 Modified files: rgmanager/src/resources: lvm_by_vg.sh Log message: - Bug #428475 - HA LVM service fails to relocate when I/O is running Was failing to add new tag when relocating. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm_by_vg.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 From fabbione@sourceware.org Mon Jan 14 05:26:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 14 Jan 2008 05:26:00 -0000 Subject: cluster/rgmanager/src/resources apache.sh Message-ID: <20080114052621.1116.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-14 05:26:21 Modified files: rgmanager/src/resources: apache.sh Log message: Allow the resource to run on Debian/Ubuntu systems without manual patching, by checking for the apache2 daemon if httpd is not available. Replace =~ '^/' sintax with less bash dependent version. Use grep -E instead of -P as perl regexp support is not built on all distros. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/apache.sh.diff?cvsroot=cluster&r1=1.10&r2=1.11 From teigland@sourceware.org Mon Jan 14 15:29:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 14 Jan 2008 15:29:00 -0000 Subject: cluster/gfs-kernel/src/dlm group.c Message-ID: <20080114152943.23827.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: teigland@sourceware.org 2008-01-14 15:29:43 Modified files: gfs-kernel/src/dlm: group.c Log message: bz 353311 Disassembling the module, the oops appears to be when dereferencing dlm->mg_nodes. I see one place where the mg_nodes list is modified without holding mg_nodes_lock, and that's in release_mg_nodes(). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/dlm/group.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.2.2&r2=1.8.2.3 From teigland@sourceware.org Mon Jan 14 15:35:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 14 Jan 2008 15:35:00 -0000 Subject: cluster/gfs-kernel/src/dlm mount.c Message-ID: <20080114153530.26335.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: teigland@sourceware.org 2008-01-14 15:35:30 Modified files: gfs-kernel/src/dlm: mount.c Log message: bz 324881 It's easy to tell if you've hit this bug, because a message like this will always appear in /var/log/messages: SM: 02000378 ignoring service callback id=2000144 event=1324 If you look at /proc/cluster/lock_dlm/debug on this node at this point, you'll see something like this at the end, which shows what the problem is: others_may_mount start_done 1322 b The event_id that others_may_mount uses when calling kcl_start_done() is incorrect; it's using 1322 when it should be 1324. I believe the fix is for others_may_mount() to read the event_id after taking the umount_lock semaphore which serializes others_may_mount() with a start callback from the lock_dlm thread. In this case, I believe the start callback is changing the event_id after others_may_mount reads it, and before othres_may_mount gets the umount_lock semaphore. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/dlm/mount.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11.2.3&r2=1.11.2.4 From teigland@sourceware.org Mon Jan 14 15:57:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 14 Jan 2008 15:57:00 -0000 Subject: cluster/dlm-kernel/src lockqueue.c Message-ID: <20080114155746.4826.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: teigland@sourceware.org 2008-01-14 15:57:46 Modified files: dlm-kernel/src : lockqueue.c Log message: bz 351321 add_to_requestqueue() can add a new message to the requestqueue just after process_requestqueue() checks it and determines it's empty. This means dlm_recvd will spin forever in wait_requestqueue() waiting for the message to be removed. The same problem was found and fixed in the RHEL5 code (and then subsequently changed again). This patch is the RHEL4 equivalent of the original RHEL5 fix. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/lockqueue.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.37.2.11&r2=1.37.2.12 From teigland@sourceware.org Mon Jan 14 16:00:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 14 Jan 2008 16:00:00 -0000 Subject: cluster/gfs-kernel/src/dlm thread.c Message-ID: <20080114160020.5604.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: teigland@sourceware.org 2008-01-14 16:00:20 Modified files: gfs-kernel/src/dlm: thread.c Log message: bz 352731 I've looked at other users of kthread_stop()/kthread_should_stop(), and most seem to incorporate a call to kthread_should_stop() within the test that adds the thread to a wait_queue. I'm guessing that that's what we should be doing also (and at the same time using wait_event_interruptible() instead of an open-coded equivalent.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/dlm/thread.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.16.2.6&r2=1.16.2.7 From rmccabe@sourceware.org Mon Jan 14 20:51:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 14 Jan 2008 20:51:00 -0000 Subject: conga ./conga.spec.in.in luci/site/luci/Extens ... Message-ID: <20080114205142.28532.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-14 20:51:42 Modified files: . : conga.spec.in.in luci/site/luci/Extensions: cluster_adapters.py LuciDB.py luci/cluster : busy_wait-macro Log message: Fix bz239387 (RFE: add timeouts for actions that can leave cluster unreachable) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.91&r2=1.92 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.277&r2=1.278 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/busy_wait-macro.diff?cvsroot=cluster&r1=1.1&r2=1.2 From teigland@sourceware.org Mon Jan 14 20:53:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 14 Jan 2008 20:53:00 -0000 Subject: cluster/group/daemon app.c cpg.c joinleave.c Message-ID: <20080114205335.29703.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland@sourceware.org 2008-01-14 20:53:35 Modified files: group/daemon : app.c cpg.c joinleave.c Log message: fix %llx printf warnings using (unsigned long long) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/app.c.diff?cvsroot=cluster&r1=1.55&r2=1.56 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/cpg.c.diff?cvsroot=cluster&r1=1.39&r2=1.40 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/joinleave.c.diff?cvsroot=cluster&r1=1.22&r2=1.23 From teigland@sourceware.org Mon Jan 14 20:54:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 14 Jan 2008 20:54:00 -0000 Subject: cluster/group/daemon app.c cpg.c joinleave.c Message-ID: <20080114205430.29983.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: teigland@sourceware.org 2008-01-14 20:54:30 Modified files: group/daemon : app.c cpg.c joinleave.c Log message: fix %llx printf warnings using (unsigned long long) bz 404451 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/app.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.52.2.3&r2=1.52.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/cpg.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.36.2.3&r2=1.36.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/daemon/joinleave.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.3&r2=1.19.2.4 From jbrassow@sourceware.org Mon Jan 14 22:46:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Mon, 14 Jan 2008 22:46:00 -0000 Subject: cluster/cmirror-kernel/src dm-clog-tfr.c dm-clog.c Message-ID: <20080114224658.20272.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-14 22:46:58 Modified files: cmirror-kernel/src: dm-clog-tfr.c dm-clog.c Log message: - clear memory before it is written to. (was causing mirror CTR to fail). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog-tfr.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.4&r2=1.2.2.5 From jbrassow@sourceware.org Mon Jan 14 22:52:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Mon, 14 Jan 2008 22:52:00 -0000 Subject: cluster/cmirror/src cluster.c functions.c func ... Message-ID: <20080114225217.21882.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-14 22:52:17 Modified files: cmirror/src : cluster.c functions.c functions.h link_mon.c link_mon.h local.c logging.h queues.c queues.h rbtree.c Log message: - Several small bug fixes -- More correct method of leaving CPG (on suspend) -- close log file desc after finished using -- fix problem with overlapping recoveries -- clean-up postsuspend so remote requests do not get lost -- missing 'break' statement causing seg fault -- better error checking Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.7&r2=1.1.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.6&r2=1.1.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/link_mon.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/link_mon.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/logging.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/rbtree.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 From rmccabe@sourceware.org Tue Jan 15 04:41:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 15 Jan 2008 04:41:00 -0000 Subject: conga luci/site/luci/Extensions/HelperFunction ... Message-ID: <20080115044141.5211.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-15 04:41:41 Modified files: luci/site/luci/Extensions: HelperFunctions.py LuciClusterInfo.py LuciValidation.py LuciZopeExternal.py homebase_adapters.py luci/site/luci/Extensions/ClusterModel: ModelBuilder.py luci/cluster : cluster_svc-macros . : Makefile clustermon.spec.in.in conga.spec.in.in Log message: Fix bz383071 (Virtual machine configuration - add field for "migration type" xml attr = "migrate") Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&r1=1.18&r2=1.19 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.54&r2=1.55 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Makefile.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.34&r2=1.35 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.92&r2=1.93 From rpeterso@sourceware.org Tue Jan 15 15:04:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Tue, 15 Jan 2008 15:04:00 -0000 Subject: cluster/gfs2/edit gfs2hex.c Message-ID: <20080115150445.29955.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: rpeterso@sourceware.org 2008-01-15 15:04:45 Modified files: gfs2/edit : gfs2hex.c Log message: Fixup contributed by Andy Price. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/edit/gfs2hex.c.diff?cvsroot=cluster&r1=1.14&r2=1.15 From rmccabe@sourceware.org Tue Jan 15 16:18:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 15 Jan 2008 16:18:00 -0000 Subject: cluster/fence/agents/ilo fence_ilo.pl Message-ID: <20080115161834.10939.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: rmccabe@sourceware.org 2008-01-15 16:18:34 Modified files: fence/agents/ilo: fence_ilo.pl Log message: Allow "option=(on|off|reboot)" (currently only fence_ilo takes "action") Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/ilo/fence_ilo.pl.diff?cvsroot=cluster&r1=1.10&r2=1.11 From rmccabe@sourceware.org Tue Jan 15 16:21:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 15 Jan 2008 16:21:00 -0000 Subject: cluster/fence/agents/ilo fence_ilo.pl Message-ID: <20080115162117.11554.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: rmccabe@sourceware.org 2008-01-15 16:21:17 Modified files: fence/agents/ilo: fence_ilo.pl Log message: fix bz428243: fence_ilo can not recognize option="off" but fence_wti can Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/ilo/fence_ilo.pl.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.5&r2=1.3.2.6 From jbrassow@sourceware.org Tue Jan 15 22:01:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Tue, 15 Jan 2008 22:01:00 -0000 Subject: cluster/cmirror/src functions.c local.c Message-ID: <20080115220118.26760.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-15 22:01:18 Modified files: cmirror/src : functions.c local.c Log message: - a 'return' instead of a 'goto' was skipping over some key initialization, causing core logged cluster mirrors not to work Bug #385001 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.7&r2=1.1.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.6&r2=1.1.2.7 From lhh@sourceware.org Tue Jan 15 22:34:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 15 Jan 2008 22:34:00 -0000 Subject: cluster/rgmanager/src/resources fs.sh Message-ID: <20080115223414.16020.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-15 22:34:14 Modified files: rgmanager/src/resources: fs.sh Log message: Fix #428346 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/fs.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.17.2.4&r2=1.17.2.5 From lhh@sourceware.org Tue Jan 15 22:44:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 15 Jan 2008 22:44:00 -0000 Subject: cluster/rgmanager/src/resources fs.sh Message-ID: <20080115224431.17769.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-15 22:44:31 Modified files: rgmanager/src/resources: fs.sh Log message: Fix #428346 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/fs.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.17.2.5&r2=1.17.2.6 From pcaulfield@sourceware.org Wed Jan 16 17:25:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 16 Jan 2008 17:25:00 -0000 Subject: cluster/dlm/lib libdlm.c Message-ID: <20080116172548.22467.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-16 17:25:48 Modified files: dlm/lib : libdlm.c Log message: Zero namelen when doing an unlock. On 32/64 bit systems it can make a horrible mess otherwise. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/lib/libdlm.c.diff?cvsroot=cluster&r1=1.37&r2=1.38 From lhh@sourceware.org Wed Jan 16 18:50:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 16 Jan 2008 18:50:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080116185029.28729.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-16 18:50:29 Modified files: rgmanager/src/daemons: rg_state.c Log message: Fix #60 error in #428346 bug Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.15&r2=1.24.2.16 From lhh@sourceware.org Wed Jan 16 18:51:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 16 Jan 2008 18:51:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080116185111.28925.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-16 18:51:11 Modified files: rgmanager/src/daemons: rg_state.c Log message: Fix #60 error in #428346 bug Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&r1=1.45&r2=1.46 From lhh@sourceware.org Wed Jan 16 19:10:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 16 Jan 2008 19:10:00 -0000 Subject: cluster/rgmanager/src/daemons service_op.c Message-ID: <20080116191054.13220.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-16 19:10:54 Modified files: rgmanager/src/daemons: service_op.c Log message: Fix #60 error in #428346 bug Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/service_op.c.diff?cvsroot=cluster&r1=1.2&r2=1.3 From lhh@sourceware.org Wed Jan 16 19:10:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 16 Jan 2008 19:10:00 -0000 Subject: cluster/rgmanager/src/daemons service_op.c Message-ID: <20080116191029.13037.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-16 19:10:29 Modified files: rgmanager/src/daemons: service_op.c Log message: Fix #60 error in #428346 bug Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/service_op.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 From pcaulfield@sourceware.org Thu Jan 17 09:40:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Thu, 17 Jan 2008 09:40:00 -0000 Subject: cluster/dlm/lib libdlm.c Message-ID: <20080117094012.5744.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: pcaulfield@sourceware.org 2008-01-17 09:40:12 Modified files: dlm/lib : libdlm.c Log message: Zero namelen when doing an unlock. On 32/64 bit systems it can make a horrible mess otherwise. bz#409221 has the gory details Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/lib/libdlm.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.32.2.3&r2=1.32.2.4 From rmccabe@sourceware.org Thu Jan 17 16:36:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 17 Jan 2008 16:36:00 -0000 Subject: conga/luci/site/luci/Extensions LuciValidation ... Message-ID: <20080117163631.18202.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-17 16:36:31 Modified files: luci/site/luci/Extensions: LuciValidation.py FenceHandler.py luci/site/luci/Extensions/ClusterModel: FenceDeviceAttr.py Log message: fix 238655 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&r1=1.29&r2=1.30 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 From cfeist@sourceware.org Thu Jan 17 16:54:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Thu, 17 Jan 2008 16:54:00 -0000 Subject: cluster/dlm/lib libdlm.c Message-ID: <20080117165422.27256.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: cfeist@sourceware.org 2008-01-17 16:54:22 Modified files: dlm/lib : libdlm.c Log message: Pulled from RHEL5 branch Zero namelen when doing an unlock. On 32/64 bit systems it can make a horrible mess otherwise. bz#409221 has the gory details Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/lib/libdlm.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.32.2.2&r2=1.32.2.2.2.1 From rmccabe@sourceware.org Thu Jan 17 17:38:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 17 Jan 2008 17:38:00 -0000 Subject: conga/ricci Changelog Makefile TODO configure ... Message-ID: <20080117173840.22358.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-17 17:38:40 Modified files: ricci : Changelog Makefile TODO configure ricci/common : ClientSocket.cpp Except.cpp File.cpp Logger.cpp Makefile Module.cpp Network.cpp Random.cpp ServerSocket.cpp Socket.cpp Thread.cpp Time.cpp Variable.cpp XML.cpp daemon_init.c executils.cpp executils_test.cpp signals.c utils.cpp ricci/docs : cluster_api.html logging_api.html modules.html modules_common.html reboot_api.html ricci_api.html rpm_api.html service_api.html storage-bd_template.html storage-bds.html storage-content.html storage-content_template.html storage-mapper_template.html storage-mappers.html storage_api.html variables.html ricci/include : APIerror.h Except.h File.h Logger.h Module.h Mutex.h Network.h Random.h Socket.h String.h Thread.h Time.h Variable.h XML.h XML_tags.h array_auto_ptr.h counting_auto_ptr.cpp counting_auto_ptr.h executils.h executils_test.h shred_allocator.h signals.h utils.h ricci/init.d : Makefile ricci ricci/make : defines.mk.in ricci/modules : Makefile ricci/modules/cluster: ClusterConf.cpp ClusterConf.h ClusterModule.cpp ClusterModule.h ClusterStatus.cpp ClusterStatus.h Clusvcadm.cpp Clusvcadm.h Fence.cpp Fence.h Makefile NoServiceManager.h Virt.cpp Virt.h main.cpp ricci/modules/cluster/clumon: Makefile README.cim README.snmpd ricci/modules/cluster/clumon/init.d: Makefile modclusterd ricci/modules/cluster/clumon/man: Makefile ricci/modules/cluster/clumon/src: Makefile ricci/modules/cluster/clumon/src/cim-provider: Makefile ricci/modules/cluster/clumon/src/common: Cluster.cpp ClusterMonitor.cpp Makefile Node.cpp Service.cpp ricci/modules/cluster/clumon/src/daemon: Communicator.cpp Communicator.h Makefile Monitor.cpp Monitor.h Peer.cpp Peer.h main.cpp ricci/modules/cluster/clumon/src/include: Cluster.h ClusterMonitor.h clumond_globals.h ricci/modules/cluster/clumon/src/snmp-agent: Makefile ricci/modules/log: LogParser.cpp LogParser.h LoggingModule.cpp LoggingModule.h Makefile main.cpp ricci/modules/rpm: Makefile PackageHandler.cpp PackageHandler.h RpmModule.cpp RpmModule.h main.cpp ricci/modules/service: Makefile ServiceManager.cpp ServiceManager.h ServiceModule.cpp ServiceModule.h main.cpp ricci/modules/storage: BD.cpp BD.h BDFactory.cpp BDFactory.h ClusterNotQuorateError.h ClusterNotRunningError.h ClvmdError.h Content.cpp Content.h ContentExtendedPartition.cpp ContentExtendedPartition.h ContentFS.cpp ContentFS.h ContentFactory.cpp ContentFactory.h ContentNone.cpp ContentNone.h ContentUnusable.cpp ContentUnusable.h ExtendedFS.cpp ExtendedFS.h FSController.cpp FSController.h FileMagic.cpp FileMagic.h GFS1.cpp GFS1.h GFS2.cpp GFS2.h HD.cpp HD.h LV.cpp LV.h LVM.cpp LVM.h LVMClusterLockingError.h MDRaid.cpp MDRaid.h MDRaidSource.cpp MDRaidSource.h MDRaidTarget.cpp MDRaidTarget.h Makefile Mapper.cpp Mapper.h MapperFactory.cpp MapperFactory.h MapperSource.cpp MapperSource.h MidAir.h MountHandler.cpp MountHandler.h PTSource.cpp PTSource.h PV.cpp PV.h Partition.cpp Partition.h PartitionTable.cpp PartitionTable.h Props.cpp Props.h StorageModule.cpp StorageModule.h SwapFS.cpp SwapFS.h System.cpp System.h UMountError.h UnsupportedFS.cpp UnsupportedFS.h VG.cpp VG.h ValidationError.h defines.h gfs_ondisk.h main.cpp mdadm_wrapper.cpp mdadm_wrapper.h parted_wrapper.cpp parted_wrapper.h ricci/pam.d : Makefile ricci/ricci : Auth.cpp Auth.h ClientInstance.cpp ClientInstance.h DBusController.cpp DBusController.h Makefile QueueLocker.cpp QueueLocker.h RebootModule.cpp RebootModule.h Ricci.cpp Ricci.h RicciWorker.cpp RicciWorker.h SSLInstance.cpp SSLInstance.h Server.cpp Server.h dbus_test.cpp main.cpp ricci_defines.h ricci/test : PropsObject.py Variable.py add_sources_renderer.py auth_page.py bd_remove_renderer.py bd_renderer.py communicator.py content_renderer.py dispatcher.py host_selection.py main_page.py mapper_renderer.py new_mapper_renderer.py new_target_renderer.py props_renderer.py ricci/test_suite: README SSLClient_send_to_ricci send_to_ricci Added files: ricci/common : .cvsignore sys_util.c sys_util.h ricci/modules/cluster: .cvsignore ricci/modules/cluster/clumon/src/cim-provider: .cvsignore ricci/modules/cluster/clumon/src/common: .cvsignore ricci/modules/cluster/clumon/src/daemon: .cvsignore ricci/modules/cluster/clumon/src/snmp-agent: .cvsignore ricci/modules/log: .cvsignore ricci/modules/rpm: .cvsignore ricci/modules/service: .cvsignore ricci/modules/storage: .cvsignore ricci/ricci : .cvsignore ricci/test_suite: .cvsignore ricci/test_suite/storage: fstab_add.xml fstab_del.xml mount_fs.xml umount_fs.xml umount_fs_bydev.xml Log message: Merge fixes for RHEL 5.2 from HEAD Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Changelog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.1&r2=1.11.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/TODO.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/configure.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.1&r2=1.8.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ClientSocket.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.2&r2=1.4.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Except.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/File.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Logger.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.3&r2=1.6.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Module.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Network.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Random.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ServerSocket.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Socket.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Thread.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Time.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Variable.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/XML.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.4&r2=1.6.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/daemon_init.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.2&r2=1.7.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils_test.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/signals.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/utils.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/cluster_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.3&r2=1.4.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/logging_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/modules.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/modules_common.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/reboot_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/ricci_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/rpm_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/service_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-bd_template.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-bds.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-content.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-content_template.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-mapper_template.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-mappers.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.2&r2=1.5.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/variables.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/APIerror.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Except.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/File.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Logger.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Module.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Mutex.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Network.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Random.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Socket.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/String.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Thread.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Time.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Variable.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/XML.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/XML_tags.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/array_auto_ptr.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/executils.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/executils_test.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/shred_allocator.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/signals.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/utils.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/ricci.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.3&r2=1.8.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/make/defines.mk.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.2&r2=1.8.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.3&r2=1.5.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.3&r2=1.15.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.6&r2=1.7.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.14.2.3&r2=1.14.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/NoServiceManager.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/README.cim.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/README.snmpd.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/modclusterd.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/man/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Cluster.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Node.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Service.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Communicator.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Communicator.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.10.2.7&r2=1.10.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.2&r2=1.5.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Peer.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Peer.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/Cluster.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/clumond_globals.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.3&r2=1.6.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7&r2=1.7.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9.2.4&r2=1.9.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.2&r2=1.5.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BD.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BD.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BDFactory.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BDFactory.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotQuorateError.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotRunningError.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClvmdError.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Content.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Content.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentExtendedPartition.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentExtendedPartition.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFactory.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFactory.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentNone.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentNone.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentUnusable.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentUnusable.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.1&r2=1.7.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.4&r2=1.7.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS1.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS1.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS2.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS2.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/HD.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/HD.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.3&r2=1.6.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.5&r2=1.7.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVMClusterLockingError.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaid.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7&r2=1.7.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaid.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidSource.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidSource.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidTarget.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidTarget.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12.2.1&r2=1.12.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperFactory.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperFactory.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperSource.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperSource.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MidAir.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.2&r2=1.4.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Props.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Props.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.2&r2=1.5.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UMountError.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UnsupportedFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UnsupportedFS.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.5&r2=1.8.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ValidationError.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/defines.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/gfs_ondisk.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/mdadm_wrapper.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/mdadm_wrapper.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.3&r2=1.8.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/pam.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Auth.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Auth.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7&r2=1.7.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/DBusController.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15&r2=1.15.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/DBusController.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.16.2.1&r2=1.16.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/QueueLocker.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/QueueLocker.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RebootModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RebootModule.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.5&r2=1.18.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11&r2=1.11.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.3&r2=1.5.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/dbus_test.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ricci_defines.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/PropsObject.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/Variable.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/add_sources_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/auth_page.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/bd_remove_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/bd_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/communicator.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/content_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/dispatcher.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/host_selection.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/main_page.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/mapper_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/new_mapper_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/new_target_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/props_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/README.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/SSLClient_send_to_ricci.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/send_to_ricci.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/fstab_add.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/fstab_del.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/mount_fs.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/umount_fs.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/umount_fs_bydev.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 From rmccabe@sourceware.org Thu Jan 17 18:45:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 17 Jan 2008 18:45:00 -0000 Subject: conga ./download_files ./conga.spec.in.in luci ... Message-ID: <20080117184511.5810.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-17 18:45:11 Modified files: . : download_files conga.spec.in.in luci/conga_ssl : setup.py luci/site/luci/Extensions: storage_adapters.py Added files: . : Plone-2.5.5-CMFPlone.patch Log message: Housekeeping, sync up plone Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Plone-2.5.5-CMFPlone.patch.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/download_files.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.93&r2=1.94 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/setup.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/storage_adapters.py.diff?cvsroot=cluster&r1=1.13&r2=1.14 From rmccabe@sourceware.org Thu Jan 17 18:57:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 17 Jan 2008 18:57:00 -0000 Subject: conga Plone-2.5.3-final_CMFPlone.patch Message-ID: <20080117185749.11872.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-17 18:57:49 Removed files: . : Plone-2.5.3-final_CMFPlone.patch Log message: stale Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Plone-2.5.3-final_CMFPlone.patch.diff?cvsroot=cluster&r1=1.2&r2=NONE From lhh@sourceware.org Thu Jan 17 19:38:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 17 Jan 2008 19:38:00 -0000 Subject: cluster/rgmanager/src/resources Makefile oracl ... Message-ID: <20080117193834.9709.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-17 19:38:34 Modified files: rgmanager/src/resources: Makefile Added files: rgmanager/src/resources: oracledb.sh Log message: Add Oracle(R) Database 10g Release 2 resource agent; resolves #349571 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/oracledb.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.13.2.8&r2=1.13.2.9 From teigland@sourceware.org Thu Jan 17 21:49:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 17 Jan 2008 21:49:00 -0000 Subject: cluster/dlm/tests/usertest dlmtest2.c Message-ID: <20080117214900.19838.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland@sourceware.org 2008-01-17 21:49:00 Modified files: dlm/tests/usertest: dlmtest2.c Log message: odds and ends not commited Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/tests/usertest/dlmtest2.c.diff?cvsroot=cluster&r1=1.10&r2=1.11 From adas@sourceware.org Fri Jan 18 16:47:00 2008 From: adas@sourceware.org (adas@sourceware.org) Date: Fri, 18 Jan 2008 16:47:00 -0000 Subject: cluster/cman/init.d cman Message-ID: <20080118164714.11384.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: adas@sourceware.org 2008-01-18 16:47:14 Modified files: cman/init.d : cman Log message: lon's patch removes 'Domain-0' check which was breaking xvm because cman starts before xend. patch also allows you to put NODENAME in /etc/sysconfig/cluster Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/cman.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.26.2.5&r2=1.26.2.6 From adas@sourceware.org Fri Jan 18 16:47:00 2008 From: adas@sourceware.org (adas@sourceware.org) Date: Fri, 18 Jan 2008 16:47:00 -0000 Subject: cluster/cman/init.d cman.in Message-ID: <20080118164702.11229.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: adas@sourceware.org 2008-01-18 16:47:02 Modified files: cman/init.d : cman.in Log message: lon's patch removes 'Domain-0' check which was breaking xvm because cman starts before xend. patch also allows you to put NODENAME in /etc/sysconfig/cluster Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/cman.in.diff?cvsroot=cluster&r1=1.1&r2=1.2 From jbrassow@sourceware.org Fri Jan 18 17:11:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 18 Jan 2008 17:11:00 -0000 Subject: cluster/cmirror/src cluster.c functions.c loca ... Message-ID: <20080118171107.30967.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-18 17:11:07 Modified files: cmirror/src : cluster.c functions.c local.c logging.h rbtree.c Log message: - fix compile problems on x86_64 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.8&r2=1.1.2.9 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.8&r2=1.1.2.9 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.7&r2=1.1.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/logging.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/rbtree.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 From adas@sourceware.org Fri Jan 18 17:51:00 2008 From: adas@sourceware.org (adas@sourceware.org) Date: Fri, 18 Jan 2008 17:51:00 -0000 Subject: cluster/gfs2/mount mount.gfs2.c Message-ID: <20080118175142.16254.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: adas@sourceware.org 2008-01-18 17:51:42 Modified files: gfs2/mount : mount.gfs2.c Log message: fix for bz333961 - adds support for -n and -f mount options Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mount/mount.gfs2.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.7&r2=1.20.2.8 From adas@sourceware.org Fri Jan 18 17:51:00 2008 From: adas@sourceware.org (adas@sourceware.org) Date: Fri, 18 Jan 2008 17:51:00 -0000 Subject: cluster/gfs2/mount mount.gfs2.c Message-ID: <20080118175138.16118.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: adas@sourceware.org 2008-01-18 17:51:38 Modified files: gfs2/mount : mount.gfs2.c Log message: fix for bz333961 - adds support for -n and -f mount options Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mount/mount.gfs2.c.diff?cvsroot=cluster&r1=1.27&r2=1.28 From lhh@sourceware.org Fri Jan 18 19:36:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 18 Jan 2008 19:36:00 -0000 Subject: cluster/rgmanager/src/utils clusvcadm.c Message-ID: <20080118193647.13258.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-18 19:36:47 Modified files: rgmanager/src/utils: clusvcadm.c Log message: fix 429248 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clusvcadm.c.diff?cvsroot=cluster&r1=1.23&r2=1.24 From jbrassow@sourceware.org Fri Jan 18 20:32:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 18 Jan 2008 20:32:00 -0000 Subject: cluster/cmirror/src Makefile Message-ID: <20080118203209.14668.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-18 20:32:09 Modified files: cmirror/src : Makefile Log message: - use ${libdir} instead of hardcoded value. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.4&r2=1.3.2.5 From jbrassow@sourceware.org Fri Jan 18 21:00:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 18 Jan 2008 21:00:00 -0000 Subject: cluster/cmirror/src cluster.c Message-ID: <20080118210016.24470.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-18 21:00:16 Modified files: cmirror/src : cluster.c Log message: - fix seg fault if there are pending checkpoint requests when a mirror is shutdown. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.9&r2=1.1.2.10 From rohara@sourceware.org Fri Jan 18 23:02:00 2008 From: rohara@sourceware.org (rohara@sourceware.org) Date: Fri, 18 Jan 2008 23:02:00 -0000 Subject: cluster/fence/agents/scsi fence_scsi.pl fence_ ... Message-ID: <20080118230258.27577.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: rohara@sourceware.org 2008-01-18 23:02:58 Modified files: fence/agents/scsi: fence_scsi.pl fence_scsi_test.pl scsi_reserve Log message: BZ: 373491, 373511, 373531, 373541, 373571, 429033 BZ: 373491, 373511, 373531, 373541, 373571, 429033 - Prevent "reservation conflict" messageswhen scsi_reserve starts. - Leave the fence domain if scsi_reserve fails to register with any device. - Improve logging in scsi_reserve script. - Use "locking_type = 0" for all lvm commands (ie. vgs). - Fix SCSI reservations scripts to handle LVM mirrors and stripes. - Not an error if fence_scsi attempts to remove a non-existent key from a device. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/fence_scsi.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.6&r2=1.5.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/fence_scsi_test.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/scsi_reserve.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.8&r2=1.1.2.9 From fabbione@sourceware.org Mon Jan 21 14:37:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 21 Jan 2008 14:37:00 -0000 Subject: cluster/gfs2/mount umount.gfs2.c Message-ID: <20080121143756.1427.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-21 14:37:56 Modified files: gfs2/mount : umount.gfs2.c Log message: Add fake support for -r option at umount so we don't fail if gfs2 is not umounted by it's init script. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/mount/umount.gfs2.c.diff?cvsroot=cluster&r1=1.15&r2=1.16 From teigland@sourceware.org Mon Jan 21 20:17:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 21 Jan 2008 20:17:00 -0000 Subject: cluster/group/gfs_controld plock.c Message-ID: <20080121201744.21315.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: teigland@sourceware.org 2008-01-21 20:17:44 Modified files: group/gfs_controld: plock.c Log message: bz 429546 Fix an alignment problem with ppc64. Things work if we do the byte-swapping on the original structure and then copy it into the final buffer, instead of copying first and then trying to do the byte-swapping at an offset within the send buffer. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/gfs_controld/plock.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.8&r2=1.25.2.9 From jbrassow@sourceware.org Mon Jan 21 20:18:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Mon, 21 Jan 2008 20:18:00 -0000 Subject: cluster/cmirror/src clogd.c queues.c Message-ID: <20080121201844.21698.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-21 20:18:44 Modified files: cmirror/src : clogd.c queues.c Log message: s/LOG_PRINT/LOG_DBG/ too verbose on exit/signals Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/clogd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 From teigland@sourceware.org Mon Jan 21 20:19:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 21 Jan 2008 20:19:00 -0000 Subject: cluster/group/gfs_controld plock.c Message-ID: <20080121201908.22231.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: teigland@sourceware.org 2008-01-21 20:19:08 Modified files: group/gfs_controld: plock.c Log message: bz 429546 Fix an alignment problem with ppc64. Things work if we do the byte-swapping on the original structure and then copy it into the final buffer, instead of copying first and then trying to do the byte-swapping at an offset within the send buffer. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/gfs_controld/plock.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.25.2.6&r2=1.25.2.6.2.1 From teigland@sourceware.org Mon Jan 21 20:21:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 21 Jan 2008 20:21:00 -0000 Subject: cluster/group/gfs_controld plock.c Message-ID: <20080121202108.22972.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland@sourceware.org 2008-01-21 20:21:08 Modified files: group/gfs_controld: plock.c Log message: bz 429546 Fix an alignment problem with ppc64. Things work if we do the byte-swapping on the original structure and then copy it into the final buffer, instead of copying first and then trying to do the byte-swapping at an offset within the send buffer. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/gfs_controld/plock.c.diff?cvsroot=cluster&r1=1.36&r2=1.37 From jbrassow@sourceware.org Mon Jan 21 20:37:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Mon, 21 Jan 2008 20:37:00 -0000 Subject: cluster/cmirror-kernel/src dm-clog.c Message-ID: <20080121203703.30175.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-21 20:37:03 Modified files: cmirror-kernel/src: dm-clog.c Log message: - name change s/clustered_/clustered-/ Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.5&r2=1.2.2.6 From jbrassow@sourceware.org Mon Jan 21 22:31:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Mon, 21 Jan 2008 22:31:00 -0000 Subject: cluster/ccs/lib libccs.c Message-ID: <20080121223154.10850.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-01-21 22:31:54 Modified files: ccs/lib : libccs.c Log message: - ccs library now checks for bad file descriptors as input Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/lib/libccs.c.diff?cvsroot=cluster&r1=1.14&r2=1.15 From lhh@sourceware.org Mon Jan 21 22:37:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 21 Jan 2008 22:37:00 -0000 Subject: cluster/rgmanager/src daemons/main.c utils/clu ... Message-ID: <20080121223717.15092.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-21 22:37:17 Modified files: rgmanager/src/daemons: main.c rgmanager/src/utils: clulog.c Log message: Fix ccs connect error handling Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/main.c.diff?cvsroot=cluster&r1=1.47&r2=1.48 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clulog.c.diff?cvsroot=cluster&r1=1.5&r2=1.6 From rmccabe@sourceware.org Mon Jan 21 23:17:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 21 Jan 2008 23:17:00 -0000 Subject: conga ./clustermon.spec.in.in make/version.in Message-ID: <20080121231726.7032.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-21 23:17:26 Modified files: . : clustermon.spec.in.in make : version.in Log message: - Update the version number - Update the spec file with the bz# for the RHEL52 fix. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.27&r2=1.18.2.28 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.28&r2=1.21.2.29 From rmccabe@sourceware.org Mon Jan 21 23:21:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 21 Jan 2008 23:21:00 -0000 Subject: conga clustermon.spec.in.in Message-ID: <20080121232147.8696.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-21 23:21:47 Modified files: . : clustermon.spec.in.in Log message: Remove extra .1 in the version number Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.28&r2=1.18.2.29 From rmccabe@sourceware.org Tue Jan 22 15:02:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 22 Jan 2008 15:02:00 -0000 Subject: conga/luci homebase/form-macros homebase/homeb ... Message-ID: <20080122150233.15704.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-22 15:02:33 Modified files: luci/homebase : form-macros homebase_common.js index_html validate_cluster_add_initial.js validate_sys_remove.js luci/plone-custom: conga.js conga_ajax.js luci/cluster : form-chooser form-macros index_html Added files: luci/plone-custom: update_hostinfo.js validate_auth.js Log message: sync up with my local tree - fixes for 252348 and 230462 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.64&r2=1.65 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&r1=1.23&r2=1.24 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_remove.js.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/update_hostinfo.js.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/validate_auth.js.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_ajax.js.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&r1=1.23&r2=1.24 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.218&r2=1.219 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&r1=1.40&r2=1.41 From rmccabe@sourceware.org Tue Jan 22 15:05:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 22 Jan 2008 15:05:00 -0000 Subject: conga/luci/site/luci/Extensions HelperFunction ... Message-ID: <20080122150518.16666.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-22 15:05:18 Modified files: luci/site/luci/Extensions: HelperFunctions.py LuciValidation.py LuciZopeAsync.py LuciZopeExternal.py cluster_adapters.py homebase_adapters.py Log message: sync up with my local tree - fixes for 252348 and 230462 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.278&r2=1.279 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.55&r2=1.56 From rmccabe@sourceware.org Tue Jan 22 15:07:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 22 Jan 2008 15:07:00 -0000 Subject: conga/luci/conga_ssl SSLClient.cpp Message-ID: <20080122150746.22290.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-22 15:07:46 Modified files: luci/conga_ssl : SSLClient.cpp Log message: sync up with my local tree - fixes for 252348 and 230462 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 From rmccabe@sourceware.org Tue Jan 22 15:20:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 22 Jan 2008 15:20:00 -0000 Subject: conga conga.spec.in.in Message-ID: <20080122152028.29523.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-22 15:20:28 Modified files: . : conga.spec.in.in Log message: sync changelog with bugzilla Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.94&r2=1.95 From rmccabe@sourceware.org Wed Jan 23 04:34:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 23 Jan 2008 04:34:00 -0000 Subject: conga/luci cluster/form-macros homebase/valida ... Message-ID: <20080123043424.694.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-23 04:34:24 Modified files: luci/cluster : form-macros luci/homebase : validate_cluster_add_initial.js luci/plone-custom: clusterportlet.css luci/site/luci/Extensions: LuciClusterActions.py LuciValidation.py ResourceHandler.py RicciQueries.py cluster_adapters.py homebase_adapters.py luci/site/luci/var: Data.fs Added files: luci/plone-custom: clusterbanner.png Log message: sync some odds and ends Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.219&r2=1.220 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterbanner.png.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterportlet.css.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.279&r2=1.280 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.56&r2=1.57 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&r1=1.27&r2=1.28 From rmccabe@sourceware.org Wed Jan 23 04:45:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 23 Jan 2008 04:45:00 -0000 Subject: conga/luci ChangeLog Makefile configure load_s ... Message-ID: <20080123044457.28290.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-23 04:44:57 Modified files: luci : ChangeLog Makefile configure load_site.py pack.py luci/cluster : Makefile clu_portlet_fetcher fence_device.js form-chooser form-macros index_html portlet_cluconfig portlet_cluconfig_macro resource-form-macros resource_form_handlers.js validate_config_fence.js validate_config_general.js validate_config_gulm.js validate_config_multicast.js validate_config_qdisk.js validate_create_gulm.js validate_fdom.js validate_fence.js validate_xvm_key.js luci/conga_ssl : Makefile SSLClient.cpp SSLClient.h conga_ssl_lib.cpp setup.py luci/docs : Makefile config_rhel5 user_manual.html luci/homebase : Makefile form-chooser form-macros homebase_common.js index_html validate_cluster_add.js validate_cluster_add_initial.js validate_perm.js validate_sys_add.js validate_sys_remove.js validate_user_add.js validate_user_del.js luci/init.d : Makefile luci luci/logs : Makefile index_html luci/make : defines.mk.in luci/plone-custom: Makefile README conga.js conga_ajax.js failsafe_login_form.cpt footer global_personalbar login_form.cpt login_form_validate.vpy login_success main_template portlet_login luci/site : Makefile luci/site/luci/Extensions: FenceHandler.py HelperFunctions.py LuciClusterActions.py LuciClusterInfo.py LuciDB.py LuciSyslog.py LuciZope.py LuciZopeAsync.py LuciZopeClusterPortal.py LuciZopeExternal.py LuciZopePerm.py PropsObject.py ResourceHandler.py RicciQueries.py StorageReport.py Variable.py cluster_adapters.py conga_constants.py conga_ssl.py conga_storage_constants.py homebase_adapters.py ricci_communicator.py ricci_defines.py storage_adapters.py luci/site/luci/Extensions/ClusterModel: Apache.py BaseResource.py Cluster.py ClusterNode.py ClusterNodes.py Clusterfs.py Cman.py Device.py FailoverDomain.py FailoverDomainNode.py FailoverDomains.py Fence.py FenceDaemon.py FenceDevice.py FenceDevices.py FenceXVMd.py Fs.py Gulm.py Heuristic.py Ip.py LVM.py Lockserver.py Method.py ModelBuilder.py Multicast.py MySQL.py NFSClient.py NFSExport.py Netfs.py OpenLDAP.py Postgres8.py QuorumD.py RefObject.py Resources.py Rm.py SAPDatabase.py SAPInstance.py Samba.py Script.py Service.py TagObject.py Tomcat5.py Totem.py Vm.py luci/site/luci/Products/ManagedSystem: ManagedSystem.py __init__.py luci/site/luci/Products/ManagedSystem/skins: managedsystem_edit_form.cpt managedsystem_view.pt luci/site/luci/bin: runzope.in luci/site/luci/etc: zope.conf.in luci/site/luci/var: Data.fs luci/storage : Makefile cache_report check-batch clu_portlet_fetcher form-chooser form-macros index_html mappings_macros mappings_provider portlet_cluconfig portlet_cluconfig_macro validate_html luci/sysconfig : Makefile luci luci/test : cleaner.py conga_Helpers.py luci/utils : Makefile luci_admin luci_cleanup luci_manage Added files: luci/cluster : busy_wait-macro cluster_config-macros cluster_svc-macros fdom-macros fence-macros system_svc-macros validate_sys_svc.js luci/plone-custom: 100wait.gif 16services.png arrow_down.png arrow_right.png black_bar_40.png black_right_end_40.png blue_bar_40.png blue_cap_40.png blue_right_end_40.png clusterbanner.png clusterportlet.css configured.png conga_storage.css cursor-disabled.png fDom.png icon_bd_LV.png icon_bd_LV_snapshot.png icon_bd_crypto.png icon_bd_ide.png icon_bd_multipath.png icon_bd_net.png icon_bd_partition.png icon_bd_raid.png icon_bd_scsi.png icon_content_FS.png icon_content_PV.png icon_mapper_PT.png icon_mapper_VG.png icon_mapper_crypto.png icon_mapper_multipath.png icon_mapper_raid.png installed.png joined.png luci.css node_active.png node_inactive.png node_unknown.png notstarted.png rebooted.png red_bar_40.png red_cap_40.png red_right_end_40.png selection_1px_40.png selection_bar_40.png selection_left_end_40.png selection_right_end_40.png small_fdom.png small_node_active.png small_node_inactive.png small_node_unknown.png small_svc.png small_svc_stopped.png snapshot.gif spinner.gif storage_svs.css storage_tree.css storage_validation.css svc_reload.png svc_reload_active.png svc_reload_disabled.png svc_start.png svc_start_active.png svc_start_disabled.png svc_stop.png svc_stop_active.png svc_stop_disabled.png sys_svc.css tree_bullet.gif tree_closed.gif tree_opened.gif tree_transparent.gif update_hostinfo.js validate_auth.js x.png luci/site/luci/Extensions: LuciValidation.py system_adapters.py luci/site/luci/Extensions/ClusterModel: Altname.py FenceDeviceAttr.py luci/storage : cylinder_select.js popup_log.js storage_async.js storage_content.js storage_probing.js storage_svs.js storage_utils.js storage_validation.js Removed files: luci/cluster : 100wait.gif 16services.png arrow_down.png arrow_right.png clusterportlet.css configured.png fDom.png installed.png joined.png node_active.png node_inactive.png node_unknown.png notstarted.png rebooted.png small_fdom.png small_node_active.png small_node_inactive.png small_node_unknown.png small_svc.png small_svc_stopped.png luci/homebase : luci_homebase.css x.png luci/site/luci/Extensions/ClusterModel: GeneralError.py luci/storage : 100wait.gif black_bar_40.png black_right_end_40.png blue_bar_40.png blue_cap_40.png blue_right_end_40.png icon_bd_LV.png icon_bd_LV_snapshot.png icon_bd_crypto.png icon_bd_ide.png icon_bd_multipath.png icon_bd_net.png icon_bd_partition.png icon_bd_raid.png icon_bd_scsi.png icon_content_FS.png icon_content_PV.png icon_mapper_PT.png icon_mapper_VG.png icon_mapper_crypto.png icon_mapper_multipath.png icon_mapper_raid.png red_bar_40.png red_cap_40.png red_right_end_40.png selection_1px_40.png selection_bar_40.png selection_left_end_40.png selection_right_end_40.png snapshot.gif tree_bullet.gif tree_closed.gif tree_opened.gif tree_transparent.gif Log message: Sync up for RHEL52 fixes Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.4&r2=1.20.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/configure.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/load_site.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.14.2.2&r2=1.14.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/pack.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.2&r2=1.4.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/busy_wait-macro.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fdom-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_sys_svc.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/clu_portlet_fetcher.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence_device.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.7&r2=1.2.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12.2.6&r2=1.12.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.31&r2=1.90.2.32 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.13&r2=1.20.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/portlet_cluconfig.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.2&r2=1.2.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/portlet_cluconfig_macro.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.8&r2=1.21.2.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.12&r2=1.20.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_fence.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_general.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_gulm.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.4.2&r2=1.3.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.5&r2=1.4.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_create_gulm.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fdom.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.4.2&r2=1.3.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.6&r2=1.1.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_xvm_key.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/100wait.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/16services.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/arrow_down.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/arrow_right.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/clusterportlet.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/configured.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fDom.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/installed.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/joined.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/notstarted.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/rebooted.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_fdom.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_svc.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_svc_stopped.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/conga_ssl_lib.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/setup.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/config_rhel5.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/user_manual.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.4&r2=1.7.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.10.2.1&r2=1.10.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.11&r2=1.44.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.13.2.5&r2=1.13.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.5&r2=1.18.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.5&r2=1.4.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_perm.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_add.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_remove.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.2&r2=1.2.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_add.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_del.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/luci_homebase.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.28.2.6&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/x.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/luci.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.2&r2=1.11.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/logs/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/logs/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/make/defines.mk.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/100wait.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/16services.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/arrow_down.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/arrow_right.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/black_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/black_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/blue_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/blue_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/blue_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterbanner.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterportlet.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/configured.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_storage.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/cursor-disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/fDom.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_LV.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_LV_snapshot.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_ide.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_net.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_partition.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_scsi.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_content_FS.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_content_PV.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_PT.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_VG.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/installed.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/joined.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/notstarted.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/rebooted.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/red_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/red_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/red_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_1px_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_left_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_fdom.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_svc.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_svc_stopped.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/snapshot.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/spinner.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/storage_svs.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/storage_tree.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/storage_validation.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_reload.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_reload_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_reload_disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_start.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_start_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_start_disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_stop.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_stop_active.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_stop_disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/sys_svc.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_bullet.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_closed.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_opened.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_transparent.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/update_hostinfo.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/validate_auth.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/x.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/README.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_ajax.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.2&r2=1.2.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/failsafe_login_form.cpt.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/footer.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.2&r2=1.2.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/global_personalbar.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form.cpt.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form_validate.vpy.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_success.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/main_template.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/portlet_login.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9&r2=1.9.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.4&r2=1.11.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/system_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.10&r2=1.4.2.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.5&r2=1.4.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.5&r2=1.1.4.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.8&r2=1.1.4.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.5&r2=1.1.4.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciSyslog.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.5&r2=1.2.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.4&r2=1.1.4.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeClusterPortal.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopePerm.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/StorageReport.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.6&r2=1.20.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/Variable.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.40&r2=1.120.2.41 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.14&r2=1.19.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_ssl.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_storage_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.1&r2=1.8.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.34.2.14&r2=1.34.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9.2.13&r2=1.9.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_defines.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/storage_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.4&r2=1.7.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Altname.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Apache.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/BaseResource.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cluster.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNodes.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Clusterfs.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cman.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Device.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomain.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomainNode.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomains.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fence.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevices.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceXVMd.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fs.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Gulm.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Heuristic.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Ip.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/LVM.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Lockserver.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Method.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.5&r2=1.1.4.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Multicast.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/MySQL.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/NFSClient.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/NFSExport.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Netfs.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OpenLDAP.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Postgres8.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/QuorumD.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/RefObject.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Resources.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Rm.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SAPDatabase.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SAPInstance.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Samba.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Script.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Service.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/TagObject.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Tomcat5.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Totem.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Vm.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/GeneralError.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/ManagedSystem.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/__init__.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_edit_form.cpt.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_view.pt.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/bin/runzope.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/etc/zope.conf.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.25&r2=1.15.2.26 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cylinder_select.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/popup_log.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_async.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_content.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_probing.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_svs.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_utils.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_validation.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cache_report.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/check-batch.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/clu_portlet_fetcher.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.17.2.11&r2=1.17.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.4&r2=1.7.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_provider.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig_macro.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/validate_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/100wait.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/black_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/black_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_LV.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_LV_snapshot.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_ide.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_net.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_partition.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_scsi.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_content_FS.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_content_PV.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_PT.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_VG.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_1px_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_left_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/snapshot.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_bullet.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_closed.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_opened.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_transparent.gif.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/sysconfig/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/sysconfig/luci.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/cleaner.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/conga_Helpers.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.14.2.2&r2=1.14.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.50.2.5&r2=1.50.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_cleanup.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_manage.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 From rmccabe@sourceware.org Wed Jan 23 04:56:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 23 Jan 2008 04:56:00 -0000 Subject: conga Makefile autogen.sh clustermon.spec.in.i ... Message-ID: <20080123045616.24823.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-23 04:56:16 Modified files: . : Makefile autogen.sh clustermon.spec.in.in configure conga.spec.in.in download_files Added files: . : Plone-2.5.5-CMFPlone.patch Removed files: . : Plone-2.5.3-final_CMFPlone.patch Log message: sync up build scripts and changelogs Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Plone-2.5.5-CMFPlone.patch.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.2&r2=1.11.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/autogen.sh.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.29&r2=1.18.2.30 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/configure.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.61&r2=1.45.2.62 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/download_files.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Plone-2.5.3-final_CMFPlone.patch.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.1&r2=NONE From rmccabe@sourceware.org Wed Jan 23 04:57:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 23 Jan 2008 04:57:00 -0000 Subject: conga conga.spec.in.in Message-ID: <20080123045718.6150.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-23 04:57:18 Modified files: . : conga.spec.in.in Log message: It's 2008. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.62&r2=1.45.2.63 From rmccabe@sourceware.org Wed Jan 23 05:20:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 23 Jan 2008 05:20:00 -0000 Subject: conga conga.spec.in.in Message-ID: <20080123052044.18925.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-23 05:20:44 Modified files: . : conga.spec.in.in Log message: Plone now requires this Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.63&r2=1.45.2.64 From jbrassow@sourceware.org Wed Jan 23 21:21:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 23 Jan 2008 21:21:00 -0000 Subject: cluster/cmirror/src clogd.c cluster.c cluster. ... Message-ID: <20080123212106.22112.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-23 21:21:06 Modified files: cmirror/src : clogd.c cluster.c cluster.h functions.c local.c local.h queues.c queues.h Log message: - better cleanup on exit - pull rbtrees in favor of simple list until later Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/clogd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.10&r2=1.1.2.11 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.9&r2=1.1.2.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.8&r2=1.1.2.9 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 From jbrassow@sourceware.org Wed Jan 23 21:22:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 23 Jan 2008 21:22:00 -0000 Subject: cluster/cmirror-kernel/src dm-clog.c Message-ID: <20080123212228.22736.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-23 21:22:28 Modified files: cmirror-kernel/src: dm-clog.c Log message: - remember CTR string so if userspace server dies and restarts, we can pick up where we left off. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.6&r2=1.2.2.7 From lhh@sourceware.org Thu Jan 24 00:19:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 24 Jan 2008 00:19:00 -0000 Subject: cluster/cman/qdisk disk.c Message-ID: <20080124001959.25076.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-24 00:19:59 Modified files: cman/qdisk : disk.c Log message: Fix broken device size checking. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/disk.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.4.3&r2=1.4.4.4 From rmccabe@sourceware.org Thu Jan 24 06:14:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 24 Jan 2008 06:14:00 -0000 Subject: conga/ricci/ricci RicciWorker.cpp Message-ID: <20080124061437.15017.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-24 06:14:37 Modified files: ricci/ricci : RicciWorker.cpp Log message: Fix stupid bug that caused reading batch jobs with XML longer than 4k to fail. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.cpp.diff?cvsroot=cluster&r1=1.16&r2=1.17 From lhh@sourceware.org Thu Jan 24 14:58:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 24 Jan 2008 14:58:00 -0000 Subject: cluster/cman/qdisk score.c Message-ID: <20080124145838.22625.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-24 14:58:38 Modified files: cman/qdisk : score.c Log message: Unblock signals after fork() so heuristics using signals don't hang Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/score.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.4&r2=1.1.2.5 From lhh@sourceware.org Thu Jan 24 14:58:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 24 Jan 2008 14:58:00 -0000 Subject: cluster/cman/qdisk score.c Message-ID: <20080124145854.22795.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL46 Changes by: lhh@sourceware.org 2008-01-24 14:58:54 Modified files: cman/qdisk : score.c Log message: Unblock signals after fork() so heuristics using signals don't hang Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/score.c.diff?cvsroot=cluster&only_with_tag=RHEL46&r1=1.1.2.4&r2=1.1.2.4.4.1 From lhh@sourceware.org Thu Jan 24 17:01:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 24 Jan 2008 17:01:00 -0000 Subject: cluster/cman/qdisk score.c Message-ID: <20080124170055.4628.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-24 17:00:55 Modified files: cman/qdisk : score.c Log message: Unblock signals after fork() so heuristics using signals don't hang Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/score.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.4.3&r2=1.2.4.4 From adas@sourceware.org Thu Jan 24 18:29:00 2008 From: adas@sourceware.org (adas@sourceware.org) Date: Thu, 24 Jan 2008 18:29:00 -0000 Subject: cluster/gfs/gfs_quota gfs_quota.h main.c Makef ... Message-ID: <20080124182913.31481.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: adas@sourceware.org 2008-01-24 18:29:13 Modified files: gfs/gfs_quota : gfs_quota.h main.c Makefile Added files: gfs/gfs_quota : layout.c Log message: fix for bug 430133 - We don't run through the entire gfs_quota sparse file to do a list operation anymore. We get the layout of the gfs_quota file on disk and only read quota information off the data blocks that are actually in use. This is the userland (gfs_quota) part of the fix. There is another accompanying gfs-kernel fix (bz 430134) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_quota/layout.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_quota/gfs_quota.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.16.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_quota/main.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/gfs_quota/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1 From adas@sourceware.org Thu Jan 24 18:30:00 2008 From: adas@sourceware.org (adas@sourceware.org) Date: Thu, 24 Jan 2008 18:30:00 -0000 Subject: cluster/gfs-kernel/src/gfs ioctl.c Message-ID: <20080124183018.32063.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: adas@sourceware.org 2008-01-24 18:30:18 Modified files: gfs-kernel/src/gfs: ioctl.c Log message: fix for bug 430134 - Added functionality to GFS_IOCTL_SUPER to provide metadata of the hidden quota file. This allows the userland tool gfs_quota to perform efficient list operations (bz 430133). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.13.2.4&r2=1.13.2.5 From lhh@sourceware.org Thu Jan 24 18:42:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 24 Jan 2008 18:42:00 -0000 Subject: cluster/cman/qdisk score.c Message-ID: <20080124184213.4709.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-24 18:42:12 Modified files: cman/qdisk : score.c Log message: Unblock signals after fork() so heuristics using signals don't hang Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/score.c.diff?cvsroot=cluster&r1=1.5&r2=1.6 From bmarzins@sourceware.org Thu Jan 24 20:08:00 2008 From: bmarzins@sourceware.org (bmarzins@sourceware.org) Date: Thu, 24 Jan 2008 20:08:00 -0000 Subject: cluster/gfs-kernel/src/gfs glock.c Message-ID: <20080124200844.18311.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: bmarzins@sourceware.org 2008-01-24 20:08:43 Modified files: gfs-kernel/src/gfs: glock.c Log message: Fix for bz #426291. gfs_glock_dq was traversing the gl_holders list without holding the gl_spin spinlock, this was causing a problem when the list item it was currently looking at got removed from the list. The solution is to not traverse the list, because it is unncessary. Unfortunately, there is also a bug in this section of code, where you can't guarantee that you will not cache a glock held with GL_NOCACHE. Fixing this issue requires significantly more work. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/glock.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.29.2.5&r2=1.29.2.5.2.1 From bmarzins@sourceware.org Thu Jan 24 20:25:00 2008 From: bmarzins@sourceware.org (bmarzins@sourceware.org) Date: Thu, 24 Jan 2008 20:25:00 -0000 Subject: cluster/gfs-kernel/src/gfs glock.c Message-ID: <20080124202510.23947.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: bmarzins@sourceware.org 2008-01-24 20:25:10 Modified files: gfs-kernel/src/gfs: glock.c Log message: Fix for bz #426291. gfs_glock_dq was traversing the gl_holders list without holding the gl_spin spinlock, this was causing a problem when the list item it was currently looking at got removed from the list. The solution is to not traverse the list, because it is unncessary. Unfortunately, there is also a bug in this section of code, where you can't guarantee that you will not cache a glock held with GL_NOCACHE. Fixing this issue requires significantly more work. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/glock.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.29.2.5&r2=1.29.2.6 From bmarzins@sourceware.org Thu Jan 24 20:42:00 2008 From: bmarzins@sourceware.org (bmarzins@sourceware.org) Date: Thu, 24 Jan 2008 20:42:00 -0000 Subject: cluster/gfs-kernel/src/gfs glock.c Message-ID: <20080124204201.1792.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: bmarzins@sourceware.org 2008-01-24 20:42:01 Modified files: gfs-kernel/src/gfs: glock.c Log message: Fix for bz #426291. gfs_glock_dq was traversing the gl_holders list without holding the gl_spin spinlock, this was causing a problem when the list item it was currently looking at got removed from the list. The solution is to not traverse the list, because it is unncessary. Unfortunately, there is also a bug in this section of code, where you can't guarantee that you will not cache a glock held with GL_NOCACHE. Fixing this issue requires significantly more work. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/glock.c.diff?cvsroot=cluster&r1=1.35&r2=1.36 From rpeterso@sourceware.org Thu Jan 24 20:51:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Thu, 24 Jan 2008 20:51:00 -0000 Subject: cluster/gfs-kernel/src/gfs gfs_ioctl.h ioctl.c ... Message-ID: <20080124205146.6205.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: rpeterso@sourceware.org 2008-01-24 20:51:46 Modified files: gfs-kernel/src/gfs: gfs_ioctl.h ioctl.c ioctl.h ops_file.c Log message: Resolves: bz 429633: gfs_tool doesn't recognize GFS file sytem Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/gfs_ioctl.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11&r2=1.11.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.13.2.5&r2=1.13.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.28.2.3&r2=1.28.2.4 From rpeterso@sourceware.org Thu Jan 24 20:54:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Thu, 24 Jan 2008 20:54:00 -0000 Subject: cluster/gfs-kernel/src/gfs gfs_ioctl.h ioctl.c ... Message-ID: <20080124205431.7415.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: rpeterso@sourceware.org 2008-01-24 20:54:31 Modified files: gfs-kernel/src/gfs: gfs_ioctl.h ioctl.c ioctl.h ops_file.c Log message: Resolves: bz 429633: gfs_tool doesn't recognize GFS file sytem Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/gfs_ioctl.h.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.c.diff?cvsroot=cluster&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&r1=1.36&r2=1.37 From rpeterso@sourceware.org Thu Jan 24 21:25:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Thu, 24 Jan 2008 21:25:00 -0000 Subject: cluster/gfs-kernel/src/gfs gfs_ioctl.h ioctl.c ... Message-ID: <20080124212541.29040.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: rpeterso@sourceware.org 2008-01-24 21:25:41 Modified files: gfs-kernel/src/gfs: gfs_ioctl.h ioctl.c ioctl.h ops_file.c Log message: Resolves: bz 430154: gfs_tool doesn't recognize GFS file sytem Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/gfs_ioctl.h.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.11&r2=1.11.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.13.2.4&r2=1.13.2.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.h.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.3&r2=1.3.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.28.2.2&r2=1.28.2.2.2.1 From cfeist@sourceware.org Thu Jan 24 22:20:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Thu, 24 Jan 2008 22:20:00 -0000 Subject: cluster/fence/agents/scsi scsi_reserve Message-ID: <20080124222024.28780.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: cfeist@sourceware.org 2008-01-24 22:20:24 Modified files: fence/agents/scsi: scsi_reserve Log message: Added back in change to description line to make chkconfig work properly. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/scsi_reserve.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.9&r2=1.1.2.10 From bmarzins@sourceware.org Thu Jan 24 22:23:00 2008 From: bmarzins@sourceware.org (bmarzins@sourceware.org) Date: Thu, 24 Jan 2008 22:23:00 -0000 Subject: cluster/gfs-kernel/src/gfs glock.c Message-ID: <20080124222347.29597.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: bmarzins@sourceware.org 2008-01-24 22:23:47 Modified files: gfs-kernel/src/gfs: glock.c Log message: Oops. Reverted fix for bz #426291. It isn't going into RHEL 5.1 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/glock.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.29.2.5.2.1&r2=1.29.2.5.2.2 From rmccabe@sourceware.org Fri Jan 25 00:37:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 25 Jan 2008 00:37:00 -0000 Subject: conga/luci cluster/busy_wait-macro cluster/for ... Message-ID: <20080125003659.4791.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-25 00:36:59 Modified files: luci/cluster : busy_wait-macro form-macros luci/homebase : validate_cluster_add.js luci/site/luci/Extensions: LuciDB.py RicciQueries.py cluster_adapters.py Log message: Fix a few bugs found while testing Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/busy_wait-macro.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.220&r2=1.221 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add.js.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.280&r2=1.281 From rmccabe@sourceware.org Fri Jan 25 00:38:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 25 Jan 2008 00:38:00 -0000 Subject: conga/ricci/modules rpm/PackageHandler.cpp rpm ... Message-ID: <20080125003851.5299.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-25 00:38:51 Modified files: ricci/modules/rpm: PackageHandler.cpp RpmModule.cpp ricci/modules/service: ServiceManager.cpp Log message: Fix a few long-standing bugs that caused spurious errors while deploying nodes with odd combinations of packages installed. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.19&r2=1.20 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&r1=1.15&r2=1.16 From pcaulfield@sourceware.org Fri Jan 25 10:50:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Fri, 25 Jan 2008 10:50:00 -0000 Subject: cluster cman-kernel/src/cnxman.c cman-kernel/s ... Message-ID: <20080125105036.30305.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: STABLE Changes by: pcaulfield@sourceware.org 2008-01-25 10:50:36 Modified files: cman-kernel/src: cnxman.c membership.c dlm-kernel/src : lowcomms.c memory.c Log message: Make cman & dlm compile with 2.6.24 kernels. I know no-one cares about this branch any more, but it makes my life a little easier. And no, I am /not/ doing gfs-kernel too... Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman-kernel/src/cnxman.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.42.2.12.4.1.2.16&r2=1.42.2.12.4.1.2.17 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman-kernel/src/membership.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.44.2.18.6.9&r2=1.44.2.18.6.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/lowcomms.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.22.2.8.4.2.2.4&r2=1.22.2.8.4.2.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm-kernel/src/memory.c.diff?cvsroot=cluster&only_with_tag=STABLE&r1=1.3.8.1&r2=1.3.8.2 From lhh@sourceware.org Fri Jan 25 16:03:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 25 Jan 2008 16:03:00 -0000 Subject: cluster/rgmanager/src/daemons rg_thread.c Message-ID: <20080125160338.5797.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-25 16:03:38 Modified files: rgmanager/src/daemons: rg_thread.c Log message: Fix 430220 - -e -m not working Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_thread.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.10&r2=1.15.2.11 From lhh@sourceware.org Fri Jan 25 16:04:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 25 Jan 2008 16:04:00 -0000 Subject: cluster/rgmanager/src/daemons rg_thread.c Message-ID: <20080125160443.6129.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: lhh@sourceware.org 2008-01-25 16:04:43 Modified files: rgmanager/src/daemons: rg_thread.c Log message: Fix 430220 - clusvcadm -e -m / -Fe not working on RHEL 5.1 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_thread.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.15.2.7.2.1&r2=1.15.2.7.2.2 From lhh@sourceware.org Fri Jan 25 16:04:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 25 Jan 2008 16:04:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080125160451.6273.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: lhh@sourceware.org 2008-01-25 16:04:51 Modified files: rgmanager/src/daemons: rg_state.c Log message: Fix 430220 - clusvcadm -e -m / -Fe not working on RHEL 5.1 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.24.2.10.2.3&r2=1.24.2.10.2.4 From jbrassow@sourceware.org Fri Jan 25 16:23:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 25 Jan 2008 16:23:00 -0000 Subject: cluster/cmirror-kernel/src dm-clog.c Message-ID: <20080125162325.23402.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-25 16:23:25 Modified files: cmirror-kernel/src: dm-clog.c Log message: - calling dm_get_device fixes rename bug 205641 - caching extra state in the kernel helps reduce cluster traffic 90%, this improves performance Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.7&r2=1.2.2.8 From jbrassow@sourceware.org Fri Jan 25 16:24:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 25 Jan 2008 16:24:00 -0000 Subject: cluster/cmirror/src link_mon.c local.c queues.c Message-ID: <20080125162447.23846.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-01-25 16:24:47 Modified files: cmirror/src : link_mon.c local.c queues.c Log message: - reduce the number of cluster requests. - debugging code that counts requests will be removed later Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/link_mon.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.9&r2=1.1.2.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 From rmccabe@sourceware.org Fri Jan 25 17:19:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 25 Jan 2008 17:19:00 -0000 Subject: conga ./conga.spec.in.in luci/cluster/busy_wai ... Message-ID: <20080125171905.28455.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-25 17:19:05 Modified files: . : conga.spec.in.in luci/cluster : busy_wait-macro form-macros luci/homebase : validate_cluster_add.js luci/site/luci/Extensions: LuciDB.py RicciQueries.py cluster_adapters.py luci/site/luci/var: Data.fs ricci/modules/rpm: PackageHandler.cpp RpmModule.cpp ricci/modules/service: ServiceManager.cpp ricci/ricci : RicciWorker.cpp Log message: - Fix a bug that prevented the fix for bz230462 from working - Fix a few other bugs found while testing Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.64&r2=1.45.2.65 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/busy_wait-macro.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.32&r2=1.90.2.33 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.6&r2=1.4.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.8&r2=1.1.4.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.41&r2=1.120.2.42 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.26&r2=1.15.2.27 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9.2.5&r2=1.9.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.3&r2=1.5.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.1&r2=1.11.2.2 From rmccabe@sourceware.org Fri Jan 25 17:20:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 25 Jan 2008 17:20:00 -0000 Subject: conga ./conga.spec.in.in luci/site/luci/var/Da ... Message-ID: <20080125172047.29101.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-25 17:20:47 Modified files: . : conga.spec.in.in luci/site/luci/var: Data.fs Log message: Update zope db file and spec file Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.95&r2=1.96 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&r1=1.28&r2=1.29 From rmccabe@sourceware.org Fri Jan 25 17:23:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 25 Jan 2008 17:23:00 -0000 Subject: conga/make version.in Message-ID: <20080125172314.30193.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-25 17:23:14 Modified files: make : version.in Log message: Bump version Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.29&r2=1.21.2.30 From lhh@sourceware.org Fri Jan 25 18:09:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 25 Jan 2008 18:09:00 -0000 Subject: cluster/rgmanager ChangeLog src/daemons/rg_state.c Message-ID: <20080125180924.27053.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-25 18:09:24 Modified files: rgmanager : ChangeLog rgmanager/src/daemons: rg_state.c Log message: Fix 430272 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.31.2.35&r2=1.31.2.36 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.16&r2=1.24.2.17 From lhh@sourceware.org Fri Jan 25 18:12:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 25 Jan 2008 18:12:00 -0000 Subject: cluster/rgmanager ChangeLog src/daemons/rg_thr ... Message-ID: <20080125181208.28004.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-25 18:12:08 Modified files: rgmanager : ChangeLog rgmanager/src/daemons: rg_thread.c rg_state.c Log message: Fix #430272, #430220 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&r1=1.71&r2=1.72 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_thread.c.diff?cvsroot=cluster&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&r1=1.46&r2=1.47 From lhh@sourceware.org Fri Jan 25 18:13:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 25 Jan 2008 18:13:00 -0000 Subject: cluster/cman/qdisk main.c Message-ID: <20080125181324.28438.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-25 18:13:24 Modified files: cman/qdisk : main.c Log message: Fix qdiskd master abdication logic (#430264) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/main.c.diff?cvsroot=cluster&r1=1.12&r2=1.13 From rpeterso@sourceware.org Sat Jan 26 14:20:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Sat, 26 Jan 2008 14:20:00 -0000 Subject: cluster/gfs2/man gfs2.8 Message-ID: <20080126142058.28353.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: rpeterso@sourceware.org 2008-01-26 14:20:58 Modified files: gfs2/man : gfs2.8 Log message: Resolves: bz 223660: man gfs2(8) refers to the gfs2_mkfs manpage Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/man/gfs2.8.diff?cvsroot=cluster&r1=1.3&r2=1.4 From fabbione@sourceware.org Mon Jan 28 06:13:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:13:00 -0000 Subject: cluster/gnbd-kernel/src gnbd.c Message-ID: <20080128061315.21754.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:13:15 Modified files: gnbd-kernel/src: gnbd.c Log message: Update gnbd kernel modules to build with 2.6.24 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gnbd-kernel/src/gnbd.c.diff?cvsroot=cluster&r1=1.20&r2=1.21 From fabbione@sourceware.org Mon Jan 28 06:21:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:21:00 -0000 Subject: cluster/gfs-kernel/src/gfs main.c Message-ID: <20080128062121.23470.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:21:21 Modified files: gfs-kernel/src/gfs: main.c Log message: EXPORT_SYMBOL(xtime) has been removed in 2.6.24. Let's use the exact same value (tv_nsec) just from another source. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/main.c.diff?cvsroot=cluster&r1=1.11&r2=1.12 From fabbione@sourceware.org Mon Jan 28 06:29:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:29:00 -0000 Subject: cluster/gfs-kernel/src/gfs ops_export.c ops_ex ... Message-ID: <20080128062925.25860.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:29:25 Modified files: gfs-kernel/src/gfs: ops_export.c ops_export.h ops_vm.c sys.c Log message: Update gfs to cope with 2.6.24 export op changes and other bits Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_export.c.diff?cvsroot=cluster&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_export.h.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_vm.c.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/sys.c.diff?cvsroot=cluster&r1=1.4&r2=1.5 From fabbione@sourceware.org Mon Jan 28 06:36:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:36:00 -0000 Subject: cluster/gfs-kernel/src/gfs ops_file.c Message-ID: <20080128063618.27401.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:36:18 Modified files: gfs-kernel/src/gfs: ops_file.c Log message: fix gfs for the removal of sendfile and helper functions Sendfile and helper functions have been removed in 2.6.24. Migrate to using splice_read and generic_file_splice_read helper function. Signed-off-by: Phillip Lougher Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&r1=1.37&r2=1.38 From fabbione@sourceware.org Mon Jan 28 06:40:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:40:00 -0000 Subject: cluster/gfs-kernel/src/gfs glock.c Message-ID: <20080128064025.28505.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:40:25 Modified files: gfs-kernel/src/gfs: glock.c Log message: Remove unused variable Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/glock.c.diff?cvsroot=cluster&r1=1.36&r2=1.37 From fabbione@sourceware.org Mon Jan 28 06:42:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:42:00 -0000 Subject: cluster/gfs-kernel/src/gfs ioctl.c Message-ID: <20080128064235.29067.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:42:35 Modified files: gfs-kernel/src/gfs: ioctl.c Log message: Fix build warning Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.c.diff?cvsroot=cluster&r1=1.18&r2=1.19 From fabbione@sourceware.org Mon Jan 28 06:43:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 06:43:00 -0000 Subject: cluster configure Message-ID: <20080128064350.29530.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 06:43:50 Modified files: . : configure Log message: Bump kernel check to 2.6.24 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/configure.diff?cvsroot=cluster&r1=1.47&r2=1.48 From fabbione@sourceware.org Mon Jan 28 07:43:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 28 Jan 2008 07:43:00 -0000 Subject: cluster/csnap/src Makefile.bak Message-ID: <20080128074342.23693.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-28 07:43:42 Removed files: csnap/src : Makefile.bak Log message: Remove obsolete file Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/csnap/src/Makefile.bak.diff?cvsroot=cluster&r1=1.1&r2=NONE From lhh@sourceware.org Mon Jan 28 19:27:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 28 Jan 2008 19:27:00 -0000 Subject: cluster/rgmanager ChangeLog include/rg_locks.h ... Message-ID: <20080128192720.9047.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-28 19:27:20 Modified files: rgmanager : ChangeLog rgmanager/include: rg_locks.h rgmanager/src/daemons: groups.c main.c rg_locks.c rgmanager/src/utils: clulog.c Log message: Fix #430538 - unbounded status/clustat thread counts cause timeout errors Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.34&r2=1.5.2.35 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/rg_locks.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.2.22&r2=1.8.2.23 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/main.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.23&r2=1.9.2.24 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_locks.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.3&r2=1.4.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clulog.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.3&r2=1.1.2.4 From lhh@sourceware.org Mon Jan 28 19:34:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 28 Jan 2008 19:34:00 -0000 Subject: cluster/rgmanager/src/utils clulog.c Message-ID: <20080128193432.14043.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-28 19:34:32 Modified files: rgmanager/src/utils: clulog.c Log message: Fix #289521 - clulog not respecting rgmanager log level Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/clulog.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.4&r2=1.1.2.5 From lhh@sourceware.org Mon Jan 28 19:42:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 28 Jan 2008 19:42:00 -0000 Subject: cluster/rgmanager ChangeLog Message-ID: <20080128194256.18202.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-28 19:42:56 Modified files: rgmanager : ChangeLog Log message: Fix #292861 - nfsclient doesn't unexport correctly Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.35&r2=1.5.2.36 From lhh@sourceware.org Mon Jan 28 19:42:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 28 Jan 2008 19:42:00 -0000 Subject: cluster/rgmanager/src/resources nfsclient.sh Message-ID: <20080128194243.18045.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-01-28 19:42:43 Modified files: rgmanager/src/resources: nfsclient.sh Log message: Fix #292861 - nfsclient doesn't unexport correctly Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/nfsclient.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.12&r2=1.3.2.13 From lhh@sourceware.org Tue Jan 29 21:26:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 29 Jan 2008 21:26:00 -0000 Subject: cluster/cman/qdisk score.c Message-ID: <20080129212639.12569.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: lhh@sourceware.org 2008-01-29 21:26:39 Modified files: cman/qdisk : score.c Log message: Fix #430574 - qdisk blocking signals in heuristics Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/score.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.2.4.3&r2=1.2.4.3.2.1 From rmccabe@sourceware.org Tue Jan 29 22:02:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 29 Jan 2008 22:02:00 -0000 Subject: conga ./clustermon.spec.in.in ./conga.spec.in. ... Message-ID: <20080129220213.29600.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-01-29 22:02:13 Modified files: . : clustermon.spec.in.in conga.spec.in.in make : version.in ricci/modules/cluster: ClusterStatus.cpp ricci/modules/log: LogParser.cpp ricci/modules/rpm: PackageHandler.cpp ricci/modules/service: ServiceManager.cpp Log message: Fix 430737 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.30&r2=1.18.2.31 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.65&r2=1.45.2.66 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.30&r2=1.21.2.31 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.4&r2=1.15.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.4&r2=1.6.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9.2.6&r2=1.9.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.4&r2=1.5.2.5 From bmarzins@sourceware.org Tue Jan 29 22:21:00 2008 From: bmarzins@sourceware.org (bmarzins@sourceware.org) Date: Tue, 29 Jan 2008 22:21:00 -0000 Subject: cluster/gfs-kernel/src/gfs glock.c Message-ID: <20080129222145.12023.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: bmarzins@sourceware.org 2008-01-29 22:21:45 Modified files: gfs-kernel/src/gfs: glock.c Log message: Fix for bz #419391. gfs_glock_dq was traversing the gl_holders list without holding the gl_spin spinlock, this was causing a problem when the list item it was currently looking at got removed from the list. The solution is to not traverse the list, because it is unncessary. Unfortunately, there is also a bug in this section of code, where you can't guarantee that you will not cache a glock held with GL_NOCACHE. Fixing this issue requires significantly more work. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/glock.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.20.2.6&r2=1.20.2.7 From fabbione@sourceware.org Wed Jan 30 06:37:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 30 Jan 2008 06:37:00 -0000 Subject: cluster/gfs-kernel/src/gfs eaops.c inode.c ops ... Message-ID: <20080130063753.28360.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-30 06:37:53 Modified files: gfs-kernel/src/gfs: eaops.c inode.c ops_file.c ops_file.h Log message: Red Hat bugzilla 244343: GFS supports two modes of locking - lock_nolock for single node filesystem and lock_dlm for cluster mode locking. The gfs lock methods are removed from file operation table for lock_nolock protocol. This would allow VFS to handle posix lock and flock logics just like other in-tree filesystems without duplication. Port forward patch from RHEL5 branch to HEAD. Original author: Wendy Cheng Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/eaops.c.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/inode.c.diff?cvsroot=cluster&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&r1=1.38&r2=1.39 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.h.diff?cvsroot=cluster&r1=1.2&r2=1.3 From fabbione@sourceware.org Wed Jan 30 06:57:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 30 Jan 2008 06:57:00 -0000 Subject: cluster/gfs-kernel/src/gfs rgrp.c Message-ID: <20080130065741.2632.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-30 06:57:41 Modified files: gfs-kernel/src/gfs: rgrp.c Log message: Bugzilla 227892: * Warn people about the RG corruption and request a gfs_fsck * Upon error detection, perform a minimum error data collection Port forward patch from RHEL5 branch to HEAD. Original author: Wendy Cheng Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/rgrp.c.diff?cvsroot=cluster&r1=1.21&r2=1.22 From fabbione@sourceware.org Wed Jan 30 08:32:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 30 Jan 2008 08:32:00 -0000 Subject: cluster/gfs-kernel/src/gfs eaops.c Message-ID: <20080130083240.23108.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-30 08:32:40 Modified files: gfs-kernel/src/gfs: eaops.c Log message: Remove unrequire functions. This follow gfs2 changes Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/eaops.c.diff?cvsroot=cluster&r1=1.8&r2=1.9 From fabbione@sourceware.org Wed Jan 30 09:05:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 30 Jan 2008 09:05:00 -0000 Subject: cluster/gfs-kernel/src/gfs ops_file.c Message-ID: <20080130090557.19880.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-01-30 09:05:57 Modified files: gfs-kernel/src/gfs: ops_file.c Log message: Whitespace cleanup Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&r1=1.39&r2=1.40 From pcaulfield@sourceware.org Wed Jan 30 15:46:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 30 Jan 2008 15:46:00 -0000 Subject: cluster/cman cman_tool/cman_tool.h cman_tool/j ... Message-ID: <20080130154641.19512.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-30 15:46:41 Modified files: cman/cman_tool : cman_tool.h join.c cman/daemon : ais.c cman/man : cman_tool.8 Log message: Improve startup error checking and logging. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/cman_tool.h.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/join.c.diff?cvsroot=cluster&r1=1.53&r2=1.54 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/ais.c.diff?cvsroot=cluster&r1=1.59&r2=1.60 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/man/cman_tool.8.diff?cvsroot=cluster&r1=1.15&r2=1.16 From pcaulfield@sourceware.org Wed Jan 30 16:06:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Wed, 30 Jan 2008 16:06:00 -0000 Subject: cluster/cman/cman_tool join.c Message-ID: <20080130160607.32041.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-01-30 16:06:07 Modified files: cman/cman_tool : join.c Log message: Oops. a bit too much cman3 fell into that last checkin Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/join.c.diff?cvsroot=cluster&r1=1.54&r2=1.55 From rmccabe@sourceware.org Wed Jan 30 17:12:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 30 Jan 2008 17:12:00 -0000 Subject: conga/ricci/modules cluster/ClusterStatus.cpp ... Message-ID: <20080130171216.16267.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-30 17:12:16 Modified files: ricci/modules/cluster: ClusterStatus.cpp ricci/modules/log: LogParser.cpp ricci/modules/rpm: PackageHandler.cpp ricci/modules/service: ServiceManager.cpp Log message: sync up fixes from the RHEL5 branch - install cmirror and kmod-gfs2|kmod-gfs2-xen on RHEL52 and beyond Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.20&r2=1.21 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&r1=1.16&r2=1.17 From rmccabe@sourceware.org Wed Jan 30 17:58:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 30 Jan 2008 17:58:00 -0000 Subject: conga/ricci/modules/storage LV.cpp parted_wrap ... Message-ID: <20080130175805.5661.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-01-30 17:58:05 Modified files: ricci/modules/storage: LV.cpp parted_wrapper.cpp Log message: don't use floating point arithmetic where not necessary (i.e., anywhere for RHEL5) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.cpp.diff?cvsroot=cluster&r1=1.12&r2=1.13 From lhh@sourceware.org Wed Jan 30 18:45:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 30 Jan 2008 18:45:00 -0000 Subject: cluster/fence/agents/xvm fence_xvm.c mcast.c m ... Message-ID: <20080130184514.6642.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-30 18:45:14 Modified files: fence/agents/xvm: fence_xvm.c mcast.c mcast.h options.c options.h xvm.h Log message: Make default TTL 4 instead of 2 per Fabio's recommendation (e.g. RFC2608). Make TTL configurable in cluster.conf/command line for fence_xvm. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvm.c.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/mcast.c.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/mcast.h.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/options.c.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/options.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/xvm.h.diff?cvsroot=cluster&r1=1.3&r2=1.4 From lhh@sourceware.org Wed Jan 30 19:20:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 30 Jan 2008 19:20:00 -0000 Subject: cluster/fence fenced/fd.h fenced/main.c fenced ... Message-ID: <20080130192011.29412.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-30 19:20:11 Modified files: fence/fenced : fd.h main.c recover.c fence/man : fenced.8 Log message: Make fenced's override wait time configurable. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/fd.h.diff?cvsroot=cluster&r1=1.27&r2=1.28 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/main.c.diff?cvsroot=cluster&r1=1.46&r2=1.47 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/recover.c.diff?cvsroot=cluster&r1=1.30&r2=1.31 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/man/fenced.8.diff?cvsroot=cluster&r1=1.7&r2=1.8 From lhh@sourceware.org Wed Jan 30 20:00:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 30 Jan 2008 20:00:00 -0000 Subject: cluster/rgmanager/src/daemons resrules.c Message-ID: <20080130200026.12780.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-01-30 20:00:26 Modified files: rgmanager/src/daemons: resrules.c Log message: Fix short read handling in read_pipe Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/resrules.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.16.2.9&r2=1.16.2.10 From lhh@sourceware.org Wed Jan 30 20:00:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 30 Jan 2008 20:00:00 -0000 Subject: cluster/rgmanager/src/daemons resrules.c Message-ID: <20080130200015.12594.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: lhh@sourceware.org 2008-01-30 20:00:15 Modified files: rgmanager/src/daemons: resrules.c Log message: Fix short read handling in read_pipe Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/resrules.c.diff?cvsroot=cluster&r1=1.24&r2=1.25 From lhh@sourceware.org Fri Feb 1 15:15:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 01 Feb 2008 15:15:00 -0000 Subject: cluster/rgmanager include/resgroup.h include/r ... Message-ID: <20080201151503.6665.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-02-01 15:15:03 Modified files: rgmanager/include: resgroup.h restart_counter.h rgmanager/src/daemons: groups.c restart_counter.c rg_state.c slang_event.c rgmanager/src/resources: default_event_script.sl Log message: Allow restart counters to work with central_processing; #400211 / #431130 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/resgroup.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.9&r2=1.15.2.10 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/include/restart_counter.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.14&r2=1.25.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/restart_counter.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.17&r2=1.24.2.18 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/slang_event.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/default_event_script.sl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 From lhh@sourceware.org Fri Feb 1 15:17:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 01 Feb 2008 15:17:00 -0000 Subject: cluster/rgmanager ChangeLog Message-ID: <20080201151751.7683.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-02-01 15:17:51 Modified files: rgmanager : ChangeLog Log message: Allow restart counters to work with central_processing; #400211 / #431130 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.31.2.36&r2=1.31.2.37 From lhh@sourceware.org Fri Feb 1 15:28:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 01 Feb 2008 15:28:00 -0000 Subject: cluster/rgmanager/src/daemons groups.c Message-ID: <20080201152852.12210.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-02-01 15:28:52 Modified files: rgmanager/src/daemons: groups.c Log message: Fix erroneous commit to groups.c Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.25.2.15&r2=1.25.2.16 From lhh@sourceware.org Fri Feb 1 15:31:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 01 Feb 2008 15:31:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080201153106.12947.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-02-01 15:31:06 Modified files: rgmanager/src/daemons: rg_state.c Log message: Fix double-stop Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.18&r2=1.24.2.19 From lhh@sourceware.org Fri Feb 1 17:21:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 01 Feb 2008 17:21:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080201172124.22887.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: lhh@sourceware.org 2008-02-01 17:21:24 Modified files: rgmanager/src/daemons: rg_state.c Log message: #400211 - make sure we release the lock Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.24.2.19&r2=1.24.2.20 From pcaulfield@sourceware.org Mon Feb 4 10:54:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Mon, 04 Feb 2008 10:54:00 -0000 Subject: cluster/cman/daemon commands.c Message-ID: <20080204105426.4341.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-02-04 10:54:26 Modified files: cman/daemon : commands.c Log message: Change a log_printf() into a syslog() so that the die message always arrives in the log. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.82&r2=1.83 From jbrassow@sourceware.org Mon Feb 4 18:27:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Mon, 04 Feb 2008 18:27:00 -0000 Subject: cluster/cmirror/src cluster.c functions.c loca ... Message-ID: <20080204182720.19769.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-04 18:27:20 Modified files: cmirror/src : cluster.c functions.c local.c logging.h Log message: - change priority of some log statements - fix potential OOB memory op by macro - add reference counting to log... fixes some issues with mirror conversion - plug a memory leak... likely related to bug 383291 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.11&r2=1.1.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.10&r2=1.1.2.11 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.10&r2=1.1.2.11 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/logging.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 From pcaulfield@sourceware.org Tue Feb 5 16:21:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Tue, 05 Feb 2008 16:21:00 -0000 Subject: cluster/cman-kernel/src cnxman.c membership.c Message-ID: <20080205162114.16457.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL45 Changes by: pcaulfield@sourceware.org 2008-02-05 16:21:14 Modified files: cman-kernel/src: cnxman.c membership.c Log message: Fix for cman throwing away messages that arrive out of order. bz#430284 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman-kernel/src/cnxman.c.diff?cvsroot=cluster&only_with_tag=RHEL45&r1=1.42.2.28.2.1&r2=1.42.2.28.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman-kernel/src/membership.c.diff?cvsroot=cluster&only_with_tag=RHEL45&r1=1.44.2.26&r2=1.44.2.26.2.1 From rmccabe@sourceware.org Tue Feb 5 18:26:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 18:26:00 -0000 Subject: conga/luci/site/luci/Extensions LuciValidation ... Message-ID: <20080205182655.21850.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 18:26:55 Modified files: luci/site/luci/Extensions: LuciValidation.py luci/site/luci/Extensions/ClusterModel: ClusterNode.py ModelBuilder.py Log message: Fix a bug that caused fence method blocks to be added inside the first child tag of cluster nodes (which need not be ). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.15&r2=1.16 From rmccabe@sourceware.org Tue Feb 5 18:29:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 18:29:00 -0000 Subject: conga/ricci/common utils.cpp Message-ID: <20080205182905.22375.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 18:29:05 Modified files: ricci/common : utils.cpp Log message: Better string to num conversion Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/utils.cpp.diff?cvsroot=cluster&r1=1.12&r2=1.13 From rmccabe@sourceware.org Tue Feb 5 18:31:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 18:31:00 -0000 Subject: conga/luci/init.d luci Message-ID: <20080205183131.24174.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 18:31:31 Modified files: luci/init.d : luci Log message: - stop-after-stop should return success - cleanup Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/luci.diff?cvsroot=cluster&r1=1.19&r2=1.20 From rmccabe@sourceware.org Tue Feb 5 18:41:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 18:41:00 -0000 Subject: conga/luci/init.d luci Message-ID: <20080205184146.27690.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 18:41:46 Modified files: luci/init.d : luci Log message: pedantry Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/luci.diff?cvsroot=cluster&r1=1.20&r2=1.21 From rmccabe@sourceware.org Tue Feb 5 19:32:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 19:32:00 -0000 Subject: conga/luci cluster/resource_form_handlers.js c ... Message-ID: <20080205193204.31888.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 19:32:04 Modified files: luci/cluster : resource_form_handlers.js validate_config_multicast.js luci/plone-custom: conga.js Log message: Fix 431105 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.42&r2=1.43 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&r1=1.12&r2=1.13 From lhh@sourceware.org Tue Feb 5 19:47:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 05 Feb 2008 19:47:00 -0000 Subject: cluster/rgmanager/src/daemons rg_state.c Message-ID: <20080205194717.6610.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: lhh@sourceware.org 2008-02-05 19:47:17 Modified files: rgmanager/src/daemons: rg_state.c Log message: Fix #431520 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_state.c.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.24.2.10.2.4&r2=1.24.2.10.2.5 From lhh@sourceware.org Tue Feb 5 19:50:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 05 Feb 2008 19:50:00 -0000 Subject: cluster/rgmanager ChangeLog Message-ID: <20080205195002.7749.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL51 Changes by: lhh@sourceware.org 2008-02-05 19:50:02 Modified files: rgmanager : ChangeLog Log message: Update changelog Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL51&r1=1.31.2.19.2.5&r2=1.31.2.19.2.6 From rmccabe@sourceware.org Tue Feb 5 20:53:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 20:53:00 -0000 Subject: conga/luci/homebase validate_user_add.js Message-ID: <20080205205322.26919.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 20:53:22 Modified files: luci/homebase : validate_user_add.js Log message: Bump the minimum password length to 6, to match what luci_admin requires Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_add.js.diff?cvsroot=cluster&r1=1.6&r2=1.7 From rmccabe@sourceware.org Tue Feb 5 20:59:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 20:59:00 -0000 Subject: conga/luci/site/luci/Extensions homebase_adapt ... Message-ID: <20080205205938.30033.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 20:59:38 Modified files: luci/site/luci/Extensions: homebase_adapters.py Log message: Enforce password minimum length on the backend. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&r1=1.57&r2=1.58 From rpeterso@sourceware.org Tue Feb 5 21:12:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Tue, 05 Feb 2008 21:12:00 -0000 Subject: cluster/gfs-kernel/src/gfs ioctl.c Message-ID: <20080205211252.11391.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: rpeterso@sourceware.org 2008-02-05 21:12:52 Modified files: gfs-kernel/src/gfs: ioctl.c Log message: Resolves: 430154: gfs_tool doesn't recognize GFS file system Forgot to take the & off the ioctl for get_file_meta_quota. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ioctl.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.13.2.6&r2=1.13.2.7 From rmccabe@sourceware.org Tue Feb 5 22:08:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 05 Feb 2008 22:08:00 -0000 Subject: conga/luci/site/luci/Extensions LuciDB.py Message-ID: <20080205220808.10763.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-05 22:08:08 Modified files: luci/site/luci/Extensions: LuciDB.py Log message: Fix 429801 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.9&r2=1.10 From jbrassow@sourceware.org Tue Feb 5 22:12:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Tue, 05 Feb 2008 22:12:00 -0000 Subject: cluster/cmirror/src cluster.c functions.c local.c Message-ID: <20080205221254.14491.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-05 22:12:54 Modified files: cmirror/src : cluster.c functions.c local.c Log message: - allocate additional transfer struct when necessary - fix ordering of clustered_disk table output - respond to get_sync_count requests when suspended (as required by mirror) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.12&r2=1.1.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.11&r2=1.1.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.11&r2=1.1.2.12 From cfeist@sourceware.org Tue Feb 5 22:16:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Tue, 05 Feb 2008 22:16:00 -0000 Subject: cluster/ccs/daemon cnx_mgr.c Message-ID: <20080205221651.17673.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL46 Changes by: cfeist@sourceware.org 2008-02-05 22:16:51 Modified files: ccs/daemon : cnx_mgr.c Log message: Pulled from RHEL4 branch. BZ 418961 Fix issue with endian conversion that caused problems for mixed architecture nodes on same subnet. Need to correct swap byte ordering of comm_header_t structure before copying into buffer and when dereferencing. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/cnx_mgr.c.diff?cvsroot=cluster&only_with_tag=RHEL46&r1=1.24.2.15&r2=1.24.2.15.4.1 From jbrassow@sourceware.org Tue Feb 5 23:25:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Tue, 05 Feb 2008 23:25:00 -0000 Subject: cluster/cmirror/src cluster.c Message-ID: <20080205232551.23085.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-05 23:25:51 Modified files: cmirror/src : cluster.c Log message: - missed an initialization Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.13&r2=1.1.2.14 From rmccabe@sourceware.org Wed Feb 6 04:57:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 06 Feb 2008 04:57:00 -0000 Subject: conga/luci plone-custom/footer plone-custom/lu ... Message-ID: <20080206045750.26760.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-06 04:57:50 Modified files: luci/plone-custom: footer luci.css luci/homebase : form-macros Log message: Fix a couple of minor display issues Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/footer.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.65&r2=1.66 From rmccabe@sourceware.org Wed Feb 6 05:19:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 06 Feb 2008 05:19:00 -0000 Subject: conga/luci/site/luci/Extensions LuciZope.py Lu ... Message-ID: <20080206051958.7217.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-06 05:19:57 Modified files: luci/site/luci/Extensions: LuciZope.py LuciZopeExternal.py conga_constants.py Log message: backend support for automatic logout due to user inactivity Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&r1=1.47&r2=1.48 From jbrassow@sourceware.org Wed Feb 6 16:40:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 06 Feb 2008 16:40:00 -0000 Subject: cluster/rgmanager/src/resources lvm.sh Message-ID: <20080206164027.12484.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-02-06 16:40:27 Modified files: rgmanager/src/resources: lvm.sh Log message: - better checking for improper setup -- this time for presence of fail-over VG in the volume_list Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&r1=1.12&r2=1.13 From rohara@sourceware.org Wed Feb 6 17:39:00 2008 From: rohara@sourceware.org (rohara@sourceware.org) Date: Wed, 06 Feb 2008 17:39:00 -0000 Subject: cluster/fence/agents/scsi fence_scsi_test.pl s ... Message-ID: <20080206173917.9809.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: rohara@sourceware.org 2008-02-06 17:39:17 Modified files: fence/agents/scsi: fence_scsi_test.pl scsi_reserve Log message: BZ 431002 - Support for LVM stripes, mirrors. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/fence_scsi_test.pl.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.6.3&r2=1.1.6.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/scsi/scsi_reserve.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.6.11&r2=1.1.6.12 From jbrassow@sourceware.org Wed Feb 6 17:43:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 06 Feb 2008 17:43:00 -0000 Subject: cluster/rgmanager/src/resources lvm.sh Message-ID: <20080206174333.12338.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: jbrassow@sourceware.org 2008-02-06 17:43:33 Modified files: rgmanager/src/resources: lvm.sh Log message: - Bug 431705: HA LVM should prevent users from running an invalid setup (2) - better checking for improper setup -- this time for presence of fail-over VG in the volume_list Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/lvm.sh.diff?cvsroot=cluster&r1=1.13&r2=1.14 From rmccabe@sourceware.org Wed Feb 6 21:15:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 06 Feb 2008 21:15:00 -0000 Subject: conga/luci/site/luci/Extensions LuciDB.py Message-ID: <20080206211507.11906.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-06 21:15:07 Modified files: luci/site/luci/Extensions: LuciDB.py Log message: Fix capitalization of the permission class Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.10&r2=1.11 From rmccabe@sourceware.org Wed Feb 6 21:24:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 06 Feb 2008 21:24:00 -0000 Subject: conga/luci/site/luci/var Data.fs Message-ID: <20080206212416.14242.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-06 21:24:16 Modified files: luci/site/luci/var: Data.fs Log message: update db Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&r1=1.29&r2=1.30 From jbrassow@sourceware.org Wed Feb 6 23:03:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 06 Feb 2008 23:03:00 -0000 Subject: cluster/cmirror/src clogd.c cluster.c function ... Message-ID: <20080206230305.31875.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-06 23:03:05 Modified files: cmirror/src : clogd.c cluster.c functions.c functions.h local.c queues.c queues.h Log message: - change verbosity of various messages - fix bug where similtaneous mirror creations could result in checkpoint collisions Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/clogd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.14&r2=1.1.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.12&r2=1.1.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.12&r2=1.1.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/queues.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 From rmccabe@sourceware.org Thu Feb 7 06:13:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 07 Feb 2008 06:13:00 -0000 Subject: conga/luci homebase/validate_cluster_add_initi ... Message-ID: <20080207061304.30029.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-07 06:13:04 Modified files: luci/homebase : validate_cluster_add_initial.js luci/site/luci/Extensions: LuciZopeAsync.py Log message: Authenticate to the initial node during the first step of adding an existing cluster Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 From rmccabe@sourceware.org Thu Feb 7 06:53:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 07 Feb 2008 06:53:00 -0000 Subject: conga ./conga.spec.in.in luci/cluster/resource ... Message-ID: <20080207065323.7597.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-02-07 06:53:23 Modified files: . : conga.spec.in.in luci/cluster : resource_form_handlers.js validate_config_multicast.js luci/homebase : form-macros validate_cluster_add_initial.js validate_user_add.js luci/init.d : luci luci/plone-custom: conga.js footer luci.css luci/site/luci/Extensions: LuciDB.py LuciValidation.py LuciZopeAsync.py homebase_adapters.py luci/site/luci/Extensions/ClusterModel: ClusterNode.py ModelBuilder.py luci/site/luci/var: Data.fs make : version.in Log message: backport fixes from HEAD for 431105 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.66&r2=1.45.2.67 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.13&r2=1.20.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.12&r2=1.44.2.13 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_add.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/luci.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.11.2.3&r2=1.11.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.4&r2=1.3.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/footer.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.3&r2=1.2.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.34.2.15&r2=1.34.2.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.27&r2=1.15.2.28 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.31&r2=1.21.2.32 From pcaulfield@sourceware.org Fri Feb 8 14:09:00 2008 From: pcaulfield@sourceware.org (pcaulfield@sourceware.org) Date: Fri, 08 Feb 2008 14:09:00 -0000 Subject: cluster/cman cman_tool/main.c daemon/cnxman-so ... Message-ID: <20080208140928.13947.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: pcaulfield@sourceware.org 2008-02-08 14:09:28 Modified files: cman/cman_tool : main.c cman/daemon : cnxman-socket.h commands.c cman/lib : libcman.c libcman.h Log message: Implement a nicer way of getting the quorum disk information. The libcman API remains the same but the connection to cman itself works using the normal GETNODE call. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/cman_tool/main.c.diff?cvsroot=cluster&r1=1.61&r2=1.62 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/cnxman-socket.h.diff?cvsroot=cluster&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/commands.c.diff?cvsroot=cluster&r1=1.83&r2=1.84 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/lib/libcman.c.diff?cvsroot=cluster&r1=1.41&r2=1.42 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/lib/libcman.h.diff?cvsroot=cluster&r1=1.39&r2=1.40 From jbrassow@sourceware.org Fri Feb 8 14:21:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 08 Feb 2008 14:21:00 -0000 Subject: cluster/cmirror-kernel/src dm-clog-tfr.c dm-clog.c Message-ID: <20080208142105.15846.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-08 14:21:05 Modified files: cmirror-kernel/src: dm-clog-tfr.c dm-clog.c Log message: - table an event so userspace can respond when a log device failure occurs - other clean-ups Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog-tfr.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.8&r2=1.2.2.9 From jbrassow@sourceware.org Fri Feb 8 14:30:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Fri, 08 Feb 2008 14:30:00 -0000 Subject: cluster/cmirror/src cluster.c cluster.h functi ... Message-ID: <20080208143010.20203.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-08 14:30:10 Modified files: cmirror/src : cluster.c cluster.h functions.c functions.h local.c Log message: - stop delaying disk log writes - stop placing requests into the startup queue before initial config - added recovering_region to checkpoint data to prevent duplicate region syncing assignment. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.15&r2=1.1.2.16 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.13&r2=1.1.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/local.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.13&r2=1.1.2.14 From lhh@sourceware.org Fri Feb 8 18:38:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 08 Feb 2008 18:38:00 -0000 Subject: cluster/cman/qdisk main.c Message-ID: <20080208183841.19451.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: lhh@sourceware.org 2008-02-08 18:38:41 Modified files: cman/qdisk : main.c Log message: Fix unused variable error Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/qdisk/main.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.10&r2=1.1.2.11 From rmccabe@sourceware.org Fri Feb 8 21:48:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 08 Feb 2008 21:48:00 -0000 Subject: conga/luci cluster/cluster_config-macros clust ... Message-ID: <20080208214812.27559.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-08 21:48:12 Modified files: luci/cluster : cluster_config-macros cluster_svc-macros form-chooser form-macros index_html system_svc-macros luci/homebase : form-macros index_html luci/site/luci/Extensions: LuciValidation.py LuciZope.py LuciZopeAsync.py LuciZopeExternal.py conga_constants.py luci/site/luci/var: Data.fs luci/storage : index_html Added files: luci/plone-custom: manage_inactive.js Log message: Fixes for 429151 and 429152 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&r1=1.221&r2=1.222 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&r1=1.41&r2=1.42 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&r1=1.66&r2=1.67 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/manage_inactive.js.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&r1=1.48&r2=1.49 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&r1=1.30&r2=1.31 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&r1=1.14&r2=1.15 From rmccabe@sourceware.org Fri Feb 8 21:57:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 08 Feb 2008 21:57:00 -0000 Subject: conga ./conga.spec.in.in luci/cluster/cluster_ ... Message-ID: <20080208215656.29381.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-02-08 21:56:56 Modified files: . : conga.spec.in.in luci/cluster : cluster_config-macros cluster_svc-macros form-chooser form-macros index_html system_svc-macros luci/homebase : form-macros index_html luci/site/luci/Extensions: LuciZope.py LuciZopeAsync.py LuciZopeExternal.py conga_constants.py luci/site/luci/var: Data.fs luci/storage : index_html Added files: luci/plone-custom: manage_inactive.js Log message: - Fix bz429151 ([RFE] Luci: increase min password length to 6 characters) - Fix bz429152 ([RFE] add inactivity timeout) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.67&r2=1.45.2.68 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12.2.7&r2=1.12.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.33&r2=1.90.2.34 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.14&r2=1.20.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.44.2.13&r2=1.44.2.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.6&r2=1.18.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/manage_inactive.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.5&r2=1.1.4.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.3&r2=1.1.4.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.15&r2=1.19.2.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.28&r2=1.15.2.29 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.5&r2=1.7.2.6 From rmccabe@sourceware.org Fri Feb 8 21:59:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 08 Feb 2008 21:59:00 -0000 Subject: conga/make version.in Message-ID: <20080208215948.29956.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-02-08 21:59:48 Modified files: make : version.in Log message: Forgot to bump the version number in the last commit Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.32&r2=1.21.2.33 From fabbione@sourceware.org Tue Feb 12 05:45:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 12 Feb 2008 05:45:00 -0000 Subject: cluster ccs/ccs_tool/Makefile ccs/daemon/Makef ... Message-ID: <20080212054534.1032.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-02-12 05:45:34 Modified files: ccs/ccs_tool : Makefile ccs/daemon : Makefile dlm/lib : Makefile fence/agents/xvm: Makefile gnbd/client : Makefile gnbd/server : Makefile gnbd/tools/gnbd_export: Makefile gnbd/tools/gnbd_import: Makefile rgmanager/src/daemons: Makefile rgmanager/src/utils: Makefile Log message: Stop linking against unrequired libraries. A lot of small tools were linking against a bunch of libraries for no reasons. Clean them up as much as possible as static linking is not spotted automatically. Problem spotted by some Debian automatic test tools and reported by Frederik Sch????ler Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/ccs_tool/Makefile.diff?cvsroot=cluster&r1=1.20&r2=1.21 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/Makefile.diff?cvsroot=cluster&r1=1.22&r2=1.23 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/lib/Makefile.diff?cvsroot=cluster&r1=1.27&r2=1.28 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/Makefile.diff?cvsroot=cluster&r1=1.20&r2=1.21 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gnbd/client/Makefile.diff?cvsroot=cluster&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gnbd/server/Makefile.diff?cvsroot=cluster&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gnbd/tools/gnbd_export/Makefile.diff?cvsroot=cluster&r1=1.22&r2=1.23 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gnbd/tools/gnbd_import/Makefile.diff?cvsroot=cluster&r1=1.19&r2=1.20 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/Makefile.diff?cvsroot=cluster&r1=1.31&r2=1.32 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/utils/Makefile.diff?cvsroot=cluster&r1=1.24&r2=1.25 From fabbione@sourceware.org Tue Feb 12 06:01:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 12 Feb 2008 06:01:00 -0000 Subject: cluster/dlm/man libdlm.3 Message-ID: <20080212060120.5158.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-02-12 06:01:20 Modified files: dlm/man : libdlm.3 Log message: Cleanup man page. Lines starting with "." are man keywords. Just a plain space in front to make it clean. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/man/libdlm.3.diff?cvsroot=cluster&r1=1.4&r2=1.5 From fabbione@sourceware.org Tue Feb 12 06:05:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 12 Feb 2008 06:05:00 -0000 Subject: cluster/gfs/man gfs_jadd.8 Message-ID: <20080212060548.6166.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-02-12 06:05:48 Modified files: gfs/man : gfs_jadd.8 Log message: Man page cleanup. .SP is not a keyword. Change it to .SH. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs/man/gfs_jadd.8.diff?cvsroot=cluster&r1=1.2&r2=1.3 From fabbione@sourceware.org Tue Feb 12 06:18:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 12 Feb 2008 06:18:00 -0000 Subject: cluster/cman/man qdisk.5 Message-ID: <20080212061816.15612.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-02-12 06:18:16 Modified files: cman/man : qdisk.5 Log message: Clean up qdisk man page. -\fB...>\fP is not a keyword (starts the line with .) make the man page more consistent with use of /> Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/man/qdisk.5.diff?cvsroot=cluster&r1=1.8&r2=1.9 From rmccabe@sourceware.org Tue Feb 12 17:29:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 12 Feb 2008 17:29:00 -0000 Subject: conga/ricci/modules cluster/ClusterStatus.cpp ... Message-ID: <20080212172913.24653.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-12 17:29:13 Modified files: ricci/modules/cluster: ClusterStatus.cpp ricci/modules/log: LogParser.cpp ricci/modules/rpm: PackageHandler.cpp ricci/modules/service: ServiceManager.cpp Log message: Pull out cmirror bits Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&r1=1.26&r2=1.27 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&r1=1.17&r2=1.18 From rmccabe@sourceware.org Tue Feb 12 17:40:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 12 Feb 2008 17:40:00 -0000 Subject: conga ./clustermon.spec.in.in ./conga.spec.in. ... Message-ID: <20080212174039.32367.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-02-12 17:40:39 Modified files: . : clustermon.spec.in.in conga.spec.in.in make : version.in ricci/modules/cluster: ClusterStatus.cpp ricci/modules/log: LogParser.cpp ricci/modules/rpm: PackageHandler.cpp ricci/modules/service: ServiceManager.cpp Log message: Fix 432533 and 432534 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.31&r2=1.18.2.32 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.68&r2=1.45.2.69 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.33&r2=1.21.2.34 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.5&r2=1.15.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.5&r2=1.6.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.9.2.7&r2=1.9.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.5&r2=1.5.2.6 From jbrassow@sourceware.org Wed Feb 13 15:06:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 13 Feb 2008 15:06:00 -0000 Subject: cluster/cmirror/src functions.c Message-ID: <20080213150617.25153.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-13 15:06:17 Modified files: cmirror/src : functions.c Log message: - change the way 'is_remote_recovering' works to improve overall performance. Before a mirror issues a write, it must call 'is_remote_recovering' to ensure that another machine will not be recovering the region during the write. This function can dramatically slow things down. One way to increase performance is to note when the mirror is in-sync - then is_remote_recovering can return 0 without having to send the request around the cluster. (This has already been done.) This greatly speeds up I/O during nominal mirror operation. However, I/O during mirror resyncing is still greatly reduced. The problem is that the cluster network is consumed with handling 'is_remote_recovering' calls that it becomes hard to actually do the recovery. The fix is to only allow one is_remote_recovering call to go to the cluster every 1/4 sec. When the call goes up to userspace, it also retrieves info about how far along the resync is. If a request is determined to already be in sync by that info, then the region is not recovering and can safely be answered without having to send the request on to the cluster. This approach has greatly improved both the recovery and nominal throughput. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.14&r2=1.1.2.15 From jbrassow@sourceware.org Wed Feb 13 15:06:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 13 Feb 2008 15:06:00 -0000 Subject: cluster/cmirror-kernel/src dm-clog.c Message-ID: <20080213150623.25286.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-13 15:06:23 Modified files: cmirror-kernel/src: dm-clog.c Log message: - change the way 'is_remote_recovering' works to improve overall performance. Before a mirror issues a write, it must call 'is_remote_recovering' to ensure that another machine will not be recovering the region during the write. This function can dramatically slow things down. One way to increase performance is to note when the mirror is in-sync - then is_remote_recovering can return 0 without having to send the request around the cluster. (This has already been done.) This greatly speeds up I/O during nominal mirror operation. However, I/O during mirror resyncing is still greatly reduced. The problem is that the cluster network is consumed with handling 'is_remote_recovering' calls that it becomes hard to actually do the recovery. The fix is to only allow one is_remote_recovering call to go to the cluster every 1/4 sec. When the call goes up to userspace, it also retrieves info about how far along the resync is. If a request is determined to already be in sync by that info, then the region is not recovering and can safely be answered without having to send the request on to the cluster. This approach has greatly improved both the recovery and nominal throughput. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-clog.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.9&r2=1.2.2.10 From fabbione@sourceware.org Fri Feb 15 08:01:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 15 Feb 2008 08:01:00 -0000 Subject: cluster/gfs2/libgfs2 misc.c Message-ID: <20080215080143.17012.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-02-15 08:01:43 Modified files: gfs2/libgfs2 : misc.c Log message: Fix http://bugs.debian.org/465790 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/libgfs2/misc.c.diff?cvsroot=cluster&r1=1.6&r2=1.7 From ccaulfield@sourceware.org Mon Feb 18 17:25:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Mon, 18 Feb 2008 17:25:00 -0000 Subject: cluster/cman/daemon config.c Message-ID: <20080218172542.29534.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: ccaulfield@sourceware.org 2008-02-18 17:25:42 Modified files: cman/daemon : config.c Log message: Allow unnamed parent objects. This fixes a bug where entries appeared under the top-level rather than the clusternode. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/config.c.diff?cvsroot=cluster&r1=1.20&r2=1.21 From rmccabe@sourceware.org Tue Feb 19 03:14:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 19 Feb 2008 03:14:00 -0000 Subject: conga/ricci common/daemon_init.c ricci/Makefil ... Message-ID: <20080219031412.7856.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-19 03:14:12 Modified files: ricci/common : daemon_init.c ricci/ricci : Makefile Ricci.cpp main.cpp Added files: ricci/test_suite/ricci: self_fence.xml Log message: add support for quick and dirty fencing (a la 'reboot -fn') via a 'self_fence' or 'force_reboot' function Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/daemon_init.c.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Makefile.diff?cvsroot=cluster&r1=1.25&r2=1.26 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.cpp.diff?cvsroot=cluster&r1=1.30&r2=1.31 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/ricci/self_fence.xml.diff?cvsroot=cluster&r1=NONE&r2=1.1 From rmccabe@sourceware.org Tue Feb 19 15:51:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 19 Feb 2008 15:51:00 -0000 Subject: conga/ricci/ricci main.cpp Message-ID: <20080219155152.28710.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-19 15:51:52 Modified files: ricci/ricci : main.cpp Log message: Clean up error paths when dropping privs Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 From rmccabe@sourceware.org Tue Feb 19 16:01:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 19 Feb 2008 16:01:00 -0000 Subject: conga/ricci/ricci main.cpp Message-ID: <20080219160139.3352.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-19 16:01:39 Modified files: ricci/ricci : main.cpp Log message: Add a help dialog to be printed when the -h flag is given on the command line Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 From rmccabe@sourceware.org Tue Feb 19 18:37:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 19 Feb 2008 18:37:00 -0000 Subject: conga ./Makefile ./autogen.sh ricci/Makefile r ... Message-ID: <20080219183740.22162.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-19 18:37:40 Modified files: . : Makefile autogen.sh ricci : Makefile autogen.sh ricci/modules/cluster/clumon: Makefile Added files: . : ricci.spec.in.in ricci/docs : Makefile Log message: Add a makefile target and spec file to allow building a ricci srpm separate from luci Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Makefile.diff?cvsroot=cluster&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/autogen.sh.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Makefile.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/autogen.sh.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/Makefile.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8 From rmccabe@sourceware.org Tue Feb 19 22:49:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 19 Feb 2008 22:49:00 -0000 Subject: conga/ricci/init.d ricci Message-ID: <20080219224931.12860.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-19 22:49:31 Modified files: ricci/init.d : ricci Log message: clean up init script get rid of unconditional 8s sleep Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/ricci.diff?cvsroot=cluster&r1=1.13&r2=1.14 From rmccabe@sourceware.org Wed Feb 20 17:07:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 20 Feb 2008 17:07:00 -0000 Subject: conga ./clustermon.spec.in.in ./ricci.spec.in. ... Message-ID: <20080220170756.22094.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-20 17:07:56 Modified files: . : clustermon.spec.in.in ricci.spec.in.in make : version.in ricci : Makefile ricci/docs : Makefile ricci/init.d : ricci ricci/modules/cluster/clumon/init.d: modclusterd Log message: - Install API docs in /usr/share/doc/ - Don't start services automatically - More init script tweaks Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.35&r2=1.36 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&r1=1.34&r2=1.35 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Makefile.diff?cvsroot=cluster&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/Makefile.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/ricci.diff?cvsroot=cluster&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/modclusterd.diff?cvsroot=cluster&r1=1.5&r2=1.6 From rmccabe@sourceware.org Wed Feb 20 17:23:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 20 Feb 2008 17:23:00 -0000 Subject: conga clustermon.spec.in.in Message-ID: <20080220172354.27130.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-20 17:23:54 Modified files: . : clustermon.spec.in.in Log message: Kill a couple of rpmlint warnings Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.36&r2=1.37 From rmccabe@sourceware.org Wed Feb 20 17:32:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 20 Feb 2008 17:32:00 -0000 Subject: conga ricci.spec.in.in Message-ID: <20080220173205.31038.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-20 17:32:05 Modified files: . : ricci.spec.in.in Log message: Create the ricci user and group properly Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.2&r2=1.3 From fabbione@sourceware.org Wed Feb 20 21:50:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 20 Feb 2008 21:50:00 -0000 Subject: cluster/gfs-kernel/src/gfs ops_export.c Message-ID: <20080220215000.16464.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: fabbione@sourceware.org 2008-02-20 21:50:00 Modified files: gfs-kernel/src/gfs: ops_export.c Log message: Sync missing commit from RHEL5 branch: Dmitry Monakhov from OpenVZ linux kernel team reports about wrong locking order in gfs_get_parent(). Patch submitted by Vasily Averin (vvs@sw.ru) under Red Hat bugzilla 400651 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_export.c.diff?cvsroot=cluster&r1=1.13&r2=1.14 From jbrassow@sourceware.org Thu Feb 21 14:45:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 21 Feb 2008 14:45:00 -0000 Subject: cluster/cmirror/src Makefile cluster.c Message-ID: <20080221144549.4756.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-21 14:45:49 Modified files: cmirror/src : Makefile cluster.c Log message: - couple fixes for checking error codes from openais Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.5&r2=1.3.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.16&r2=1.1.2.17 From teigland@sourceware.org Thu Feb 21 17:49:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 21 Feb 2008 17:49:00 -0000 Subject: cluster/dlm/tests/usertest dlmtest2.c Message-ID: <20080221174916.8124.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland@sourceware.org 2008-02-21 17:49:16 Modified files: dlm/tests/usertest: dlmtest2.c Log message: updates Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/tests/usertest/dlmtest2.c.diff?cvsroot=cluster&r1=1.11&r2=1.12 From meyering@sourceware.org Fri Feb 22 07:00:00 2008 From: meyering@sourceware.org (meyering@sourceware.org) Date: Fri, 22 Feb 2008 07:00:00 -0000 Subject: CVSROOT checkoutlist commitinfo no-commits Message-ID: <20080222070006.10414.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: CVSROOT Changes by: meyering@sourceware.org 2008-02-22 07:00:06 Modified files: . : checkoutlist commitinfo Added files: . : no-commits Log message: disallow commits to cluster Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/CVSROOT/no-commits.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/CVSROOT/checkoutlist.diff?cvsroot=cluster&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/CVSROOT/commitinfo.diff?cvsroot=cluster&r1=1.2&r2=1.3 From meyering@sourceware.org Fri Feb 22 07:08:00 2008 From: meyering@sourceware.org (meyering@sourceware.org) Date: Fri, 22 Feb 2008 07:08:00 -0000 Subject: CVSROOT no-commits Message-ID: <20080222070840.20973.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: CVSROOT Changes by: meyering@sourceware.org 2008-02-22 07:08:40 Modified files: . : no-commits Log message: include gitweb URL Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/CVSROOT/no-commits.diff?cvsroot=cluster&r1=1.1&r2=1.2 From cfeist@redhat.com Fri Feb 22 19:44:00 2008 From: cfeist@redhat.com (Chris Feist) Date: Fri, 22 Feb 2008 19:44:00 -0000 Subject: [SCM] Red Hat Cluster Suite branch, master, updated. gfs-kernel_0_1_22-36-gd6b422f Message-ID: <20080222194449.29905.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Red Hat Cluster Suite". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d6b422f475c286cd884c74538f500b31e17b50ec The branch, master has been updated via d6b422f475c286cd884c74538f500b31e17b50ec (commit) from 1626723ac10fc31af8fc92de5ded12beb915afbc (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d6b422f475c286cd884c74538f500b31e17b50ec Author: Chris Feist Date: Fri Feb 22 13:44:46 2008 -0600 Test git commit. ----------------------------------------------------------------------- Summary of changes: configure | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) hooks/post-receive -- Red Hat Cluster Suite From teigland@redhat.com Fri Feb 22 19:52:00 2008 From: teigland@redhat.com (David Teigland) Date: Fri, 22 Feb 2008 19:52:00 -0000 Subject: [SCM] Red Hat Cluster Suite branch, RHEL5, updated. cmirror-kernel_0_1_7-2-g61f1219 Message-ID: <20080222195221.431.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Red Hat Cluster Suite". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=61f1219b8350282a41ab4b07ed8c6855e1561d54 The branch, RHEL5 has been updated via 61f1219b8350282a41ab4b07ed8c6855e1561d54 (commit) from f390ad642d741e28ae9f04a4db160d7f674bf132 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 61f1219b8350282a41ab4b07ed8c6855e1561d54 Author: David Teigland Date: Fri Feb 22 08:58:29 2008 -0600 groupd: update copyrights Some files were missing copyright headers altogether. ----------------------------------------------------------------------- Summary of changes: group/daemon/app.c | 11 +++++++++++ group/daemon/cman.c | 11 +++++++++++ group/daemon/cpg.c | 11 +++++++++++ group/daemon/gd_internal.h | 2 +- group/daemon/groupd.h | 2 +- group/daemon/joinleave.c | 11 +++++++++++ group/daemon/main.c | 2 +- 7 files changed, 47 insertions(+), 3 deletions(-) hooks/post-receive -- Red Hat Cluster Suite From cfeist@redhat.com Fri Feb 22 20:28:00 2008 From: cfeist@redhat.com (Chris Feist) Date: Fri, 22 Feb 2008 20:28:00 -0000 Subject: [SCM] Red Hat Cluster Suite branch, STABLE2, created. gfs-kernel_0_1_22-36-gd6b422f Message-ID: <20080222202844.28726.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Red Hat Cluster Suite". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d6b422f475c286cd884c74538f500b31e17b50ec The branch, STABLE2 has been created at d6b422f475c286cd884c74538f500b31e17b50ec (commit) - Log ----------------------------------------------------------------- commit d6b422f475c286cd884c74538f500b31e17b50ec Author: Chris Feist Date: Fri Feb 22 13:44:46 2008 -0600 Test git commit. commit 1626723ac10fc31af8fc92de5ded12beb915afbc Author: Chris Feist Date: Fri Feb 22 13:39:48 2008 -0600 Removed newline. commit 72a7c637281cfbb9f8fdadebac65a9f40592064e Author: Chris Feist Date: Fri Feb 22 12:14:28 2008 -0600 Test git commit. commit 9fcdd6a0e9f7ed3fe01b6675f48dad54618cd74b Author: Chris Feist Date: Fri Feb 22 11:42:59 2008 -0600 Added date. (test git commit) commit af3916d6d28d1c95186d4a59f66f9aebb34ad2a7 Author: David Teigland Date: Thu Feb 21 17:49:15 2008 +0000 updates commit 28e7052b568df48b5cea1bcca2c29a900b0531d9 Author: Fabio M. Di Nitto Date: Wed Feb 20 21:50:00 2008 +0000 Sync missing commit from RHEL5 branch: Dmitry Monakhov from OpenVZ linux kernel team reports about wrong locking order in gfs_get_parent(). Patch submitted by Vasily Averin (vvs@sw.ru) under Red Hat bugzilla 400651 commit e273afcaba121c70e3bc5146a8e4e35212b959db Author: ccaulfield Date: Mon Feb 18 17:25:41 2008 +0000 Allow unnamed parent objects. This fixes a bug where entries appeared under the top-level rather than the clusternode. commit 589bb79762a4945d02b241ac2b0348e006874c70 Author: Fabio M. Di Nitto Date: Fri Feb 15 08:01:43 2008 +0000 Fix http://bugs.debian.org/465790 commit d34306382f6403e7db4d09e743fa0efe57f41dda Author: Fabio M. Di Nitto Date: Tue Feb 12 06:18:16 2008 +0000 Clean up qdisk man page. -\fB...>\fP is not a keyword (starts the line with .) make the man page more consistent with use of /> commit 01625cccd89cad2126cbb5ed4edde2dd605207c7 Author: Fabio M. Di Nitto Date: Tue Feb 12 06:05:48 2008 +0000 Man page cleanup. .SP is not a keyword. Change it to .SH. commit 1bcfb8719985de20213f263bc2359df448972146 Author: Fabio M. Di Nitto Date: Tue Feb 12 06:01:20 2008 +0000 Cleanup man page. Lines starting with "." are man keywords. Just a plain space in front to make it clean. commit 73520ece974fe67546dd8bcf5c06d73710e8742c Author: Fabio M. Di Nitto Date: Tue Feb 12 05:45:34 2008 +0000 Stop linking against unrequired libraries. A lot of small tools were linking against a bunch of libraries for no reasons. Clean them up as much as possible as static linking is not spotted automatically. Problem spotted by some Debian automatic test tools and reported by Frederik Sch????ler commit dc46ca35acb0e2fed7b6beff16d1ee58fd2a7f91 Author: Patrick Caulfield Date: Fri Feb 8 14:09:28 2008 +0000 Implement a nicer way of getting the quorum disk information. The libcman API remains the same but the connection to cman itself works using the normal GETNODE call. commit 172b043cc24bc3a32846ca21806ba5a4d0d054be Author: Jonathan Brassow Date: Wed Feb 6 17:43:33 2008 +0000 - Bug 431705: HA LVM should prevent users from running an invalid setup (2) - better checking for improper setup -- this time for presence of fail-over VG in the volume_list commit 35752686e8008a673623aca89c2865c77812f1f8 Author: Jonathan Brassow Date: Wed Feb 6 16:40:27 2008 +0000 - better checking for improper setup -- this time for presence of fail-over VG in the volume_list commit 15d4f79aefaa9b2ecaafc43d10ea5c4148a62638 Author: Patrick Caulfield Date: Mon Feb 4 10:54:26 2008 +0000 Change a log_printf() into a syslog() so that the die message always arrives in the log. commit 75412e1b0d32c2983c8a6dfdc6a0652aa48939f5 Author: Lon Hohberger Date: Wed Jan 30 20:00:14 2008 +0000 Fix short read handling in read_pipe commit afbda942f1775855e817f39913161b185597b7d9 Author: Lon Hohberger Date: Wed Jan 30 19:20:11 2008 +0000 Make fenced's override wait time configurable. commit 06acbca69db0b297a3454a307fd27390f23aa210 Author: Lon Hohberger Date: Wed Jan 30 18:45:14 2008 +0000 Make default TTL 4 instead of 2 per Fabio's recommendation (e.g. RFC2608). Make TTL configurable in cluster.conf/command line for fence_xvm. commit 7aa1db92401a7929866389438ced1594b6c3f1c5 Author: Patrick Caulfield Date: Wed Jan 30 16:06:07 2008 +0000 Oops. a bit too much cman3 fell into that last checkin commit e3d66b8698f4cbefa9301396200a97d957e6d85e Author: Patrick Caulfield Date: Wed Jan 30 15:46:41 2008 +0000 Improve startup error checking and logging. commit cbf0fbfe4809beb41bed7910d9b283e38618344f Author: Fabio M. Di Nitto Date: Wed Jan 30 09:05:57 2008 +0000 Whitespace cleanup commit 60c13fc690b5ae8f8ad13f82cc01d2069166977d Author: Fabio M. Di Nitto Date: Wed Jan 30 08:32:28 2008 +0000 Remove unrequire functions. This follow gfs2 changes commit 069d5a06b3c31d8f6b361898003b766d1e4eb4b7 Author: Fabio M. Di Nitto Date: Wed Jan 30 06:57:41 2008 +0000 Bugzilla 227892: * Warn people about the RG corruption and request a gfs_fsck * Upon error detection, perform a minimum error data collection Port forward patch from RHEL5 branch to HEAD. Original author: Wendy Cheng commit 200f36af2aca507a5c225c7c11446234b874188e Author: Fabio M. Di Nitto Date: Wed Jan 30 06:37:53 2008 +0000 Red Hat bugzilla 244343: GFS supports two modes of locking - lock_nolock for single node filesystem and lock_dlm for cluster mode locking. The gfs lock methods are removed from file operation table for lock_nolock protocol. This would allow VFS to handle posix lock and flock logics just like other in-tree filesystems without duplication. Port forward patch from RHEL5 branch to HEAD. Original author: Wendy Cheng commit 551ca60601c13c83f41185587402a8165bba2d2a Author: Fabio M. Di Nitto Date: Mon Jan 28 07:43:41 2008 +0000 Remove obsolete file commit 317b3a87121c20e9afbfe33c28368c510bdbce01 Author: Fabio M. Di Nitto Date: Mon Jan 28 06:43:50 2008 +0000 Bump kernel check to 2.6.24 commit f8ecbafa7c0b2cd852c536397112b3009b666a95 Author: Fabio M. Di Nitto Date: Mon Jan 28 06:42:35 2008 +0000 Fix build warning commit aa7526d0b71c32cf5549fd1380e8f8829122a327 Author: Fabio M. Di Nitto Date: Mon Jan 28 06:40:25 2008 +0000 Remove unused variable commit 4fba8ee8a0ddde58e9b648b476b7662258e72bb3 Author: Fabio M. Di Nitto Date: Mon Jan 28 06:36:18 2008 +0000 fix gfs for the removal of sendfile and helper functions Sendfile and helper functions have been removed in 2.6.24. Migrate to using splice_read and generic_file_splice_read helper function. Signed-off-by: Phillip Lougher commit 6e7751d9588f8fd5b4f7d062835d88d68e7a334e Author: Fabio M. Di Nitto Date: Mon Jan 28 06:29:25 2008 +0000 Update gfs to cope with 2.6.24 export op changes and other bits commit bfda1c47e4604d3f3602af20e56d5587d2085e00 Author: Fabio M. Di Nitto Date: Mon Jan 28 06:21:21 2008 +0000 EXPORT_SYMBOL(xtime) has been removed in 2.6.24. Let's use the exact same value (tv_nsec) just from another source. commit 9924e8f8465ba562df2f9e6f8ba16b0b32abba99 Author: Fabio M. Di Nitto Date: Mon Jan 28 06:13:15 2008 +0000 Update gnbd kernel modules to build with 2.6.24 commit b58fdfde225a576c555203bee95aaa4089710866 Author: Robert Peterson Date: Sat Jan 26 14:20:57 2008 +0000 Resolves: bz 223660: man gfs2(8) refers to the gfs2_mkfs manpage commit 280b652bade35415ee755057862db77aa70463cb Author: Lon Hohberger Date: Fri Jan 25 18:13:24 2008 +0000 Fix qdiskd master abdication logic (#430264) commit 91e72fca55b9b04192acb2fc0bf8a03ab8782159 Author: Lon Hohberger Date: Fri Jan 25 18:12:08 2008 +0000 Fix #430272, #430220 commit eef0915da40ef0f041509d79dd63a1f495ce0c4b Author: Robert Peterson Date: Thu Jan 24 20:54:31 2008 +0000 Resolves: bz 429633: gfs_tool doesn't recognize GFS file sytem commit a18e92942857046284e1b9f62684469aceb6ae53 Author: Benjamin Marzinski Date: Thu Jan 24 20:42:00 2008 +0000 Fix for bz #426291. gfs_glock_dq was traversing the gl_holders list without holding the gl_spin spinlock, this was causing a problem when the list item it was currently looking at got removed from the list. The solution is to not traverse the list, because it is unncessary. Unfortunately, there is also a bug in this section of code, where you can't guarantee that you will not cache a glock held with GL_NOCACHE. Fixing this issue requires significantly more work. commit b4918d602e7be8900dab772a48ee500afae88e44 Author: Lon Hohberger Date: Thu Jan 24 18:42:12 2008 +0000 Unblock signals after fork() so heuristics using signals don't hang commit 53f025e2f778d3bbefe33bb69da117bb2f8e8fce Author: Lon Hohberger Date: Mon Jan 21 22:37:17 2008 +0000 Fix ccs connect error handling commit 4d96e450f8c4cf729831038ca661f2120b0a08f2 Author: Jonathan Brassow Date: Mon Jan 21 22:31:42 2008 +0000 - ccs library now checks for bad file descriptors as input commit c03cee4fce480d6d63657350e7475d5bac02bfe1 Author: David Teigland Date: Mon Jan 21 20:21:08 2008 +0000 bz 429546 Fix an alignment problem with ppc64. Things work if we do the byte-swapping on the original structure and then copy it into the final buffer, instead of copying first and then trying to do the byte-swapping at an offset within the send buffer. commit 88bfe158ee80e54b61ab3be9bd08a100e7475617 Author: Fabio M. Di Nitto Date: Mon Jan 21 14:37:56 2008 +0000 Add fake support for -r option at umount so we don't fail if gfs2 is not umounted by it's init script. commit 240570929b4595d47323ea070ed1c81c6bee9d8c Author: Lon Hohberger Date: Fri Jan 18 19:36:47 2008 +0000 fix 429248 commit 18398fd87e6938a416e5986d82ede4b10a8208bb Author: Abhijith Das Date: Fri Jan 18 17:51:38 2008 +0000 fix for bz333961 - adds support for -n and -f mount options commit ecae2156561b88ddf64f79a8b07b20e19ab2ccf8 Author: Abhijith Das Date: Fri Jan 18 16:47:01 2008 +0000 lon's patch removes 'Domain-0' check which was breaking xvm because cman starts before xend. patch also allows you to put NODENAME in /etc/sysconfig/cluster commit 2d45eea795673eb3753820063869fa4ce1377ec2 Author: David Teigland Date: Thu Jan 17 21:49:00 2008 +0000 odds and ends not commited commit c67fda209097e39e7b394f0ec7f7285ba73706eb Author: Lon Hohberger Date: Thu Jan 17 19:38:34 2008 +0000 file oracledb.sh was initially added on branch RHEL5. commit c6dba5c26fa6bd7c833aee5e82f2737940891712 Author: Lon Hohberger Date: Wed Jan 16 19:10:54 2008 +0000 Fix #60 error in #428346 bug commit 76db32ef6a9b17eb615b82ff5b43fc1878c77ec2 Author: Patrick Caulfield Date: Wed Jan 16 17:25:48 2008 +0000 Zero namelen when doing an unlock. On 32/64 bit systems it can make a horrible mess otherwise. commit 27ce3c6200cbdebcc4616ab2fc38bc883d4ca09c Author: Ryan McCabe Date: Tue Jan 15 16:18:34 2008 +0000 Allow "option=(on|off|reboot)" (currently only fence_ilo takes "action") commit 55785b270cb138162dab457c54e0359d5d2f6578 Author: Robert Peterson Date: Tue Jan 15 15:04:45 2008 +0000 Fixup contributed by Andy Price. commit 5273a88e83e24d8206c9098b670fe407c93d01f4 Author: David Teigland Date: Mon Jan 14 20:53:34 2008 +0000 fix %llx printf warnings using (unsigned long long) commit 3ef3535842e8dccc7c626b62ecd53de96184e534 Author: Fabio M. Di Nitto Date: Mon Jan 14 05:26:21 2008 +0000 Allow the resource to run on Debian/Ubuntu systems without manual patching, by checking for the apache2 daemon if httpd is not available. Replace =~ '^/' sintax with less bash dependent version. Use grep -E instead of -P as perl regexp support is not built on all distros. commit 7f429de22e4f3527bc4afe8c056cab78035a6389 Author: Jonathan Brassow Date: Fri Jan 11 21:32:48 2008 +0000 - Bug #428448 - HA LVM service fails to relocate when I/O is running Was failing to add new tag when relocating. commit 30545d893e380571dc86d6130a4df989a82cac5f Author: Patrick Caulfield Date: Thu Jan 10 10:39:16 2008 +0000 Add command-line override for 2node mode. Because of the way cman re-reads CCS it is quite possible to start up a cluster in 2 node mode manually, then add a third node via CCS (I think) commit e8242ea362c8636a59fd3db109bb8efd34554fd8 Author: Fabio M. Di Nitto Date: Thu Jan 10 10:22:42 2008 +0000 Whitespace cleanup commit 89643b0783e770eda0c78cbdea343d0c79f7db34 Author: Fabio M. Di Nitto Date: Thu Jan 10 09:28:41 2008 +0000 Fix alignment issues in rgmanager. This makes it possible to run rgmanager on sparc. Patch by Lon. Tested by both of us on x86, x86_64, parisc, ia64, sparc. commit 16af577969cafe22aed9f56f76b857cde0d0f1d2 Author: Robert Peterson Date: Wed Jan 9 21:30:20 2008 +0000 Resolves: bz 426670: GFS2: man page for gfs2_tool has commented lockdump section commit 53d8dcfacc5d9f8e2f6c2e91d4fb96907bb73a35 Author: Fabio M. Di Nitto Date: Wed Jan 9 11:56:08 2008 +0000 Fix mkdir invokation to not fail when dir already exists commit c6bd792172b00c5c954af9413ade81dbb567b752 Author: Lon Hohberger Date: Tue Jan 8 22:12:19 2008 +0000 Roll back previous patch to ip_lookup.c commit 3372b7e4d80507a842d88c9f8cc4741ff48b92c2 Author: Lon Hohberger Date: Tue Jan 8 15:05:24 2008 +0000 Fix build problem reported by Chris Feist commit c2bda8d346f9ff8042423ba6b572069090e99180 Author: Fabio M. Di Nitto Date: Tue Jan 8 04:46:32 2008 +0000 Fix "off the source tree" install. This was a small regression introduced with the /etc/cluster/cluster.conf configure bits. commit 59e1930afa21b83340f83130650f9060a0098691 Author: Lon Hohberger Date: Mon Jan 7 18:58:29 2008 +0000 Figure out where slang is installed. commit 46ce43ca09f3e4650271247448f5d3a0572b0c0a Author: Lon Hohberger Date: Mon Jan 7 18:53:14 2008 +0000 Correct signed vs. unsigned comparison on sparc64 commit 3fbb85e24048d190d7e2f6d6ee28e871843ad5f8 Author: Fabio M. Di Nitto Date: Mon Jan 7 05:52:29 2008 +0000 makes it possible to change the default configuration file by setting --confdir (default to /etc/cluster) and --conffile (cluster.conf). NOTE: manpages with hardencoded /etc/cluster/cluster.conf are not updated. If you dare to change these defaults you know what you are doing. NOTE to developers: you will need to re-run ./configure to set the new vars. commit b33aa3b4ff62208eff2ef0a94f6b23021807e8eb Author: Jonathan Brassow Date: Fri Jan 4 20:02:20 2008 +0000 - a regression... When tagging at the LV-level, the script should complain if there is more than one LV / VG. commit dcc05bf1aff93fa250d8023068a12afbb2a257c5 Author: Fabio M. Di Nitto Date: Fri Jan 4 05:11:35 2008 +0000 Fix clean target. core files have pid attached to them. commit d6b604e750041e6639a38a9509664055e6ddb3ab Author: Jonathan Brassow Date: Thu Jan 3 21:02:53 2008 +0000 lvm resource script now allows multiple LVs per VG as long as they move together (exist on the same machine). commit 5f848d6bb29e3a6f16c72c125304331e7a0b78b3 Author: Jonathan Brassow Date: Thu Jan 3 20:56:49 2008 +0000 s/validate/verify/ commit 7d74a6b84b4d8a709b85f302de3dbd31e9ea0079 Author: Jonathan Brassow Date: Thu Jan 3 20:35:39 2008 +0000 BUG 427377 HA LVM now allows multiple LVs/VG as long as they move together Package builder, please note the addition of 3 new files. commit a3579f2568eb9356d6e84213351d334de6bb5351 Author: Patrick Caulfield Date: Thu Jan 3 16:35:54 2008 +0000 Get rid of redundant totemip_parse() call. This was in a bad place and could cause aisexec stalls and disallowed nodes, particularly at startup. commit 7d6ecbe6c828be7934110e35e782639e6178988d Author: Fabio M. Di Nitto Date: Thu Jan 3 06:48:12 2008 +0000 Fix buffer align. So far this one makes the entire stack run on sparc up to fenced. commit d1337f14daa430718108523372f373adfb581130 Author: Lon Hohberger Date: Wed Jan 2 19:54:28 2008 +0000 Fix endian issue on big-endian arches commit feac7c0475e2cde593215af75589a8efe789e11b Author: Patrick Caulfield Date: Wed Jan 2 16:35:44 2008 +0000 Use define CMAN_NAME for the purpose for which it was intended commit fcdde4ea4e059441d5cec2c98063c9cd4c8c2988 Author: Patrick Caulfield Date: Wed Jan 2 16:23:28 2008 +0000 Lets see if I can do this commit properly... Fix swab of an int to be swab32 rather than swab16 commit 33c60e581172386174f99167020e2bf9cee5986d Author: Fabio M. Di Nitto Date: Wed Jan 2 11:48:54 2008 +0000 Cleanup manpages to work with whatis. Patch from Frederik Sch????ler commit 1c04c2302ad125dcc98cc7fef16e91122f973086 Author: Fabio M. Di Nitto Date: Wed Jan 2 11:40:58 2008 +0000 Add interpreter to ocf-shellfuncs. Patch by Frederik Sch????ler commit 47e3a78442c4f9e6ec9b6c5f09d1ed81b412c5b5 Author: Patrick Caulfield Date: Wed Jan 2 09:27:12 2008 +0000 totempg_ifaces_get() always copies INTERFACE_MAX addresses so make sure we alloate enough space for them all. commit 0016465d76115ffcd57f2a3bf23d4017f498962d Author: Fabio M. Di Nitto Date: Mon Dec 31 05:15:43 2007 +0000 aisexec config parser expects error_string to be set also when we successfully read the configuration. commit fbc5df92d1d003be58c84ab8575e31bc0cd72961 Author: Fabio M. Di Nitto Date: Sun Dec 30 09:30:15 2007 +0000 Fix error reporting to aisexec. aisexec expects an error_string string set by config_read if config_read fails. The lack of error_string is not checked by aisexec that will segfault. Set error_string properly and clean up the old errorstring that is not used. commit ed20576953ff71c9567a3b3c3303cf07a31e6978 Author: Fabio M. Di Nitto Date: Sun Dec 30 08:27:21 2007 +0000 Fix building when -DDEBUG is defined. commit 2cf4262417962fb701013a0c658854bcf8c9de18 Author: Fabio M. Di Nitto Date: Sun Dec 30 08:11:53 2007 +0000 Fix build with -DDEBUG commit d94d15815955fbba930080f775233fc002baf71c Author: Fabio M. Di Nitto Date: Mon Dec 24 05:26:42 2007 +0000 Once again change ifdef to fix fail to build on hppa/parisc commit 80e37e0b8f1b487cec56fcc992b53fbd2920e16b Author: Fabio M. Di Nitto Date: Mon Dec 24 05:21:00 2007 +0000 Fix all: target. commit 9ac1ce3da698485017bafaea3b0d6cbb5c0ff296 Author: Fabio M. Di Nitto Date: Sat Dec 22 13:52:33 2007 +0000 Fix gnbd build dependencies. For too long we did rely on gnbd/Makefile to build in the right order but single builds were broken. commit 762cdafe240e060e8dddb662e9983bba29e90c10 Author: Fabio M. Di Nitto Date: Sat Dec 22 13:45:30 2007 +0000 Fix fence build dependencies. For too long we did rely on fence/Makefile to build in the right order but fence_tool and fence_node were just broken. commit 2425bc684612269ddb25acb842d9069f6923283b Author: Fabio M. Di Nitto Date: Sat Dec 22 13:36:59 2007 +0000 Fix a few regressions introduced by the big Makefile clean up: - restore all: target as default. Libraries need a small special casing in the include / target order due to var expansion. - fix udev uninstall target: typo in make/uninstall.mk and requires (for sake of simplicity 51-dlm.rules in /lib instead of /script. - gfs/Makefile and fence/agents/Makefile don't need passthrough.mk. - Fix uninstall of symlinks. - Fix uninstall of rgmanager resources. commit b04d33a0962f464fe5cfa3d339bd8ad894c09798 Author: Fabio M. Di Nitto Date: Sat Dec 22 12:46:30 2007 +0000 Collapse all install: and uninstall: targets in make/install.mk make/uninstall.mk Change almost all Makefile's to use them. commit 8ab88d56465c1e46bfe8692c52b05a74d5a711b7 Author: Fabio M. Di Nitto Date: Sat Dec 22 12:18:54 2007 +0000 Convert to use make/clean.mk commit 2bf89eadd5fe60512bdc0e40ce6df97f39586251 Author: Fabio M. Di Nitto Date: Sat Dec 22 05:10:49 2007 +0000 Remove unrequired distclean targets commit c10e69f05e620e58d7c7c79cfe2d06c3447c61ef Author: Fabio M. Di Nitto Date: Fri Dec 21 20:13:55 2007 +0000 Collapse all common clean: target bits into make/clean.mk generalclean: target. Update all relevant makefile's to use generalclean. Required by this change: all TARGETS need to be defined before sourcing *.mk files to allow simpler var expantions. update all makefiles as a consequence commit f13e76874aa5a7e789836f47f1546a27fbf1164e Author: Fabio M. Di Nitto Date: Fri Dec 21 20:00:28 2007 +0000 apply alpha sort :) commit 939628ef09a255b03a9c5f2e6d4bbc3b84e19d06 Author: Fabio M. Di Nitto Date: Fri Dec 21 19:25:33 2007 +0000 Remove obsolete and unused Makefile commit 9c5c126005e5c74697e8f7ae419c317ccf38f28a Author: Fabio M. Di Nitto Date: Fri Dec 21 18:50:02 2007 +0000 Install forgotten dlm man pages. commit 8e9c5de693f76df99f6066f6390a030319720ae5 Author: Fabio M. Di Nitto Date: Fri Dec 21 18:37:16 2007 +0000 Collaps all man Makefile's common snippets into man/man.mk Change all man Makefile's to use it. From now on it will be enough to source make/man.mk and add a TARGET= with the man page. commit b05f710ace4587bc030527aa18a13cbb8ca08853 Author: Fabio M. Di Nitto Date: Fri Dec 21 09:15:21 2007 +0000 A long time ago we did start collecting common Makefile snippets in one location. This time we shrink all common objects rules in make/cobj.mk commit d41938e3573339bb820c0af918e9df04b6e2efed Author: Fabio M. Di Nitto Date: Fri Dec 21 09:11:17 2007 +0000 Use newly defined $(OBJDIR) to source .mk files snippet. This reduced the hardcoded paths in Makefiles to one to include defines.mk and makes it easier to change stuff across the tree in one shot. commit 18a5732666b532792a86ce759c59c8cbc1d2fcc4 Author: Fabio M. Di Nitto Date: Fri Dec 21 09:05:34 2007 +0000 Fix clean target commit 4fe16af32bcf657607ccf018a189864882636241 Author: Fabio M. Di Nitto Date: Fri Dec 21 07:28:37 2007 +0000 Minor objdir rework to extend flexibility. the first shot of objdir implementation implied that you did: cd cluster ./configure --objdir... etc. cd /path/to/objdir make now you can: mkdir objdir cd objdir /path/to/configure make NOTE: in this case you don't need to specify objdir. it will be automatically set up for you. As a nice side effect you can also be anywhere on the fs and do: /path/to/configure --objdir=/path/to/obj cd /path/to/obj make and it will work. commit 621490105ff79fe927b80b9a01e68cd2c0bf465e Author: Fabio M. Di Nitto Date: Fri Dec 21 05:58:34 2007 +0000 Fix 2 corner cases when setting up the objdir: - do not symlink symlinks.. this allows to setup multiple objdirs within the source tree. - do not copy/symlink defines.mk from other trees or bad thing happens. commit 4bb3fe494ba4242ad0adb0b6e5dc7699453bc8a9 Author: Fabio M. Di Nitto Date: Thu Dec 20 22:10:05 2007 +0000 * globally rename BUILDDIR to SRCDIR to reflect what it really is. * top level configure: - add --objdir=/path option (default to current tree - it does not change current behaviour if not specified and different from current tree) - add a perl subroutine to handle symlinks - check and setup /path - switch all libdirs to use the objdir directly - propagate objdir to make/defines.mk NOTE: those changes require 2 perl modules that should be available everywhere: Cwd 'abs_path'; and File::Basename;. NOTE2: you will need to rerun ./configure after applying the patch. * make/defines.mk.input: - suck in OBJDIR from top level configure - define THISDIR as a relative path from the top level. For example: if PWD /usr/src/cluster/cman/lib, THISDIR will contain cman/lib. - define S as full path to SRCDIR/THISDIR/ * all Makefiles: - convert includes path to use $(S) and always point to the source as defined in make/defines.mk. - fix all object generation targets to use $(S). - fix all install targets to $(S) where required. * Random cleanup: - ccs/daemon/Makefile: do not kill files that are not around. - dlm/tool/Makefile: use ${dlmincdir} and $(SRCDIR)/group/dlm_controld/ instead of relative paths and do not include itself as there are no header files. Also use ${dlmlibdir} for linking. - fence/Makefile: change build order as this is required to avoid extra hacks due to shared C files around. - gfs/gfs_fsck/Makefile: fix symlinking to be relative and not absolute or the symlink is useless. - gfs2/fsck/Makefile: likewise. - gfs2/mkfs/Makefile: likewise. - gnbd/utils/Makefile: create bits. This is to avoid even more hacks than fence/Makefile to cope with shared objects. One day we will need to review all of this. commit f89c88754706d66f5cb2781be39787a73e858f5c Author: Fabio M. Di Nitto Date: Thu Dec 20 04:39:06 2007 +0000 Cleanup leftovers from the very old build system. We were using a very complex way to set release_major and release_minor because in the old system it was not possible to set them directly from ./configure. Remove the old cruft since ./configure can now take those values directly in input. commit c90169c28e6dea9262aaf6be34d46966c38eccd2 Author: Lon Hohberger Date: Wed Dec 19 21:34:54 2007 +0000 Allow soft dependencies when central_processing is enabled commit ffb45bd07fe401febd4b24d51a05fab3da544d4b Author: Lon Hohberger Date: Wed Dec 19 21:07:14 2007 +0000 Fix #254111 - when stopping a service using a shared GFS resource, it umounts it even if other services are using it. commit 40071827478903782db9a0356641d5513903ee60 Author: Lon Hohberger Date: Wed Dec 19 20:54:07 2007 +0000 fix typo in clusterfs.sh commit caa5b260e001795e78fdf07423ce35461f3f9611 Author: Fabio M. Di Nitto Date: Wed Dec 19 05:48:35 2007 +0000 Fix extracflags and extraldflags to be recognized as options or configure will fail. commit dea294fd6edeabe2ba4aeb8c348dee5d5233d50d Author: Lon Hohberger Date: Fri Dec 14 22:10:53 2007 +0000 Fix misc central events bugs. commit 24a9055d2d5f892bf362f127d0b7f01febeb96eb Author: Lon Hohberger Date: Fri Dec 14 19:37:00 2007 +0000 Add return value for inability to run due to exclusive flag being present commit 1d1bf8efdc9c5732a904a0d817407a42659c1ec2 Author: Fabio M. Di Nitto Date: Fri Dec 14 14:49:34 2007 +0000 Make sure we invoke virConnectOpen with a proper URI. NULL is deprecated in libvirt and we have no control over distro defaults that might not be xen:///. Patch by Soren Hansen commit ddddf4992167caa6d338ce9aefb0fde1313a56d9 Author: Patrick Caulfield Date: Thu Dec 13 13:39:58 2007 +0000 Allow rrp_mode to be overridden in cluster.conf commit a720663429aca9747a94fe2168f4d0aa35bbeaf1 Author: Patrick Caulfield Date: Thu Dec 13 10:38:42 2007 +0000 Fix altname option commit 2cd08b3de86cacbaefcad4f4556ff33f0ad51ab7 Author: Lon Hohberger Date: Wed Dec 12 21:41:32 2007 +0000 Misc. minor central processing bugfixes commit c7a1dc53145e67bbc34368420dd4f37ffc1de873 Author: Lon Hohberger Date: Wed Dec 12 15:27:35 2007 +0000 Add missing ds.h commit fc14d4871f81d8db8c3c5a79921927811e616dc5 Author: Ryan O'Hara Date: Tue Dec 11 20:58:00 2007 +0000 Fix issue with endian conversion that caused problems for mixed architecture nodes on same subnet. Need to correct swap byte ordering of comm_header_t structure before copying into buffer and when dereferencing. commit ac11b71506af4c197b1b62bd4a9a1f9fe178b35c Author: Patrick Caulfield Date: Tue Dec 11 14:04:26 2007 +0000 Some small fixes to the networking param code, thanks to Fabio on IRC commit 87fc9bcc66de3af17ab6e73e1d8bf3922a7a09e2 Author: Patrick Caulfield Date: Tue Dec 11 11:22:10 2007 +0000 Set networking parameters suitable for running DLM over sctp commit a5a811aee6e05340796949c3a1d2f83a0fb1ae68 Author: Patrick Caulfield Date: Tue Dec 11 10:48:01 2007 +0000 Tidy comments commit 9bf0c341361790b616724d80121420ffe1bd77d4 Author: Lon Hohberger Date: Mon Dec 10 18:11:56 2007 +0000 Fix type-punned errors on i386 commit 72e748656e9df26fb0d0983fe158f96599b76e06 Author: Patrick Caulfield Date: Mon Dec 10 16:17:06 2007 +0000 Add multi-path capability. Each address we get from cman is now passed into the DLM. It's still incumbent on cluster.conf to set the transport to sctp. commit e0219576ce9ff3e3d0168def649aa6270ba5e9f7 Author: David Teigland Date: Fri Dec 7 17:03:29 2007 +0000 new plock ownership related stuff commit 9c050e9afded3e1521f6ed84dba5bd6e3090f635 Author: Lon Hohberger Date: Fri Dec 7 00:53:44 2007 +0000 Make S-Lang library & include paths configurable. NOTE: You MUST rerun configure after applying this update or rgmanager will no longer build. commit d244af4863499ac66e3ac1090602925b5bf9957a Author: Lon Hohberger Date: Thu Dec 6 17:47:06 2007 +0000 Fix format warnings on newer GCC commit 66751a14b43b5869eee74d571b65337f20ec4420 Author: Lon Hohberger Date: Thu Dec 6 16:16:07 2007 +0000 Add missing sets.h commit 1b6aec51b5de097e7142650380ff03e68298432c Author: Patrick Caulfield Date: Thu Dec 6 10:38:00 2007 +0000 Add option to disable kernel_check. From Soren Hansen: "It's handy to be able to disable the new kernel version check if we don't actually have the kernel headers around, but know that the proper stuff is around when it's needed." commit 1becb758e289d1fa82e74a20db145cead55be361 Author: Lon Hohberger Date: Wed Dec 5 17:42:48 2007 +0000 Preliminary GFS2 support in clusterfs.sh commit 4819832721ae94ff7f86d859acf422dc379d9619 Author: Patrick Caulfield Date: Wed Dec 5 14:28:58 2007 +0000 Print votes of quorum device in cman_tool status commit 5a30282a93a205b72a241bf0a5268af577b66693 Author: Lon Hohberger Date: Tue Dec 4 22:02:09 2007 +0000 Merge force-unmount from RHEL5 branch for netfs.sh script commit 2c4c9b98fe22dcd9a7690b102eeba779faf286b8 Author: Ryan O'Hara Date: Tue Dec 4 19:30:27 2007 +0000 BZ 323111 Remove permission() checks from xattrs ops. commit 3111f39c9c9c74ca7c71b94897f4d561b61ebf4a Author: Lon Hohberger Date: Fri Nov 30 21:36:29 2007 +0000 Add centralized S/Lang event script engine v0.8.1 commit 2cd6b65fcd66e39a104add5c383b3bc03dc09c45 Author: Lon Hohberger Date: Fri Nov 30 21:01:27 2007 +0000 Merge from RHEL5 branch, pass 3 commit ecefa2a15e57f6677f6d61abf1016c4a234845f4 Author: Lon Hohberger Date: Fri Nov 30 20:36:18 2007 +0000 Merges from RHEL5 branch - round 2. commit 34ea202eb1ce6ed2aa918fc1f96c81b2e41add88 Author: Lon Hohberger Date: Fri Nov 30 20:06:55 2007 +0000 Merges from RHEL5 branch - round 1. commit 16a0eec4f9355a75607376ca3a97bd5dc7e3b5ce Author: David Teigland Date: Fri Nov 30 16:20:55 2007 +0000 change some log messages commit b90af5e0343347f59b62a3fbe27f10c411825ff3 Author: David Teigland Date: Thu Nov 29 21:27:58 2007 +0000 Testing revealed a couple more races I hadn't expected. commit 0bf38917546c0ce4f087944497ccfce4fe3adda6 Author: Robert Peterson Date: Thu Nov 29 16:20:51 2007 +0000 Resolves: bz 325151: GFS2: gfs2_fsck changes to system inodes don't stick commit e18667397e6bd1715cba5cbdafa48f0841458d67 Author: Patrick Caulfield Date: Thu Nov 29 11:19:12 2007 +0000 Reinstate 'cman_tool join -X', allowing people to start a cluster without the hassle of a cluster.conf file. There are some caveats to this, which are mentioned in the man page. commit babf8e0a5a56a34c1c9bbeede934b09e4223befa Author: David Teigland Date: Wed Nov 28 20:49:08 2007 +0000 A performance optimization for plocks. This speeds up locks that are repeatedly accessed by processes on a single node. Plocks used by processes on multiple nodes work the same way as before. The optimization is disabled by default, and can be enabled by setting in cluster.conf, or by starting gfs_controld with "-o1". It is disabled by default because enabling it breaks compatibility with previous versions of gfs_controld. If all nodes in the cluster are running this version, then plock_ownership can be enabled. The plock_ownership mode needs extensive testing. This also introduces some minor changes when plock_ownership is disabled, so new testing is also required in that mode. Abhi and I worked on this together. commit 7ff31143f8c7897fcb1a8e65ef2adaf9559da8fa Author: Robert Peterson Date: Wed Nov 28 16:42:48 2007 +0000 Resolves: bz 402971: GFS2: gfs2_edit savemeta doesn't save rindex file. commit 0ddd2df0d301f93aeb0064fc7d06651f74ab8492 Author: Fabio M. Di Nitto Date: Tue Nov 27 14:54:53 2007 +0000 Do not install stripped binaries commit 19637bc4d8bbe49c8cb364ca898bd77133aaf1e5 Author: Fabio M. Di Nitto Date: Sat Nov 24 04:57:31 2007 +0000 Switch configure to use perl warnings and fix them up. Add kernel_version version check subroutine. Set minimal kernel version requirement to 2.6.23. Many thanks should go to Marian Marinov for the original patch and contribution. commit eff451d5657e4e8e07e4d7fc29a802e25214de59 Author: David Teigland Date: Wed Nov 21 17:49:16 2007 +0000 ASSERT was doing fprintf(stderr) which goes somewhere we don't want when running as a daemon. commit bd26c6ffecca86c82aca42de4a775c97aa02d222 Author: Patrick Caulfield Date: Tue Nov 20 09:02:10 2007 +0000 Clear out the ports opened list when a node goes down. Thanks, Lon. bz#327721 commit 9af294edfcc28c5eb37fb169d6e48d865c400c4d Author: Robert Peterson Date: Fri Nov 16 23:21:30 2007 +0000 Resolves: bz 382581: GFS2: gfs2_fsck: buffer still held for block commit 4fae3510345ff12f00e1a722313f07e780657f05 Author: Robert Peterson Date: Thu Nov 15 21:50:35 2007 +0000 Add the "printsavedmeta" option to the gfs2_edit man page. commit 1a738c32e45cce0e0dda8357b95c84d8e63a86b4 Author: Robert Peterson Date: Thu Nov 15 21:49:27 2007 +0000 gfs2_edit wasn't printing directory entries and extended attributes correctly. commit 94ebb52370363b6fd20ed15e00dc6bcd1b6d7ccd Author: Robert Peterson Date: Thu Nov 15 20:32:42 2007 +0000 Added ability to save inode extended attributes in "savemeta". This is necessary for in order to test bug #382581. Added ability to recurse one level on directories when printing. Fixed bugs associated with traversing directory leaf blocks. Added ability to recognize and display log buffer and quota change blocks. Simplified code by breaking up display_indirect into two functions: one for indirect blocks, the other for directory leaf blocks. commit 84b5a5f622fa080478e1f7bd20f051558f92c41c Author: Fabio M. Di Nitto Date: Thu Nov 15 04:14:15 2007 +0000 Fix bugzilla 362031 commit a999c8d1529759610771b43e691ee75830e2f501 Author: Robert Peterson Date: Wed Nov 14 17:18:09 2007 +0000 Resolves: bz 352841: GFS2: Evaluate and implement missing gfs2_tool features commit 2f0a1315d8320553c62087486f2ceff154ea6d68 Author: Fabio M. Di Nitto Date: Wed Nov 14 12:33:45 2007 +0000 Hard encode paths to (u)mount.gfs* given the very nature of mount(8) api to look only in /sbin for (u)mount helpers, we can hard encode the install paths for our tools into the Makefile systems. I have never seen anywhere a different behavior in any Linux distribution and it will make packagers life simpler. Thanks also to Marc - A. Dahlhaus for spotting the missing DESTDIR entries. commit f3593bf7850ba6ab532ecf8a4cf7147069b50368 Author: Robert Peterson Date: Tue Nov 13 17:22:06 2007 +0000 Fixed printing of gfs1 journals. commit 1008e025d4eae7d1ce9b69c9e9095b1f27117171 Author: Robert Peterson Date: Tue Nov 13 17:03:41 2007 +0000 Resolves: bz 364741: GFS2: gfs2_quota doesn't work unless lock table specified commit 496693f041186ef000fd82601f42e82a6fde8658 Author: Patrick Caulfield Date: Mon Nov 12 14:35:20 2007 +0000 file msgtest.c was initially added on branch RHEL4. commit 6f61c48e16478df37573d550acd5b71dc207f7e8 Author: Fabio M. Di Nitto Date: Mon Nov 12 08:17:00 2007 +0000 Be consistent across the entire tree on AR and RANLIB invocations commit 11a6086cb5e9c0248a9f9fe0096d04db14c6e4a0 Author: Fabio M. Di Nitto Date: Mon Nov 12 08:06:38 2007 +0000 The new Makefile system never invokes LD directly (and this is a good thing). commit 763dcba92547912d9ab925fbb4a29a97abbe23df Author: Fabio M. Di Nitto Date: Mon Nov 12 08:02:11 2007 +0000 Clean up STRIP usage. It is not consistent and we shouldn't strip random binaries. commit 7f1c62d6280b73113d2a164f66eeaea0114eeea7 Author: Fabio M. Di Nitto Date: Fri Nov 9 12:51:58 2007 +0000 Remove cman_wait_init for now. It was becoming overly complicated for such simple task. commit 7b1164d1c76dd4706cbcf60bf69c5ee5b8f658d0 Author: Jonathan Brassow Date: Thu Nov 8 22:16:53 2007 +0000 file rbtree.h was initially added on branch RHEL5. commit de5c2542c01fb026d634aab917f80e8e897d5bb0 Author: Jonathan Brassow Date: Thu Nov 8 22:16:53 2007 +0000 file rbtree.c was initially added on branch RHEL5. commit 41c6325d1f897030e4c5ca5cc3f2615d54ba758c Author: Robert Peterson Date: Thu Nov 8 18:10:09 2007 +0000 Printing the quota file wasn't printing its contents due to a bug. commit 2170c92218e9d2e04b2069bb77f613b2874825f8 Author: Patrick Caulfield Date: Thu Nov 8 09:36:49 2007 +0000 Add an explanation of the node states shown by "cman_tool nodes" and some informastion about the "disallowed" state. commit 1bbd75385391cb1a284a0fa827d80307b50388db Author: Robert Peterson Date: Wed Nov 7 21:14:50 2007 +0000 Resolves: bz 336561: gfs2_tool accepts jdata flag; man page says no commit c101ba5bb24aa3d4cfa640455de5d9a116eb2f0d Author: Robert Peterson Date: Wed Nov 7 15:07:07 2007 +0000 Fix a divide by zero if the target isn't a gfs or gfs2 file system. commit 2fa08106fe809e63d80f3275e05f1be67fc75616 Author: Robert Peterson Date: Wed Nov 7 14:57:59 2007 +0000 Resolves: bz 352581: GFS2: implement gfs2_tool lockdump commit 626dcad7e88ecfd1ee41f9309a45dca98089084f Author: Robert Peterson Date: Tue Nov 6 20:22:55 2007 +0000 Resolves: bz 354201: GFS2: gfs2_tool: unknown mountpoint on some mount points commit 0ea04d3efd7c57b0b9a8fe3aca38a2746cc9e3cc Author: Fabio M. Di Nitto Date: Mon Nov 5 16:43:50 2007 +0000 Add cman_wait_init as wrapper for cman_admin_init/cman_init and cman_is_quorate commit aef8305a05d9386ef7ef4a152286fac9547ccdf3 Author: Patrick Caulfield Date: Mon Nov 5 16:03:58 2007 +0000 Add missing format string. commit 26c83ae028896a0ed444bedae388cee003914391 Author: Patrick Caulfield Date: Mon Nov 5 15:15:53 2007 +0000 Enhance API to retrive just the quorum device information using cman_get_node() commit ad3643d4951a972c88bd6564d3d0eac4dd6f1b03 Author: Patrick Caulfield Date: Thu Nov 1 14:06:01 2007 +0000 Enable to_stderr logging if 'cman_tool join -d' is used. commit 57ed3c019845479997139482aaac3df5045f465c Author: Fabio M. Di Nitto Date: Thu Nov 1 00:25:28 2007 +0000 If votes for quorumd is _not_ specified in cluster.conf, then automatically set votes to number of nodes - 1. commit c61cc45a10db230f02d1795072d384cd2c237306 Author: Robert Peterson Date: Tue Oct 30 14:06:06 2007 +0000 Resolves: bz 349601: GFS2 requires straightforward way to determine number of journals commit 07ac7ba90d7fb92da1bbcad9430bdb9a6bcc2cae Author: Fabio M. Di Nitto Date: Mon Oct 29 05:48:53 2007 +0000 Apply, rework and cleanup second part of patch from Marco Ceci to fix 354421 commit f89b8b65e9e659541b470fc86a190905979bfaca Author: David Teigland Date: Fri Oct 26 21:23:08 2007 +0000 xid needs to be unsigned long long commit 444349f234eed34333d5315c4cf7c882ee0dc0e3 Author: David Teigland Date: Fri Oct 26 21:03:08 2007 +0000 don't setup netlink if deadlock is disabled commit 7b0b6d2c47a3b1a2185c69f458a7c4d74f19350f Author: Ryan McCabe Date: Fri Oct 26 20:36:49 2007 +0000 patch from Marco Ceci to fix 354421 commit 3f75269d6e83b7379452ee7dbe79947948c6b378 Author: David Teigland Date: Fri Oct 26 19:33:47 2007 +0000 Improve the dumping of debug logs from daemons. bz 317181 group_tool reads debug logs from groupd, fenced, and gfs_controld. The dumping code in all three daemons is now identical. The other change is that the dumping function terminates the final write with \0, and no longer sends the entire 1MB log buffer if it's not full. commit 89978eb68a980d40e474e3734058a71f1d303825 Author: Ryan McCabe Date: Fri Oct 26 19:18:55 2007 +0000 Compile with -Wformat=2, which will catch usually dangerous format string bugs commit 8f00056bbb34064f52ce80022af5a70cf0834419 Author: Ryan McCabe Date: Fri Oct 26 19:18:10 2007 +0000 Keep gcc from reporting a bogus warning when compiling with -Wformat=2 commit b16cb36be741287328425c8cd72586df6b7a4209 Author: Ryan McCabe Date: Fri Oct 26 19:02:43 2007 +0000 rgmanager format string fixes commit 619db001980d6b71f82771d1f20f44c5e5a4f5c0 Author: Ryan McCabe Date: Fri Oct 26 19:00:06 2007 +0000 More format string fixes commit d4a818820a8094218ba708fed9d87d10e6c3f3cb Author: Ryan McCabe Date: Fri Oct 26 18:51:31 2007 +0000 Fix format string bug commit c2ecfcb33b7d9534033c23e8ae3cde6a42912d27 Author: Robert Peterson Date: Thu Oct 25 20:02:03 2007 +0000 Resolves: bz 337961: gfs_grow /mountpoint/ does not work commit 0e9f48abd7308c8f8e6920f04cfbcb304cc3efd5 Author: Robert Peterson Date: Thu Oct 25 14:27:33 2007 +0000 Resolves: bz 345501: minor correction to previous commit. commit e70898cfa09939a7100a057433fff3a4ad666bdd Author: Robert Peterson Date: Thu Oct 25 14:14:33 2007 +0000 Resolves: bz 345501: GFS2: gfs2 utils uses non-canonicalized names commit 51c54dfeba75f606e75db92d7ff9331206a97680 Author: Robert Peterson Date: Wed Oct 24 21:19:12 2007 +0000 Resolves: bz #334481: gfs2_jadd man page refers to non-existent -T option commit 735acf45a8c46c042be830d0ca174b72eac6adf2 Author: Ryan McCabe Date: Wed Oct 24 05:58:07 2007 +0000 Commit msg with the last commit went missing.. - Fix unsafe string handling: - replace memset(s,c,n);sprintf(s,...); with snprintf with proper error checking - don't overflow the stack if the cluster name specified in the env var is too long - don't overflow the stack if the local nodename from uname(2) is too long - don't overflow the stack if the local nodename specified in the env var is too long - Don't leak the ccs descriptor in get_ccs_join_info() on errors - Fix a couple of small memory leaks in error paths - Handle OOM conditions commit f8666e77f486204487866e44deb9d4c32e874779 Author: Ryan McCabe Date: Wed Oct 24 05:55:07 2007 +0000 - Fix unsafe string handling: - replace memset(s,c,n);sprintf(s,...); with snprintf with proper error checking - don't overflow the stack if the cluster name specified in the env var is too long - don't overflow the stack if the local nodename from uname(2) is too long - don't overflow the stack if the local nodename specified in the env var is too long - Don't leak the ccs descriptor in get_ccs_join_info() on errors commit d333e8bbe398cd122abf65d2bbd9af22c1604a85 Author: Fabio M. Di Nitto Date: Wed Oct 24 03:21:45 2007 +0000 Use standard path var and memset it before each query commit 7231bc33f464a1c42a0d7940db3ab3fcd8b03844 Author: Fabio M. Di Nitto Date: Wed Oct 24 03:21:22 2007 +0000 Use right vars to print debugging info commit 796986bbe94405e2002080197d50744e56d26156 Author: Fabio M. Di Nitto Date: Wed Oct 24 03:20:58 2007 +0000 Clean up duplicate ccs query paths commit c56e7ab3c09a68192f00ae3b2bc66fb0bb8429ae Author: Fabio M. Di Nitto Date: Tue Oct 23 05:49:23 2007 +0000 Fix purely cosmetic typo commit f9106e187a2aa514c5352792ccb04a46a42afc02 Author: Robert Peterson Date: Fri Oct 19 15:06:56 2007 +0000 Resolves: bz 291551: gfs2_fsck clears journals without asking. commit e2588a5f608e06b1e19b9e8ca0677439838a8cd9 Author: Robert Peterson Date: Fri Oct 19 03:22:05 2007 +0000 Minor correction to the previous commit. Bopping through indirect pointers was inadvertently changing variable "block" during savemeta. commit 8a2560f3c72484bd6f15f55ab852c254ad53ad9d Author: Robert Peterson Date: Thu Oct 18 19:56:41 2007 +0000 While working on bz #291551, I discovered that gfs2_edit savemeta only saved true metadata, but we need more than that. There are lots of blocks that are considered "data" (not metadata) by the RG bitmaps that we still need to save. These include: 1. All the system journals (which may contain both metadata and user data, disguised as data blocks within the journal). We need to pick out the parts that do not contain user data. 2. The system files, such as statfs, inum, quota file, etc. These may be helpful in debugging user problems. 3. Indirect block pointers, which may be counted as data for accounting purposes, even though it's metadata. 4. Directory leaf blocks. This change allows gfs2_edit to save and restore these blocks properly, and also to print out a breakdown of a saved metadata file: gfs2_edit printsavedmeta /tmp/gfsmeta It also improves on the information given when a journal is dumped. commit 7fa0c866f678c5be21922a55a36ef8509bceaa71 Author: Abhijith Das Date: Wed Oct 17 20:16:35 2007 +0000 fix bz 311591 - make lock_dlm the default lock protocol in mkfs.gfs and mkfs.gfs2 commit 27558a1fb4ef3f3121dd2acb15b7e768e858dced Author: Lon Hohberger Date: Wed Oct 17 19:38:31 2007 +0000 Include missing debug.h header file commit c311111fdbe02b0378db3771de9e642c5040ad19 Author: David Teigland Date: Wed Oct 17 19:11:30 2007 +0000 used wrong define, DLM_LOCK_ instead of LKM_ commit abc16735f1823f28672ae30007a8a61c8819d60d Author: Lon Hohberger Date: Wed Oct 17 18:29:57 2007 +0000 Make fence_xvmd read options from ccs like it should commit c5c39868d46c9d2058a7e0259ad8605fbbfbd893 Author: Lon Hohberger Date: Wed Oct 17 18:27:27 2007 +0000 Make fence_xvmd read options from ccs like it should; merge dbg_printf patch from RHEL5 branch commit 1ea6b987022566dc5cc9a9840aa5bc878f4f651d Author: David Teigland Date: Wed Oct 17 18:08:47 2007 +0000 The output of 'dlm_tool lockdump' could make it appear that a granted lock was still converting because the rqmode reported by the kernel is not reset to IV when a NOQUEUE convert fails. commit e332a8e759918b585c5619acb1a191c8ab48161c Author: Patrick Caulfield Date: Mon Oct 15 14:48:59 2007 +0000 Make sure it compiles against latest openais trunk. commit 95ec94ce97c4bedb1fdc6b4d83451116f38e8096 Author: Robert Peterson Date: Fri Oct 12 21:38:18 2007 +0000 Resolves: 235931: gfs2_edit command to set NOALLOC flag commit 2f170b932ae43a0bafa2a9fd9eb7ffc00930a950 Author: Robert Peterson Date: Fri Oct 12 15:37:19 2007 +0000 Add the ability for gfs2_edit to print gfs1 journals. commit efaafe16d3f6a4eebb21a64de3b26d3cd0a50505 Author: Robert Peterson Date: Thu Oct 11 20:27:49 2007 +0000 Resolves: bz 251180: Build time warnings for gfs2 userland tools commit 96f4c9748570fc80a7695034bf54d6dc7c39890f Author: Robert Peterson Date: Thu Oct 11 16:47:29 2007 +0000 Resolves: bz 295301: Need man page for gfs_edit commit b2d79e2ae194d1b0f154888e5ecb0423534693ae Author: Robert Peterson Date: Thu Oct 11 16:34:28 2007 +0000 Resolves: bz 240545 (addendum). commit d9601665b63f2c4a60b8dbf97f24309361d18f5c Author: Ryan McCabe Date: Thu Oct 11 05:10:49 2007 +0000 E2BIG is more appropriate than ENOSPC here commit d11cc7f948a2961d0291de0b7dbdddf845390d66 Author: Ryan McCabe Date: Tue Oct 9 22:14:44 2007 +0000 Allow valid addresses of nodes even if they're not identical to the way they're specified in cluster.conf commit bb594f5362d2d66129002dbc3855ccbac45e3296 Author: Ryan McCabe Date: Tue Oct 9 22:13:32 2007 +0000 Fix code that caused warnings on platforms where sizeof(void *) != sizeof(int) commit 2cd53b0b1ef9fa07673b84d2e92107bd4a67c91f Author: Robert Peterson Date: Mon Oct 8 21:40:32 2007 +0000 Resolves: bz 247318: Need man page for gfs2_edit commit 221772c8f1fce34684b2e40c7cde94e471cf3129 Author: Ryan McCabe Date: Mon Oct 8 16:43:21 2007 +0000 add new function to libccs: * ccs_lookup_nodename * @cd: ccs descriptor * @nodename: node name string * @retval: pointer to location to assign the result, if found * * This function takes any valid representation (FQDN, non-qualified * hostname, IP address, IPv6 address) of a node's name and finds its * canonical name (per cluster.conf). This function will find the primary * node name if passed a node's "altname" or any valid representation * of it. commit 5703d5e68ed397fe6db5ff94abcaffa43c19c7d9 Author: Marek 'marx' Grac Date: Wed Oct 3 16:40:06 2007 +0000 Resolves: #250681 - mount samba share from netfs RA commit 84af738e8c74c5c69c6bc7ee2e86c4b53c696ab4 Author: Patrick Caulfield Date: Wed Oct 3 10:06:21 2007 +0000 Tidy logsys use. Is this OK now Steve ? commit bd0d0ea93c3c0bf97a73012b2854c178b88c4a56 Author: Ryan McCabe Date: Mon Oct 1 16:30:57 2007 +0000 Fix 314091 commit d370b6757a0a5ac49b8e844af51bd0b654743500 Author: Patrick Caulfield Date: Mon Oct 1 12:36:58 2007 +0000 Use "logger_subsys" & "subsys" keys rather than "logger" and "ident". commit 6289c1cca02bce224eb192888837037fd1091bec Author: Fabio M. Di Nitto Date: Mon Oct 1 03:29:38 2007 +0000 Use proper vars to disable targets commit 06c89fb36c1bdf9e00a4db9022d5caf6c88fd10c Author: Fabio M. Di Nitto Date: Mon Oct 1 03:28:12 2007 +0000 Fix configure to handle properly 0.x or x.0 releases. commit 45dd71f7cfce0340e1a1c4850c9fda29ceac5fd2 Author: Patrick Caulfield Date: Fri Sep 28 12:18:19 2007 +0000 Reinstate cman_tool services, which got lost inexplicably. commit d009a06eff4ff4dace1ebf7376e5dbe0fb092442 Author: Patrick Caulfield Date: Fri Sep 28 12:00:03 2007 +0000 Call "group_tool ls" for cman_tool services commit 37f77b41ec47f260b66cca60dcdcd3d4aa38adfb Author: Fabio M. Di Nitto Date: Fri Sep 28 06:19:08 2007 +0000 configure: Backticks don't work in strings. Use POSIX::uname(). The strings that use backticks to get `uname -r` don't work as expected. Let's use POSIX::uname() directly and let perl do the work. Patch by Joel Becker commit 9b80132dd3f13b214b2ed4ee919266738b2d0e9f Author: Patrick Caulfield Date: Thu Sep 27 09:01:30 2007 +0000 Recalculate quorum based on the expected votes value of a new node. bz#308581 commit b9e30cf60236477ca40b38d456d7899d0e6bb5ec Author: Robert Peterson Date: Mon Sep 24 23:16:34 2007 +0000 Resolves: bz 304001: GFS2: Filesystems with 1k block size won't mount commit 8d6305ac7a708bd37f7545d4af1a9eccbf4ccebb Author: Fabio M. Di Nitto Date: Mon Sep 24 14:43:13 2007 +0000 switch permanently to perl -w fix all the warnings in the script. Thanks to Patrick for spotting an extra one. commit 01957f144adffc8d17a86fd8ba832e3be0ce24a8 Author: Fabio M. Di Nitto Date: Mon Sep 24 14:39:42 2007 +0000 Add support to allow disable the build/install targets for each specific subsystem in the tree. Major clean up of top level Makefile thanks to Joel Becker input/suggestions. commit 57a07697afeb2e5d3bb2a4220e844bcdc44598cb Author: Ryan McCabe Date: Fri Sep 21 03:08:06 2007 +0000 fix bz277781 by accepting "nodename" as a synonym for "node" commit cec75dcb0993222979c647c5d37766d0ed368e56 Author: Fabio M. Di Nitto Date: Fri Sep 21 01:07:50 2007 +0000 Fix uninstall target commit 5e6637de0bda457e7a9b6509f96f07d87c98b2e5 Author: Fabio M. Di Nitto Date: Wed Sep 19 19:47:07 2007 +0000 white space cleanup commit 0e186b9ab952e87c7c50ee083dfc592e4b4de16f Author: Ryan O'Hara Date: Wed Sep 19 15:59:46 2007 +0000 Add ability to format output and filter based on node name. commit be213661afd1315c1f9d4d253fdbba53eadc87e5 Author: Patrick Caulfield Date: Wed Sep 19 12:49:37 2007 +0000 Don't use _logsys functions as I get my wrist slapped. commit 7b7b853766cabbd47365bb355b1be57dbb458b36 Author: Fabio M. Di Nitto Date: Wed Sep 19 11:07:21 2007 +0000 Fix configure and Makefiles to cope with kernel built with O=/path... Original patch by Joel Becker (joel.becker at oracle.com) NOTE for developers: you will need to re-run ./configure to update make/defines.mk NOTE for packages: you might need to change the way ./configure is invoked to cope with kernel_build vs kernel_src commit c5e4e761e8496d854d8eac79652e4d68e616bd66 Author: Patrick Caulfield Date: Wed Sep 19 10:56:08 2007 +0000 Fix type-punned pointer warnings commit 9ebb5552b73df58664d8c51a904b969e2bc7754a Author: Fabio M. Di Nitto Date: Wed Sep 19 09:54:19 2007 +0000 Fix more warnings when building with -O2 and also fix get_rmtabd_loglevel to actually do what is supposed to. commit 94ac891d00df7ec05ee250596a1534305deb5b48 Author: Lon Hohberger Date: Tue Sep 18 20:53:47 2007 +0000 Fix #258141 - possible use after free in fenced commit c5b19954695e43d326d7a717deb9ca88bde01ef7 Author: Robert Peterson Date: Tue Sep 18 18:46:00 2007 +0000 Resolves: bz 247318: Need man page for gfs2_edit commit 8a30088e9132da9322dd3de0afe91610c51681cb Author: Robert Peterson Date: Tue Sep 18 18:14:04 2007 +0000 Resolves: bz 291451: gfs2_fsck -n, Bad file descriptor on line 63 of file buf.c (addendum) commit e5b88682cdb34e5861faf1949ce2300bf5f4f0c6 Author: Abhijith Das Date: Tue Sep 18 16:21:31 2007 +0000 man page changes for new gfs2_quota reset option commit cc3c2e8f580fd4f696817e433cd581fa3680bfb7 Author: Patrick Caulfield Date: Tue Sep 18 15:34:41 2007 +0000 check quorum device name length against the right size. commit 5dae9f0bc6342aec46c1d3b5d8cc7e762978ad59 Author: Robert Peterson Date: Mon Sep 17 17:08:20 2007 +0000 Resolves: bz 291451: gfs2_fsck -n, Bad file descriptor on line 63 of file buf.c commit 5d4b5aadba2862a02b88c4d15d70ee6fa6924500 Author: Patrick Caulfield Date: Mon Sep 17 08:03:36 2007 +0000 Use openais logsys functions. commit 7f3db11ade2fe1a440aab4e5dcecc9b5b7f7b95a Author: Robert Peterson Date: Sun Sep 16 17:14:45 2007 +0000 Resolves: bz 287901: GFS2: fsck errors and corruption with files > 945MB The gfs2_fsck program wasn't following enough levels of indirection when walking metadata. commit 167d17de041de71083b00afad4e1b6a51c22b617 Author: David Teigland Date: Fri Sep 14 14:32:04 2007 +0000 go back to default of -02 now that -Werror problems are fixed commit 73fe96500bb2d3eddedaefb2120befd5c451bfa7 Author: Patrick Caulfield Date: Tue Sep 11 13:44:49 2007 +0000 Fix compile with -O2 -Werror commit f179af934d100ea6d1d7f81b95c0241b83cef3b9 Author: Patrick Caulfield Date: Tue Sep 11 13:07:24 2007 +0000 Make it compile with -O2, by fixing a very dodgy cast. commit 7ba2df6f1c7a06c09eaf611e3735bb850f51a519 Author: Patrick Caulfield Date: Tue Sep 11 12:38:08 2007 +0000 Allow it to build with -O2 commit 5755537bec5f038f7de3ba1801697dceeb0e944b Author: David Teigland Date: Fri Sep 7 19:17:27 2007 +0000 Do nodedown events when the confchg for the groupd cpg arrives, instead of when the per-group cpg confchg's arrive. This means all nodes should have agreed ordering on the sequence of confchg's and messages, since all messages go through the groupd cpg. This should fix bz 258121 but I can't reproduce anything like that bug to verify. commit abe741ffa7292f3f885e2eda818be12be765baa6 Author: Fabio M. Di Nitto Date: Fri Sep 7 14:21:30 2007 +0000 So in this first patch (that seems the most urgent one): - Make prefix default to /usr - Clean up all prefix use around configure (this will make alternate prefixes like /usr/local works properly). - Add a specific --aisexecbin option that is passed to cman_tool build. This change defaults to /usr/sbin/aisexec (default aisexec install path) but also allow local override if you have aisexec installed in different paths. 3 NOTES: - the cman_tool change has not been tested in production. It builds and shows that the path is passed properly. - all people that use a prefix=/ will need to make sure to use some extra configure options to respect FHS (for example to install man pages in /usr/share/man rather than /share/man..). - If this patch goes in CVS, you need to make sure to re-run ./configure. commit 8036f7a2f81880cf7aff09e6cebf5361ecf86660 Author: Patrick Caulfield Date: Fri Sep 7 12:17:45 2007 +0000 Correctly reduce quorum when a node leaves using "cman_tool leave remove" bz#271701 commit 871ee7729bc5692a7b300264e561fdf827fb3631 Author: David Teigland Date: Thu Sep 6 16:26:47 2007 +0000 forgot the 0 after the -O commit 49dca1fff9ad2a85fd7251141626b3b0654ac142 Author: David Teigland Date: Thu Sep 6 16:24:53 2007 +0000 go back to a default of -O0 instead of -O2 to get the stuff with -Werror to build commit 9520856a5810ad05ba6dd7e02d18ca7a361777d4 Author: David Teigland Date: Tue Sep 4 19:23:38 2007 +0000 report that a mount fails due to an in-progress unmount commit c4d2f498dbbfed6fb99d1a1a9ae4cae891fed08a Author: David Teigland Date: Tue Sep 4 19:22:52 2007 +0000 Reject mount attempts on an fs that's still in the process of unmounting. This regressed 8 months ago due to the bz 218560 changes. commit 3de3d3b51c92d3c2b127bf661ee3d7a92772c262 Author: Ryan McCabe Date: Thu Aug 30 21:31:41 2007 +0000 listen() is not supported on SOCK_DGRAM commit 3a5f4ae6c04e3ecf316d616010d73ba6720c0fd4 Author: Fabio M. Di Nitto Date: Thu Aug 30 18:41:31 2007 +0000 Collect common make targets for fence/agents written in python commit a7148a0c9df44646ede2e1b8bc2607d8b3d0ac63 Author: Fabio M. Di Nitto Date: Thu Aug 30 18:40:37 2007 +0000 Collect all common make targets for fence/agents written in perl commit 6785fc11ea5d6f3b99e720025ca31ee8af64a1b6 Author: Fabio M. Di Nitto Date: Thu Aug 30 18:33:11 2007 +0000 Remove old code. ACK by Lon commit de5e487d7359b0c658b0863b06243fc7c3626077 Author: Fabio M. Di Nitto Date: Thu Aug 30 18:07:58 2007 +0000 Fix build warning commit 5984e898ac0ad7114b2ae51fa9ee5012e9fb1c92 Author: Ryan O'Hara Date: Thu Aug 30 16:25:50 2007 +0000 BZ 249781 - Fix ccs_tool to return EXIT_SUCCESS for most commands. commit 863dcad206eddf55e4b3d454a88b662a5164897c Author: Lon Hohberger Date: Thu Aug 30 16:09:39 2007 +0000 Fix #229650, pass 3 commit 9b8586f12a3cd457722c299e4e564246635c7b8d Author: Jonathan Brassow Date: Thu Aug 30 15:49:32 2007 +0000 file dm.h-copy was initially added on branch RHEL5. commit 6f4178cd7430c326b9598e809454f854defef427 Author: Jonathan Brassow Date: Thu Aug 30 15:49:32 2007 +0000 file dm-log.h-copy was initially added on branch RHEL5. commit 28fd1f6016d7ea3434a994c52e524eef04a4d474 Author: Fabio M. Di Nitto Date: Thu Aug 30 03:29:11 2007 +0000 Cleanup clumon/ as agreed on cluster-dev commit c88db5118999bf95fddd4f68e93feb291f6f16b6 Author: David Teigland Date: Wed Aug 29 13:39:52 2007 +0000 I think I added this years ago, forget why commit 67420c183217db74c95ddc863f5983abb625023d Author: Fabio M. Di Nitto Date: Wed Aug 29 03:09:55 2007 +0000 This is the first patch of a long series to collect common Makefile targets into their own snippets. Collect all passthrough operations into make/passthrough.mk. Update all passthrough Makefiles to use the new snippet. commit 25e2547dc44a0ca4604dd6b384f05d642677c523 Author: Fabio M. Di Nitto Date: Wed Aug 29 02:52:45 2007 +0000 Cleanup group/test/Makefile commit b5e30948f10a9c944267832a357d71437d93a2f5 Author: Fabio M. Di Nitto Date: Wed Aug 29 02:51:38 2007 +0000 Cleanup gfs/tests/ Makefiles commit 8d31b97e1c5eff6ba08c0f6d9e1b95d44b20c728 Author: Fabio M. Di Nitto Date: Wed Aug 29 02:50:15 2007 +0000 Clean up cman/tests/Makefile commit 02a34df256f4004214c2d1298db515bac4882c23 Author: Ryan McCabe Date: Tue Aug 28 16:51:39 2007 +0000 Fix a handful of possible NULL pointer derefs commit a0e95e54c4e61c67200214d11abbc74ccfd6d96c Author: Patrick Caulfield Date: Tue Aug 28 13:30:23 2007 +0000 Fix spelling of DAEMON, sigh commit fff1509a8c43c532b6a4f99c9c83e95544adb47b Author: Patrick Caulfield Date: Tue Aug 28 13:14:10 2007 +0000 Add a 'cman_tool debug' command that allows cman debugging levels to be changed on-the-fly commit f299f53e305936ecac70843c2ea96cb0dfcba821 Author: Fabio M. Di Nitto Date: Tue Aug 28 04:37:50 2007 +0000 Remove obsoleted Makefile commit 7ee567b16ddc49dbde72644de4be6639a8cb4a70 Author: Fabio M. Di Nitto Date: Tue Aug 28 04:35:47 2007 +0000 change the default CFLAGS to "-Wall -O2 -g". add --debug option to configure that will override the default CFLAGS to "-Wall -O0 -DDEBUG -g". clean up all the relevant Makefiles. add a few missing ; to configure script. commit c758594aea71c30959518e5a0895a46598c71409 Author: Fabio M. Di Nitto Date: Tue Aug 28 04:32:48 2007 +0000 -Wall is added by default in CFLAGS via configure to make/defines.mk. Remove all the others redundant definitions. commit 3cfac13207e2b2e511812db0c68fd9c3dbf80cf2 Author: Fabio M. Di Nitto Date: Fri Aug 24 14:10:27 2007 +0000 Add dlm/tests/Makefile clean up dlm/tests/usertest/Makefile commit 33e11aeedd64254980554807726699446565c202 Author: Abhijith Das Date: Fri Aug 24 06:08:26 2007 +0000 fix for bz253016: userland fixes for gfs2 quota linked list commit 1ceff078647758bf5aff85545bf4644c5ba316c0 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file queues.h was initially added on branch RHEL5. commit ba92b3690dbb87bf0189cbd73794de03a6d70fa3 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file queues.c was initially added on branch RHEL5. commit 947d74a9e4aae7f8f22e9691763c27845baf4482 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file logging.h was initially added on branch RHEL5. commit 125873d72d11a4964544c4ee69635532f84b0fd1 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file logging.c was initially added on branch RHEL5. commit dd8fdc7d20a208862e12bff091a15e1b5f4ffb95 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file local.h was initially added on branch RHEL5. commit 3510e6e409ab6696eb842ab308120485c1d01f29 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file local.c was initially added on branch RHEL5. commit 7b6b2f840c4c641df327948cc9d776fe8e428291 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file list.h was initially added on branch RHEL5. commit cc1d1f5467e2ce585fd1211a8b92c46cf36b9a44 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file link_mon.h was initially added on branch RHEL5. commit 8ba0c8caeea3ada343a59c6611a7bba846c85b33 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file link_mon.c was initially added on branch RHEL5. commit e64ba9822bdb7d7036c707b3bb915e030bb4ff6f Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file functions.h was initially added on branch RHEL5. commit 889c2f7d1702deb4eacdb57b28575fa3ad0e0814 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file functions.c was initially added on branch RHEL5. commit b78b2e8492091ba53c4512aaef4615665efaa719 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file common.h was initially added on branch RHEL5. commit e5a06565ead61134febfa620969a2e268c6094bf Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file cluster.h was initially added on branch RHEL5. commit ad8cce36bd6b777351dfba147db60d1ec95a8b41 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file cluster.c was initially added on branch RHEL5. commit 6a9bd4408923ac7a5ebb7863953e251b9e2224c9 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file clogd.c was initially added on branch RHEL5. commit dc9ff18ca5fe9986ddbbdba10afef34bc9efdcaa Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file cmirror was initially added on branch RHEL5. commit 55d756ef19ca510c63927bab893a3cdf66c06f55 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 file Makefile was initially added on branch RHEL5. commit ac55f0589693acb65e36a74dbc76bb9ddecb9d75 Author: David Teigland Date: Thu Aug 23 19:13:54 2007 +0000 dstress fixes commit 08f6343196dd51c41690689f83f7bc4232ed9086 Author: David Teigland Date: Thu Aug 23 19:08:11 2007 +0000 needed to be a little more thorough in taking a canceled transaction out of the dependency graph for cases where multiple locks were blocked between the same two transactions commit 0f7fda5246db7124417c55e8c688daee61ce2b94 Author: David Teigland Date: Thu Aug 23 14:37:35 2007 +0000 rewording and embellishing some bits related to openais.conf commit c9040229e4047ee0a67ca4cb518229bb2f72a9a3 Author: Patrick Caulfield Date: Thu Aug 23 08:42:06 2007 +0000 Mention the openais.conf parameters that cman overrides. commit 199f637b0b896b3efd61a4ee2ce786f092b0b167 Author: Fabio M. Di Nitto Date: Wed Aug 22 18:10:21 2007 +0000 Remove fence/agents/xen from CVS HEAD. ACK on cluster-devel and IRC #linux-cluster commit 10657c1d9f186121c7e8c9793761292bf78bf19e Author: Fabio M. Di Nitto Date: Wed Aug 22 18:07:04 2007 +0000 Remove cs-deploy-tool from CVS HEAD. Last commit on this tool was from 2005 and code is available in all other branches. ACK on cluster-devel and IRC #linux-cluster commit 58aaf38070486a44c14f248aa65fe5ca76326845 Author: Fabio M. Di Nitto Date: Wed Aug 22 18:00:20 2007 +0000 Remove ddraid from CVS HEAD. ACK on cluster-devel and IRC #linux-cluster commit dec093f84cb97c4ec96d8e014de550a73e0856dd Author: Patrick Caulfield Date: Wed Aug 22 15:43:55 2007 +0000 Add some info about openais.conf parameters commit 4d78f635b7f951c731dc1c28de3dd3a216121e75 Author: Patrick Caulfield Date: Wed Aug 22 15:13:58 2007 +0000 Add some information about setting up multi-home (redundant ring) commit 1e5025d9cdc83a3e4f173238e13cd0e51df9756f Author: David Teigland Date: Wed Aug 22 15:13:11 2007 +0000 fix attribute xml format for cluster_id and keyfile commit a3b2420a68e37dfbef54ee5dfb90fbe2f3d02cd9 Author: Fabio M. Di Nitto Date: Wed Aug 22 14:02:28 2007 +0000 Fix build with gcc-4.2 commit a997646889796f724db0b8351e9fe0ac464db85d Author: David Teigland Date: Wed Aug 22 14:01:09 2007 +0000 add new test for deadlocks commit 08a02293b746f03cbe81d3939e82de33a4a8ff4e Author: David Teigland Date: Wed Aug 22 13:58:19 2007 +0000 use an admin handle from cman to call set_dirty commit 0d65bf12c0687e8e1a4e849a83a82e133c957a57 Author: David Teigland Date: Wed Aug 22 13:39:57 2007 +0000 mention group_tool should be used instead of cman_tool services commit 750eb67ef6b2103a12422275df9fdd6a752ca8dc Author: Patrick Caulfield Date: Wed Aug 22 09:34:16 2007 +0000 Update man page commit 67729047d995f11c0692bc9eacae2da6e1f714c3 Author: Fabio M. Di Nitto Date: Wed Aug 22 08:58:47 2007 +0000 Cleanup FOO_RELEASE_NAME to RELEASE_VERSION commit b60959ba59cebba216a1d9ea98432cb066d463fa Author: Patrick Caulfield Date: Wed Aug 22 07:09:44 2007 +0000 Document that cman_set_dirty() needs an admin socket. commit ea13350115846a7b8f7992adab06d15a5c154df8 Author: Patrick Caulfield Date: Wed Aug 22 07:05:58 2007 +0000 Clear error flag for SET_DIRTY commit 48b49386afdb32f0e175b175884d33af1bc9c754 Author: David Teigland Date: Tue Aug 21 19:33:55 2007 +0000 comment out the new cman_set_dirty() call; it's not working commit 8e951016831fef842502c387dc1735c48a4cb48f Author: Ryan McCabe Date: Tue Aug 21 18:18:37 2007 +0000 Fix access beyond allocated memory commit 25eee66dfa924a1d23e790c4f5630a05655b3e46 Author: Fabio M. Di Nitto Date: Tue Aug 21 04:46:44 2007 +0000 Allow the full cluster suite to build using external kernel source. Also remove the use of -idirafter that with some old versions of gcc does not behave as we expect. commit 9802a369d3961ac8565ec59707ec438a5ede7fe9 Author: Abhijith Das Date: Mon Aug 20 21:30:37 2007 +0000 fix for bz253172 - gfs2 init script should not unload any kernel modules commit 0419734ec3c1a3b943a0a2e4a4f0310f1ccc7e8b Author: David Teigland Date: Mon Aug 20 20:48:16 2007 +0000 proper help output for -m option commit 7224aa7c849c39bef53b8107d35570b4f1b51584 Author: David Teigland Date: Mon Aug 20 20:36:53 2007 +0000 the -m mode option was being ignored and 0600 always used (this change must have been lost at the same time as the -d option) commit ec00e64839bbdbdba92bc40e82a21177b305b020 Author: David Teigland Date: Mon Aug 20 20:31:01 2007 +0000 the NODIR new_lockspace flag was always being used, even if the -d was used to deselect it commit 98455350c9d04f7a2bf5b5ccafb0ea6322ec069a Author: David Teigland Date: Mon Aug 20 18:10:03 2007 +0000 update ccs man pages commit 826411c6af4218411aed4818b480da7d5b2deea9 Author: David Teigland Date: Mon Aug 20 14:50:30 2007 +0000 Call the new cman_set_dirty() api to disallow clusters both with fence/dlm/gfs state from merging. Adjust the oom setting for the daemon to avoid oom kills. commit ff4c7d847802bf31cf916c257361bd83b81a05f0 Author: Patrick Caulfield Date: Mon Aug 20 14:37:26 2007 +0000 Add a "dirty" flag to cman to prevent active clusters merging with one-another. bz#251966 commit c358d7e89554cc3b67d7222ac01275dd73d0abc0 Author: Fabio M. Di Nitto Date: Mon Aug 20 14:36:16 2007 +0000 Remove redundant gfs_ondisk.h from gfs/include/ and gfs2/include/ both files are outdated compared to the one shipped in gfs-kernel/src/gfs/gfs_ondisk.h and there should be no need of duplicates around the tree. gfs and gfs2 both use to include gfskincdir that is enough to guarantee that gfs_ondisk.h will be available at build time. gfs2/mount/Makefile requires this one liner. I spotted that we try to include gfs2kincdir that we never set and therefor it was failing to build without a local copy of gfs_ondisk.h commit d3b59380fd669d4a64987c4a813c60482a1034e8 Author: Fabio M. Di Nitto Date: Mon Aug 20 14:30:56 2007 +0000 add clean: target or make clean will fail. use TARGET8 to be consistent with TARGET3 commit c4dd0640df4ec36ec8e20505a455d68ec50f2a9f Author: David Teigland Date: Fri Aug 17 21:17:53 2007 +0000 handle addition/removal/failure of nodes during a deadlock cycle serialize deadlock cycles and limit how often cycles are started commit 9e89e8a44b16076a4d317bd7039e983f95cb6ed1 Author: David Teigland Date: Fri Aug 17 18:54:01 2007 +0000 install in man dir commit 05f6e3f83578f165851d63cbc89f303df05dc05c Author: David Teigland Date: Fri Aug 17 18:52:27 2007 +0000 add makefile commit 7db360b4ecf7a630dc81cedb6a829604cb9e30a6 Author: David Teigland Date: Fri Aug 17 18:48:22 2007 +0000 install dlm_tool.8 commit 0ba774596371d1601ad44505e8b4532b3e089560 Author: David Teigland Date: Fri Aug 17 18:27:13 2007 +0000 Vastly simplify this man page. Include no cman or fencing information but refer to the cman and fenced pages. commit 6a66e916c138926b83bd0ee33fe62dfd2ccc6c99 Author: David Teigland Date: Fri Aug 17 18:26:16 2007 +0000 Outline the basic ideas of multiple methods and multiple devices. commit b75e2795b2904f1a8255ac52f2ca7edb203f3b2f Author: David Teigland Date: Fri Aug 17 16:25:54 2007 +0000 minor updates commit ad9b9d677ecb888d0d391c7f3e98484d43950793 Author: David Teigland Date: Fri Aug 17 16:03:54 2007 +0000 add man page commit 3133bd6a602c6872809e75b132cb7ab23385082d Author: David Teigland Date: Thu Aug 16 21:02:24 2007 +0000 mention fencing override, describe the structure of node fencing parameters in cluster.conf, point to web site for device-specific documentation commit 771d485d34d676a8a206f5981b4e95c80630c8e8 Author: David Teigland Date: Thu Aug 16 20:07:53 2007 +0000 add man pages commit 2c1d2bf6189e600f349a2090fe5d51bae24055a1 Author: Robert Peterson Date: Wed Aug 15 22:28:18 2007 +0000 Resolves: bz #240545: gfs2_fsck should behave more like the other fscks. commit 2721d52e523dbef7487b64dbada72ae28f414c6f Author: David Teigland Date: Wed Aug 15 21:09:01 2007 +0000 Update fence, fenced, fence_tool and fence_node man pages which were stuck in the RHEL4 era. commit 204959b907b1962d0cc9c05f178fa37624d9c2f0 Author: David Teigland Date: Wed Aug 15 20:57:28 2007 +0000 clean out some options that were only relevant to rhel4 remove the monitor option which didn't do anything add the dump option to dump the fenced debug buffer (group_tool can still do this, but fence_tool wasn't oddly enough) commit f0d75c4ff88b847a73bb016eed5f1eb2406f38fd Author: David Teigland Date: Wed Aug 15 20:55:02 2007 +0000 clean out junk that was only relevant to rhel4 commit 00b27889f5165d214ff18198c6926feb61c0baef Author: Ryan McCabe Date: Wed Aug 15 19:39:54 2007 +0000 Fix a few (harmless) places where memory is allocated but not freed I stumbled onto hunting down something else. commit 0c4dfd4b040dc102b15163832a3e4c7da6b06807 Author: Lon Hohberger Date: Wed Aug 15 18:43:00 2007 +0000 Fix uninitialized var commit 9889d3cb30bfcfd6868787175eb9d1a4673ad542 Author: David Teigland Date: Mon Aug 13 15:32:05 2007 +0000 put back the ability to do pid-based deadlock detection on 5.1 kernels commit 0f280c9f8539df8c262e09097dd28fc2fa34a981 Author: David Teigland Date: Fri Aug 10 20:23:07 2007 +0000 Detection and resolution now works with my basic deadlock tests. Had to rework how lock state is assembled. The previous method was simpler and just gathered the master lock state from all nodes, but I failed to realize that the xid (transaction id) isn't synced to remote master copy locks. So, now all lock state is saved in the checkpoints, both master-copy and process-copy (containing the xid) which are then merged to give the full view of the lock. commit ab489117ea4400a6638a9872db4ed324cd67bdb8 Author: Fabio M. Di Nitto Date: Fri Aug 10 05:05:47 2007 +0000 group/ now depends libdlm. Express this new dependency in top level Makefile to guarantee that group will be built only after dlm. commit 2b4c487561281dd49fd434e5af7ca7ddc542cfd0 Author: Fabio M. Di Nitto Date: Thu Aug 9 09:37:36 2007 +0000 Clean up some Makefiles that did not use proper openaisincdir and dlmincdir. commit 7aab4724234b8769778a3a2ca0ff18b384b729f8 Author: Fabio M. Di Nitto Date: Thu Aug 9 09:22:24 2007 +0000 Fix build on parisc as we did for ia64 commit 0a768e10b6ee9c402d76206d23fc57c4c50d78bc Author: David Teigland Date: Tue Aug 7 19:20:54 2007 +0000 don't add the same transaction to a waitfor list more than once commit ef1b07a62f958c5380dd294c28b4b367ec3b1331 Author: David Teigland Date: Mon Aug 6 21:50:26 2007 +0000 fill in a couple more bits related to canceling the chosen lock commit 765d70cb49aa4d0f684fdce99d60c9584e4ceada Author: David Teigland Date: Mon Aug 6 19:23:40 2007 +0000 Remove check_sys_fs() since it breaks on-demand fs module loading from the kernel (already changed on RHEL5 branch). Use strerror() instead of errno in another spot to be more user friendly. commit 32c3219c797d526601c7694b62c833e06fdd80f8 Author: Patrick Caulfield Date: Fri Aug 3 07:35:06 2007 +0000 Don't lost the cluster name if it is specified on the command line probably the cause of bz#250688 commit 8a494fbb57db625bdfba0fda340a27d5071955d7 Author: Lon Hohberger Date: Thu Aug 2 14:53:38 2007 +0000 Fix #248727, round 2 commit bbc17807f07e464273ecacb06cb50b2963517ec4 Author: Lon Hohberger Date: Tue Jul 31 18:02:49 2007 +0000 Fix build problem commit 86e7d0aa49d3ffc9c7e0075a7c3763b845316be4 Author: Lon Hohberger Date: Tue Jul 31 18:00:25 2007 +0000 Fix bug #248727 commit b93cd0eab850901e9eab2cddb274ba50f8cf882b Author: Lon Hohberger Date: Mon Jul 30 20:41:44 2007 +0000 Fix #250152 commit 46ca6feb5636751180064a2b62b1a135dbc37ceb Author: Robert Peterson Date: Mon Jul 30 15:31:23 2007 +0000 Added ability to parse and print journal information. For example: gfs2_edit -p journal2 /dev/roth_vg/roth_lv Also added the ability to jump relative block numbers. This is for when you jump to a block by "editing" the block number: Cursor up to block number, press to enter destination block. Before you could type a structure or block number. Now you can type in a structure, block number, or relative block number. For example, if you're on the superblock (block 0x10) enter +0x300 will take you to block 0x310. This number may be in decimal or hex and may be positive or negative. commit 223cacd76a3702c4224670d91199972e5bfdaaa7 Author: Robert Peterson Date: Thu Jul 26 23:19:31 2007 +0000 Resolves: bug #248423: gfs2_tool can not set data journal flags as specified in the man page. commit 5ae28cd2fc877282b55694bbd1d0a6c1ed6c5fc5 Author: Lon Hohberger Date: Thu Jul 26 20:48:18 2007 +0000 Fix #249758 commit 5d14a774cb484b68b25b80333b4efca34ab34427 Author: David Teigland Date: Tue Jul 24 20:08:08 2007 +0000 sdake says that DESTDIR=/ is correct, not /usr commit ac763003202a656d13ad5078eaa53b4507069d26 Author: David Teigland Date: Tue Jul 24 19:34:38 2007 +0000 minor updates for cluster-2.01.00 commit fa0ecad8e63a9d226f4bd3bd7fb984b99f605e7e Author: David Teigland Date: Tue Jul 24 18:17:31 2007 +0000 dlm_tool deadlock_check is a way to manually kick off a deadlock detection cycle for the named lockspace commit 13481884688bdd091e7cdd105152810ddd4e5f9a Author: David Teigland Date: Tue Jul 24 18:15:43 2007 +0000 add new code to find and resolve deadlocks, still incomplete, disabled by default commit f13f0c8f73c2a20e479d643ffdea63894e1a0ec3 Author: Lon Hohberger Date: Mon Jul 23 20:49:13 2007 +0000 Misc. bugfixes; see ChangeLog commit c7114f174d7054fa2590b0097940e0b5dd4870c9 Author: David Teigland Date: Mon Jul 23 16:41:46 2007 +0000 Brute-force porting to 2.6.23-rc1. There are non-trivial changes for which I just copied what had been done to gfs2 without investigating whether gfs1 needs something different. commit 6034d004870993120b08c7561e6c0c3972c3d9eb Author: Robert Peterson Date: Fri Jul 20 20:59:13 2007 +0000 Resolves: bz #247591: Make default journal size for gfs2 128M commit ea3db6d8eb224f3844232276ccc2c24774a4b7bd Author: Abhijith Das Date: Thu Jul 19 22:20:50 2007 +0000 Fix for bz248177: We delete the old /etc/mtab entry and add a new one during remount. Any changes made to the mount options using remount are reflected in /etc/mtab now. commit 225f4caa877240fee1650db1077195eacca1bb83 Author: David Teigland Date: Wed Jul 18 20:35:50 2007 +0000 recent cleanup of warnings should have specified unsigned in long long casts commit eca7b0dd6ea66f3c0a9d1fede31945eea073260d Author: Robert Peterson Date: Mon Jul 16 23:16:35 2007 +0000 I added the ability to recurse indirect blocks. That means that you can now print a list of all blocks associated with a file. For example, you could print all block numbers associated with journal0 by doing something like: gfs2_edit -p 0x19 /dev/roth_vg/roth_lv assuming, of course, that you know that block 0x19 contains journal0. (You can use gfs2_edit -p jindex to get that information though). I fixed some bugs with restoremeta where it was dying if the metadata to be restored was bigger than the destination file system could hold. I made restoremeta do some "warm fuzzy stuff" to report its progress of the restore operation so the user doesn't think the restoremeta is permanently hung. I renamed some long variable names to short ones to make the code less wordy. I fixed a minor segfault if you hit "j" when your cursor is on the block number of the hex view. I probably should have committed these changes earlier rather than save them up, but some of my changes had serious regressions and I didn't have time to sort it out and fix it until just now (I didn't want to commit a broken version to cvs.) commit 5ff5ce5361114e0e41a7a1faff4cf2d4ec52e511 Author: David Teigland Date: Fri Jul 13 18:29:50 2007 +0000 add lockdump and option to set permission of dlm device when creating commit af0f01f44bac9d1c8b670468e28ad8f7abfdf792 Author: David Teigland Date: Fri Jul 13 15:19:16 2007 +0000 Make gfs-kernel compile against post-2.6.22 (2.6.23-rc) kernels. (No more sendfile which is now done via splice which gfs1 still lacks.) commit 1de1d21374fcddfb701f40c101f0b324b9798df3 Author: Ryan McCabe Date: Thu Jul 12 19:50:16 2007 +0000 Detect bridged networking configurations where additional parameters are supplied to the script. commit cef86231eef47686220dac2539f5a8241f1bbf4b Author: Ryan O'Hara Date: Thu Jul 12 15:45:44 2007 +0000 Fix bug where mkfs always exits with EXIT_FAILURE. commit 04c92a1143f13d2c37c640e1d75dcc5511c30364 Author: Marek 'marx' Grac Date: Thu Jul 12 11:25:10 2007 +0000 Resolves: #245178 - install RA for named (agent already in CVS) commit 02b29b763038dd738c7755db0ab89691f70182af Author: James Parsons Date: Thu Jul 12 03:45:44 2007 +0000 Fix for bz238106, new firmware version issues commit 14503c86e7d2b0c22dc6380ff252fe7fef2e7966 Author: David Teigland Date: Wed Jul 11 17:01:23 2007 +0000 add a bunch of casts to quiet warnings on x86-64 print a couple decimal places for times in the debug logging commit fa179311de608bf29b1d4edff92c3cf340a750fd Author: Patrick Caulfield Date: Wed Jul 11 13:11:36 2007 +0000 file dlm_query_wait.3 was initially added on branch RHEL4. commit fea933778d9c544d7cde6d561daadce58d47a134 Author: Patrick Caulfield Date: Wed Jul 11 13:11:36 2007 +0000 file dlm_query.3 was initially added on branch RHEL4. commit 3a7ceb4cfd2828b09232a850e801e7f5c3964d41 Author: Patrick Caulfield Date: Wed Jul 11 13:11:36 2007 +0000 file dlm_ls_query_wait.3 was initially added on branch RHEL4. commit a7c4358e9fb1aff86d6392d3be673ff2b3dab771 Author: Patrick Caulfield Date: Wed Jul 11 13:11:36 2007 +0000 file dlm_ls_query.3 was initially added on branch RHEL4. commit ebbcdf20e24b8931dd1012ab6e9f0e026199028b Author: Lon Hohberger Date: Tue Jul 10 18:25:26 2007 +0000 Resolves: 247488 commit ef1a869bf881936082c24277608d9371268c7486 Author: Ryan O'Hara Date: Tue Jul 10 18:21:28 2007 +0000 BZ 240584 - Check to see if device is mounted before creating filesystem. commit 343caff0a582b2b34db57b834aeadc705462bbda Author: Robert Peterson Date: Tue Jul 10 18:21:07 2007 +0000 Resolves: bz 247591: Make default journal size for gfs2 128M commit 80bbad470c39a59766c9348a6dc9792fa22de4ab Author: David Teigland Date: Mon Jul 9 16:53:08 2007 +0000 Various small changes and additions. Munging formatting to avoid line wrapping on 80 columns. commit 54b4e5f17832bc04b690eaabebfa81017d8fa187 Author: Patrick Caulfield Date: Mon Jul 9 12:06:38 2007 +0000 remove redundant Makefile lines commit 3d6c901a03cc13d457728f0f829fff8e5c3d29fe Author: Patrick Caulfield Date: Mon Jul 9 09:29:57 2007 +0000 libdlm man pages commit 54c1aaf7b0256654c03f0fb326ea1c991e10fb4c Author: Fabio M. Di Nitto Date: Thu Jul 5 14:27:27 2007 +0000 Overload Makefile to give Lon a build target and keep the style consistent across. Most important change (really) is to keep incdir as last or custom incdir build will break. commit 44a1c1378f9b70592d80f0837f2066c99b495f45 Author: Patrick Caulfield Date: Thu Jul 5 08:24:05 2007 +0000 Honour the mode parameter to dlm_create_lockspace() even if the device node was created by udev. commit 5b73d646ae59858967c75c1c608da0a773c4b06b Author: Jonathan Brassow Date: Mon Jul 2 21:58:34 2007 +0000 Require vg_name to be unique. Allowing multiple LVs from the same VG on different machines can lead to races when updating metadata during device failures. We can do better. This patch puts the validation in lvm.sh so that it can print out a understandable error message. commit 12dbd39113c38a37880b7ce3f337161014427963 Author: Lon Hohberger Date: Mon Jul 2 15:15:00 2007 +0000 Fix #237144 - pass 2. All testcases accounted for now. commit df31852b9a431c5fe63c2713b82d2be748158d65 Author: Robert Peterson Date: Fri Jun 29 21:57:23 2007 +0000 Resolves: bz 241096: GFS: bug in gfs truncate commit 0f6d3565dcaa601b93dce21a3692fdc6ae4d6efd Author: Lon Hohberger Date: Fri Jun 29 18:09:10 2007 +0000 Add note to usage.txt for configuring on 64-bit environments commit 4240df8d035cb6693d34b99d65af03633abb9a2c Author: Robert Peterson Date: Thu Jun 28 23:41:37 2007 +0000 Revolves: bz 245803: GFS2: buffer count underflow for block 29581 (0x738d) commit 905673d35eb6493c4105e75ad8738fef127f7ba2 Author: David Teigland Date: Thu Jun 28 17:58:31 2007 +0000 - add more specific warnings/errors when connecting to gfs_controld fails - use strerror to report more helpful error messages in a few spots commit e5e49daee6a17bced636b007d1d5b5c0e1c78b51 Author: Lon Hohberger Date: Wed Jun 27 14:03:51 2007 +0000 Merge from RHEL5 branch commit 7d25a76a6fd5427f5137b71384cf99725a6df51d Author: Lon Hohberger Date: Wed Jun 27 13:32:56 2007 +0000 Remove testprog target. commit 8499ffab8f40a48833716626c464b0cacf23c8b7 Author: Lon Hohberger Date: Tue Jun 26 19:52:52 2007 +0000 Make lan+ work if built as a STONITH module commit 17a4c3ef26e1fe2691c406d81f913d8069199383 Author: Wendy Cheng Date: Tue Jun 26 19:43:59 2007 +0000 Bugzilla 239729: The purge_nr in glock_scan is already a pointer. Fix error in today's check-in. commit 7fbd3947f5671c6eca55d104b1c6765d128bb0a8 Author: Wendy Cheng Date: Tue Jun 26 18:38:01 2007 +0000 Bugzilla 239729: Accidentally moved the wrong patch - fix previous check-in. commit 2313137638dccb0db4379e5f2539f7613f293a89 Author: Wendy Cheng Date: Tue Jun 26 17:50:06 2007 +0000 RedHat bugzilla 239727: Previous CVS check-in did a last minute change with the way purge count was calculated. The intention was to trim glocks evenly across all the hash buckets and apparently the size of hash array was overlooked. It ends up with zero trimming count most of the time. This virtually makes glock trimming patch a void feature. commit 59be825581f89e698abb7142cb331af44c8c14a0 Author: Lon Hohberger Date: Tue Jun 26 17:32:14 2007 +0000 Clean up testprog in make clean commit cac6c929f92147405b2b249b0bfa5bca4a65a2b5 Author: Lon Hohberger Date: Tue Jun 26 17:31:32 2007 +0000 Ancillary patch to fix debug output commit 035633d91a32735780f862ff4748e1aa31df43d6 Author: Lon Hohberger Date: Tue Jun 26 17:23:41 2007 +0000 Fix full-virt rebooting (#243872); add local-only / no-cluster mode to fence_xvmd commit d387a7826c69001cc1535738ad5c2023c706d6a3 Author: Patrick Caulfield Date: Tue Jun 26 09:09:13 2007 +0000 Fix timer durations commit 9bea8282a2b9195c1cf74db1b697414528f1ea7c Author: Robert Peterson Date: Tue Jun 26 01:43:17 2007 +0000 Resolves: bz 245360: GFS2: userland tools have problems with small block sizes commit fc2cde0e514c6db9bbf0809a7dde5f373a217f73 Author: Robert Peterson Date: Tue Jun 26 01:25:33 2007 +0000 Add savemeta and restoremeta functions to gfs2_edit commit 68127f6b805fc1a4f22d1f22b590ee6d2e89a5df Author: Ryan McCabe Date: Mon Jun 25 21:47:09 2007 +0000 HP changed the iLO 2 interface again in the latest firmware revision, 1.30 (released on 2007-06-01) commit 3936ed0bee575faf29bc2f8bbb9d44b577fa8bd3 Author: David Teigland Date: Mon Jun 25 20:37:22 2007 +0000 s/unsigned long/unsigned long long/ commit 7379b843c43ea35321d39b2681740776a318200a Author: Robert Peterson Date: Mon Jun 25 19:57:11 2007 +0000 Fix a place where indirect offsets were calculated incorrectly. commit b4be9aee5238529c11c709701dba76619cb67d65 Author: Ryan McCabe Date: Mon Jun 25 18:08:10 2007 +0000 Rename "private" to "priv" to make the file usable by C++ programs, and wrap the header with extern C { ... } if compiling C++. commit 92a30405d08be20ebdb2a161e94182ddb3557ef4 Author: Lon Hohberger Date: Mon Jun 25 16:49:28 2007 +0000 Fix missing label commit 9cbcc585fd3ef0252e2ac5cd96390a353ba6fec8 Author: Robert Peterson Date: Fri Jun 22 20:49:10 2007 +0000 Resolves: bz 245360: GFS2: userland tools have problems with small block sizes commit 25bad8ed86cb51876f3b3f3ea5642095baa62ab2 Author: Lon Hohberger Date: Fri Jun 22 14:23:04 2007 +0000 Make exclusive resources work again commit 62fb43bcbe50e6bc290292357d0784289edebbc8 Author: Robert Peterson Date: Thu Jun 21 22:15:34 2007 +0000 Make gfs2_edit handle small different block sizes. commit eb4c40877cb2d4c7ef6c066693d2c1e1241e24e3 Author: Fabio M. Di Nitto Date: Thu Jun 21 18:39:08 2007 +0000 Fix build on ia64 by adding a temporary workaround and make sure to wrap STACKSIZE properly withing DEBUG. commit 3622eb3e89ed02d29405a52aba4715908904512a Author: Benjamin Marzinski Date: Tue Jun 19 22:31:56 2007 +0000 GNBD doesn't need to flush the cache after it looses connection with the server. Either it will be multipathed, and the multipath device will own the cache, or it won't and flushing the cache will get you nothing more than a flood of error messages all at once, instead of a stream. commit 81f6c24cc6c776f2dce65c8f0f3f40192f36a1c9 Author: Wendy Cheng Date: Tue Jun 19 21:26:11 2007 +0000 Bugzilla 231904: Port RHEL4 fast statfs (for commands such as "df") implementation over. The "lvb" enhancement will be followed around RHEL 5.2 time frame. Ballpark performance numbers: dhcp145 (1 cpu HP): old df took 0.875 seconds, new df 0.008 second dhcp146 (4 cpus DELL): old df took 0.808 seconds, new df 0.006 second. Activated via "gfs_tool settune statfs_fast 1" command. commit d842d1a5ad8b2d23997d10203a6a9505c5ab5ded Author: Lon Hohberger Date: Tue Jun 19 18:08:01 2007 +0000 Fix update failure if node was fenced commit 3ec4a35666a850df6b9ab6790a274e9f36513aad Author: Robert Peterson Date: Tue Jun 19 14:23:29 2007 +0000 Resolves: bz 240570: Can't mount GFS file system on AoE device commit 07103b5c8f9d5f1dc58217aa4d3008f79a98cd6e Author: Fabio M. Di Nitto Date: Tue Jun 19 12:32:19 2007 +0000 Make sure to cleanup the buffer when processing each request or dirty data can be passed from one request to another. Add a barrier to make sure that the socket data are not bigger than the buffer or we overflow somewhere at random. These 2 changes should be backported to different stable branches. commit bd7f769e6f989fdd8e77b8fa41cd56341cdfe9e6 Author: Robert Peterson Date: Mon Jun 18 21:35:58 2007 +0000 Resolves: bz 244163: Incorrect output of gfs2_tool sb all commit c966d48ad6e5e0a83ce6ca240b6077029eced349 Author: Wendy Cheng Date: Sun Jun 17 05:34:53 2007 +0000 Bugzilla 239729: Backport RHEL4 glock trimming patch over to improve GFS slab cache consumption issue. commit e816362dc23269a312836dad8b18efc305744cb8 Author: Wendy Cheng Date: Sun Jun 17 03:35:02 2007 +0000 bugzilla 244343: Backport RHEL4 gfs datasync patch to head. commit 8fac4eea75b290cacfa28cf804ba520b99b9d849 Author: Lon Hohberger Date: Fri Jun 15 21:11:51 2007 +0000 Fix #243691/2 commit 528c3c3c3052ba006828732a1458e1430e9cb398 Author: Lon Hohberger Date: Thu Jun 14 19:08:57 2007 +0000 Fix type size for 32/64-bit mixed clusters commit 12f15ac1df145ae85f1d0ffad463e7d8d5c5ae11 Author: Marek 'marx' Grac Date: Thu Jun 14 15:06:52 2007 +0000 New flag -F for clusvcadm to respect failover domain (#211469). Also changes clusvcadm -e service00 which enable service on local node and do not respect failover (same as in RHEL4, in RHEL 5.0 it just wrote Failure). Old flag -F (freeze, introduced after RHEL50) was changed to -Z. commit 5f298ab261310bfd7a804c27ee43e5bd981f558c Author: Lon Hohberger Date: Wed Jun 13 20:32:41 2007 +0000 Fix status check commit 72478d0a9da55e4e0f1b30639d4f0e7128130397 Author: Lon Hohberger Date: Wed Jun 13 20:13:26 2007 +0000 Fix #229650 - part 2; fixes an uninitialized var problem commit cd5500088c6fd3eef120af5d9d5788235f1709a5 Author: David Teigland Date: Wed Jun 13 18:12:36 2007 +0000 Block SIGINT (^C) around the three steps of mount: joining the mountgroup, doing kernel mount, adding mtab entry. And the same for doing the opposite in unmount. commit 876d56428601327922740dbbc48aeda429f1ee77 Author: Patrick Caulfield Date: Wed Jun 13 09:13:36 2007 +0000 Use new openais timers commit 47b69901d19acdff6d3421f20e259ac42937616d Author: Fabio M. Di Nitto Date: Wed Jun 13 08:28:45 2007 +0000 Wave goodbye to libcman bits :) commit 06e51eca2dffd3697e7852fbc51c20274201c4c1 Author: Patrick Caulfield Date: Wed Jun 13 08:23:20 2007 +0000 Don't link cman with libcman! commit 1b8bb5ee84fbf8c25e09d8a33d4955eb01bb9c3f Author: David Teigland Date: Tue Jun 12 20:04:41 2007 +0000 log an error message if we see mount.gfs killed before it's done commit 43fb05254dc269f8ac5137fecc2f96c3408ea84f Author: Fabio M. Di Nitto Date: Mon Jun 11 12:30:40 2007 +0000 Remove old dead code from the tree. commit 4e92d021707fea1c1013dff8101ec62901110356 Author: David Teigland Date: Fri Jun 8 21:30:54 2007 +0000 Return 1 or 0 GETLK result to the kernel for conflict/no-conflict. We were always returning 0 before. commit 6ae8aa96e290f398f28a1507b28e44d69376e0e1 Author: Ryan O'Hara Date: Fri Jun 8 19:01:11 2007 +0000 Read nodir from lockspace xml node via ccs_get. commit 10f5004309a29964a06de3cd09a694423be9e6a2 Author: David Teigland Date: Wed Jun 6 21:12:39 2007 +0000 (copy from RHEL5 branch) New lockspace config for external dlm. Changed get_weight to look for node weight in lockspace config. commit b92cba24d21e5a5b9b6c0d623abddb35e354b463 Author: David Teigland Date: Wed Jun 6 15:45:11 2007 +0000 translate different error numbers from gfs_controld into specific, helpful error messages commit 24b4a6281a2bda323b2166badf52d8e503603d46 Author: David Teigland Date: Wed Jun 6 15:44:49 2007 +0000 return a different error number to mount.gfs for each specific failure case, so mount can translate that into a helpful error message commit b2f3bdda87c1d6166baeee3026803941d6d1e223 Author: Robert Peterson Date: Wed Jun 6 15:19:56 2007 +0000 Resolves: Bugzilla Bug 242056: GFS2 needs block sizes < 4k (mkfs changes) commit fd5507154411a104ebeaae7c8fe8dd8464a85d2e Author: Fabio M. Di Nitto Date: Wed Jun 6 15:11:54 2007 +0000 both gnbd and gfs1 need some love for .22.. gnbd: - invalidate_bdev changed interface with commit: f98393a64ca1392130724c3acb4e3f325801d2b6 gfs1: - struct kset has been cleaned up with commit: 823bccfc4002296ba88c3ad0f049e1abd8108d30 - posix_test_lock changed interface with commit: 9d6a8c5c213e34c475e72b245a8eb709258e968c commit ed9ccf654b49271d9b2b5117cacca034176f9535 Author: Fabio M. Di Nitto Date: Wed Jun 6 08:56:21 2007 +0000 Fix dlm/tool install and clean target commit 59e123b3194a1cb0b77addaa17d46ccaf56a5d47 Author: Fabio M. Di Nitto Date: Wed Jun 6 08:42:12 2007 +0000 Fix LDFLAGS override: /lib and /usr/lib don't need to be specified at link time. commit 0d30377afe77ae0059da6de883a087e60037e0e1 Author: David Teigland Date: Tue Jun 5 18:25:32 2007 +0000 report an error if no lockspace name is provided commit 3e6d4e927b099cd0c853f14902e7b5f146481589 Author: Wendy Cheng Date: Tue Jun 5 18:21:22 2007 +0000 Bugzilla 242759: Bump into this problem while debugging bug #236565 (GFS SPECsfs panic). Apparently a minor oversight while adding new function into GFS for RHEL5. GFS versions <= RHEL4 is immuned from this issue. Upon memory pressure, VM starts to release inode cache entries that would fail gfs iget. GFS1 flags this error as "ENOMEM" but returns from gfs_create call without releasing the glock. commit 291e8778b6b6170d13dd29e3b5b2131ac68bfa2e Author: Wendy Cheng Date: Tue Jun 5 18:15:51 2007 +0000 Bugzilla 236565 Fix a race between GFS lookup code and VM cache reclaim logic kicked off under memory pressure. At the end of the lookup, gfs releases inode glock pre-maturely. This creates a window inside the bottom portion of logic that could make gfs_iget updating the associated GFS inode structure that has been freed. Depending on who gets the new memory, unspecified corruptions occur. In the case where this bug is found, it corrupts TCP buffer head that ends up trashing nfsd kernel stack. commit 600502debac6d57a6f916b388b28b527aab37838 Author: Marek 'marx' Grac Date: Mon Jun 4 11:01:34 2007 +0000 Bug: 212479 - ip.sh causes /sbin/ip to produce warnings Missing netmask is parsed from /sbin/ip commit 51fa85ed540b49f6e9344d5cd94eb62306fc62ce Author: Fabio M. Di Nitto Date: Fri Jun 1 09:45:36 2007 +0000 * Fix incdir usage across the entire tree so that: - it can override standard include paths for real - it is always used after more specific inc overrides * Clean up a few Makefiles to be more consistent with CFLAGS ordering * Fix gfs-kernel/src/gfs/Makefile clean: target commit 287d8f12ed34d5a0e8a3a55387f97c8f74967d56 Author: Abhijith Das Date: Thu May 31 22:32:40 2007 +0000 Changes to fix broken code after Bob pulled out metafs mounting functionality from gfs2_quota into libgfs2. commit a273b711c348d410b1585ebe011e671f24414242 Author: Lon Hohberger Date: Thu May 31 19:08:14 2007 +0000 Fix 234249, 229650 commit 52411ea3982d3c2ea11622f4f3552089d3ce0920 Author: Patrick Caulfield Date: Thu May 31 13:46:35 2007 +0000 open_lockspace needs to detect kernel version too, otherwise all lockops will fail mysteriously. commit 20f128540f05d4eedea370de360b967b04cc3851 Author: David Teigland Date: Wed May 30 19:31:28 2007 +0000 bunch of stuff to test new features commit f46f8a53e9463e97475a7f2a0a486d535f88451b Author: David Teigland Date: Wed May 30 18:18:02 2007 +0000 Add dlm_ls_deadlock_cancel() that allows a system daemon to cancel an application's deadlocked lock. This requires the latest dlm kernel headers. commit 341a2b4f91c8db62d6bbe5a3dc3bcaefe7e8ae5b Author: Jonathan Brassow Date: Tue May 29 14:33:52 2007 +0000 Require vg_name to be unique. Allowing multiple LVs from the same VG on different machines can lead to races when updating metadata during device failures. commit bcf5346785d850c0ffba4d6983b04603a6088f48 Author: Wendy Cheng Date: Thu May 24 22:34:54 2007 +0000 Apparently we can't remove these two methods from file operations table. Since gfs_read() had been changed to use do_sync_read() that requires to have aio defined in the file operations table. So vector read/write (implies NFSD) will be partially broken again after we put these two methods back. commit 8705b8eca79e008c7d409b39d5008fe5ba3ba783 Author: David Teigland Date: Thu May 24 19:00:17 2007 +0000 don't do gfs_sb_print() if we don't detect a gfs fs, it often just prints a bunch of garbage commit 24a5d3f1a4180e3c1d217d4c6c1fdcec1c165bc4 Author: Lon Hohberger Date: Tue May 22 17:01:08 2007 +0000 Update commit 3f5baede10c4fde7b70c6f37d2c701cda297ba00 Author: Lon Hohberger Date: Tue May 22 17:00:07 2007 +0000 Add missing primary keys to SAP agents commit dc1b4fa690297a2c3fd126f6601db98655373ea0 Author: Lon Hohberger Date: Mon May 21 15:58:04 2007 +0000 Fix typos in resource script logging commit 6f0be3b25dd12f21038b2ce01c3412ba6eff5be8 Author: Patrick Caulfield Date: Mon May 21 10:48:40 2007 +0000 Add swab.h for compiling against openais trunk commit 5783e6db09e0022575db2504f7ffefdbe4f62e1b Author: Patrick Caulfield Date: Mon May 21 10:16:38 2007 +0000 Fix typo in openaisincdir commit 842c4ed2d84bb613176814d8c0f2697610b3f3d5 Author: David Teigland Date: Fri May 18 16:40:45 2007 +0000 use dlm/Makefile to build lib and tool dirs commit e93b3f660cd6667dbc6cff6f70afebc5b8f6a79f Author: David Teigland Date: Fri May 18 16:39:51 2007 +0000 add dlm_tool, can be used to join/leave lockspace commit 0d4a6f6dbd37cdd6ecb488f613939d541b3ab975 Author: David Teigland Date: Fri May 18 16:35:16 2007 +0000 Make new features available based on recent dlm kernel patches. The kernel patches change the user/kernel device interface used by libdlm. (You'll need the new dlm_device.h kernel header installed on your system to build the lib.) libdlm is backward compatible with the old kernel interface, but some of the new features will return errors on old kernels. New API's provided by libdlm: - dlm_new_lockspace() is just like dlm_create_lockspace() but has a flags arg so flags can be passed when creating/joining a lockspace. - DLM_LSFL_NODIR and DLM_LSFL_TIMEWARN are new flags that can be used with dlm_new_lockspace(). - dlm_ls_purge() is new and can be used to purge orphan locks. - all DLM_LKF flags can now be used with dlm_lock* routines (flags above 16 bits couldn't be used before) - new DLM_LKF_TIMEOUT flag to enable lock timeouts - dlm_ls_lockx() is new and adds "xid" and "timeout" args All previous API's are still available, and programs compiled against previous versions of libdlm should still work. commit a60f4490528baaaf694fa66f13e41b7fba7e0f72 Author: Patrick Caulfield Date: Fri May 18 10:13:35 2007 +0000 Allow ccs to change the two_node flag. bz#240508 commit c8aad855a060d8cc15b94bff6e9ec7af74d1f6ca Author: Robert Peterson Date: Tue May 15 18:11:10 2007 +0000 Resolves: Bugzilla Bug 239023: gfs2_fsck not good at fixing corrupt directory entries. commit 4f868c5cb7318bbb49353f4a96837b1c8e651275 Author: Fabio M. Di Nitto Date: Tue May 15 14:41:30 2007 +0000 Remove unused files. commit f90f828721d19d6541f88d6664cd257ee34d433b Author: Fabio M. Di Nitto Date: Tue May 15 14:37:37 2007 +0000 Rrestore the make dependencies within the same subproject (same as it was before the big rework), do some PHONY clean up, clean up a few Makefiles that were still using an old format. Patch ACK by Lon and Patrick on IRC. commit aca151a153bc404ef863d93614d230807bffd457 Author: Abhijith Das Date: Mon May 14 22:26:31 2007 +0000 Need to write the user/group id to the sysfs quota refresh file instead of '1' commit 37185791850f72a7512c62a4dbdc355562a4455b Author: Robert Peterson Date: Mon May 14 19:01:01 2007 +0000 Close the /sys/fs directory after using it. commit 80821f0a68109b2795dfc2553b46930a282da3e1 Author: Lon Hohberger Date: Mon May 14 16:33:53 2007 +0000 Make manual fencing's command line parser backward compatible; per dct commit 83a4d71f2bdee5fa4382694b5fd128ca5a4c8dfe Author: Robert Peterson Date: Fri May 11 20:04:30 2007 +0000 Resolves: Bugzilla Bug 239844: mount.gfs2 doesn't work when _netdev is used in /etc/fstab. commit 2d894a0cf09c346cad2ffce2d9af4cb6dd23b49b Author: Ryan McCabe Date: Fri May 11 02:28:13 2007 +0000 Convert \r\n line breaks to \n commit 490e8a70c5a141c5089707dd349adcbe0057e989 Author: Abhijith Das Date: Thu May 10 22:47:34 2007 +0000 we don't use this file anymore. removing commit d33c0129d21bf9fd8f931c8adc831b8b372f6e49 Author: Robert Peterson Date: Thu May 10 15:47:45 2007 +0000 Resolves: Bugzilla Bug 234844: Need to add a "gfs2_grow" command commit ec4a57b069be256f0e654c464f003913c41c0181 Author: Ryan McCabe Date: Thu May 10 14:36:19 2007 +0000 don't try to workaround xend networking when running on a non-xen kernel commit c3de34ed10c41d6998a29e00219250562876afa6 Author: Jonathan Brassow Date: Wed May 9 20:48:35 2007 +0000 If misconfigured, HA LVM + mirroring can cause data corruption. We should attempt to catch configuration errors before allowing LVM resources to start. commit 6315a5a007cf35bc9001e8c475b5b82dc4c02bd4 Author: Lon Hohberger Date: Wed May 9 19:08:15 2007 +0000 Add SAP agents; resolves #238916 commit 248452033f00005320d2c1525e3c029f68fc1604 Author: Jonathan Brassow Date: Wed May 9 18:00:44 2007 +0000 People seem to think that they have to setup lvm in rgmanager even though they are using clvm. This causes the two to collide during use. The HA LVM resource script should detect if a volume is clustered and ignore it. commit fd740f406178307499e46367fbf52d623aac7db4 Author: Patrick Caulfield Date: Wed May 9 16:16:47 2007 +0000 Don't override if it appears in cluster.conf. This allows users to disable encryption if they want. commit ef39faeb56c474fd45d153f2da802ade6783aafb Author: Wendy Cheng Date: Tue May 8 18:11:06 2007 +0000 GFS(s) expects NFS fh_type and fh_len would have the same value. This is not correct. One obvious symptom is that it will fail NFS V2 (that uses fixed fh_len for all requests) mount command. commit 3308328d4b68b93183467c000b8edeb34d78a41c Author: Lon Hohberger Date: Tue May 8 14:44:46 2007 +0000 Readding SAPInstance/SAPDatabase commit b7ec46aea3a5655837b992c5bc09e791eace7ddd Author: Lon Hohberger Date: Tue May 8 14:37:04 2007 +0000 Add SAPInstance and SAPDatabase resource agents to HEAD commit 7c986538b07f143ce631f84547fcee58f1f8c53f Author: Lon Hohberger Date: Tue May 8 14:25:41 2007 +0000 Apply patch to fix bugzilla # 232140 commit d8bdd62a33610a0685c51fd01c545857effae0c1 Author: David Teigland Date: Fri May 4 21:05:28 2007 +0000 Look in cluster.conf dlm section for protocol, timewarn, and log_debug settings and apply them to kernel if found. commit 46da0b4da03eef2127ce4388f1b4efe4fa5e8b48 Author: Wendy Cheng Date: Fri May 4 14:49:35 2007 +0000 Temporarily disable GFS natvie AIO support since it currently breaks vector read-write (used by user mode application system call and NFSD). Will come back to fix this soon. Right now, application is expected to use posix AIO AIO call (done by libc AIO emulation). commit 39c042aa639aaa39b6bdd2f22e234c1ffefaad31 Author: Robert Peterson Date: Fri May 4 14:03:56 2007 +0000 Resolves: bz 229484: gfs_fsck not good at fixing corrupt directory entries commit 6106573798fc5d1b7ca87ec9e1f52dccc48987b7 Author: Robert Peterson Date: Fri May 4 13:32:55 2007 +0000 Resolves: bz 238740: GFS fsck is has problems with resource groups commit b693104a9015bb136b8a31e16415425813a512f3 Author: Fabio M. Di Nitto Date: Thu May 3 16:55:59 2007 +0000 Fix build system. Thanks to Alasdair for spotting the error commit c96749c64e656064d0c6b07c03c66331ce5807b6 Author: Lon Hohberger Date: Thu May 3 15:16:48 2007 +0000 Add test case from RHEL4 branch commit b28693ac811f10c83511597334944123c9c25f7e Author: Lon Hohberger Date: Thu May 3 15:15:17 2007 +0000 Fix corner case reported in #212121 commit a7f098084ef4914143202542e9b212adb9ceef9e Author: Patrick Caulfield Date: Thu May 3 12:18:02 2007 +0000 Change unsigned char* to char* for compatibility with openais trunk. commit 625596afaf8864cf088df29bc7dca3b5f489101b Author: Fabio M. Di Nitto Date: Thu May 3 09:25:57 2007 +0000 Remove dead code commit 9ead6c6d2c8da48c7265a96028420862944c411c Author: Fabio M. Di Nitto Date: Thu May 3 09:06:39 2007 +0000 Readd ipv6 support to ccs_tool update and add verbose option commit 417617e4e558d8375a8b2819a50500c52a706efb Author: Fabio M. Di Nitto Date: Wed May 2 12:42:43 2007 +0000 pretty self explanatory, this code is not used anywhere. Get rid of it. commit 3fc5c158b5d644b3e690d66d9f53375d25c8078a Author: Fabio M. Di Nitto Date: Wed May 2 12:42:19 2007 +0000 When the project switched away from magma, we forgot to enable IPv6 for cluster_base_port. The patch fix that and add some checks that were marked as TODO in the code. commit 98429c1208275ffa8097beb77fddbee51f17b16f Author: Fabio M. Di Nitto Date: Wed May 2 12:41:50 2007 +0000 both libccs and daemon were building and linking common/log.c. Make libccs sucks in log.o and make ccsd link against libccs. Also fix ccs top level makefile to build in proper order. commit 456eb76673e3a1ebc635d5002c79785cf7060c61 Author: Fabio M. Di Nitto Date: Wed May 2 12:39:35 2007 +0000 allow to specify --fence_agents="list of fence agents" at configure time. default is to build all of them and add a little help section. The detection of available list is done by checking fence/agents/agent_name/Makefile presence. It also does another round of Makefile cleanup and fix the Makefiles for previously DISABLEDAGENTS. commit 0b0b1c99745dd20a2dd22dff4d73697352a0ebd5 Author: Patrick Caulfield Date: Wed May 2 10:27:07 2007 +0000 Add const to libcman Thanks to Jim Meyering for the patch commit 191493e66db79da198590d24f59917c9b7a7356d Author: Robert Peterson Date: Tue May 1 16:43:39 2007 +0000 Resolves: bz 223893: gfs2_fsck unable to fix damaged RGs and RG indexes. commit a5abe8a2634074ba18b5d5829ba9b9f1442784e3 Author: Fabio M. Di Nitto Date: Tue May 1 14:36:40 2007 +0000 Fix gfs2 identity exit code path commit 5ddab25ca94fce59779b603129fe9ff5d4c43219 Author: Fabio M. Di Nitto Date: Mon Apr 30 16:56:22 2007 +0000 Remove unused vars commit 90daff9098fc201f216f2b2f16b9536333945f44 Author: Fabio M. Di Nitto Date: Mon Apr 30 11:22:23 2007 +0000 Commit new build system as proposed and discussed on cluster-devel mailing list: https://www.redhat.com/archives/cluster-devel/2007-April/msg00139.html and following thread with acknoledge from other developers on IRC. commit a40cc2fe9f7ae9546a946366510ed4247a8e0fea Author: David Teigland Date: Fri Apr 27 19:09:54 2007 +0000 various changes commit 00e052da6d21af2752caa8aff26d20762997ea73 Author: Lon Hohberger Date: Fri Apr 27 18:10:10 2007 +0000 Add patch from Simone Gotti to implement service freeze/unfreeze. Add simple buffer handling for later use. commit eca2f20867d10f6ba6da6b59b392c835ddc262c6 Author: Lon Hohberger Date: Fri Apr 27 17:56:06 2007 +0000 Re-fix #222484 commit 8fc2eeff20fc9de0ec099963d115d983dd1b4e2e Author: Ryan McCabe Date: Fri Apr 27 15:07:10 2007 +0000 Work around network disruption caused by XenD's bridged networking (bz230783, bz231227). commit c6a6e1e1fa591ff58cb747fe9d043cf5c267af14 Author: Fabio M. Di Nitto Date: Fri Apr 27 04:23:05 2007 +0000 Fix build on parisc commit bf0b61e6549dade53152fb5da97c339403947484 Author: Lon Hohberger Date: Thu Apr 26 20:42:02 2007 +0000 Fix #231521 commit bd1963943feeed80a2de594e0d2638c08a3f05b7 Author: David Teigland Date: Thu Apr 26 19:01:34 2007 +0000 change some mount error conditions to log_error() instead of log_debug() so they appear in syslog. Also set /proc/self/oom_adj. commit d696fc69900cd0bd2de0f6bb0c123964f2f52928 Author: David Teigland Date: Thu Apr 26 18:45:37 2007 +0000 Check right away if the kernel has gfs/gfs2 support by looking in /sys/fs/. This results in a user-friendly error message instead of something like "gfs_controld error 19". commit 9826179d367712a2ede28542f6411303457bb740 Author: Fabio M. Di Nitto Date: Thu Apr 26 16:43:41 2007 +0000 Use resrules-noccs in dtest build target commit 7fb65ce876afbb60779697b952969fd29acdc687 Author: Robert Peterson Date: Tue Apr 24 03:19:11 2007 +0000 Horrible kludge to allow display/print of the rgs themselves (but not yet the bitmaps) for easier debugging of bz 223893. Example: gfs2_edit -p rgs /dev/trin_vg/trin_lv commit 4af9e98d66acba21e8ba71a05bb432faa017e811 Author: David Teigland Date: Mon Apr 23 19:18:09 2007 +0000 Use realpath(3) to canonicalize path names for device and mount point. bz 237544 commit ad8fd9dba54a9c786258888e753f085cb76603ac Author: David Teigland Date: Mon Apr 23 15:24:47 2007 +0000 Look for a protocol setting in cluster.conf dlm section, and set kernel accordingly if found. Also, set /proc/self/oom_adj (all daemons will get this). commit 2a8bde235e9d9dd97ffff8e9ec55acfa03476ff9 Author: Lon Hohberger Date: Thu Apr 19 20:21:22 2007 +0000 Fix bug 234589 commit dfb2edead92c35ca29afc1c9e1c7e0b91e3b769b Author: Lon Hohberger Date: Thu Apr 19 19:54:35 2007 +0000 Apply patch from Simone Gotti to fix logging errors in clusterfs.sh commit 4e08a14165ff905a071f32204665addbfa3be269 Author: Lon Hohberger Date: Thu Apr 19 17:59:36 2007 +0000 Apply patch from Andrey Mirkin to fix 237144 commit 143622cbe83ae5ba9d7d3f5c5207002021478f9d Author: Lon Hohberger Date: Thu Apr 19 17:53:05 2007 +0000 Cleanups to make the resource agents behave better (return OCF_NOT_RUNNING, for example) commit eff06617df4ed88b0946c7c4f4483edb287facf9 Author: Jonathan Brassow Date: Wed Apr 18 18:14:56 2007 +0000 Bug 236580: [HA LVM]: Bringing site back on-line after failure causes pr... Setup: - 2 interconnected sites - each site has a disk and a machine - LVM mirroring is used to mirror the disks from the sites When one site fails, the LVM happily moves over to the second site - removing the failed disk from the VG that was part of the failed site. However, when the failed site is restored and the service attempts to move back to the original machine, it fails because of the conflicts in LVM metadata on the disks. This fix allows the LV to be reactivated on the original node by filtering out the devices which have stale metadata (i.e the device that was removed during the failure). commit 0ab030f2af0597cdc47d37519a5f5da1a79c644d Author: Lon Hohberger Date: Wed Apr 18 16:13:38 2007 +0000 Fix dtest.c compile errors commit 1e6f43b0b24f0aeaeb5099b90747e0b2d5e016fb Author: Lon Hohberger Date: Wed Apr 18 16:11:53 2007 +0000 Add obvious requirement on shared resource case as suggested by Simone Gotti commit e4bc0bf5c31af96c1763f0f878f87231887cc100 Author: Lon Hohberger Date: Wed Apr 18 16:04:29 2007 +0000 fix depends.h/depends.c commit 20c4d6462bfb5bc79d3149cdd36a372f5164b5ac Author: Patrick Caulfield Date: Wed Apr 18 08:06:54 2007 +0000 Install udev rules file commit 7d0489b1c73a15e1f91386023c27f6c8cc442603 Author: Lon Hohberger Date: Thu Apr 12 17:25:48 2007 +0000 Fix watchdog race on rgmanager exit; BZ#236204, patch from Andrey Mirkin commit 63d80ff83083588b1f9af9ed70f95947fdc3f927 Author: Lon Hohberger Date: Thu Apr 5 15:08:20 2007 +0000 Make agents more OCF (Open Cluster Famework) compliant commit f720e6b2e410c10a9a857820c45fc11bd85c9521 Author: Abhijith Das Date: Wed Apr 4 21:31:33 2007 +0000 fix for bz 225199 - Same as GFS1 fix in RHEL4 (bz 210362). We don't run throug the entire gfs_quota sparse file to do a list operation anymore. We get the layout of the gfs_quota file on disk and only read quota information off the data blocks that are actually in use. Also added functionality to GFS_IOCTL_SUPER to provide the metadata of the hidden quota file. commit 394beb7694b187a9c45a19decf7f77dc014ff27b Author: Lon Hohberger Date: Wed Apr 4 19:22:29 2007 +0000 allow ocfs[2] to work with the clusterfs resource agent. Also, commit patch which corrects interval processing for status operations commit ff3d2c2f5fc3fa0a6a55aa4229716acd8a06521d Author: Ryan McCabe Date: Wed Apr 4 19:15:00 2007 +0000 Make power on work correctly for RIBCL version 2.22 on both iLO2 and iLO: for the former, HOLD_PWR_BTN is used to both power the machine on and off; when the power is off, PRESS_PWR_BUTTON has no effect. For the latter, HOLD_PWR_BUTTON is used to power the machine off, and PRESS_PWR_BUTTON is used to power the machine on; when the power is off, HOLD_PWR_BUTTON has no effect. commit aac5cd7c55d53dc38f2ccad43ebc58372206ef7b Author: Lon Hohberger Date: Tue Apr 3 18:24:36 2007 +0000 Kill VM machine immediately; patch from Jeroen van den Horn commit d3a9c8a5c5a50cd2d1636d8b54fea8c27dba6308 Author: Robert Peterson Date: Tue Apr 3 17:28:33 2007 +0000 Resolves: Bugzilla Bug 235061: gfs_fsck: Bad programmer! You forgot to catch the ???? flag. commit 640824dc64a76d213c0ac86553983e8e36bbc64a Author: Robert Peterson Date: Tue Apr 3 17:14:58 2007 +0000 Resolves: Bugzilla Bug 235060: gfs_fsck: Bad programmer! You forgot to catch the ???? flag. commit 979f870531164a01dac730f4097ef976a64aa7fc Author: Robert Peterson Date: Wed Mar 28 22:10:29 2007 +0000 Jump from RG index was broken. commit b075c528bd3839da5ff2dfc3d352af5bfed6d60a Author: Lon Hohberger Date: Wed Mar 28 14:54:12 2007 +0000 Fix SPARC / HPPA build; patch from Fabio M. Di Nitto commit 78bab5d6ed23dff66d13bbf85d2c52c01e8f2cf9 Author: Patrick Caulfield Date: Wed Mar 28 13:49:45 2007 +0000 Remove udev file from here as it is confusing. The real one is in ../scripts commit dd6323f118d0ee8b1b6e48d9a6ad20cac356577a Author: Patrick Caulfield Date: Wed Mar 28 13:43:16 2007 +0000 Newer versions of udev prefer == to = commit 064eff1f2cb9830ae0b4e2372c489200d965922f Author: Lon Hohberger Date: Tue Mar 27 19:33:20 2007 +0000 Merge patch from Crosswalk team Team: Leonard Maiorani, Scott Cannata, Henry Harris * Always check malloc() return codes * Fix errant clu_unlock() calls in vft.c in cases where clu_lock() failed * Add ability to wrap pthread_mutex / pthread_rwlock calls for better stability * Fix improper pthread_mutex_destroy() semantics commit 892a09be55970a3f8c4060480860c66c782c6bdd Author: David Teigland Date: Tue Mar 27 19:04:30 2007 +0000 latest version, "stress" test running correctly commit cdfc13e6c44f35c97ee83a62c45925308ff468ec Author: Patrick Caulfield Date: Tue Mar 27 15:17:03 2007 +0000 Actually, MAX_INT is a bit of a bad idea under this new system. commit b8a0acbdfa0bfcb3dff282a7d48fae4cc4992463 Author: Patrick Caulfield Date: Tue Mar 27 15:02:42 2007 +0000 Fix bug where we could free an lksb while dlm_lock is still using it. commit c4746a7762f251d9d2f381e327c2f35c35bfb09a Author: Robert Peterson Date: Mon Mar 26 19:41:00 2007 +0000 Resolves: Bugzilla Bug 233083: Wrong link command in gfs2-utils mkfs/Makefile (with solution). commit 0db11482e1d4a9d2bceb7759095135b2cdf71d32 Author: Robert Peterson Date: Mon Mar 26 19:31:59 2007 +0000 Resolves: Bugzilla Bug 232124: gfs2_fsck will create multiple lost+found directories. commit 39f1c1a4038610cc3e53bb0ce953681308dead60 Author: Robert Peterson Date: Mon Mar 26 19:14:03 2007 +0000 Resolves: Bugzilla Bug 232019: gfs2_fsck doesn't fix an ea problem. commit 0f78e8c4875cf590567542ac142ca3d4a3772a6b Author: Lon Hohberger Date: Fri Mar 23 00:00:07 2007 +0000 Remove dead code; fix build_tree loop commit 35b68d3a215571f47775bfcd18944d8bbb29019f Author: Lon Hohberger Date: Thu Mar 22 23:46:59 2007 +0000 Merge ordering patch from RHEL4 branch; update automated test cases commit 1c7c8c1af3bb03306eda945c8951e929afbab6a3 Author: Lon Hohberger Date: Thu Mar 22 23:24:58 2007 +0000 Use more strict build options commit ee374f8902652288d44824e7bddca4a422e15784 Author: Lon Hohberger Date: Tue Mar 20 19:37:24 2007 +0000 Fix multimaster bug: ensure timings are accurate and provide multi-master conflict resolution commit 2c629fd936f3210e1886fd1f477d0bec9b02e114 Author: Lon Hohberger Date: Tue Mar 20 18:13:52 2007 +0000 Fix clean target; patch from Fabio M. Di Nitto commit ecb2b9ebf6943812bd3e003812dac2d99d73d952 Author: Lon Hohberger Date: Tue Mar 20 17:57:00 2007 +0000 Force release of lockspace; patch from Patrick Caulfield commit 92f5ec2effeda691f2b2967c5119307dd1fc44c2 Author: Lon Hohberger Date: Tue Mar 20 17:09:57 2007 +0000 Apply build cleanup patch from Fabio M. Di Nitto commit 266cd7c9d3e7708eb17909fa3bbbbffb3251f399 Author: Patrick Caulfield Date: Thu Mar 15 11:12:33 2007 +0000 If the machine is multi-homed, then using a truncated name in uname but not in cluster.conf would fail to match them up. commit 959522f2fddbd4eee5b0efab802393ca12d57db6 Author: Patrick Caulfield Date: Thu Mar 15 09:27:20 2007 +0000 Support IP(v4) addresses in cluster.conf per bz#232068 commit 5e7a90a8901eac0974af409d5c7f76da1009d9d3 Author: Lon Hohberger Date: Sat Mar 10 00:20:54 2007 +0000 Strings cleanup. Enable vm.sh live migration. commit c336adb3a80f91ef53630d3e3dc21b696afd2571 Author: Lon Hohberger Date: Sat Mar 10 00:19:01 2007 +0000 Fix help message commit 1855be1e469a715876c8fef83fb48a491df41394 Author: Ryan McCabe Date: Thu Mar 8 07:21:59 2007 +0000 Add 'M' to the getopt string to keep clusvcadm from complaining that M is an invalid option. commit f87b5634dfe7c4ec7f0b8c17481f890aab2597bc Author: Lon Hohberger Date: Tue Mar 6 23:08:31 2007 +0000 Fix 213241 commit e9b17a088668ceaba5c6ea35f8d22ec2613cfe96 Author: Ryan O'Hara Date: Tue Mar 6 19:07:24 2007 +0000 Fix help message to refer to script as 'fence_scsi_test'. commit a81107e59d331cc9d5832cfd13e9dba0d4ae8a60 Author: Lon Hohberger Date: Tue Mar 6 15:43:53 2007 +0000 Add open failure message commit ffa6f0c916e330e1dae84210d30044090d680f27 Author: Lon Hohberger Date: Tue Mar 6 15:40:20 2007 +0000 Fix missing newline in debug message commit 17d9949cfe7d13bd2188bd40cc6d08c390592ac8 Author: Lon Hohberger Date: Tue Mar 6 15:32:49 2007 +0000 Resolves: 231151 Enable auto-fallback to no-authentication for fence_xvm if fence_xvm.key does not exist. commit 1d4150bf39a649d2fa04291b58b0216cccb4e171 Author: Robert Peterson Date: Wed Feb 28 21:58:46 2007 +0000 Made hex editing a lot easier (for bz 229484). Fixed several bugs regarding printing. Added ability to print/view gfs1 journal index. commit f11eebdecbf2f71629020ff50bdabbc467e7275e Author: David Teigland Date: Tue Feb 27 20:17:15 2007 +0000 un-comment-out gfs-kernel and gnbd-kernel since they now build on upstream kernel commit 865495f3ee1a4a68fd00d68cf4a0ce0d9b665af1 Author: David Teigland Date: Tue Feb 27 20:13:52 2007 +0000 updates commit fd8b45f5ed9359f64ac2ea21d42d9383cc5f7c34 Author: David Teigland Date: Tue Feb 27 18:55:52 2007 +0000 lots of changes, biggest is new "stress" test commit 36085fdeb15e79151fe638c9e5869696caea6fa9 Author: Stanko Kupcevic Date: Tue Feb 27 15:53:15 2007 +0000 Fix for bz230134 (can't fence port 1:1 with fence_apc) commit ea485734f6e0f33c9bba45f02d691dec2f33d1a8 Author: Robert Peterson Date: Mon Feb 26 19:19:06 2007 +0000 Resolves bz: 229222: gfs2_fsck stuck in infinite loop commit 4960d35efb4ccd839779a03c8694b1cc0d7a18f1 Author: Lon Hohberger Date: Thu Feb 22 16:37:28 2007 +0000 Make status checks happen at 'start' time (parent-before-child) instead of 'stop' time (parent-after-child). commit c2ce19685354f0ec3d57b36c485f2984a60399fd Author: David Teigland Date: Thu Feb 22 16:12:42 2007 +0000 remove the self paramter (sync up with RHEL5 branch) commit df57e4b991cc9814ec58f434ccb4df575d9a3f8e Author: Robert Peterson Date: Thu Feb 22 00:03:54 2007 +0000 Resolves: bz 229601: gfs_tool fails to report counters commit 8745cc4329efc2369cdbb2f5a4b3d6b85ad75e03 Author: Lon Hohberger Date: Wed Feb 21 20:54:08 2007 +0000 Fix anonuid/anongid parsing in nfsclient.sh commit 3b6d2420bb4e1815aafae3c6b0ee5122c4280cf5 Author: Lon Hohberger Date: Wed Feb 21 20:49:17 2007 +0000 Resolves: 222445 * Only let one status queue thread spawn at a time Other: * Misc tweaks to alloc.c for debugging commit 49d739b1e66d90d9f26f29118fbcaa667a1bc478 Author: Lon Hohberger Date: Wed Feb 21 20:24:30 2007 +0000 Resolves: 229338 * Makes zero-heuristic mode work (#229338) General (small) fixes: * Add time stamp to status file * Hush stdout/stderr from init script * Give lots of information in status file if debug mode is enabled Fixes for clusters with long failover times (e.g. 2+ minutes): * Enable status file generation during initialization loop * Allow termination (e.g. service qdiskd stop) during initialization loop * Add tunables for clusters with long failure detection times (e.g. 2+ minutes) commit bdd6ec4b7caacd83bc8177039ef754899149e6b6 Author: Lon Hohberger Date: Wed Feb 21 15:36:45 2007 +0000 Add example test configuration for dtest commit 78aab9c1a599fdbc0ce8f9be3b1174afa4787d9a Author: Lon Hohberger Date: Wed Feb 21 14:30:10 2007 +0000 Remove ancient / unused script commit 7d771e3d52095bf33634af24dbbe5f9e441d3aa0 Author: Lon Hohberger Date: Wed Feb 21 14:20:03 2007 +0000 Check in missing header commit b7a4bcaec3ad7eeafdb61902155265c7c964889c Author: Lon Hohberger Date: Tue Feb 20 19:57:46 2007 +0000 Add missing comment commit 106cd46641682101b8557bb33cf06eaca077933d Author: Lon Hohberger Date: Tue Feb 20 19:56:18 2007 +0000 Initial checkin of simple dependency engine commit cf49c2887b5c45a085e398c4f95dbd33550a2533 Author: Lon Hohberger Date: Tue Feb 20 19:54:42 2007 +0000 Fix 229254 - extraneous man pages, 228823 - allow disable of services stuck in 'stopping' state commit 5ed455e4a6baf656c86f049f9f0980e2bc41d367 Author: Robert Peterson Date: Tue Feb 20 18:20:28 2007 +0000 Resolves: bz 229220: gfs_fsck stuck in infinite loop commit 7ebf86fdb59e72b8a070cb7e12a25fa3061fef8b Author: Ryan McCabe Date: Mon Feb 19 17:08:59 2007 +0000 Support power on/reboot for iLO2 commit 087dd1dc5160ed92ed9f956ec0a34ae7d6e7d174 Author: Patrick Caulfield Date: Mon Feb 19 14:04:36 2007 +0000 Add -c clustername to help output. commit d78f8014118c9d980f18f85f566b1339d7853570 Author: Patrick Caulfield Date: Mon Feb 19 14:01:45 2007 +0000 Add delay switch commit de293e605d360bc1f58ed75de82a4042431ec2ef Author: Patrick Caulfield Date: Mon Feb 19 13:10:24 2007 +0000 If exec fails, then tell the parent process. commit 450e5e4d9cbdb9c1cdddf363cdc4e2171d27480e Author: Lon Hohberger Date: Thu Feb 15 22:51:03 2007 +0000 Add LVM failover agent; by Jon Brassow commit c6f58abc9799f77c9ceece107d2621c6a47bdd17 Author: Ryan McCabe Date: Thu Feb 15 17:57:43 2007 +0000 - Document the -S/passwd_script fence params. - Update the copyright notices. commit f94d2571d311468a31cc1ed3317984043fe12c6c Author: Lon Hohberger Date: Thu Feb 15 15:49:02 2007 +0000 Fix missing copytobin target for RHEL4 branch commit 1ac8ccf06e6c994b617bf5cae8405bbec3abd2dc Author: Lon Hohberger Date: Wed Feb 14 19:09:45 2007 +0000 Add member_util.sh to installation commit 1cf390e2ffc5682a0e0cd0503070329782d980f8 Author: Lon Hohberger Date: Wed Feb 14 19:09:14 2007 +0000 Add member_util.sh functions commit 8d4ed57855a2ed831606cc5b132074c7d87e6294 Author: Lon Hohberger Date: Wed Feb 14 19:05:49 2007 +0000 Add RA installs to trunk; Make sure utility stuff is installed in the right place commit f0f439120aa89f7e7147512d24191909eac9bbaa Author: Ryan O'Hara Date: Wed Feb 14 16:22:17 2007 +0000 Ignore EPIPE error when sending response. This can happen is, for example, rgmanager makes a request, ccs receives/processes the request, but rgmanager dies before ccs can send the response. Also added retry if we catch EINTR during write. commit 4f50917636c37d098ba8a0a27f509c26c7e4b564 Author: Lon Hohberger Date: Wed Feb 14 16:21:41 2007 +0000 Make service.sh understand lvm RA type commit df6c6e8e7b94c824eacc5fae551188acd344b6bf Author: Stanko Kupcevic Date: Wed Feb 14 15:42:28 2007 +0000 Support "passwd_script" parameter in python fence agents. If both "passwd" and "passwd_script" parameters are specified, "passwd_script" will be used first (if it fails, fencing will be attempted using "passwd" parameter). commit ae9e3ec5fa6463c69b1d2c49acdce70b6e38553c Author: Patrick Caulfield Date: Wed Feb 14 09:37:52 2007 +0000 Don't report 0 exit status as a failure. commit f22c180dfe7f61e182c6ef9313855f0f622f09dc Author: Stanko Kupcevic Date: Wed Feb 14 09:37:10 2007 +0000 fence_apc_snmp ignores "port" parameter commit 70e6a55d601ae6b933824cc4231ed980ce4e1fcc Author: Patrick Caulfield Date: Wed Feb 14 09:16:13 2007 +0000 Add man page info for ccs_tool addnodeids commit 018482e3cae26eec445589f125e706f0590abd27 Author: Ryan McCabe Date: Tue Feb 13 19:23:40 2007 +0000 Support the "passwd_script" parameter in the C fence agents. commit 5a4ee4d2201d0d7a12d672d2fea89c8264d0518d Author: Lon Hohberger Date: Tue Feb 13 19:05:42 2007 +0000 Remove fence_manual; only provide manual-failure override commit 7413a43c4a57403f89f75653126884f80d7b0797 Author: Lon Hohberger Date: Tue Feb 13 15:56:10 2007 +0000 Apply fixes from RHEL4 branch commit 1a04c759a2b1d9f4dca8050cfa2e53997b035c29 Author: Robert Peterson Date: Tue Feb 13 01:07:35 2007 +0000 Misc improvements. Better scrolling. You can now scroll through the rindex. The superblock now has a pseudo-extended display. Fixed the file offset calculations for indirect pointers. It still has some bugs but it's better than it was. commit 7cd3da5d806a1d4e9e479491988ddcacf4e13c51 Author: Ryan McCabe Date: Mon Feb 12 20:17:08 2007 +0000 Update the perl fence agents to take the additional command line option -S or stdin param passwd_script= commit 7510d1cc3ae17cfa886a903dad471e84351f2216 Author: Robert Peterson Date: Mon Feb 12 19:28:49 2007 +0000 Resolves: bz 221743: gfs2_fsck errors still commit de3a4bf301ae2260a95efc9c8317db0ce1353585 Author: Robert Peterson Date: Mon Feb 12 18:55:29 2007 +0000 Resolves: bz 222308: mkfs and journal addition for GFS2 should produce contiguous journals. commit 3490cd6ba39751076a55588155680ea219066f61 Author: David Teigland Date: Fri Feb 9 16:05:30 2007 +0000 clear configfs stuff if we get SIGTERM, this is a convenience if you want to kill dlm_controld and remove the dlm module without leaving the cluster. Otherwise you have to manually clear configfs dirs. commit 3ad16d3cbb0aac90aab192132a1661c0c5b54f46 Author: David Teigland Date: Fri Feb 9 16:03:15 2007 +0000 If the only two groups were two dlm lockspaces, then during recovery, the first would detect the all_nodes_all_stopped condition and move on to the starting state, and the second would never get a chance to detect the all_nodes_all_stopped state since the event state of the first was no longer FAIL_ALL_STOPPED. Use a separate flag to indicate that the all stopped state has been reached instead of relying on the event state. commit 7f354ef3066000075331dcf8fb267cad9323e30b Author: Robert Peterson Date: Thu Feb 8 05:41:16 2007 +0000 Fixed some bugs and made some improvements. When displaying indirect blocks, it now gives the data offset. Also added page-up/page-down/home/end navigation to block list display. commit 3f513728dfc2e65cb6ab7f8a0679774ab7b159b2 Author: Lon Hohberger Date: Tue Feb 6 20:21:17 2007 +0000 Don't query rgmanager if the user only wants a node state commit 200706ab0318c49ce646d680d87661c72d72617f Author: Robert Peterson Date: Fri Feb 2 21:01:04 2007 +0000 Misc updates to bring gfs-kernel up to the 2.6.20-rc7 and similar kernels. Also fixed some minor typos. commit e2337754df2ef160d96ca66793dee54ad5156cfa Author: Patrick Caulfield Date: Thu Feb 1 11:11:51 2007 +0000 Add threads example commit 9af2b891d63a72e4f786b5075f29ea1d52ff335b Author: David Teigland Date: Wed Jan 31 22:47:00 2007 +0000 join lockspace, optionally sleep, leave the lockspace. useful for testing, also useful to clear/release a lockspace from any random process that exited without releasing its lockspace commit e1c46787a2d362654dec3a715876ad453fe1a936 Author: James Parsons Date: Wed Jan 31 20:47:19 2007 +0000 New apc agent written in python that supports named outlets and outlet groups, minus perl pain. Addresses bz172179 and bz134489. yee haw commit a2a2911fbf382a11f8d3d3f604ef18d2287c82a7 Author: James Parsons Date: Wed Jan 31 20:23:44 2007 +0000 fix for bz220946 commit 14cb1e72c793c655b09be02b9656155e607c4e91 Author: James Parsons Date: Wed Jan 31 20:22:07 2007 +0000 fix for bz205457 commit c5c08271d7684aed299d0154390e2fc63e421cd1 Author: David Teigland Date: Wed Jan 31 18:47:41 2007 +0000 test program like gfs's 'alternate' but using an lvb instead of a file. nodes take turns incrementing the counter in the lvb commit 3e529df018c741bf26d7d65059b13e3d6c0dd015 Author: Patrick Caulfield Date: Wed Jan 31 10:53:47 2007 +0000 Read the LVB every time, rather than not at all. commit 867b0c6aff14d7799ecd6e1defb67efbfe0e400a Author: Ryan O'Hara Date: Mon Jan 29 20:34:38 2007 +0000 If no password is specified, pass a "-P ''" to the ipmitool to prevent it from prompting for a password. commit 3374aa31619aad27614303bbafee1a77f90949e6 Author: Lon Hohberger Date: Mon Jan 29 19:42:18 2007 +0000 Add error reporting if msg_open fails; patch from Josef Whiter commit 1c6818edf9bebc99970768aad36927a91b6bcbc3 Author: Lon Hohberger Date: Fri Jan 26 22:13:20 2007 +0000 Fix 223519 commit 8bf61212fb470a8cf6853f0430034c2b30add52b Author: Lon Hohberger Date: Fri Jan 26 21:57:01 2007 +0000 Port fix for logging of errors in config from RHEL5 branch commit 6f9681fa322397f6a96f0bbc7b5f6587b269b011 Author: Lon Hohberger Date: Fri Jan 26 21:45:46 2007 +0000 Add list_prepend macro commit 24dabb87676b95c81ec1e53bd70370842b46508e Author: Lon Hohberger Date: Fri Jan 26 21:42:30 2007 +0000 Add override for action timings commit dde30810d6a9118466ca802604412e4a1ea1c242 Author: Lon Hohberger Date: Fri Jan 26 21:38:56 2007 +0000 Clean up test cases commit 80b4127dbea40ba28ab57faab99898b00e1e1589 Author: Lon Hohberger Date: Fri Jan 26 21:37:57 2007 +0000 merge fixes from RHEL5 branch commit 791b821061921100c0441cd957c87acc07db729d Author: Lon Hohberger Date: Fri Jan 26 20:45:51 2007 +0000 Fix #222484 commit ec65908cba48d63742f1e40cb39cc43a658c0b72 Author: Ryan O'Hara Date: Fri Jan 26 20:03:51 2007 +0000 file scsi_watchdog.conf was initially added on branch RHEL4. commit e4cf64e0cfe95e54b2efcf4251cc7ecf424f0307 Author: Ryan O'Hara Date: Fri Jan 26 20:03:51 2007 +0000 file scsi_watchdog was initially added on branch RHEL4. commit fe972ff09fe1966463f6a98d7e80c3296476aae6 Author: Ryan O'Hara Date: Fri Jan 26 20:03:51 2007 +0000 file scsi_reserve.sysconfig was initially added on branch RHEL4. commit d643d5b4109a1fba575dda7fc803d0f6825987e4 Author: Lon Hohberger Date: Fri Jan 26 14:35:13 2007 +0000 Patch from Fabio Massimo Di Nitto - Fix portability of getuptime function commit 257dc5ab85001f428d6aaa3cd6f02de9ade5c1f3 Author: Robert Peterson Date: Wed Jan 24 14:44:19 2007 +0000 Resolves: bz 222299: gfs knows of directories which it chooses not to display commit d60dbb4edd39b96d6f44f0bb0e5c69035603e6ad Author: Robert Peterson Date: Tue Jan 23 21:36:03 2007 +0000 Resolves: bz 222759: gfs_mkfs doesn't zero data after gfs superblock commit aa18d9ba8fa3f38fa17cf04c39a1ae13502b6f34 Author: Robert Peterson Date: Tue Jan 23 20:55:46 2007 +0000 Resolves: bz 223500: gfs2_fsck runs slower than previous version commit 7563b42b9eb4bf7675cf2d1d66a3a2800b125066 Author: Robert Peterson Date: Tue Jan 23 19:44:12 2007 +0000 Resolves: bz 223843 GFS2: gfs2_fsck segfaulting on corrupt extended attributes commit 446284ef4cebc3e4ec19b4a913230a5bf3a10728 Author: Robert Peterson Date: Tue Jan 23 19:23:07 2007 +0000 Resolves: bz 223506: gfs2_fsck: fatal: invalid metadata block This is a crosswrite from gfs1. 1. Fix a memory leak in pass1b. 2. Improve performance of pass1b by combining loops through fs. 3. Give an error message and abort if file system > 16TB and node architecture is 32-bits. 4. Give users an "Abort" "Continue" and "Skip" if they interrupt with ctrl-c. Also, report progress for that pass on interrupt. 5. Added more "percent complete" messages for other passes. See bz comments for more details. commit 70b7f91ca2e8c48cdcda2cf7ca031b62896837ea Author: Lon Hohberger Date: Tue Jan 23 17:57:26 2007 +0000 Use /proc/uptime by default instead of gettimeofday(2) for internal timings to avoid problems when the clock is reset by NTP commit 6a457043d06555236193290b15ac373bb5765dc5 Author: Robert Peterson Date: Tue Jan 23 16:53:28 2007 +0000 Resolves: bz 222933: regression: fence_tool no longer times out after 300 seconds commit 6ea08ffa89a720842442311c6a24e442ff038578 Author: Lon Hohberger Date: Mon Jan 22 23:16:12 2007 +0000 Simple manual override for fenced & example replacement for fence_ack_manual commit 36797785ee126027eb0016680d01c26b28d98e06 Author: Lon Hohberger Date: Mon Jan 22 22:51:05 2007 +0000 Resolves bugzillas: #213533, #216092, #220211, #223002, #223234/#223240 Detailed comments: * Lock in memory to prevent being swapped out * Turn on RR scheduling for main + score threads * Let qdiskd wait for CMAN to start * Add option to qdiskd to stop CMAN if qdisk device is not available * Make qdisk interval timings more accurate * Add option to reboot node if qdiskd detects internal hang > failure time (e.g. interval*tko, in seconds) * Add per-heuristic tko counts for unreliable heuristics (e.g. ping packets) * Remove nodes from quorate mask immediately on eviction * Update man pages with better examples * Don't let >1 instance of qdiskd be started * Clarify logging output. * Improve data in status_file. * Allow qdiskd to run with no defined heuristics (master-always-wins mode). * Make fencing of nodes optional (default = on). * Make sure CMAN is running before we try to talk to it at each point. commit 4254107fe0cf04376c2cedd61a07793191ec11d4 Author: Robert Peterson Date: Fri Jan 19 19:01:31 2007 +0000 Resolves: bz 222871 gfs_fsck runs slower than previous versions commit c18485291ce5bffa21bfc1af452b82defb3fc3ef Author: Robert Peterson Date: Wed Jan 17 19:06:23 2007 +0000 Resolves: bz 222743: gfs_grow gets the rgindex out of order. commit 05701888f24dd35de22165b816dc37291bf7b309 Author: Lon Hohberger Date: Wed Jan 17 16:21:25 2007 +0000 Fix #222961 - required for Conga to work. commit 0183aab27224008791504eeded4a555a0cb067e4 Author: Patrick Caulfield Date: Wed Jan 17 15:02:49 2007 +0000 Fix typo. thanks Bob. commit d9b0039b52985e3a0ec1c27de474689b3950bc10 Author: Patrick Caulfield Date: Wed Jan 17 11:00:40 2007 +0000 If we get killed by another node then print the reason in English rather than just a number. commit 83fafd7c403f23ee51702f2a6f398b43a4ccbfc2 Author: Robert Peterson Date: Tue Jan 16 19:16:01 2007 +0000 Resolves: bz 222747: Remove references to lock_gulm from cluster man pages commit 57201a9c5d4efd0723a8181329fecc713e1aab2c Author: Lon Hohberger Date: Tue Jan 16 15:32:18 2007 +0000 Resolves: #222485; patch from Simone Gotti Makes relocation work correctly. commit ac6f4ab5f2cbd561e72432ec98721cc01b21eb3f Author: Lon Hohberger Date: Tue Jan 16 15:00:29 2007 +0000 Apply patch from Simone Gotti; fixes #222744/#222838 commit 84156dbba99e2d3d037d9289fd437da45b189cdb Author: Patrick Caulfield Date: Tue Jan 16 09:54:43 2007 +0000 Don't return to 'cman_tool leave' until we are just about to quit. Otherwise there can be a delay between cman_tool thinking that we are down, and the node really being out of the cluster. see bz#222686 commit 27bd946d3a590e6ad29831ec0ec0888ed59ed9e8 Author: Lon Hohberger Date: Mon Jan 15 19:52:05 2007 +0000 Fix bug causing cluster.conf / rm log level to be ignored in resource agents commit 259f30896c384a1d7be88ec57d319c97be3ca594 Author: David Teigland Date: Thu Jan 11 17:59:00 2007 +0000 Move memset(0) into the for loop so we're clearing the data buffer each time through. We were seeing some bogus data from group_tool -v. commit 2484ee3520be97301475ab9ec3f5acfa12401a81 Author: James Parsons Date: Wed Jan 10 23:46:06 2007 +0000 bz222234 commit faf8a66476d53cb2d871eb840ea54b510d8f297d Author: Lon Hohberger Date: Wed Jan 10 20:30:47 2007 +0000 Resolves: #221210 Allows fence_xvm to respond even if the virtual machine has never existed in the cluster. commit 61ec27954fd1ac6c403e37a103dca54c4e05538a Author: David Teigland Date: Tue Jan 9 19:17:08 2007 +0000 add -K option to enable dlm kernel log_debug's (does nothing if /sys/kernel/config/dlm/cluster/log_debug doesn't exist) commit 35d9de6cc37dbd9342d9dcfddaa9dc4c618648aa Author: Patrick Caulfield Date: Tue Jan 9 14:17:37 2007 +0000 Add flood program back. commit 4847437d24962c80d1479ffad08d62f93faa9a4d Author: Patrick Caulfield Date: Tue Jan 9 13:31:23 2007 +0000 quorumdev_poll is in milliseconds, not seconds! Thanks to Simone Gotti commit 17fe0cbdea947996764a6c1e6b4a7dd581d269ef Author: Patrick Caulfield Date: Mon Jan 8 10:16:17 2007 +0000 Don't lose NUL on the end of the fence-agent. thanks to Simone Gotti for the patch commit 4b2e9a0a44c8fbfb7a79e7ee72b886f1176acaf5 Author: Patrick Caulfield Date: Mon Jan 8 10:07:52 2007 +0000 If there are already queued messages for a client then don't send new ones out of order commit 348075a027637557bb3817b2186fc4f1fe8d0c56 Author: Benjamin Marzinski Date: Fri Jan 5 23:01:58 2007 +0000 Get GNBD compiling with the latest upstream kernel. commit be7983441ec1c11a3e3144ad0e923d87b5a498fe Author: David Teigland Date: Fri Jan 5 18:49:00 2007 +0000 groupd creates uint32 global id's for each group. It doesn't use them itself, but provides them to each registered app to use if it wants. (The dlm and gfs each use the global id in messages to distinguish between different lockspaces/fs's.) groupd's method of creating these gid's (local counter | local nodeid) can result in duplicate gid's in the cluster given a somewhat uncommon sequence of events. bz 221629 commit f070a338637f4158c8cdc76508498e5c3f3ed3f6 Author: Patrick Caulfield Date: Fri Jan 5 10:34:32 2007 +0000 Clear the node structure before calling cman_get_node(). Thanks to simone.gotti@email.it commit 50718886574a044aff46e546d3706d6d898a5f00 Author: Patrick Caulfield Date: Fri Jan 5 10:30:53 2007 +0000 Send correct length of quorum device name sent to cman. Thanks to simone.gotti@email.it for the patch commit 84a2b637bb03f07d0e49e7daf96e261d6a0b2426 Author: David Teigland Date: Thu Jan 4 20:34:18 2007 +0000 added "flood n mode" function a while ago, doesn't equate to pjc's "flood" program even though that's what I was originally hoping to emulate commit f62b3fd5f2111236a995cfacd0c49a78d73f1aba Author: David Teigland Date: Tue Jan 2 20:18:03 2007 +0000 mount/umount modifications of /etc/mtab weren't smart enough to get straight two different fs's mounted on the same mountpoint bz 218560 commit 00ade4a5fc53803c48273fd841ff0b2a8f282fc0 Author: Patrick Caulfield Date: Tue Jan 2 15:04:21 2007 +0000 Give a better error if the cluster name is too long. commit 2dbc47d9e0157d323ce1aa94e0e2be90563bf1b0 Author: Robert Peterson Date: Thu Dec 21 20:50:43 2006 +0000 Resolves: bz 219876: mount.gfs hangs if there are insufficient journals configured in the filesystem commit 03f46a997578ebfc5ae3ed459533a50faabcf970 Author: David Teigland Date: Wed Dec 20 19:13:35 2006 +0000 Support mounting a single fs on multiple mount points. bz 218560 commit 507f8297eaf7a6bf83f37fe7dacf3bc9cd9d1e8b Author: David Teigland Date: Tue Dec 19 22:19:01 2006 +0000 Fixes related to the needs_recovery state and first-mounter recovery. Probably not perfect yet, but working in the tests I'm able to contrive. bz 218551 commit 0419ecb3319299e73fbe5817a209549a16628e83 Author: David Teigland Date: Tue Dec 19 20:06:44 2006 +0000 When the first mounter is recovering all the journals, it should use TRY on the journal locks. There's one rare case where other mounters will exist who hold journal locks that we don't want to block on. That's when the other mounters are readonly, haven't been able to recover the fs after a node failure, and the next rw mounter is told to do first mounter recovery. The journals of these readonly nodes can be skipped when the pseudo-first mounter is going through all journals. Changed this a long time ago but never checked it in. bz 218551 commit c049c51bcf8332662b9c5d48d1e70fec908fb881 Author: Robert Peterson Date: Tue Dec 19 17:49:53 2006 +0000 Resolves: bz 219878: gfs2 creation should default to 1 journal and lock_nolock commit 1579be8c07a4286c1cce36a7a2272ca81b55fb11 Author: David Teigland Date: Tue Dec 19 17:05:59 2006 +0000 revert last checkin commit 96e079ff9193526b4a4b27846a0e14cf84bb5df2 Author: Patrick Caulfield Date: Tue Dec 19 10:55:00 2006 +0000 Fix bug where cman_dispatch(CMAN_DISPATCH_ONE) could dispatch several messages. commit a9a5de3f0c6c9f9146a120f4aa15340c7e49eebf Author: Robert Peterson Date: Tue Dec 19 01:42:37 2006 +0000 Resolves: bz 218560: multiple mount points fail with gfs and gfs2 commit 2f120f20a67bfe73150b12f489bf022ba411d0b3 Author: Robert Peterson Date: Tue Dec 19 00:19:37 2006 +0000 Resolves: bz 219866: GFS init script - FATAL: Module lock_dlm is in use. commit 191692d941334311e5d8898f77d01a096b5953ac Author: Lon Hohberger Date: Mon Dec 18 21:55:27 2006 +0000 Implement cap on max # of outstanding status check threads; fixes bugzilla #218697 commit 29ba2cda6238e52455c19bab2b1919979f13902b Author: Benjamin Marzinski Date: Mon Dec 18 18:18:22 2006 +0000 GNBD was hanging with the cfq scheduler, so I changed the default scheduler for all gnbd devices to the anticipatory scheduler. commit 18068e2131e5ea0303c3ed42a468d53723fdf23e Author: Patrick Caulfield Date: Mon Dec 18 09:37:45 2006 +0000 Increase token timeout to 10s as per bz#216954 commit 394e470978dcef94b1690c4de27d5d904a933389 Author: Benjamin Marzinski Date: Fri Dec 15 20:27:00 2006 +0000 make it so that the -c and -[u|U] flags are mutually exclusive. Resolves bz 219413 commit 8a495ded05e50945650b59612c60f9d365017dc4 Author: Patrick Caulfield Date: Fri Dec 15 13:43:03 2006 +0000 Add cluster_id override field to cluster.conf, so that people can manually assign cluster IDs where the hash values for similar names clash commit a09ca74405c061596b26352f9606121a0a293153 Author: Lon Hohberger Date: Thu Dec 14 22:18:07 2006 +0000 Fix #216774, pass 3 commit d70f643434bae11c129653911db0fc9ebc397b26 Author: Lon Hohberger Date: Thu Dec 14 22:03:17 2006 +0000 Fix #216774 commit ec7b4813244ed482f3fb830cead63e2d5894d75b Author: David Teigland Date: Thu Dec 14 21:00:10 2006 +0000 Switch from CMAN_DISPATCH_ONE loop to CMAN_DISPATCH_ALL to resolve delayed cman shutdown callbacks. bz 219385 commit 19f27306b6803e5a90d27ee233120939529e44ae Author: Lon Hohberger Date: Thu Dec 14 20:11:04 2006 +0000 Fix #216774; missed rg_thread.c commit 3ba32abb61d01125b8e38b4f6b8336d1320bc841 Author: David Teigland Date: Thu Dec 14 19:56:50 2006 +0000 Switch from CMAN_DISPATCH_ONE loop to CMAN_DISPATCH_ALL to resolve delayed cman shutdown callbacks. bz 219385 commit 0e03342bbb7fdf7e20dbb1fd8c4284ea0d07af5a Author: David Teigland Date: Wed Dec 13 19:04:53 2006 +0000 groupd's function that returns info for group status queries was mistakenly setting the "member" status to 0 when a node was leaving. This led fence_tool to believe that the local node was no longer a member (i.e. had finished leaving) when in fact the leave wasn't complete yet. bz 219385 commit 58ff78bbde6ffbac6cea67eca9696195b395235a Author: Lon Hohberger Date: Wed Dec 13 18:36:09 2006 +0000 Fix #211468 - clustat always returns 0, but should give a nonzero code for non-running services. commit 13f46fc958348698ec301b8c5a7f22a6e366e47d Author: Lon Hohberger Date: Wed Dec 13 17:12:02 2006 +0000 Fix segfault in clustat if node is not a cluster member commit 5df8486ccac949d2a08c3d3db89876111bf11380 Author: Patrick Caulfield Date: Wed Dec 13 13:38:11 2006 +0000 Fix typo that could affect shutdown. see bz#219385 commit 783a711a76d5318ebfd47c061c34a3400dabb424 Author: David Teigland Date: Tue Dec 12 21:17:56 2006 +0000 add lock_flood/unlock_flood/unlock_flood-exit commands to test doing large volumes of locks/unlocks commit 8b0e83b3cc2b66d5d424217ffbbf9ab8dc79657b Author: Abhijith Das Date: Fri Dec 8 22:01:22 2006 +0000 don't fail if unmounting configfs fails commit bc821939341bb396c707a8b326846783048b92c2 Author: David Teigland Date: Fri Dec 8 19:25:27 2006 +0000 tidy up some prints commit e360a00937dd00f613ecbab0faea7583b6a579d7 Author: David Teigland Date: Thu Dec 7 19:50:49 2006 +0000 very useful testing program I wrote a long time ago commit 36894e144dfecfe93c0d305879efadcf6635bd5d Author: Patrick Caulfield Date: Thu Dec 7 09:54:14 2006 +0000 Fix minor bug where cman_tool join didn't spot that aisexec had started correctly or crashed. This means we can up the timer for allowing aisexec to start with no ill effects. see bz#218688 commit da23b034c7ad0923f10173627ed37880f57b1089 Author: David Teigland Date: Tue Dec 5 22:38:34 2006 +0000 Call into the lock module to do a withdraw instead of just calling BUG. bz 215962 commit 0ec08a1ad5c2f09f6461b640c76aa11088d04fb1 Author: David Teigland Date: Tue Dec 5 22:29:43 2006 +0000 When lockfs is called from the vfs (due to a dm suspend), don't try to do the lockfs if the fs is being shut down (due to a withdraw). bz 215962 commit 38bcf7ceb1a7e21e23e4c3500e7f9f37d1cd5640 Author: David Teigland Date: Tue Dec 5 22:25:29 2006 +0000 Pass gfs_controld the device being mounted, it'll use this if it needs to withdraw the fs. bz 215962 commit 3ef172ed1039df81db8f6fb522e1603d3183a3b0 Author: David Teigland Date: Tue Dec 5 22:19:17 2006 +0000 Before doing the mount-group portion of withdraw, fork off a dmsetup to suspend the fs device. This means gfs doesn't need to call dm_suspend() in the kernel before calling out to us. The suspend waits for all outstanding i/o to return on the device which is necessary prior to telling other nodes to do recovery. (Later we should probably swap in an error table and resume the device.) bz 215962 commit e4484f9289d84a1353e1f0af2a646a8f43fa3264 Author: David Teigland Date: Tue Dec 5 16:59:53 2006 +0000 change the default plock rate limit from 10 to 100 bz 216052 commit 9d6c85d2af808cedb75a87fa0699d714c1251434 Author: Lon Hohberger Date: Mon Dec 4 17:26:34 2006 +0000 Fix build error commit 401a1b935684cd443199d74e1942d64706a19a4b Author: Robert Peterson Date: Fri Dec 1 22:50:05 2006 +0000 Resolves: bz218134: GFS & GFS2: umount while busy gives bogus error message. commit 3e987906c0153b651442cf20d243f105f91c884c Author: Lon Hohberger Date: Fri Dec 1 22:14:40 2006 +0000 Handle 0.1.9 case of libvirt returning a virDomainPtr + state for a VM that doesn't exist (vm state == VIR_DOMAIN_SHUTOFF) commit 17a89d1d64e0c5c5722f7659547d2362e8c3ee8e Author: Abhijith Das Date: Fri Dec 1 21:28:06 2006 +0000 bz 190196. gfs2_quota. Doesn't use sysfs anymore. Uses the gfs2meta filesystem instead. commit a2f5efaa0f571c1d30891bea6194d8dd00d1aa17 Author: David Teigland Date: Fri Dec 1 20:26:01 2006 +0000 Be more intelligent about handling recovery sets so we can deal with cases where a node fails, rejoins, then fails again before recovery has completed for the first failure. Also handles case where the groupd process exits without the node going down. If that happens, we want to kill the node (via cman) if the node was in any groups and ignore it otherwise. commit 22721d47248e139addd543d6f5bc0d4619f39f04 Author: David Teigland Date: Fri Dec 1 15:28:58 2006 +0000 group_tool dump doesn't handle partial reads/writes, now we always dump entire fixed size debug buffer bz 214540 commit c23a75bfca8801eb525dbfdd39349874aa6c55ba Author: Patrick Caulfield Date: Fri Dec 1 13:46:57 2006 +0000 That 'if' really should have been a 'while'. If anyone can remember which bug this was supposed to fix, please pipe up :) commit 5c702d5f67921b801fd00e64516401cfba9a50ae Author: Lon Hohberger Date: Thu Nov 30 23:56:03 2006 +0000 Fix bug where fence agents were getting info up to groupd commit 8b529d25bbf6174b2568af7018a7791d172d6023 Author: Lon Hohberger Date: Thu Nov 30 21:15:00 2006 +0000 Fix bug reported by Fabio M. Di Nitto - duplicate definition of assign_noccs commit 4ae1a698a21fe5f05b0e4766107dee7e5aea8f1a Author: David Teigland Date: Thu Nov 30 19:48:43 2006 +0000 From: Steven Dake We dispatch in the dispatch handler now instead of saving the data. Also we use dispatch all which will basically try to dispatch all messages possible in one go instead of only dispatching on each loop through poll. commit 96925570b827f0ca08b8fcafe8dff63565a37367 Author: Robert Peterson Date: Thu Nov 30 15:25:49 2006 +0000 Resolves: bz217798: Need to port Resource Group optimization from gfs1 to gfs2 commit 4fd59648f20084c76fca0a61810b9f2d9279ee02 Author: Patrick Caulfield Date: Thu Nov 30 10:46:35 2006 +0000 Don't truncate the node name when we check for it unqualified. bz#217724 commit 87f628b6ca7ce7b48eb4a9d79b1bc28694807075 Author: Robert Peterson Date: Wed Nov 29 17:25:44 2006 +0000 Resolves: bz213763: mkdir takes more time on larger file systems. Made gfs_mkfs use RG sizes based on size of file system to maximize performance. commit fade42dd7d7bb27ee7d09cf5768589140cd8d813 Author: Robert Peterson Date: Wed Nov 29 17:04:31 2006 +0000 Resolves: bz217436: Several updates needed to cluster.conf man page. 1. Removed references to gulm. 2. Other misc changes. commit 438ef68cddb66fc143c69cbfa70ec0e353091544 Author: Robert Peterson Date: Wed Nov 29 16:28:58 2006 +0000 Resolves: bz217436: Several updates needed to cluster.conf man page. 1. Added required nodeid="x" to cluster.conf example. 2. Added tag to cluster.conf example. 3. Added section on cluster.conf validation (Credit Jim Parsons) 4. Fixed spelling and grammar problems. commit 30c3a220a49a717cb3a09154f609cf125e46a6c4 Author: David Teigland Date: Tue Nov 28 20:52:23 2006 +0000 the fix yesterday to prevent a segfault when mount failed mistakenly also changed the exit point from the function causing the error to not be written back to mount.gfs commit b84cbdf0fc7c7dfd55f919068c1b42ff540e40dc Author: Robert Peterson Date: Tue Nov 28 18:35:28 2006 +0000 Resolves: bz216902: mkfs.gfs2 allows non-4K block size. The executive decision was made to remove the -b option in mkfs.gfs2 until we can get all of this sorted out with the gfs2 kernel. commit 6ea5f02d65dbe7bbcf40bc87a0fc41369b7ef87b Author: Robert Peterson Date: Tue Nov 28 17:56:47 2006 +0000 Resolves: bz217460: fence_tool man page updates needed. Thanks go to Fabio Massimo Di Nitto for contributing this. commit ea8cf172fef83bae445f0483d0640eb912cb381d Author: James Parsons Date: Tue Nov 28 15:39:29 2006 +0000 file fence_baytech.py was initially added on branch RHEL4. commit a9ae99dc7965431cdf245069c76e08536e4cbae5 Author: Patrick Caulfield Date: Tue Nov 28 11:20:01 2006 +0000 Tell cman when the config file has been updated commit 5949e8cec4b017fb2aae64257a182b67d78c21fa Author: David Teigland Date: Mon Nov 27 22:42:36 2006 +0000 if mount fails, don't try to save the mg info for the new group since there won't be any mg and we'll segfault commit ffbfc53e1ec8fde547a94b5d377102cf9372cce9 Author: Ryan O'Hara Date: Mon Nov 27 22:40:07 2006 +0000 Fix comment. Fix exit status be rval. commit b1ad216463f5739a4fd690cea29dacf2fdd90ee6 Author: Lon Hohberger Date: Mon Nov 27 22:32:05 2006 +0000 Fix #213878 - segfault in rg_thread.c due to improper loop semantics commit 7f35774724dc9443e69699a3921bfb7a02f46eff Author: Wendy Cheng Date: Mon Nov 27 20:22:34 2006 +0000 bugzilla : 217374 - temporarily disable GFS1 withdraw until bz215962 is ready. commit bbb4ba53ea2ac30682edf1e971a813be3da7e258 Author: Ryan McCabe Date: Mon Nov 27 16:45:38 2006 +0000 Add DRAC5 and DRAC4/I support Related: #211836, #211918 commit 0f8fe2fd8bb8ce072aa94a184de21ae434914de2 Author: Robert Peterson Date: Wed Nov 22 18:39:38 2006 +0000 Resolves: bz216898 mkfs.gfs2 needs to zero the first 16 blocks of file system commit fbc45b8b1fe6a2d039eae422846e82005d6d475c Author: David Teigland Date: Tue Nov 21 17:28:09 2006 +0000 handle errors or short reads when reading /dev/misc/lock_dlm_plock commit adf1a3849e5252fbe9c31c9d9fb3f0369d259691 Author: Lon Hohberger Date: Tue Nov 21 14:50:49 2006 +0000 Fix #213218 commit 826067525e0e33111cc978cd70d3abbaa7383b80 Author: David Teigland Date: Mon Nov 20 21:28:53 2006 +0000 use timersub() macro to subtract timevals instead of coding it commit 10fbec0b572299084a57eb67cd1d01654ac87f2a Author: David Teigland Date: Mon Nov 20 21:07:18 2006 +0000 fix a couple of problems if openais enables flow control: - the poll loop spins due to plocks being ready to process but being ignored due to the flow control; we need to remove the plock fd from the poll set when flow control is enabled (just like we do when the plock rate limiter is active) - we were not updating the flow control state from openais when flow control was enabled unless we received a cpg message; we need to update it periodically while blocked since we may not receive cpg messages from other nodes causing us to update the state commit 2a327ac21711aae1e912259077f887c115e79645 Author: David Teigland Date: Mon Nov 20 18:10:00 2006 +0000 The plock rate limiting code should use the full timeval to measure the 1 sec limit interval instead of just the rough difference in tv_sec values. commit eaca7251d415672082af0c4d1e5a939d43daf9c8 Author: Robert Peterson Date: Mon Nov 20 15:35:12 2006 +0000 Fix another case where lf_dirent_format was not rewritten to disk after it was fixed. commit 4cbf59f41f2a9e2ba5bc55ced4bb8e92256cae5c Author: Robert Peterson Date: Fri Nov 17 16:43:49 2006 +0000 Resolves: bz208836 - fatal: invalid metadata block 1. Fix a memory leak in pass1b. 2. Improve performance of pass1b by combining loops through fs. 3. Give an error message and abort if file system > 16TB and node architecture is 32-bits. 4. Give users an "Abort" "Continue" and "Skip" if they interrupt with ctrl-c. Also, report progress for that pass on interrupt. 5. Added more "percent complete" messages for other passes. See bz comment #33 for more details. commit 1c61ea750ecb03240887e73a405680c3bb1c9f33 Author: David Teigland Date: Fri Nov 17 16:30:19 2006 +0000 if read() returns a non-EINTR error then abort commit 2833e16c0fa1279ee673378653d72b94f5d56c02 Author: David Teigland Date: Fri Nov 17 16:26:34 2006 +0000 if read() returns a non-EINTR error then shut down the client commit 9ee214d878756b472e321dedfadbf18317dea1b8 Author: Wendy Cheng Date: Fri Nov 17 16:15:31 2006 +0000 Bugzilla 214274: Oops... only directIO has this issue - buffer IO should be fine. Revert buffer io changes. commit 4e75396864db8bb1aa92e7ed0fe0c876f84903fe Author: Robert Peterson Date: Fri Nov 17 15:36:05 2006 +0000 Resolves: bz215817 umount caused a 'filesystem consistency error' kernel BUG commit 3c60bbcdcc5afd70d205155caa3b1a9d4af5e55e Author: Wendy Cheng Date: Fri Nov 17 05:00:57 2006 +0000 Bugzilla 214274: GFS has been splitting large writes into smaller atomic transactions. This would generate multiple aio completion calls (one for each transaction) that falsely notify application about data completion. Problem is reported by QA team as data corruption. commit 229318a5ce392871cf64242eb9e9664e8265f61d Author: Ryan O'Hara Date: Thu Nov 16 20:23:22 2006 +0000 Fix annoying whitespace inconsistency. commit 10b1377208c3c8753f56393d2b1620f6852c964f Author: Ryan O'Hara Date: Thu Nov 16 20:12:45 2006 +0000 Detect and fix potential endia problem in lf_dirent_format. commit 9c1007ffcfd7466aa3beea44e2665a55ea8228da Author: Lon Hohberger Date: Wed Nov 15 16:55:35 2006 +0000 Fix error reporting from cman if run while xend is not running. commit 41b6272798fd5cc94bc236582b6f8c95c6ac09e9 Author: David Teigland Date: Wed Nov 15 14:35:05 2006 +0000 fix sched_priority from sdake commit e35ffe98957ca80d77da50f64d06eba8847fca7d Author: David Teigland Date: Wed Nov 15 14:33:06 2006 +0000 uncomment scheduler settings fix sched_priority from sdake commit a79ef8a9fd56d984d5b81b31e1bfb760d3fa613d Author: Robert Peterson Date: Tue Nov 14 22:51:35 2006 +0000 Resolves: bz211465 fsck errors on gfs2 volume commit 87c19d429afdcc9609b0d4043b4d55b38dcc98a8 Author: David Teigland Date: Tue Nov 14 20:37:27 2006 +0000 Default plock rate limit of 10 instead of 0. commit f9926453d8acd48e0fd556799c27c6ce7434335d Author: David Teigland Date: Tue Nov 14 20:20:43 2006 +0000 Add plock rate limit option -l . Current default is no limit (0). If a limit is set, gfs_controld will send no more than plock operations (multicast messages) every second. Given a limit of 10, one file system where plocks are used, and a program that does a tight loop of fcntl lock/unlock operations, the max number of loop iterations in 1 second would be 5. If eight nodes were all doing this there would be 80 total network multicasts every second from all nodes in the cluster. We also record the volume of plock messages accepted locally and received from the network in the debug log. A log entry is written for every 1000 locally accepted plock operations and for every 1000 operations received from the network. commit 77135bd5202c766e0995adde46eaa24914bd3c0e Author: Robert Peterson Date: Tue Nov 14 20:11:10 2006 +0000 Ability for gfs2_edit to handle gfs1 indirect metapointers. commit 9eab7c6d2be592dcadf3c2a633dbe0af3d445ab3 Author: Ryan O'Hara Date: Mon Nov 13 22:47:48 2006 +0000 Include sd_freeze_count in counters output. This will allow users to see the freeze count via gfs_tool counters. commit 1d824fc96f55f1ca5ec0ec8d76c68399f46896d8 Author: Chris Feist Date: Mon Nov 13 22:16:53 2006 +0000 Fixes to prevent compile time warnings/errors in brew. commit f2c6dfe5ab476443bf3ba05a64330e6bf0ce2580 Author: Chris Feist Date: Mon Nov 13 20:51:57 2006 +0000 Need to include directory for ccs.h header file. commit a863f5d571802116b05685d1bcecdfb12ec947f7 Author: Lon Hohberger Date: Mon Nov 13 16:13:51 2006 +0000 Fix bugzilla #212474; fully integrates fence_xvmd with ccs & the cman init script commit b040184c94e57b5a11ff3ace0adfbc63582d503f Author: Benjamin Marzinski Date: Fri Nov 10 22:17:39 2006 +0000 fix for bz215095 & 215099. for 215099, gnbd now only handles signals in sock_xmit() when it is called by the gnbd_recvd process. Otherwise, it simply blocks the signals until it completes the IO. This keeps gnbd from sending partial requests to the server, which can lead to data corruption. for 215095, the gfs function clean_journal() now uses the noinline attriubute, gfs_find_jhead() only uses on struct gfs_log_header, and gfs_recover_journal() dynamically allocates its struct gfs_log_header, all to conserve stack space. In the gnbd function sock_xmit(), you no longer get the signal info, so gnbd_recvd cannot print which signal it received, but it saves over 120 bytes of stack space. commit b85f8aaeacbd0a4eedebc1c246e80c93f9d3abb3 Author: Robert Peterson Date: Thu Nov 9 16:22:34 2006 +0000 This is the fix for Bugzilla Bug 214524: group_tool dump can give short output. commit b505d0e82eb4ee5f4368e389baced2d7c1e50d40 Author: Robert Peterson Date: Thu Nov 9 15:47:29 2006 +0000 This is the fix for Bugzilla Bug 214625: Add group_tool log function to group_tool and groupd. commit 14ac711754e6ba67918a1e96248058a31f1a88c7 Author: Robert Peterson Date: Thu Nov 9 15:29:45 2006 +0000 This is the fix for Bugzilla Bug 214621: Allow gfs2_edit to view, print and edit gfs(1) file systems. commit f9679cb2f7c19441da9c4ca312bdd051369a91a3 Author: Patrick Caulfield Date: Thu Nov 9 13:10:42 2006 +0000 Set join_timeout and consensus_timeout to higher defaults as per bz#214920 commit 4dc298a43cd2a7f99557ce9e3d50fa74886ecec6 Author: Robert Peterson Date: Wed Nov 8 21:14:01 2006 +0000 This is the fix for Bugzilla Bug 214513: gfs2_convert must reject file systems with block size != 4K. commit 2cc986e75398ac2571d1491343b5e0ba37014397 Author: Patrick Caulfield Date: Wed Nov 8 15:49:39 2006 +0000 Always compile in debug logging - you never know when it might come in handy and it's disabled by default anyway. ----------------------------------------------------------------------- hooks/post-receive -- Red Hat Cluster Suite From teigland@redhat.com Mon Feb 25 15:13:00 2008 From: teigland@redhat.com (David Teigland) Date: Mon, 25 Feb 2008 15:13:00 -0000 Subject: [SCM] Red Hat Cluster Suite branch, RHEL5, updated. cmirror-kernel_0_1_7-3-g33f356a Message-ID: <20080225151316.8362.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Red Hat Cluster Suite". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=33f356a5e34b00ff0d374bf7046163e9493e06f6 The branch, RHEL5 has been updated via 33f356a5e34b00ff0d374bf7046163e9493e06f6 (commit) from 61f1219b8350282a41ab4b07ed8c6855e1561d54 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 33f356a5e34b00ff0d374bf7046163e9493e06f6 Author: David Teigland Date: Mon Feb 25 09:12:24 2008 -0600 groupd: fix copyright comments ----------------------------------------------------------------------- Summary of changes: group/daemon/app.c | 22 +++++++++++----------- group/daemon/cman.c | 22 +++++++++++----------- group/daemon/cpg.c | 22 +++++++++++----------- group/daemon/joinleave.c | 22 +++++++++++----------- 4 files changed, 44 insertions(+), 44 deletions(-) hooks/post-receive -- Red Hat Cluster Suite From lhh@ayanami.boston.devel.redhat.com Mon Feb 25 22:24:00 2008 From: lhh@ayanami.boston.devel.redhat.com (Lon Hohberger) Date: Mon, 25 Feb 2008 22:24:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-37-g3759305 Message-ID: <20080225222408.22885.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=3759305408a818ac4c059ab3f68335eefcbf541d The branch, master has been updated via 3759305408a818ac4c059ab3f68335eefcbf541d (commit) from d6b422f475c286cd884c74538f500b31e17b50ec (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 3759305408a818ac4c059ab3f68335eefcbf541d Author: Lon Hohberger Date: Mon Feb 25 16:57:30 2008 -0500 Correct incorrect netmask handling in ip.sh ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/ip.sh | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) hooks/post-receive -- Cluster Project From lhh@ayanami.boston.devel.redhat.com Mon Feb 25 22:28:00 2008 From: lhh@ayanami.boston.devel.redhat.com (Lon Hohberger) Date: Mon, 25 Feb 2008 22:28:00 -0000 Subject: [SCM] Cluster Project branch, RHEL5, updated. cmirror-kernel_0_1_7-4-g24f6150 Message-ID: <20080225222833.25575.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=24f615062dc06758ed8598b198b47a3c84857f46 The branch, RHEL5 has been updated via 24f615062dc06758ed8598b198b47a3c84857f46 (commit) from 33f356a5e34b00ff0d374bf7046163e9493e06f6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 24f615062dc06758ed8598b198b47a3c84857f46 Author: Lon Hohberger Date: Mon Feb 25 16:57:30 2008 -0500 Correct incorrect netmask handling in ip.sh ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/ip.sh | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) hooks/post-receive -- Cluster Project From cfeist@redhat.com Mon Feb 25 23:34:00 2008 From: cfeist@redhat.com (Chris Feist) Date: Mon, 25 Feb 2008 23:34:00 -0000 Subject: [SCM] Cluster Project branch, RHEL46, updated. cman-kernel_2_6_9_54-5-gc22322a Message-ID: <20080225233445.22401.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c22322ad43d192cdc2de77c6ceca782f5e35412b The branch, RHEL46 has been updated via c22322ad43d192cdc2de77c6ceca782f5e35412b (commit) from 2a71581ea69a19bfbf1924bc42a11383555a89ce (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c22322ad43d192cdc2de77c6ceca782f5e35412b Author: Chris Feist Date: Mon Feb 25 17:34:08 2008 -0600 Test commit ----------------------------------------------------------------------- Summary of changes: Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) hooks/post-receive -- Cluster Project From lhh@ayanami.boston.devel.redhat.com Tue Feb 26 14:41:00 2008 From: lhh@ayanami.boston.devel.redhat.com (Lon Hohberger) Date: Tue, 26 Feb 2008 14:41:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-38-g4d94315 Message-ID: <20080226144129.18477.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=4d94315324f3a39f47eafd2d2f575360d624cfc1 The branch, master has been updated via 4d94315324f3a39f47eafd2d2f575360d624cfc1 (commit) from 3759305408a818ac4c059ab3f68335eefcbf541d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4d94315324f3a39f47eafd2d2f575360d624cfc1 Author: Lon Hohberger Date: Tue Feb 26 09:41:19 2008 -0500 * Make fence_ack_manual.sh accept -n * Ensure fence_rps10 defaults to reboot * Make clustat not display estranged nodes which are now offline ----------------------------------------------------------------------- Summary of changes: fence/agents/manual/fence_ack_manual.sh | 17 ++++++++++++++--- fence/agents/rps10/rps10.c | 9 ++++++--- rgmanager/ChangeLog | 4 ++++ rgmanager/src/utils/clustat.c | 8 ++++++++ 4 files changed, 32 insertions(+), 6 deletions(-) hooks/post-receive -- Cluster Project From lhh@redhat.com Tue Feb 26 21:48:00 2008 From: lhh@redhat.com (Lon Hohberger) Date: Tue, 26 Feb 2008 21:48:00 -0000 Subject: [SCM] Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-4-g9e8a8cd Message-ID: <20080226214831.5235.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=9e8a8cd7262ad0228c1d1311d2f6ea45f01034fa The branch, RHEL4 has been updated via 9e8a8cd7262ad0228c1d1311d2f6ea45f01034fa (commit) via 29dfb2374ede46fe2087f2159c91721e035af16c (commit) from 7cd1be561cdb08155964672d0afc2cbe32a5af37 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9e8a8cd7262ad0228c1d1311d2f6ea45f01034fa Author: Lon Hohberger Date: Tue Feb 26 16:48:23 2008 -0500 Resolve bug 434886 commit 29dfb2374ede46fe2087f2159c91721e035af16c Author: Lon Hohberger Date: Mon Feb 25 16:57:30 2008 -0500 Correct incorrect netmask handling in ip.sh ----------------------------------------------------------------------- Summary of changes: rgmanager/ChangeLog | 3 +++ rgmanager/src/resources/ip.sh | 4 ++++ 2 files changed, 7 insertions(+), 0 deletions(-) hooks/post-receive -- Cluster Project From ccaulfie@redhat.com Wed Feb 27 14:43:00 2008 From: ccaulfie@redhat.com (Christine Caulfield) Date: Wed, 27 Feb 2008 14:43:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-39-gc9ce321 Message-ID: <20080227144337.23137.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c9ce3211322e9d3dff1ef454483283042f529a2d The branch, master has been updated via c9ce3211322e9d3dff1ef454483283042f529a2d (commit) from 4d94315324f3a39f47eafd2d2f575360d624cfc1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c9ce3211322e9d3dff1ef454483283042f529a2d Author: Christine Caulfield Date: Wed Feb 27 11:16:34 2008 +0000 [CMAN] Don't ignore cman_tool version the processing of the 'cman_tool version' command updates the config_version variable immediately rather than waiting for the message to come back. Because of this, when the message /does/ come back it gets ignored because cman thinks it already has the latest config! The solution is, of course, not to update the config version until we receive the RECONFIGURE message. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/commands.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) hooks/post-receive -- Cluster Project From ccaulfie@redhat.com Wed Feb 27 15:27:00 2008 From: ccaulfie@redhat.com (Christine Caulfield) Date: Wed, 27 Feb 2008 15:27:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-42-g1eaf9d2 Message-ID: <20080227152737.16139.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1eaf9d20e2ab7f886009fef9756f23b95d346f8b The branch, master has been updated via 1eaf9d20e2ab7f886009fef9756f23b95d346f8b (commit) via 194e6fcbe2b8f08f6ed38cdf860880c61f8924a4 (commit) via fbb63a6a741671308c50b353d2839a16f7d45e14 (commit) from c9ce3211322e9d3dff1ef454483283042f529a2d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1eaf9d20e2ab7f886009fef9756f23b95d346f8b Merge: c9ce3211322e9d3dff1ef454483283042f529a2d 194e6fcbe2b8f08f6ed38cdf860880c61f8924a4 Author: Christine Caulfield Date: Wed Feb 27 15:26:18 2008 +0000 Merge branch 'cman3' commit 194e6fcbe2b8f08f6ed38cdf860880c61f8924a4 Author: Christine Caulfield Date: Wed Feb 27 15:18:34 2008 +0000 [CMAN] Remove deleted nodes from our list Detect nodes that have been deleted from CCS and remove them from our list if they are dead. Signed-off-by: Christine Caulfield commit fbb63a6a741671308c50b353d2839a16f7d45e14 Author: Christine Caulfield Date: Fri Feb 22 16:10:14 2008 +0000 cman3 commit Separates out ccs interaction from cman itself, so we can replace the configuration back-end easily. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/cman_tool/cman_tool.h | 4 +- cman/cman_tool/join.c | 10 +- cman/cman_tool/main.c | 18 +- cman/daemon/Makefile | 33 +- cman/daemon/ais.c | 331 +------------- cman/daemon/ais.h | 7 +- cman/daemon/barrier.c | 2 +- cman/daemon/barrier.h | 2 +- cman/daemon/cman-preconfig.c | 875 +++++++++++++++++++++++++++++++++++ cman/daemon/{cmanccs.h => cman.h} | 7 +- cman/daemon/cmanccs.c | 914 ------------------------------------- cman/daemon/cmanconfig.c | 304 ++++++++++++ cman/daemon/cmanconfig.h | 45 ++ cman/daemon/cnxman-private.h | 17 +- cman/daemon/cnxman-socket.h | 2 +- cman/daemon/commands.c | 104 ++++- cman/daemon/commands.h | 10 +- cman/daemon/config.c | 124 +++++- cman/daemon/daemon.c | 3 +- cman/daemon/daemon.h | 2 +- cman/daemon/logging.c | 2 +- cman/daemon/logging.h | 2 +- cman/daemon/nodelist.h | 69 +++ cman/man/cman_tool.8 | 34 ++ 24 files changed, 1614 insertions(+), 1307 deletions(-) create mode 100644 cman/daemon/cman-preconfig.c rename cman/daemon/{cmanccs.h => cman.h} (76%) delete mode 100644 cman/daemon/cmanccs.c create mode 100644 cman/daemon/cmanconfig.c create mode 100644 cman/daemon/cmanconfig.h create mode 100644 cman/daemon/nodelist.h mode change 100644 => 100755 scripts/define2var mode change 100644 => 100755 scripts/uninstall.pl hooks/post-receive -- Cluster Project From rmccabe@redhat.com Wed Feb 27 18:53:00 2008 From: rmccabe@redhat.com (Ryan McCabe) Date: Wed, 27 Feb 2008 18:53:00 -0000 Subject: [SCM] Cluster Project branch, RHEL5, updated. cmirror-kernel_0_1_7-5-g44e386b Message-ID: <20080227185329.6972.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=44e386b49148a7ab59a0bcc89fa9dab4c9585b37 The branch, RHEL5 has been updated via 44e386b49148a7ab59a0bcc89fa9dab4c9585b37 (commit) from 24f615062dc06758ed8598b198b47a3c84857f46 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 44e386b49148a7ab59a0bcc89fa9dab4c9585b37 Author: Ryan McCabe Date: Tue Feb 26 17:32:55 2008 -0500 Fix bz434790 ----------------------------------------------------------------------- Summary of changes: cman/init.d/cman | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) hooks/post-receive -- Cluster Project From rmccabe@redhat.com Wed Feb 27 19:01:00 2008 From: rmccabe@redhat.com (Ryan McCabe) Date: Wed, 27 Feb 2008 19:01:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-43-g231bb58 Message-ID: <20080227190155.14856.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=231bb585620e874186fbd8c8ab089cf6c7c5cb50 The branch, master has been updated via 231bb585620e874186fbd8c8ab089cf6c7c5cb50 (commit) from 1eaf9d20e2ab7f886009fef9756f23b95d346f8b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 231bb585620e874186fbd8c8ab089cf6c7c5cb50 Author: Ryan McCabe Date: Wed Feb 27 14:01:33 2008 -0500 Fix bz434790 ----------------------------------------------------------------------- Summary of changes: cman/init.d/cman.in | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Wed Feb 27 20:09:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 27 Feb 2008 20:09:00 -0000 Subject: conga/luci cluster/cluster_svc-macros site/luc ... Message-ID: <20080227200919.22291.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-02-27 20:09:19 Modified files: luci/cluster : cluster_svc-macros luci/site/luci/Extensions: LuciZopeAsync.py Log message: Fix bz434586 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 From rmccabe@sourceware.org Wed Feb 27 20:22:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 27 Feb 2008 20:22:00 -0000 Subject: conga ./conga.spec.in.in luci/cluster/cluster_ ... Message-ID: <20080227202249.27781.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-02-27 20:22:49 Modified files: . : conga.spec.in.in luci/cluster : cluster_svc-macros luci/site/luci/Extensions: LuciZopeAsync.py luci/site/luci/var: Data.fs make : version.in Log message: Fix 434586 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.69&r2=1.45.2.70 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.2&r2=1.3.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.5&r2=1.1.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.29&r2=1.15.2.30 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.34&r2=1.21.2.35 From fabbione@fabbione.net Thu Feb 28 05:01:00 2008 From: fabbione@fabbione.net (Fabio M. Di Nitto) Date: Thu, 28 Feb 2008 05:01:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-44-gbd44eb2 Message-ID: <20080228050149.25292.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=bd44eb2716f7e2e803b0d502f3ac65033cae6594 The branch, master has been updated via bd44eb2716f7e2e803b0d502f3ac65033cae6594 (commit) from 231bb585620e874186fbd8c8ab089cf6c7c5cb50 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit bd44eb2716f7e2e803b0d502f3ac65033cae6594 Author: Fabio M. Di Nitto Date: Wed Feb 27 22:02:15 2008 +0100 [CMAN] Move ccs config ais module into ccs/ccsais Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: ccs/Makefile | 2 +- ccs/{ccs_test => ccsais}/Makefile | 23 ++++++++++++----------- {cman/daemon => ccs/ccsais}/config.c | 0 cman/daemon/Makefile | 18 +++++------------- 4 files changed, 18 insertions(+), 25 deletions(-) copy ccs/{ccs_test => ccsais}/Makefile (70%) rename {cman/daemon => ccs/ccsais}/config.c (100%) hooks/post-receive -- Cluster Project From ccaulfie@redhat.com Thu Feb 28 10:24:00 2008 From: ccaulfie@redhat.com (Christine Caulfield) Date: Thu, 28 Feb 2008 10:24:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-45-g96014ee Message-ID: <20080228102410.28515.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=96014eeb3e4a63b7da529574b4752402611916c9 The branch, master has been updated via 96014eeb3e4a63b7da529574b4752402611916c9 (commit) from bd44eb2716f7e2e803b0d502f3ac65033cae6594 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 96014eeb3e4a63b7da529574b4752402611916c9 Author: Christine Caulfield Date: Thu Feb 28 10:22:03 2008 +0000 Fix multicast display in 'cman_tool status' Due to misreading of a man page, inet_pton was being called incorrectly and not returning a valid sockaddrin[6]. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/commands.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) hooks/post-receive -- Cluster Project From ccaulfie@redhat.com Thu Feb 28 11:39:00 2008 From: ccaulfie@redhat.com (Christine Caulfield) Date: Thu, 28 Feb 2008 11:39:00 -0000 Subject: [SCM] Cluster Project branch, master, updated. gfs-kernel_0_1_22-46-g8e504af Message-ID: <20080228113901.31061.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=8e504af1adbadd2cb8fe7cab191d79a8d835540c The branch, master has been updated via 8e504af1adbadd2cb8fe7cab191d79a8d835540c (commit) from 96014eeb3e4a63b7da529574b4752402611916c9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8e504af1adbadd2cb8fe7cab191d79a8d835540c Author: Christine Caulfield Date: Thu Feb 28 11:37:59 2008 +0000 Initialise votes to 0 The code in get_cman_join_info() expects the local variable 'votes' to be initialised to zero, but it wasn't being. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/cmanconfig.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) hooks/post-receive -- Cluster Project From teigland@sourceware.org Thu Feb 28 16:00:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 28 Feb 2008 16:00:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-5-gb95f5dd Message-ID: <20080228160017.1686.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b95f5dd435df474b5b5c55927ae86b52f21c0b28 The branch, RHEL4 has been updated via b95f5dd435df474b5b5c55927ae86b52f21c0b28 (commit) from 9e8a8cd7262ad0228c1d1311d2f6ea45f01034fa (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b95f5dd435df474b5b5c55927ae86b52f21c0b28 Author: David Teigland Date: Thu Feb 28 09:49:26 2008 -0600 lock_dlm: skip busy plocks in unlock bz 432707 Another problem with multiple threads manipulating the same plocks (also see bz 383391). In this case thread1 was waiting on a plock that was in the dlm, when thread2 came and tried to unlock it (due to the process exiting and closing all files). dlm returns EBUSY for the unlock, which causes lock_dlm to assert (another work around could be to just not assert on EBUSY.) The "busy" flag was recently added to plocks to work around another similar problem with multiple threads; use that to just skip the unlock on any plock that's busy. ----------------------------------------------------------------------- Summary of changes: gfs-kernel/src/dlm/plock.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/gfs-kernel/src/dlm/plock.c b/gfs-kernel/src/dlm/plock.c index 9137c8b..41dbf27 100644 --- a/gfs-kernel/src/dlm/plock.c +++ b/gfs-kernel/src/dlm/plock.c @@ -835,6 +835,8 @@ static int punlock_internal(struct dlm_resource *r, unsigned long owner, list_for_each_entry_safe(po, safe, &r->locks, list) { if (po->owner != owner) continue; + if (po->busy) + continue; if (!ranges_overlap(po->start, po->end, start, end)) continue; hooks/post-receive -- Cluster Project From jbrassow@sourceware.org Thu Feb 28 16:33:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 28 Feb 2008 16:33:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror-kernel_0_1_7-7-g15d12f2 Message-ID: <20080228163310.28815.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 The branch, RHEL5 has been updated via 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 (commit) via 89961b360cee9d425bbb11f17396539c04db25d3 (commit) from 44e386b49148a7ab59a0bcc89fa9dab4c9585b37 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 Author: Jonathan Brassow Date: Wed Feb 27 16:29:27 2008 -0600 clogd: bug fixes related to joining/leaving CPGs - Was purging all entries in the cluster queue when one log was leaving... this could mean removing requests associated with other logs - Writing of checkpoint data could be done at the wrong time if the node was still initializing and receiving messages - Could skip a response if the server changed while queueing requests during initialization - spell receive correctly commit 89961b360cee9d425bbb11f17396539c04db25d3 Author: Jonathan Brassow Date: Wed Feb 27 16:23:49 2008 -0600 dm-log-clustered: minor touch-ups - Fix spelling of 'reciev*' - struct vs dereff'ed ptr as sizeof arg ----------------------------------------------------------------------- Summary of changes: cmirror-kernel/src/dm-clog-tfr.c | 47 ++++++------ cmirror-kernel/src/dm-clog.c | 2 +- cmirror/src/cluster.c | 154 +++++++++++++++++++++++--------------- cmirror/src/local.c | 13 +++- cmirror/src/queues.c | 2 + 5 files changed, 133 insertions(+), 85 deletions(-) diff --git a/cmirror-kernel/src/dm-clog-tfr.c b/cmirror-kernel/src/dm-clog-tfr.c index e8fda30..6056c19 100644 --- a/cmirror-kernel/src/dm-clog-tfr.c +++ b/cmirror-kernel/src/dm-clog-tfr.c @@ -26,7 +26,7 @@ static struct clog_tfr *prealloced_clog_tfr = NULL; static struct cb_id cn_clog_id = { 0x4, 0x1 }; static DEFINE_MUTEX(_lock); -struct recieving_pkg { +struct receiving_pkg { struct list_head list; struct completion complete; @@ -38,8 +38,8 @@ struct recieving_pkg { char *data; }; -static spinlock_t recieving_list_lock = SPIN_LOCK_UNLOCKED; -static struct list_head recieving_list; +static spinlock_t receiving_list_lock = SPIN_LOCK_UNLOCKED; +static struct list_head receiving_list; static int dm_clog_sendto_server(struct clog_tfr *tfr) { @@ -48,14 +48,14 @@ static int dm_clog_sendto_server(struct clog_tfr *tfr) struct cn_msg *msg = prealloced_cn_msg; if (tfr != prealloced_clog_tfr) { - size = sizeof(*msg) + sizeof(struct clog_tfr) + tfr->data_size; + size = sizeof(struct cn_msg) + sizeof(struct clog_tfr) + tfr->data_size; msg = kmalloc(size, GFP_NOIO); if (!msg) return -ENOMEM; memcpy((msg + 1), tfr, sizeof(struct clog_tfr) + tfr->data_size); } - memset(msg, 0, sizeof(*msg)); + memset(msg, 0, sizeof(struct cn_msg)); msg->id.idx = cn_clog_id.idx; msg->id.val = cn_clog_id.val; @@ -64,6 +64,7 @@ static int dm_clog_sendto_server(struct clog_tfr *tfr) msg->len = sizeof(struct clog_tfr) + tfr->data_size; r = cn_netlink_send(msg, 0, gfp_any()); + if (msg != prealloced_cn_msg) kfree(msg); @@ -75,24 +76,24 @@ static void cn_clog_callback(void *data) int found = 0; struct cn_msg *msg = (struct cn_msg *)data; struct clog_tfr *tfr = (struct clog_tfr *)(msg + 1); - struct recieving_pkg *pkg; + struct receiving_pkg *pkg; - spin_lock(&recieving_list_lock); + spin_lock(&receiving_list_lock); if (msg->len < sizeof(*tfr)) { - DMERR("Incomplete message recieved from cluster log server"); - spin_unlock(&recieving_list_lock); + DMERR("Incomplete message received from cluster log server"); + spin_unlock(&receiving_list_lock); return; } - list_for_each_entry(pkg, &recieving_list, list) { + list_for_each_entry(pkg, &receiving_list, list) { /* - DMINFO("Msg from userspace recieved [%s].", RQ_TYPE(tfr->request_type)); - DMINFO(" Seq # recieved: %llu Seq # wanted: %llu", + DMINFO("Msg from userspace received [%s].", RQ_TYPE(tfr->request_type)); + DMINFO(" Seq # received: %llu Seq # wanted: %llu", pkg->seq, tfr->seq); */ if (tfr->seq == pkg->seq) { if (tfr->data_size > *(pkg->data_size)) { - DMERR("Insufficient space to recieve package [%s]", + DMERR("Insufficient space to receive package [%s]", RQ_TYPE(tfr->request_type)); *(pkg->data_size) = 0; pkg->error = -ENOSPC; @@ -107,7 +108,7 @@ static void cn_clog_callback(void *data) } } - spin_unlock(&recieving_list_lock); + spin_unlock(&receiving_list_lock); if (!found) DMERR("Stray request returned: %s, %llu", RQ_TYPE(tfr->request_type), tfr->seq); @@ -135,7 +136,7 @@ int dm_clog_consult_server(const char *uuid, int request_type, int dummy = 0; int overhead_size = sizeof(struct clog_tfr *) + sizeof(struct cn_msg); struct clog_tfr *tfr = prealloced_clog_tfr; - struct recieving_pkg pkg; + struct receiving_pkg pkg; if (data_size > (DM_CLOG_PREALLOCED_SIZE - overhead_size)) { DMINFO("Size of tfr exceeds preallocated size"); @@ -168,9 +169,9 @@ resend: pkg.seq = tfr->seq; pkg.data_size = rdata_size; pkg.data = rdata; - spin_lock(&recieving_list_lock); - list_add(&(pkg.list), &recieving_list); - spin_unlock(&recieving_list_lock); + spin_lock(&receiving_list_lock); + list_add(&(pkg.list), &receiving_list); + spin_unlock(&receiving_list_lock); pkg.start_time = jiffies; r = dm_clog_sendto_server(tfr); @@ -187,9 +188,9 @@ resend: if (!r) { DMWARN("Request timed out on %s:%llu - retrying", RQ_TYPE(request_type), pkg.seq); - spin_lock(&recieving_list_lock); + spin_lock(&receiving_list_lock); list_del_init(&(pkg.list)); - spin_unlock(&recieving_list_lock); + spin_unlock(&receiving_list_lock); goto resend; } else { @@ -206,9 +207,9 @@ resend: RQ_TYPE(request_type), r); out: - spin_lock(&recieving_list_lock); + spin_lock(&receiving_list_lock); list_del_init(&(pkg.list)); - spin_unlock(&recieving_list_lock); + spin_unlock(&receiving_list_lock); if (tfr != (struct clog_tfr *)prealloced_clog_tfr) kfree(tfr); @@ -221,7 +222,7 @@ int dm_clog_tfr_init(void) int r; void *prealloced; - INIT_LIST_HEAD(&recieving_list); + INIT_LIST_HEAD(&receiving_list); prealloced = kmalloc(DM_CLOG_PREALLOCED_SIZE, GFP_KERNEL); if (!prealloced) diff --git a/cmirror-kernel/src/dm-clog.c b/cmirror-kernel/src/dm-clog.c index 92e8f33..b61de62 100644 --- a/cmirror-kernel/src/dm-clog.c +++ b/cmirror-kernel/src/dm-clog.c @@ -431,7 +431,7 @@ static int cluster_flush(struct dirty_log *log) fail: /* * We can safely remove these entries, even if failure. - * Calling code will recieve an error and will know that + * Calling code will receive an error and will know that * the log facility has failed. */ list_for_each_entry_safe(fe, tmp_fe, &flush_list, list) { diff --git a/cmirror/src/cluster.c b/cmirror/src/cluster.c index 48d2f81..27077ae 100644 --- a/cmirror/src/cluster.c +++ b/cmirror/src/cluster.c @@ -20,14 +20,15 @@ #include "link_mon.h" #define DM_CLOG_RESPONSE 0x1000 /* in last byte of 32-bit value */ -#define DM_CLOG_CHECKPOINT_READY ((uint32_t)-1) +#define DM_CLOG_CHECKPOINT_READY 21 +#define DM_CLOG_CONFIG_CHANGE 22 static uint32_t my_cluster_id = 0xDEAD; static SaCkptHandleT ckpt_handle = 0; static SaCkptCallbacksT callbacks = { 0, 0 }; static SaVersionT version = { 'B', 1, 1 }; -#define DEBUGGING_HISTORY 20 +#define DEBUGGING_HISTORY 100 static char debugging[DEBUGGING_HISTORY][128]; static int idx = 0; static int memberz = 0; @@ -151,10 +152,10 @@ static int handle_cluster_request(struct clog_tfr *tfr, int server, int printz) * Errors from previous functions are in the tfr struct. */ if (printz) - LOG_PRINT("[%s] Sending response to %u on cluster: [%s/%llu]", - SHORT_UUID(tfr->uuid), tfr->originator, - RQ_TYPE(tfr->request_type & ~DM_CLOG_RESPONSE), - (unsigned long long)tfr->seq); + LOG_DBG("[%s] Sending response to %u on cluster: [%s/%llu]", + SHORT_UUID(tfr->uuid), tfr->originator, + RQ_TYPE(tfr->request_type & ~DM_CLOG_RESPONSE), + (unsigned long long)tfr->seq); r = cluster_send(tfr); if (r) LOG_ERROR("cluster_send failed: %s", strerror(-r)); @@ -171,10 +172,8 @@ static int handle_cluster_response(struct clog_tfr *tfr) /* * If I didn't send it, then I don't care about the response */ - if (tfr->originator != my_cluster_id) { - LOG_DBG("Response not for me. Disgarding."); - goto out; - } + if (tfr->originator != my_cluster_id) + return 0; tfr->request_type &= ~DM_CLOG_RESPONSE; orig_tfr = queue_remove_match(cluster_queue, clog_tfr_cmp, tfr); @@ -203,8 +202,7 @@ static int handle_cluster_response(struct clog_tfr *tfr) queue_add(t, cluster_queue); } - r = -EINVAL; - goto out; + return -EINVAL; } /* FIXME: Ensure memcpy cannot explode */ @@ -213,7 +211,6 @@ static int handle_cluster_response(struct clog_tfr *tfr) if (r) LOG_ERROR("Failed to send response to kernel"); -out: return r; } @@ -531,7 +528,7 @@ open_retry: saCkptCheckpointUnlink(ckpt_handle, &name); if (no_read) { - LOG_DBG("Checkpoint for this log already recieved"); + LOG_DBG("Checkpoint for this log already received"); goto no_read; } @@ -555,6 +552,8 @@ init_retry: rv = saCkptSectionIterationNext(itr, &desc); if (rv == SA_AIS_OK) len++; + else if ((rv == SA_AIS_ERR_NO_SECTIONS) && len) + break; else if (rv != SA_AIS_ERR_TRY_AGAIN) { LOG_ERROR("saCkptSectionIterationNext failure: %d", rv); break; @@ -700,28 +699,29 @@ static void cpg_message_callback(cpg_handle_t handle, struct cpg_name *gname, int i; int r = 0; int i_am_server; + int i_was_server; int response = 0; struct clog_tfr *tfr = msg; struct clog_tfr *startup_tfr = NULL; struct clog_cpg *match; if (msg_len != (sizeof(*tfr) + tfr->data_size)) - LOG_ERROR("Badly sized message recieved from cluster."); + LOG_ERROR("Badly sized message received from cluster."); if (tfr->request_type & DM_CLOG_RESPONSE) - LOG_DBG("Response to %u from %u recieved [%s/%llu]", + LOG_DBG("Response to %u from %u received [%s/%llu]", tfr->originator, nodeid, RQ_TYPE(tfr->request_type & ~DM_CLOG_RESPONSE), (unsigned long long)tfr->seq); else - LOG_DBG("Request from %u recieved [%s/%llu]", + LOG_DBG("Request from %u received [%s/%llu]", nodeid, RQ_TYPE(tfr->request_type), (unsigned long long)tfr->seq); if (my_cluster_id == 0xDEAD) { - LOG_DBG("[%s] Message from %u before init [%s/%llu]", - SHORT_UUID(tfr->uuid), nodeid, - RQ_TYPE(tfr->request_type), (unsigned long long) tfr->seq); + LOG_ERROR("[%s] Message from %u before init [%s/%llu]", + SHORT_UUID(tfr->uuid), nodeid, + RQ_TYPE(tfr->request_type), (unsigned long long) tfr->seq); return; } @@ -732,9 +732,9 @@ static void cpg_message_callback(cpg_handle_t handle, struct cpg_name *gname, } if (match->lowest_id == 0xDEAD) { - LOG_DBG("[%s] Message from %u before init* [%s/%llu]", - SHORT_UUID(tfr->uuid), nodeid, - RQ_TYPE(tfr->request_type), (unsigned long long) tfr->seq); + LOG_ERROR("[%s] Message from %u before init* [%s/%llu]", + SHORT_UUID(tfr->uuid), nodeid, + RQ_TYPE(tfr->request_type), (unsigned long long) tfr->seq); return; } @@ -748,22 +748,37 @@ static void cpg_message_callback(cpg_handle_t handle, struct cpg_name *gname, /* Could we retry? */ goto out; } else if (!match->valid) { - LOG_DBG("[%s] Checkpoint data recieved. Log is now valid", + LOG_DBG("[%s] Checkpoint data received. Log is now valid", SHORT_UUID(match->name.value)); match->valid = 1; + while ((startup_tfr = queue_remove(match->startup_queue))) { - LOG_DBG("Processing delayed request %d: %s", - match->startup_queue->count, - RQ_TYPE(startup_tfr->request_type)); - r = handle_cluster_request(startup_tfr, i_am_server, 1); - - if (r) { - LOG_ERROR("Error while processing delayed CPG message"); - /* - * FIXME: If we error out here, we will never get - * another opportunity to retry these requests - */ - goto out; + if (startup_tfr->request_type == DM_CLOG_CONFIG_CHANGE) { + struct checkpoint_data *new; + + new = prepare_checkpoint(match, startup_tfr->originator); + if (!new) { + /* FIXME: Need better error handling */ + LOG_ERROR("Failed to prepare checkpoint for %u!!!", + startup_tfr->originator); + goto out; + } + } else { + LOG_DBG("Processing delayed request %d: %s", + match->startup_queue->count, + RQ_TYPE(startup_tfr->request_type)); + i_was_server = (startup_tfr->error == my_cluster_id) ? 1 : 0; + startup_tfr->error = 0; + r = handle_cluster_request(startup_tfr, i_was_server, 1); + + if (r) { + LOG_ERROR("Error while processing delayed CPG message"); + /* + * FIXME: If we error out here, we will never get + * another opportunity to retry these requests + */ + goto out; + } } queue_add(startup_tfr, free_queue); } @@ -818,6 +833,7 @@ static void cpg_message_callback(cpg_handle_t handle, struct cpg_name *gname, } memcpy(startup_tfr, tfr, sizeof(*tfr) + tfr->data_size); + startup_tfr->error = match->lowest_id; queue_add_tail(startup_tfr, match->startup_queue); goto out; } @@ -846,7 +862,8 @@ out: continue; LOG_ERROR("%d:%d) %s", i, idx, debugging[idx]); } - } else if (!(tfr->request_type & DM_CLOG_RESPONSE)) { + } else if (!(tfr->request_type & DM_CLOG_RESPONSE) || + (tfr->originator == my_cluster_id)) { int len; idx++; idx = idx % DEBUGGING_HISTORY; @@ -915,8 +932,11 @@ static void cpg_config_callback(cpg_handle_t handle, struct cpg_name *gname, /* Am I leaving? */ for (i = 0; i < left_list_entries; i++) if (my_cluster_id == left_list[i].nodeid) { + struct list_head l, *p, *n; struct clog_tfr *tfr; + INIT_LIST_HEAD(&l); + LOG_DBG("Finalizing leave..."); list_del_init(&match->list); @@ -925,20 +945,18 @@ static void cpg_config_callback(cpg_handle_t handle, struct cpg_name *gname, cluster_postsuspend(match->name.value); - while (!queue_empty(cluster_queue)) { - tfr = queue_remove(cluster_queue); + queue_remove_all(&l, cluster_queue); + + list_for_each_safe(p, n, &l) { + list_del_init(p); + tfr = (struct clog_tfr *)p; - /* - * A postsuspend is place directly into - * the cluster_queue, without going out - * to the cluster. This means that only - * our postsuspend will ever exist in the - * cluster_queue. - */ if (tfr->request_type == DM_CLOG_POSTSUSPEND) kernel_send(tfr); - else + else if (!strcmp(match->name.value, tfr->uuid)) queue_add(tfr, free_queue); + else + queue_add(tfr, cluster_queue); } cpg_finalize(match->handle); @@ -1002,24 +1020,42 @@ static void cpg_config_callback(cpg_handle_t handle, struct cpg_name *gname, goto out; for (i = 0, j = match->checkpoints_needed; i < joined_list_entries; i++) { + struct clog_tfr *tfr; LOG_DBG("Joining node, %u needs checkpoint", joined_list[i].nodeid); - match->checkpoint_requesters[i + j] = joined_list[i].nodeid; + + if (queue_empty(match->startup_queue)) { + match->checkpoint_requesters[match->checkpoints_needed++] = joined_list[i].nodeid; + continue; + } + + tfr = queue_remove(free_queue); + if (!tfr) { + LOG_PRINT("cpg_config_callback: Preallocated transfer structs exhausted"); + tfr = malloc(DM_CLOG_TFR_SIZE); + if (!tfr) { + LOG_ERROR("cpg_config_callback: Unable to allocate transfer structs"); + LOG_ERROR("cpg_config_callback: Unable to perform checkpoint"); + return; + } + } + tfr->request_type = DM_CLOG_CONFIG_CHANGE; + tfr->originator = joined_list[i].nodeid; + queue_add_tail(tfr, match->startup_queue); } - match->checkpoints_needed += i; out: if (lowest != match->lowest_id) - LOG_PRINT("[%s] Server change %u -> %u (%u %s)", - SHORT_UUID(match->name.value), - lowest, match->lowest_id, - (joined_list_entries) ? joined_list[0].nodeid : left_list[0].nodeid, - (joined_list_entries && (member_list_entries == 1)) ? - "is first to join" : (joined_list_entries) ? "joined" : "left"); + LOG_DBG("[%s] Server change %u -> %u (%u %s)", + SHORT_UUID(match->name.value), + lowest, match->lowest_id, + (joined_list_entries) ? joined_list[0].nodeid : left_list[0].nodeid, + (joined_list_entries && (member_list_entries == 1)) ? + "is first to join" : (joined_list_entries) ? "joined" : "left"); else - LOG_PRINT("[%s] Server unchanged at %u (%u %s)", - SHORT_UUID(match->name.value), lowest, - (joined_list_entries) ? joined_list[0].nodeid : left_list[0].nodeid, - (joined_list_entries) ? "joined" : "left"); + LOG_DBG("[%s] Server unchanged at %u (%u %s)", + SHORT_UUID(match->name.value), lowest, + (joined_list_entries) ? joined_list[0].nodeid : left_list[0].nodeid, + (joined_list_entries) ? "joined" : "left"); if (joined_list_entries && (joined_list[0].nodeid == my_cluster_id)) doit = 25; diff --git a/cmirror/src/local.c b/cmirror/src/local.c index 3b5bac7..93a99a8 100644 --- a/cmirror/src/local.c +++ b/cmirror/src/local.c @@ -43,10 +43,13 @@ static int kernel_recv_helper(void *data, int in_size) case NLMSG_DONE: msg = (struct cn_msg *) NLMSG_DATA((struct nlmsghdr *)buf); if (msg->len > in_size) { - LOG_ERROR("Not enough space to recieve kernel request (%d/%d)", + LOG_ERROR("Not enough space to receive kernel request (%d/%d)", msg->len, in_size); return -EBADE; } + if (!msg->len) + LOG_ERROR("Zero length message received"); + memcpy(data, msg->data, msg->len); r = 0; break; @@ -155,10 +158,16 @@ static int do_local_work(void *data) if (r) return r; - LOG_DBG("Request from kernel recieved [%s/%s/%llu]", + if (!tfr) + return -EBADE; + + LOG_DBG("Request from kernel received [%s/%s/%llu]", RQ_TYPE(tfr->request_type), SHORT_UUID(tfr->uuid), (unsigned long long)tfr->seq); switch (tfr->request_type) { + case 0: + LOG_ERROR("Invalid request_type"); + break; case DM_CLOG_CTR: case DM_CLOG_DTR: case DM_CLOG_IN_SYNC: diff --git a/cmirror/src/queues.c b/cmirror/src/queues.c index bdf1eab..0bf1aee 100644 --- a/cmirror/src/queues.c +++ b/cmirror/src/queues.c @@ -1,5 +1,6 @@ #include #include + #include "queues.h" #include "common.h" #include "logging.h" @@ -217,6 +218,7 @@ struct clog_tfr *queue_remove_match(struct queue *q, if (f(tfr, tfr_cmp)) { list_del_init(p); q->count--; + return tfr; } } hooks/post-receive -- Cluster Project From cfeist@sourceware.org Thu Feb 28 17:19:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Thu, 28 Feb 2008 17:19:00 -0000 Subject: Cluster Project annotated tag, cmirror_1_1_15, created. cmirror_1_1_15 Message-ID: <20080228171900.8627.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=317eb506d156e886734916392935a35828df5c59 The annotated tag, cmirror_1_1_15 has been created at 317eb506d156e886734916392935a35828df5c59 (tag) tagging 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 (commit) replaces cmirror-kernel_0_1_7 tagged by Chris Feist on Thu Feb 28 11:12:00 2008 -0600 - Log ----------------------------------------------------------------- Tagging cmirror-1.1.15 David Teigland (2): groupd: update copyrights groupd: fix copyright comments Jonathan Brassow (3): - couple fixes for checking error codes from openais dm-log-clustered: minor touch-ups clogd: bug fixes related to joining/leaving CPGs Lon Hohberger (1): Correct incorrect netmask handling in ip.sh Ryan McCabe (1): Fix bz434790 ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Thu Feb 28 17:24:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Thu, 28 Feb 2008 17:24:00 -0000 Subject: Cluster Project tag, cmirror-kernel_0_1_8, created. cmirror_1_1_15 Message-ID: <20080228172433.10854.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 The tag, cmirror-kernel_0_1_8 has been created at 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 (commit) - Log ----------------------------------------------------------------- commit 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 Author: Jonathan Brassow Date: Wed Feb 27 16:29:27 2008 -0600 clogd: bug fixes related to joining/leaving CPGs - Was purging all entries in the cluster queue when one log was leaving... this could mean removing requests associated with other logs - Writing of checkpoint data could be done at the wrong time if the node was still initializing and receiving messages - Could skip a response if the server changed while queueing requests during initialization - spell receive correctly ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Fri Feb 29 17:32:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 29 Feb 2008 17:32:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-48-g01c2c77 Message-ID: <20080229173246.27623.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=01c2c77a02deb7ae01c37d7e68df6cde608ed2a9 The branch, master has been updated via 01c2c77a02deb7ae01c37d7e68df6cde608ed2a9 (commit) via e661e099a462b452c443eb83de4046c335b473be (commit) from 8e504af1adbadd2cb8fe7cab191d79a8d835540c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 01c2c77a02deb7ae01c37d7e68df6cde608ed2a9 Merge: e661e099a462b452c443eb83de4046c335b473be 8e504af1adbadd2cb8fe7cab191d79a8d835540c Author: Ryan McCabe Date: Fri Feb 29 12:32:39 2008 -0500 Merge branch 'master' of ssh://sources.redhat.com/git/cluster commit e661e099a462b452c443eb83de4046c335b473be Author: Ryan McCabe Date: Fri Feb 29 12:32:03 2008 -0500 Fix a few misspellings ----------------------------------------------------------------------- Summary of changes: fence/man/fenced.8 | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fence/man/fenced.8 b/fence/man/fenced.8 index 91eb510..991cd83 100644 --- a/fence/man/fenced.8 +++ b/fence/man/fenced.8 @@ -71,7 +71,7 @@ it) and subsequently enabled (by the cluster gaining quorum) any nodes listed in cluster.conf that are not presently members of the cman cluster are fenced. The status of these nodes is unknown, and to be on the side of safety they are assumed to be in need of fencing. This startup fencing -can be disabled, but it's only truely safe to do so if an operator is +can be disabled, but it's only truly safe to do so if an operator is present to verify that no cluster nodes are in need of fencing. This example illustrates why startup fencing is important. Take a three @@ -119,7 +119,7 @@ continue without fencing the node. Fencing daemon behavior can be controlled by setting options in the cluster.conf file under the section . See above for complete descriptions of these values. The delay values are in -seconds; -1 secs means an unlimitted delay. The values shown are the +seconds; -1 secs means an unlimited delay. The values shown are the defaults. Post-join delay is the number of seconds the daemon will wait before @@ -267,7 +267,7 @@ Find documentation for configuring specific devices at http://sources.redhat.com/cluster/ .SH OPTIONS -Command line options override corresonding values in cluster.conf. +Command line options override corresponding values in cluster.conf. .TP \fB-j\fP \fIsecs\fP Post-join fencing delay hooks/post-receive -- Cluster Project From lhh@sourceware.org Fri Feb 29 19:21:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 29 Feb 2008 19:21:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-1-gb5135c4 Message-ID: <20080229192121.32599.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b5135c44bda382d274e6013ef9cdb6cef969d9bb The branch, RHEL5 has been updated via b5135c44bda382d274e6013ef9cdb6cef969d9bb (commit) from 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b5135c44bda382d274e6013ef9cdb6cef969d9bb Author: Lon Hohberger Date: Fri Feb 29 14:15:39 2008 -0500 Fix #435189 - fenced override doesn't allow rgmanager to recover because it doesn't tell cman that fencing was completed. ----------------------------------------------------------------------- Summary of changes: fence/fenced/agent.c | 2 +- fence/fenced/fd.h | 1 + fence/fenced/recover.c | 1 + 3 files changed, 3 insertions(+), 1 deletions(-) diff --git a/fence/fenced/agent.c b/fence/fenced/agent.c index 65cb30c..0577e8f 100644 --- a/fence/fenced/agent.c +++ b/fence/fenced/agent.c @@ -279,7 +279,7 @@ static int use_device(int cd, char *victim, char *method, int d, return error; } -static void update_cman(char *victim, char *method) +void update_cman(char *victim, char *method) { cman_handle_t ch; struct cman_node node; diff --git a/fence/fenced/fd.h b/fence/fenced/fd.h index 988a412..0b78d19 100644 --- a/fence/fenced/fd.h +++ b/fence/fenced/fd.h @@ -192,5 +192,6 @@ int update_cluster_members(void); int is_member(char *name); int is_fenced(char *name); fd_node_t *get_new_node(fd_t *fd, int nodeid, char *in_name); +void update_cman(char *victim, char *agent); #endif /* __FD_DOT_H__ */ diff --git a/fence/fenced/recover.c b/fence/fenced/recover.c index 82a3c42..7f8aace 100644 --- a/fence/fenced/recover.c +++ b/fence/fenced/recover.c @@ -406,6 +406,7 @@ static void fence_victims(fd_t *fd, int start_type) syslog(LOG_WARNING, "fence \"%s\" overridden by " "administrator intervention", node->name); + update_cman(node->name, "override"); list_del(&node->list); free(node); } hooks/post-receive -- Cluster Project From lhh@sourceware.org Fri Feb 29 19:22:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Fri, 29 Feb 2008 19:22:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-50-ge8d8a46 Message-ID: <20080229192229.546.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=e8d8a463f83e1dd323e84b06d34ae7f80ca96b57 The branch, master has been updated via e8d8a463f83e1dd323e84b06d34ae7f80ca96b57 (commit) via 597d05bee50ec4100f5a656594140bae6a7b2464 (commit) from 01c2c77a02deb7ae01c37d7e68df6cde608ed2a9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e8d8a463f83e1dd323e84b06d34ae7f80ca96b57 Merge: 597d05bee50ec4100f5a656594140bae6a7b2464 01c2c77a02deb7ae01c37d7e68df6cde608ed2a9 Author: Lon Hohberger Date: Fri Feb 29 14:22:01 2008 -0500 Merge branch 'master' of ssh://lhh@sources.redhat.com/git/cluster commit 597d05bee50ec4100f5a656594140bae6a7b2464 Author: Lon Hohberger Date: Fri Feb 29 14:15:39 2008 -0500 Fix #435189 - fenced override doesn't allow rgmanager to recover because it doesn't tell cman that fencing was completed. ----------------------------------------------------------------------- Summary of changes: fence/fenced/agent.c | 2 +- fence/fenced/fd.h | 1 + fence/fenced/recover.c | 1 + 3 files changed, 3 insertions(+), 1 deletions(-) diff --git a/fence/fenced/agent.c b/fence/fenced/agent.c index cf32c97..1bb9f12 100644 --- a/fence/fenced/agent.c +++ b/fence/fenced/agent.c @@ -279,7 +279,7 @@ static int use_device(int cd, char *victim, char *method, int d, return error; } -static void update_cman(char *victim, char *method) +void update_cman(char *victim, char *method) { cman_handle_t ch; struct cman_node node; diff --git a/fence/fenced/fd.h b/fence/fenced/fd.h index c69e927..990190e 100644 --- a/fence/fenced/fd.h +++ b/fence/fenced/fd.h @@ -195,5 +195,6 @@ int update_cluster_members(void); int is_member(char *name); int is_fenced(char *name); fd_node_t *get_new_node(fd_t *fd, int nodeid, char *in_name); +void update_cman(char *victim, char *agent); #endif /* __FD_DOT_H__ */ diff --git a/fence/fenced/recover.c b/fence/fenced/recover.c index 08ef8ab..ffccd3c 100644 --- a/fence/fenced/recover.c +++ b/fence/fenced/recover.c @@ -407,6 +407,7 @@ static void fence_victims(fd_t *fd, int start_type) syslog(LOG_WARNING, "fence \"%s\" overridden by " "administrator intervention", node->name); + update_cman(node->name, "override"); list_del(&node->list); free(node); } hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Fri Feb 29 19:36:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 29 Feb 2008 19:36:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-52-g774ff2e Message-ID: <20080229193610.5735.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=774ff2ed50643bb83cbe593520673976cb0007cf The branch, master has been updated via 774ff2ed50643bb83cbe593520673976cb0007cf (commit) via 763475fb96b9674980daeb341dc610216fcfc9fe (commit) from e8d8a463f83e1dd323e84b06d34ae7f80ca96b57 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 774ff2ed50643bb83cbe593520673976cb0007cf Merge: 763475fb96b9674980daeb341dc610216fcfc9fe e8d8a463f83e1dd323e84b06d34ae7f80ca96b57 Author: Ryan McCabe Date: Fri Feb 29 14:35:51 2008 -0500 Merge branch 'master' of ssh://sources.redhat.com/git/cluster commit 763475fb96b9674980daeb341dc610216fcfc9fe Author: Ryan McCabe Date: Fri Feb 29 14:35:26 2008 -0500 Feeling pedantic. More spelling fixes. ----------------------------------------------------------------------- Summary of changes: ccs/man/ccs_tool.8 | 6 +++--- cman/man/cman.5 | 6 +++--- cman/man/cman_tool.8 | 8 ++++---- cman/man/qdisk.5 | 4 ++-- dlm/man/dlm_create_lockspace.3 | 2 +- dlm/man/libdlm.3 | 6 +++--- fence/man/fence_baytech.8 | 4 ++-- fence/man/fence_bladecenter.8 | 2 +- fence/man/fence_cpint.8 | 2 +- fence/man/fence_drac.8 | 2 +- fence/man/fence_egenera.8 | 2 +- fence/man/fence_ibmblade.8 | 2 +- fence/man/fence_vixel.8 | 2 +- fence/man/fence_xcat.8 | 2 +- gfs/man/gfs_mount.8 | 4 ++-- gfs2/man/gfs2_grow.8 | 2 +- gfs2/man/gfs2_jadd.8 | 2 +- gfs2/man/gfs2_mount.8 | 4 ++-- gnbd/man/fence_gnbd.8 | 8 ++++---- gnbd/man/gnbd_export.8 | 8 ++++---- gnbd/man/gnbd_import.8 | 4 ++-- gnbd/man/gnbd_serv.8 | 2 +- group/man/gfs_controld.8 | 2 +- 23 files changed, 43 insertions(+), 43 deletions(-) diff --git a/ccs/man/ccs_tool.8 b/ccs/man/ccs_tool.8 index e8869c0..6b09905 100644 --- a/ccs/man/ccs_tool.8 +++ b/ccs/man/ccs_tool.8 @@ -35,7 +35,7 @@ sub\-commands have their own options, see below for more detail This command is used to update the config file that ccsd is working with while the cman cluster is operational (i.e. online). Run this on a single machine to update cluster.conf on all current cluster members. This also -notfies cman of the new config version. +notifies cman of the new config version. .TP \fBupgrade\fP \fI\fP @@ -65,8 +65,8 @@ is using multicast as transport. Forbidden if not. be added to the file. Subsequent nodes will use either multicast or broadcast depending on the properties of the first node. .br -\-f Name of fence devcie to use for this node. The fence device -section must already have been addded to the file, probably using the addfence command. +\-f Name of fence device to use for this node. The fence device +section must already have been added to the file, probably using the addfence command. .br \-c Config file to use. Defaults to /etc/cluster/cluster.conf .br diff --git a/cman/man/cman.5 b/cman/man/cman.5 index 63c271d..890f531 100644 --- a/cman/man/cman.5 +++ b/cman/man/cman.5 @@ -43,7 +43,7 @@ This will cause cman to use ports 6809 and 6808 for cluster communications. The expected votes value is used by cman to determine quorum. The cluster is quorate if the sum of votes of existing members is over half of the expected votes value. By default, cman sets the expected votes value to be the sum -of votes of all nodes listed in cluster.conf. This can be overriden by setting +of votes of all nodes listed in cluster.conf. This can be overridden by setting an explicit expected_votes value as follows: @@ -94,12 +94,12 @@ the nodeid to one that is already used. .in -7 \fIMulti-home configuration\fR .in +7 -It is quite common to use multiple ethernet adaptors for cluster nodes, so +It is quite common to use multiple ethernet adapters for cluster nodes, so they will tolerate the failure of one link. A common way to do this is to use ethernet bonding. Alternatively you can get openais to run in redundant ring mode by specifying an 'altname' for the node. This is an alternative name by which the node is known, that resolves to another IP address used on the -other ethernet adaptor(s). You can optionally specify a different port and/or +other ethernet adapter(s). You can optionally specify a different port and/or multicast address for each altname in use. Up to 9 altnames (10 interfaces in total) can be used. diff --git a/cman/man/cman_tool.8 b/cman/man/cman_tool.8 index b9d2b64..2082379 100644 --- a/cman/man/cman_tool.8 +++ b/cman/man/cman_tool.8 @@ -238,14 +238,14 @@ Tells cman not to use CCS to get cluster information. If you use this option the apply several defaults to the cluster to get it going. The cluster name will be "RHCluster", node IDs will default to the IP address of the node and remote node names will show up as Node. All of these, apart from the node names can -be overridded on the cman_tool command-line if required. +be overridden on the cman_tool command-line if required. .br If you have to set up fence devices, services or anything else in cluster.conf then this option is probably not worthwhile to you - the extra readability of sensible node names and numbers will make it worth using CCS for the cluster too. But for a simple failover cluster this might save you some effort. .br -On each node using this configuration you will need to have the same authorisation key +On each node using this configuration you will need to have the same authorization key installed. To create this key run .br mkdir /etc/ais @@ -261,7 +261,7 @@ then copy that file to all nodes you want to join the cluster. Overrides the default configuration module. Usually cman uses CCSD to load its configuration. If you have your configuration database held elsewhere (eg LDAP) and have a configuration plugin for it, then you should specify the name of the module -(see the dcumentation for the module for the name of it - it's not necessarily the +(see the documentation for the module for the name of it - it's not necessarily the same as the filename) here. .br It is possible to chain configuration modules by separating them with colons. So to @@ -289,7 +289,7 @@ name as it appears in 'cman_tool nodes'. .TP .I -F Specify the format of the output. The format string may contain one or -more format options, each seperated by a comma. Valid format options +more format options, each separated by a comma. Valid format options include: id, name, type, and addr. .br .SH "DEBUG" OPTIONS diff --git a/cman/man/qdisk.5 b/cman/man/qdisk.5 index f596e39..569563c 100644 --- a/cman/man/qdisk.5 +++ b/cman/man/qdisk.5 @@ -60,7 +60,7 @@ if the timeouts are set high enough. .SH "1.3.3. Fencing is Required" In order to maintain data integrity under all failure scenarios, use of -this quorum daemon requires adequate fencing, preferrably power-based +this quorum daemon requires adequate fencing, preferably power-based fencing. Watchdog timers and software-based solutions to reboot the node internally, while possibly sufficient, are not considered 'fencing' for the purposes of using the quorum disk. @@ -115,7 +115,7 @@ timestamp), a node is declared offline. After a certain number of 'hits' The status block contains additional information, such as a bitmask of the nodes that node believes are online. Some of this information is -used by the master - while some is just for performace recording, and +used by the master - while some is just for performance recording, and may be used at a later time. The most important pieces of information a node writes to its status block are: diff --git a/dlm/man/dlm_create_lockspace.3 b/dlm/man/dlm_create_lockspace.3 index fb0a781..3879e85 100644 --- a/dlm/man/dlm_create_lockspace.3 +++ b/dlm/man/dlm_create_lockspace.3 @@ -35,7 +35,7 @@ EINVAL An invalid parameter was passed to the call ENOMEM A (kernel) memory allocation failed EEXIST The lockspace already exists EPERM Process does not have capability to create lockspaces -ENOSYS A fatal error occurred initialising the DLM +ENOSYS A fatal error occurred initializing the DLM Any error returned by the open() system call .fi .SS diff --git a/dlm/man/libdlm.3 b/dlm/man/libdlm.3 index 4bb5257..0782a2c 100644 --- a/dlm/man/libdlm.3 +++ b/dlm/man/libdlm.3 @@ -14,11 +14,11 @@ int dlm_dispatch(int fd); link with -ldlm .fi .SH DESCRIPTION -libdlm provides the programmatic userspace interface to the Distributed Lock manager. It provides all the calls you need to maniupulate locks & lockspaces +libdlm provides the programmatic userspace interface to the Distributed Lock manager. It provides all the calls you need to manipulate locks & lockspaces .br libdlm can be used in pthread or non-pthread applications. For pthread applications simply call the following function before doing any lock operations. If you're using pthreads, remember to define _REENTRANT at the top of the program or using -D_REENTRANT on the compile line. .br -pthreads is the normal way of using the DLM. This way you simply initialise the DLM's thread and all the AST routines will be delivered in that thread. You just call the dlm_lock() etc routines in the main line of your program. +pthreads is the normal way of using the DLM. This way you simply initialize the DLM's thread and all the AST routines will be delivered in that thread. You just call the dlm_lock() etc routines in the main line of your program. .br If you don't want to use pthreads or you want to handle the dlm callback ASTs yourself then you can get an FD handle to the DLM device and call .B dlm_dispatch() @@ -32,7 +32,7 @@ Creates a thread to receive all lock ASTs. The AST callback function for lock op .PP .SS int dlm_ls_pthread_init(dlm_lshandle_t lockspace) .br -As dlm_pthread_init but initialises a thread for the specified lockspace. +As dlm_pthread_init but initializes a thread for the specified lockspace. .PP .SS int dlm_pthread_cleanup() .br diff --git a/fence/man/fence_baytech.8 b/fence/man/fence_baytech.8 index 1cd77e1..4083c33 100644 --- a/fence/man/fence_baytech.8 +++ b/fence/man/fence_baytech.8 @@ -20,8 +20,8 @@ fence_baytech This fencing agent is written for the Baytech RPC27-20nc in combination with a Cyclades terminal server. The Cyclades TS exports the RPC's serial port via a Telnet interface. Other interfaces, such as SSH, are possible. -However, this script relys upon the assumption that Telnet is used. Future -features to this agent would allow the agent to work with a mulitude of +However, this script relies upon the assumption that Telnet is used. Future +features to this agent would allow the agent to work with a multitude of different communication protocols such as Telnet, SSH or Kermit. The other assumption that is made is that Outlet names do not end in space. diff --git a/fence/man/fence_bladecenter.8 b/fence/man/fence_bladecenter.8 index a2f7143..3efe4dc 100644 --- a/fence/man/fence_bladecenter.8 +++ b/fence/man/fence_bladecenter.8 @@ -18,7 +18,7 @@ fence_bladecenter .SH DESCRIPTION fence_bladecenter is an I/O Fencing agent which can be used with IBM Bladecenters with recent enough firmware that includes telnet support. It logs into a Brocade -chasis via telnet and uses the command line interface to power on and off blades. +chassis via telnet and uses the command line interface to power on and off blades. fence_bladecenter accepts options on the command line or from stdin. .SH OPTIONS diff --git a/fence/man/fence_cpint.8 b/fence/man/fence_cpint.8 index e3c47f8..19ffa96 100644 --- a/fence/man/fence_cpint.8 +++ b/fence/man/fence_cpint.8 @@ -25,7 +25,7 @@ and hcp in your PATH. \fBNOTE:\fP for fence_cpint to send a command to another virtual machine, the machine executing it must either be a privilege class C user or it must be the secondary user of the virtual machine to be fenced. This means that unless -all of you gulm server nodes are privilege class C, fence_cpint can only be +all of you GULM server nodes are privilege class C, fence_cpint can only be used with SLM. fence_cpint accepts options on the command line as well as from stdin. diff --git a/fence/man/fence_drac.8 b/fence/man/fence_drac.8 index ff3707b..a3909bf 100644 --- a/fence/man/fence_drac.8 +++ b/fence/man/fence_drac.8 @@ -16,7 +16,7 @@ fence_drac .SH DESCRIPTION fence_drac is an I/O Fencing agent which can be used with the Dell Remote -Access Card (DRAC). This card provides remote access to controling +Access Card (DRAC). This card provides remote access to controlling power to a server. It logs into the DRAC through the telnet interface of the card. By default, the telnet interface is not enabled. To enable the interface, you will need to use the racadm command in the racser-devel rpm diff --git a/fence/man/fence_egenera.8 b/fence/man/fence_egenera.8 index 46f5a06..e3128bb 100644 --- a/fence/man/fence_egenera.8 +++ b/fence/man/fence_egenera.8 @@ -47,7 +47,7 @@ The action required. reboot (default), off, on or status. the pserver to operate on .TP \fB-q\fP -quite mode. supress output. +quite mode. suppress output. .TP \fB-V\fP Print out a version message, then exit. diff --git a/fence/man/fence_ibmblade.8 b/fence/man/fence_ibmblade.8 index a3245be..a77f3cf 100644 --- a/fence/man/fence_ibmblade.8 +++ b/fence/man/fence_ibmblade.8 @@ -17,7 +17,7 @@ fence_ibmblade .SH DESCRIPTION fence_ibmblade is an I/O Fencing agent which can be used with IBM BladeCenter -chassis. It issues SNMP Set request to BladeCenter chassins, rebooting, powering +chassis. It issues SNMP Set request to BladeCenter chassis, rebooting, powering up or down the specified Blade Server. fence_ibmblade accepts options on the command line as well as from stdin. diff --git a/fence/man/fence_vixel.8 b/fence/man/fence_vixel.8 index c105dde..e0f6c4d 100644 --- a/fence/man/fence_vixel.8 +++ b/fence/man/fence_vixel.8 @@ -73,5 +73,5 @@ Full path to an executable to generate the password for login. \fIport = < param >\fR The port number to remove zoning from on the switch. -.SH BSEE ALSO +.SH SEE ALSO fence(8), fence_node(8) diff --git a/fence/man/fence_xcat.8 b/fence/man/fence_xcat.8 index 3aaa620..c2a59fd 100644 --- a/fence/man/fence_xcat.8 +++ b/fence/man/fence_xcat.8 @@ -14,7 +14,7 @@ fence_xcat .SH DESCRIPTION fence_xcat is a wrapper to the rpower(1) command that is distributed with the xCAT project available at http://www.xcat.org. Use of -fence_xcat requires that xcat has already been properlly configfured +fence_xcat requires that xcat has already been properly configured for your environment. Refer to xCAT(1) for more information on configuring xCAT. diff --git a/gfs/man/gfs_mount.8 b/gfs/man/gfs_mount.8 index 13418fd..53ebbdc 100644 --- a/gfs/man/gfs_mount.8 +++ b/gfs/man/gfs_mount.8 @@ -133,7 +133,7 @@ a cluster filesystem can cause the filesystem to stall on all machines in the cluster. (Panics don't have this "feature".) By turning on "panic_on_oops", GFS tries to make sure the cluster remains in operation even if one machine has a problem. There are cases, -however, where this behavior is not desireable -- debugging being +however, where this behavior is not desirable -- debugging being the main one. The \fBoopses_ok\fP option causes GFS to leave the "panic_on_oops" variable alone so oopses can happen. Use this option with care. @@ -157,7 +157,7 @@ message that you need to upgrade. Try mounting again, using the filesystem. .TP \fBnum_glockd\fP -Tunes GFS to alleviate memory pressure when rapidly aquiring many locks (e.g. +Tunes GFS to alleviate memory pressure when rapidly acquiring many locks (e.g. several processes scanning through huge directory trees). GFS' glockd kernel daemon cleans up memory for no-longer-needed glocks. Multiple instances of the daemon clean up faster than a single instance. The default value is diff --git a/gfs2/man/gfs2_grow.8 b/gfs2/man/gfs2_grow.8 index a16d024..85e53c1 100644 --- a/gfs2/man/gfs2_grow.8 +++ b/gfs2/man/gfs2_grow.8 @@ -39,7 +39,7 @@ of the current state of a mounted GFS2 filesystem. .SH OPTIONS .TP \fB-D\fP -Print out debbugging information about the filesystem layout. +Print out debugging information about the filesystem layout. .TP \fB-h\fP Prints out a short usage message and exits. diff --git a/gfs2/man/gfs2_jadd.8 b/gfs2/man/gfs2_jadd.8 index ef36baa..b57ca12 100644 --- a/gfs2/man/gfs2_jadd.8 +++ b/gfs2/man/gfs2_jadd.8 @@ -36,7 +36,7 @@ process should leave your filesystem in its original state. Initial size of each journal's quota change file .TP \fB-D\fP -Print out debbugging information about the filesystem layout. +Print out debugging information about the filesystem layout. .TP \fB-h\fP Prints out a short usage message and exits. diff --git a/gfs2/man/gfs2_mount.8 b/gfs2/man/gfs2_mount.8 index 20e1eb0..0bf8f42 100644 --- a/gfs2/man/gfs2_mount.8 +++ b/gfs2/man/gfs2_mount.8 @@ -151,7 +151,7 @@ message that you need to upgrade. Try mounting again, using the filesystem. .TP \fBnum_glockd=\fP\fINumber\fR -Tunes GFS2 to alleviate memory pressure when rapidly aquiring many locks (e.g. +Tunes GFS2 to alleviate memory pressure when rapidly acquiring many locks (e.g. several processes scanning through huge directory trees). GFS2' glockd kernel daemon cleans up memory for no-longer-needed glocks. Multiple instances of the daemon clean up faster than a single instance. The default value is @@ -182,7 +182,7 @@ ignored. The default value is "off". .TP \fBdata=\fP\fI[ordered/writeback]\fR When data=ordered is set, the user data modified by a transaction is -flushed to the disk before the transaction is commited to disk. This +flushed to the disk before the transaction is committed to disk. This should prevent the user from seeing uninitialized blocks in a file after a crash. Data=writeback mode writes the user data to the disk at any time after it's dirtied. This doesn't provide the same diff --git a/gnbd/man/fence_gnbd.8 b/gnbd/man/fence_gnbd.8 index c338da3..9bf185a 100644 --- a/gnbd/man/fence_gnbd.8 +++ b/gnbd/man/fence_gnbd.8 @@ -63,13 +63,13 @@ deprecated. Please use \fInodename\fP instead. The cluster name of the node to be fenced (required) .TP \fIservers = < hostname [ hostname ... ] >\fP -A whitespace seperated list of the servers to fence the client from, in +A whitespace separated list of the servers to fence the client from, in either IP address or hostname form. .TP \fIoption = multipath\fP Select multipath style fencing. \fBWARNING:\fP When multipath style fencing is used, if the kgnbd_portd process of a gnbd server node cannot be contacted, it -is fenced as well, using its appropriate fencig method. This means that when +is fenced as well, using its appropriate fencing method. This means that when a client is fenced, any node listed as its server that does not have the gnbd_serv module loaded (which starts kgnbd_portd) will also be fenced. .TP @@ -79,8 +79,8 @@ before the server is fenced. This parameter is only valid when used with multipath style fencing (see above). The default is 3. .TP \fIwait_time = < param >\fP -length of time, in seconds, to wait between retrys. This parameter -is only valid when used with multipath sytle fencing (see above). The default +length of time, in seconds, to wait between retries. This parameter +is only valid when used with multipath style fencing (see above). The default is 2. .SH SEE ALSO diff --git a/gnbd/man/gnbd_export.8 b/gnbd/man/gnbd_export.8 index 3eb2679..2a3a686 100644 --- a/gnbd/man/gnbd_export.8 +++ b/gnbd/man/gnbd_export.8 @@ -37,7 +37,7 @@ connects to the cluster manager via the \fBmagma\fP interface. \fBWARNING:\fP You must NOT specify this option if you wish to use gnbd with dm multipathing, or run GFS on gnbd server machines. To set up dm multipathing over gnbd, all -gnbds involved must run with caching disabled. Data corruption will occur +GNBDs involved must run with caching disabled. Data corruption will occur if the GNBD devices are run with caching. Any device that is exported without the \fB-c\fP option can also be used locally, but you must access the device directly. You MUST NOT use gnbd_import to import devices exported from the @@ -105,7 +105,7 @@ Remove named GNBD(s). \fB-u\fP \fIuid\fR Manually set UID. -Manunally set the Universal Identifier for an exported device. This option is +Manually set the Universal Identifier for an exported device. This option is used with \fB-e\fP. The UID is used by device-mapper-multipath to determine which devices belong in a multipath map. A device must have a UID to be multipathed. However, for most SCSI devices the default Get UID command @@ -126,9 +126,9 @@ Get UID Command. This is a command the gnbd_export will run to get a Universal Identifier for the exported device. The UID is necessary to use device-mapper-multipath with GNBD (see \fB-u\fP for more information). The command must use the full path -of any executeable that you wish to run. A command can contain the %M, %m or +of any executable that you wish to run. A command can contain the %M, %m or %n escape sequences. %M will be expanded to the major number of the exported -device, %m will be expaned to the minor number of the exported device, and +device, %m will be expanded to the minor number of the exported device, and %n will be expanded to the sysfs name for the device. If no command is given, gnbd will use the default command \fI"/usr/sbin/gnbd_get_uid"\fR. This command will work for most scsi devices. diff --git a/gnbd/man/gnbd_import.8 b/gnbd/man/gnbd_import.8 index 029b135..5d59e07 100644 --- a/gnbd/man/gnbd_import.8 +++ b/gnbd/man/gnbd_import.8 @@ -29,7 +29,7 @@ restart it. Check fenced. List all the IP addresses currently IO fenced from the specified \fIserver\fR. -If the sepecified server does not have any IP addresses fenced, nothing will +If the specified server does not have any IP addresses fenced, nothing will be returned. If the server machine is not running gnbd_serv, an error will be returned. .TP @@ -146,7 +146,7 @@ Unfence. Unfence the specified host. \fBWARNING\fP: Unfencing a client at the incorrect time can result in data corruption. In normal operation, it should never be -necessary to run this comman. See the \fB-t\fP option. +necessary to run this command. See the \fB-t\fP option. .TP \fB-U\fP \fIGNBD\fR Get UID. diff --git a/gnbd/man/gnbd_serv.8 b/gnbd/man/gnbd_serv.8 index 9551093..fa5e686 100644 --- a/gnbd/man/gnbd_serv.8 +++ b/gnbd/man/gnbd_serv.8 @@ -11,7 +11,7 @@ gnbd_serv - gnbd server daemon .SH DESCRIPTION gnbd_serv manages gnbd devices exported by gnbd_export and connections from -gnbd_import. It servs up data from the local disks to the connected gnbd +gnbd_import. It serves up data from the local disks to the connected gnbd clients. .SH OPTIONS diff --git a/group/man/gfs_controld.8 b/group/man/gfs_controld.8 index 60b00d3..1c699b8 100644 --- a/group/man/gfs_controld.8 +++ b/group/man/gfs_controld.8 @@ -60,7 +60,7 @@ cannot interoperate with older versions that did not support this option. Three options can be used to tune the behavior of the plock_ownership optimization. All three relate to the caching of lock ownership state. -Specifically, they define how agressively cached ownership state is dropped. +Specifically, they define how aggressively cached ownership state is dropped. More caching of ownership state can result in better performance, at the expense of more memory usage. hooks/post-receive -- Cluster Project From cfeist@sourceware.org Mon Mar 3 22:56:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Mon, 03 Mar 2008 22:56:00 -0000 Subject: Cluster Project tag, ccs_1_0_12, created. gfs-kernel_2_6_9_76-5-gb95f5dd Message-ID: <20080303225614.29333.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b95f5dd435df474b5b5c55927ae86b52f21c0b28 The tag, ccs_1_0_12 has been created at b95f5dd435df474b5b5c55927ae86b52f21c0b28 (commit) - Log ----------------------------------------------------------------- commit b95f5dd435df474b5b5c55927ae86b52f21c0b28 Author: David Teigland Date: Thu Feb 28 09:49:26 2008 -0600 lock_dlm: skip busy plocks in unlock bz 432707 Another problem with multiple threads manipulating the same plocks (also see bz 383391). In this case thread1 was waiting on a plock that was in the dlm, when thread2 came and tried to unlock it (due to the process exiting and closing all files). dlm returns EBUSY for the unlock, which causes lock_dlm to assert (another work around could be to just not assert on EBUSY.) The "busy" flag was recently added to plocks to work around another similar problem with multiple threads; use that to just skip the unlock on any plock that's busy. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From fabbione@sourceware.org Tue Mar 4 07:46:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 04 Mar 2008 07:46:00 -0000 Subject: Cluster Project branch, STABLE2, updated. gfs-kernel_0_1_22-43-g9e71edd Message-ID: <20080304074617.12498.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=9e71edd75f382449fabd241962b07e3536725427 The branch, STABLE2 has been updated via 9e71edd75f382449fabd241962b07e3536725427 (commit) via afa3d5e83f7ff46af25658171ddc1ce6668618f1 (commit) via 7e416ce22ae4a11fbc990176eb3676e341d60c26 (commit) via bf98353e86c4ac1f93f9a68dce48de55908314a4 (commit) via 1655b3aeb0d736c83cd461f84500bf630568302e (commit) via 47efdb90db04614dd1dd4d773adc83ec9db6eeb2 (commit) via e39f1b78c21118e6be07c1b59ee5657ba80df3a1 (commit) from d6b422f475c286cd884c74538f500b31e17b50ec (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9e71edd75f382449fabd241962b07e3536725427 Author: Ryan McCabe Date: Fri Feb 29 14:35:26 2008 -0500 Feeling pedantic. More spelling fixes. commit afa3d5e83f7ff46af25658171ddc1ce6668618f1 Author: Lon Hohberger Date: Fri Feb 29 14:15:39 2008 -0500 Fix #435189 - fenced override doesn't allow rgmanager to recover because it doesn't tell cman that fencing was completed. commit 7e416ce22ae4a11fbc990176eb3676e341d60c26 Author: Ryan McCabe Date: Fri Feb 29 12:32:03 2008 -0500 Fix a few misspellings commit bf98353e86c4ac1f93f9a68dce48de55908314a4 Author: Ryan McCabe Date: Wed Feb 27 14:01:33 2008 -0500 Fix bz434790 commit 1655b3aeb0d736c83cd461f84500bf630568302e Author: Christine Caulfield Date: Wed Feb 27 11:16:34 2008 +0000 [CMAN] Don't ignore cman_tool version the processing of the 'cman_tool version' command updates the config_version variable immediately rather than waiting for the message to come back. Because of this, when the message /does/ come back it gets ignored because cman thinks it already has the latest config! The solution is, of course, not to update the config version until we receive the RECONFIGURE message. Signed-off-by: Christine Caulfield commit 47efdb90db04614dd1dd4d773adc83ec9db6eeb2 Author: Lon Hohberger Date: Tue Feb 26 09:41:19 2008 -0500 * Make fence_ack_manual.sh accept -n * Ensure fence_rps10 defaults to reboot * Make clustat not display estranged nodes which are now offline commit e39f1b78c21118e6be07c1b59ee5657ba80df3a1 Author: Lon Hohberger Date: Mon Feb 25 16:57:30 2008 -0500 Correct incorrect netmask handling in ip.sh ----------------------------------------------------------------------- Summary of changes: ccs/man/ccs_tool.8 | 6 +++--- cman/daemon/commands.c | 3 +-- cman/init.d/cman.in | 5 +++-- cman/man/cman.5 | 6 +++--- cman/man/cman_tool.8 | 6 +++--- cman/man/qdisk.5 | 4 ++-- dlm/man/dlm_create_lockspace.3 | 2 +- dlm/man/libdlm.3 | 6 +++--- fence/agents/manual/fence_ack_manual.sh | 17 ++++++++++++++--- fence/agents/rps10/rps10.c | 9 ++++++--- fence/fenced/agent.c | 2 +- fence/fenced/fd.h | 1 + fence/fenced/recover.c | 1 + fence/man/fence_baytech.8 | 4 ++-- fence/man/fence_bladecenter.8 | 2 +- fence/man/fence_cpint.8 | 2 +- fence/man/fence_drac.8 | 2 +- fence/man/fence_egenera.8 | 2 +- fence/man/fence_ibmblade.8 | 2 +- fence/man/fence_vixel.8 | 2 +- fence/man/fence_xcat.8 | 2 +- fence/man/fenced.8 | 6 +++--- gfs/man/gfs_mount.8 | 4 ++-- gfs2/man/gfs2_grow.8 | 2 +- gfs2/man/gfs2_jadd.8 | 2 +- gfs2/man/gfs2_mount.8 | 4 ++-- gnbd/man/fence_gnbd.8 | 8 ++++---- gnbd/man/gnbd_export.8 | 8 ++++---- gnbd/man/gnbd_import.8 | 4 ++-- gnbd/man/gnbd_serv.8 | 2 +- group/man/gfs_controld.8 | 2 +- rgmanager/ChangeLog | 4 ++++ rgmanager/src/resources/ip.sh | 4 ++++ rgmanager/src/utils/clustat.c | 8 ++++++++ 34 files changed, 88 insertions(+), 56 deletions(-) diff --git a/ccs/man/ccs_tool.8 b/ccs/man/ccs_tool.8 index e8869c0..6b09905 100644 --- a/ccs/man/ccs_tool.8 +++ b/ccs/man/ccs_tool.8 @@ -35,7 +35,7 @@ sub\-commands have their own options, see below for more detail This command is used to update the config file that ccsd is working with while the cman cluster is operational (i.e. online). Run this on a single machine to update cluster.conf on all current cluster members. This also -notfies cman of the new config version. +notifies cman of the new config version. .TP \fBupgrade\fP \fI\fP @@ -65,8 +65,8 @@ is using multicast as transport. Forbidden if not. be added to the file. Subsequent nodes will use either multicast or broadcast depending on the properties of the first node. .br -\-f Name of fence devcie to use for this node. The fence device -section must already have been addded to the file, probably using the addfence command. +\-f Name of fence device to use for this node. The fence device +section must already have been added to the file, probably using the addfence command. .br \-c Config file to use. Defaults to /etc/cluster/cluster.conf .br diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index ec9fe1e..e090674 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -439,9 +439,8 @@ static int do_cmd_set_version(char *cmdbuf, int *retlen) if (config_version == version->config) return 0; - config_version = version->config; /* We will re-read CCS when we get our own message back */ - send_reconfigure(us->node_id, RECONFIG_PARAM_CONFIG_VERSION, config_version); + send_reconfigure(us->node_id, RECONFIG_PARAM_CONFIG_VERSION, version->config); return 0; } diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in index 0fcdd75..e357934 100644 --- a/cman/init.d/cman.in +++ b/cman/init.d/cman.in @@ -165,7 +165,7 @@ xend_bridged_net_enabled() { return 1 fi - egrep "^[[:blank:]]*\([[:blank:]]*network-script[[:blank:]]+(')*[[:blank:]]*network-bridge([[:blank:]]*\)|[[:blank:]]+)" /etc/xen/xend-config.sxp >&/dev/null + egrep "^[[:blank:]]*\([[:blank:]]*network-script[[:blank:]]+(')?[[:blank:]]*network-bridge([[:blank:]]*\)|[[:blank:]]+)" /etc/xen/xend-config.sxp >&/dev/null if [ $? -ne 0 ]; then # xend isn't configured to use bridged networking. return 1 @@ -185,7 +185,8 @@ xend_bridged_net_start() { /sbin/modprobe netbk >& /dev/null /sbin/modprobe netloop >& /dev/null - errmsg=$(/etc/xen/scripts/network-bridge start 2>&1) || return 1 + bridge_parms=`egrep -m 1 "^[[:blank:]]*\([[:blank:]]*network-script[[:blank:]]+(')?[[:blank:]]*network-bridge([[:blank:]]*\)|[[:blank:]]+)" /etc/xen/xend-config.sxp| sed -r "s/^[[:blank:]]*\([[:blank:]]*network-script[[:blank:]]+'?[[:blank:]]*network-bridge[[:blank:]]*//; s/'?[[:blank:]]*\).*//"` + errmsg=$(/etc/xen/scripts/network-bridge start $bridge_parms 2>&1) || return 1 return 0 } diff --git a/cman/man/cman.5 b/cman/man/cman.5 index 63c271d..890f531 100644 --- a/cman/man/cman.5 +++ b/cman/man/cman.5 @@ -43,7 +43,7 @@ This will cause cman to use ports 6809 and 6808 for cluster communications. The expected votes value is used by cman to determine quorum. The cluster is quorate if the sum of votes of existing members is over half of the expected votes value. By default, cman sets the expected votes value to be the sum -of votes of all nodes listed in cluster.conf. This can be overriden by setting +of votes of all nodes listed in cluster.conf. This can be overridden by setting an explicit expected_votes value as follows: @@ -94,12 +94,12 @@ the nodeid to one that is already used. .in -7 \fIMulti-home configuration\fR .in +7 -It is quite common to use multiple ethernet adaptors for cluster nodes, so +It is quite common to use multiple ethernet adapters for cluster nodes, so they will tolerate the failure of one link. A common way to do this is to use ethernet bonding. Alternatively you can get openais to run in redundant ring mode by specifying an 'altname' for the node. This is an alternative name by which the node is known, that resolves to another IP address used on the -other ethernet adaptor(s). You can optionally specify a different port and/or +other ethernet adapter(s). You can optionally specify a different port and/or multicast address for each altname in use. Up to 9 altnames (10 interfaces in total) can be used. diff --git a/cman/man/cman_tool.8 b/cman/man/cman_tool.8 index 7ea577b..726ca0e 100644 --- a/cman/man/cman_tool.8 +++ b/cman/man/cman_tool.8 @@ -238,14 +238,14 @@ Tells cman not to use CCS to get cluster information. If you use this option the apply several defaults to the cluster to get it going. The cluster name will be "RHCluster", node IDs will default to the IP address of the node and remote node names will show up as Node. All of these, apart from the node names can -be overridded on the cman_tool command-line if required. +be overridden on the cman_tool command-line if required. .br If you have to set up fence devices, services or anything else in cluster.conf then this option is probably not worthwhile to you - the extra readability of sensible node names and numbers will make it worth using CCS for the cluster too. But for a simple failover cluster this might save you some effort. .br -On each node using this configuration you will need to have the same authorisation key +On each node using this configuration you will need to have the same authorization key installed. To create this key run .br mkdir /etc/ais @@ -274,7 +274,7 @@ name as it appears in 'cman_tool nodes'. .TP .I -F Specify the format of the output. The format string may contain one or -more format options, each seperated by a comma. Valid format options +more format options, each separated by a comma. Valid format options include: id, name, type, and addr. .br .SH "DEBUG" OPTIONS diff --git a/cman/man/qdisk.5 b/cman/man/qdisk.5 index f596e39..569563c 100644 --- a/cman/man/qdisk.5 +++ b/cman/man/qdisk.5 @@ -60,7 +60,7 @@ if the timeouts are set high enough. .SH "1.3.3. Fencing is Required" In order to maintain data integrity under all failure scenarios, use of -this quorum daemon requires adequate fencing, preferrably power-based +this quorum daemon requires adequate fencing, preferably power-based fencing. Watchdog timers and software-based solutions to reboot the node internally, while possibly sufficient, are not considered 'fencing' for the purposes of using the quorum disk. @@ -115,7 +115,7 @@ timestamp), a node is declared offline. After a certain number of 'hits' The status block contains additional information, such as a bitmask of the nodes that node believes are online. Some of this information is -used by the master - while some is just for performace recording, and +used by the master - while some is just for performance recording, and may be used at a later time. The most important pieces of information a node writes to its status block are: diff --git a/dlm/man/dlm_create_lockspace.3 b/dlm/man/dlm_create_lockspace.3 index fb0a781..3879e85 100644 --- a/dlm/man/dlm_create_lockspace.3 +++ b/dlm/man/dlm_create_lockspace.3 @@ -35,7 +35,7 @@ EINVAL An invalid parameter was passed to the call ENOMEM A (kernel) memory allocation failed EEXIST The lockspace already exists EPERM Process does not have capability to create lockspaces -ENOSYS A fatal error occurred initialising the DLM +ENOSYS A fatal error occurred initializing the DLM Any error returned by the open() system call .fi .SS diff --git a/dlm/man/libdlm.3 b/dlm/man/libdlm.3 index 4bb5257..0782a2c 100644 --- a/dlm/man/libdlm.3 +++ b/dlm/man/libdlm.3 @@ -14,11 +14,11 @@ int dlm_dispatch(int fd); link with -ldlm .fi .SH DESCRIPTION -libdlm provides the programmatic userspace interface to the Distributed Lock manager. It provides all the calls you need to maniupulate locks & lockspaces +libdlm provides the programmatic userspace interface to the Distributed Lock manager. It provides all the calls you need to manipulate locks & lockspaces .br libdlm can be used in pthread or non-pthread applications. For pthread applications simply call the following function before doing any lock operations. If you're using pthreads, remember to define _REENTRANT at the top of the program or using -D_REENTRANT on the compile line. .br -pthreads is the normal way of using the DLM. This way you simply initialise the DLM's thread and all the AST routines will be delivered in that thread. You just call the dlm_lock() etc routines in the main line of your program. +pthreads is the normal way of using the DLM. This way you simply initialize the DLM's thread and all the AST routines will be delivered in that thread. You just call the dlm_lock() etc routines in the main line of your program. .br If you don't want to use pthreads or you want to handle the dlm callback ASTs yourself then you can get an FD handle to the DLM device and call .B dlm_dispatch() @@ -32,7 +32,7 @@ Creates a thread to receive all lock ASTs. The AST callback function for lock op .PP .SS int dlm_ls_pthread_init(dlm_lshandle_t lockspace) .br -As dlm_pthread_init but initialises a thread for the specified lockspace. +As dlm_pthread_init but initializes a thread for the specified lockspace. .PP .SS int dlm_pthread_cleanup() .br diff --git a/fence/agents/manual/fence_ack_manual.sh b/fence/agents/manual/fence_ack_manual.sh index 8d3a428..0f29745 100755 --- a/fence/agents/manual/fence_ack_manual.sh +++ b/fence/agents/manual/fence_ack_manual.sh @@ -1,14 +1,25 @@ #!/bin/bash # -# Dummy fence_ack_manual which uses the fenced manual override -# socket to communicate. +############################################################################### +############################################################################### +## +## COPYRIGHT (C) 2007 RED HAT, INC. +## +## THIS COPYRIGHTED MATERIAL IS MADE AVAILABLE TO ANYONE WISHING TO USE, +## MODIFY, COPY, OR REDISTRIBUTE IT SUBJECT TO THE TERMS AND CONDITIONS +## OF THE GNU GENERAL PUBLIC LICENSE V.2. +## +############################################################################### +############################################################################### +# +# Manual override after fencing has failed. # if [ "$1" = "-n" ]; then shift fi -if [ -z "$1" ]; then +if [ -z "$1" ] || [ "$1" = "-h" ]; then echo "usage:" echo " $0 " echo " $0 -n " diff --git a/fence/agents/rps10/rps10.c b/fence/agents/rps10/rps10.c index 065920c..00df528 100644 --- a/fence/agents/rps10/rps10.c +++ b/fence/agents/rps10/rps10.c @@ -39,6 +39,10 @@ #include #include "copyright.cf" +#ifndef RELEASE_VERSION +#define RELEASE_VERSION "sandbox" +#endif + /* * Salt to taste. @@ -144,7 +148,7 @@ printf(" -d Use serial device . Default=%s\n", printf(" -s Use speed . Default=9600\n" " Valid speeds: 300, 1200, 2400, 9600\n"); printf(" -o Operation to perform.\n"); -printf(" Valid operations: on, off, reboot\n"); +printf(" Valid operations: on, off, [reboot]\n"); printf(" -V Print version and exit\n"); printf(" -v Verbose mode\n\n"); printf("If no options are specified, the following options will be read\n"); @@ -314,8 +318,6 @@ get_options_stdin(char *dev, size_t devlen, int *speed, int *port, int line = 0; char *name, *val; - op[0] = 0; - while (fgets(in, sizeof(in), stdin)) { ++line; @@ -396,6 +398,7 @@ main(int argc, char **argv) char *pname = basename(argv[0]); strncpy(dev, DEFAULT_DEVICE, sizeof(dev)); + strncpy(op, "reboot", sizeof(op)); if (argc > 1) { /* diff --git a/fence/fenced/agent.c b/fence/fenced/agent.c index cf32c97..1bb9f12 100644 --- a/fence/fenced/agent.c +++ b/fence/fenced/agent.c @@ -279,7 +279,7 @@ static int use_device(int cd, char *victim, char *method, int d, return error; } -static void update_cman(char *victim, char *method) +void update_cman(char *victim, char *method) { cman_handle_t ch; struct cman_node node; diff --git a/fence/fenced/fd.h b/fence/fenced/fd.h index c69e927..990190e 100644 --- a/fence/fenced/fd.h +++ b/fence/fenced/fd.h @@ -195,5 +195,6 @@ int update_cluster_members(void); int is_member(char *name); int is_fenced(char *name); fd_node_t *get_new_node(fd_t *fd, int nodeid, char *in_name); +void update_cman(char *victim, char *agent); #endif /* __FD_DOT_H__ */ diff --git a/fence/fenced/recover.c b/fence/fenced/recover.c index 08ef8ab..ffccd3c 100644 --- a/fence/fenced/recover.c +++ b/fence/fenced/recover.c @@ -407,6 +407,7 @@ static void fence_victims(fd_t *fd, int start_type) syslog(LOG_WARNING, "fence \"%s\" overridden by " "administrator intervention", node->name); + update_cman(node->name, "override"); list_del(&node->list); free(node); } diff --git a/fence/man/fence_baytech.8 b/fence/man/fence_baytech.8 index 1cd77e1..4083c33 100644 --- a/fence/man/fence_baytech.8 +++ b/fence/man/fence_baytech.8 @@ -20,8 +20,8 @@ fence_baytech This fencing agent is written for the Baytech RPC27-20nc in combination with a Cyclades terminal server. The Cyclades TS exports the RPC's serial port via a Telnet interface. Other interfaces, such as SSH, are possible. -However, this script relys upon the assumption that Telnet is used. Future -features to this agent would allow the agent to work with a mulitude of +However, this script relies upon the assumption that Telnet is used. Future +features to this agent would allow the agent to work with a multitude of different communication protocols such as Telnet, SSH or Kermit. The other assumption that is made is that Outlet names do not end in space. diff --git a/fence/man/fence_bladecenter.8 b/fence/man/fence_bladecenter.8 index a2f7143..3efe4dc 100644 --- a/fence/man/fence_bladecenter.8 +++ b/fence/man/fence_bladecenter.8 @@ -18,7 +18,7 @@ fence_bladecenter .SH DESCRIPTION fence_bladecenter is an I/O Fencing agent which can be used with IBM Bladecenters with recent enough firmware that includes telnet support. It logs into a Brocade -chasis via telnet and uses the command line interface to power on and off blades. +chassis via telnet and uses the command line interface to power on and off blades. fence_bladecenter accepts options on the command line or from stdin. .SH OPTIONS diff --git a/fence/man/fence_cpint.8 b/fence/man/fence_cpint.8 index e3c47f8..19ffa96 100644 --- a/fence/man/fence_cpint.8 +++ b/fence/man/fence_cpint.8 @@ -25,7 +25,7 @@ and hcp in your PATH. \fBNOTE:\fP for fence_cpint to send a command to another virtual machine, the machine executing it must either be a privilege class C user or it must be the secondary user of the virtual machine to be fenced. This means that unless -all of you gulm server nodes are privilege class C, fence_cpint can only be +all of you GULM server nodes are privilege class C, fence_cpint can only be used with SLM. fence_cpint accepts options on the command line as well as from stdin. diff --git a/fence/man/fence_drac.8 b/fence/man/fence_drac.8 index ff3707b..a3909bf 100644 --- a/fence/man/fence_drac.8 +++ b/fence/man/fence_drac.8 @@ -16,7 +16,7 @@ fence_drac .SH DESCRIPTION fence_drac is an I/O Fencing agent which can be used with the Dell Remote -Access Card (DRAC). This card provides remote access to controling +Access Card (DRAC). This card provides remote access to controlling power to a server. It logs into the DRAC through the telnet interface of the card. By default, the telnet interface is not enabled. To enable the interface, you will need to use the racadm command in the racser-devel rpm diff --git a/fence/man/fence_egenera.8 b/fence/man/fence_egenera.8 index 46f5a06..e3128bb 100644 --- a/fence/man/fence_egenera.8 +++ b/fence/man/fence_egenera.8 @@ -47,7 +47,7 @@ The action required. reboot (default), off, on or status. the pserver to operate on .TP \fB-q\fP -quite mode. supress output. +quite mode. suppress output. .TP \fB-V\fP Print out a version message, then exit. diff --git a/fence/man/fence_ibmblade.8 b/fence/man/fence_ibmblade.8 index a3245be..a77f3cf 100644 --- a/fence/man/fence_ibmblade.8 +++ b/fence/man/fence_ibmblade.8 @@ -17,7 +17,7 @@ fence_ibmblade .SH DESCRIPTION fence_ibmblade is an I/O Fencing agent which can be used with IBM BladeCenter -chassis. It issues SNMP Set request to BladeCenter chassins, rebooting, powering +chassis. It issues SNMP Set request to BladeCenter chassis, rebooting, powering up or down the specified Blade Server. fence_ibmblade accepts options on the command line as well as from stdin. diff --git a/fence/man/fence_vixel.8 b/fence/man/fence_vixel.8 index c105dde..e0f6c4d 100644 --- a/fence/man/fence_vixel.8 +++ b/fence/man/fence_vixel.8 @@ -73,5 +73,5 @@ Full path to an executable to generate the password for login. \fIport = < param >\fR The port number to remove zoning from on the switch. -.SH BSEE ALSO +.SH SEE ALSO fence(8), fence_node(8) diff --git a/fence/man/fence_xcat.8 b/fence/man/fence_xcat.8 index 3aaa620..c2a59fd 100644 --- a/fence/man/fence_xcat.8 +++ b/fence/man/fence_xcat.8 @@ -14,7 +14,7 @@ fence_xcat .SH DESCRIPTION fence_xcat is a wrapper to the rpower(1) command that is distributed with the xCAT project available at http://www.xcat.org. Use of -fence_xcat requires that xcat has already been properlly configfured +fence_xcat requires that xcat has already been properly configured for your environment. Refer to xCAT(1) for more information on configuring xCAT. diff --git a/fence/man/fenced.8 b/fence/man/fenced.8 index 91eb510..991cd83 100644 --- a/fence/man/fenced.8 +++ b/fence/man/fenced.8 @@ -71,7 +71,7 @@ it) and subsequently enabled (by the cluster gaining quorum) any nodes listed in cluster.conf that are not presently members of the cman cluster are fenced. The status of these nodes is unknown, and to be on the side of safety they are assumed to be in need of fencing. This startup fencing -can be disabled, but it's only truely safe to do so if an operator is +can be disabled, but it's only truly safe to do so if an operator is present to verify that no cluster nodes are in need of fencing. This example illustrates why startup fencing is important. Take a three @@ -119,7 +119,7 @@ continue without fencing the node. Fencing daemon behavior can be controlled by setting options in the cluster.conf file under the section . See above for complete descriptions of these values. The delay values are in -seconds; -1 secs means an unlimitted delay. The values shown are the +seconds; -1 secs means an unlimited delay. The values shown are the defaults. Post-join delay is the number of seconds the daemon will wait before @@ -267,7 +267,7 @@ Find documentation for configuring specific devices at http://sources.redhat.com/cluster/ .SH OPTIONS -Command line options override corresonding values in cluster.conf. +Command line options override corresponding values in cluster.conf. .TP \fB-j\fP \fIsecs\fP Post-join fencing delay diff --git a/gfs/man/gfs_mount.8 b/gfs/man/gfs_mount.8 index 13418fd..53ebbdc 100644 --- a/gfs/man/gfs_mount.8 +++ b/gfs/man/gfs_mount.8 @@ -133,7 +133,7 @@ a cluster filesystem can cause the filesystem to stall on all machines in the cluster. (Panics don't have this "feature".) By turning on "panic_on_oops", GFS tries to make sure the cluster remains in operation even if one machine has a problem. There are cases, -however, where this behavior is not desireable -- debugging being +however, where this behavior is not desirable -- debugging being the main one. The \fBoopses_ok\fP option causes GFS to leave the "panic_on_oops" variable alone so oopses can happen. Use this option with care. @@ -157,7 +157,7 @@ message that you need to upgrade. Try mounting again, using the filesystem. .TP \fBnum_glockd\fP -Tunes GFS to alleviate memory pressure when rapidly aquiring many locks (e.g. +Tunes GFS to alleviate memory pressure when rapidly acquiring many locks (e.g. several processes scanning through huge directory trees). GFS' glockd kernel daemon cleans up memory for no-longer-needed glocks. Multiple instances of the daemon clean up faster than a single instance. The default value is diff --git a/gfs2/man/gfs2_grow.8 b/gfs2/man/gfs2_grow.8 index a16d024..85e53c1 100644 --- a/gfs2/man/gfs2_grow.8 +++ b/gfs2/man/gfs2_grow.8 @@ -39,7 +39,7 @@ of the current state of a mounted GFS2 filesystem. .SH OPTIONS .TP \fB-D\fP -Print out debbugging information about the filesystem layout. +Print out debugging information about the filesystem layout. .TP \fB-h\fP Prints out a short usage message and exits. diff --git a/gfs2/man/gfs2_jadd.8 b/gfs2/man/gfs2_jadd.8 index ef36baa..b57ca12 100644 --- a/gfs2/man/gfs2_jadd.8 +++ b/gfs2/man/gfs2_jadd.8 @@ -36,7 +36,7 @@ process should leave your filesystem in its original state. Initial size of each journal's quota change file .TP \fB-D\fP -Print out debbugging information about the filesystem layout. +Print out debugging information about the filesystem layout. .TP \fB-h\fP Prints out a short usage message and exits. diff --git a/gfs2/man/gfs2_mount.8 b/gfs2/man/gfs2_mount.8 index 20e1eb0..0bf8f42 100644 --- a/gfs2/man/gfs2_mount.8 +++ b/gfs2/man/gfs2_mount.8 @@ -151,7 +151,7 @@ message that you need to upgrade. Try mounting again, using the filesystem. .TP \fBnum_glockd=\fP\fINumber\fR -Tunes GFS2 to alleviate memory pressure when rapidly aquiring many locks (e.g. +Tunes GFS2 to alleviate memory pressure when rapidly acquiring many locks (e.g. several processes scanning through huge directory trees). GFS2' glockd kernel daemon cleans up memory for no-longer-needed glocks. Multiple instances of the daemon clean up faster than a single instance. The default value is @@ -182,7 +182,7 @@ ignored. The default value is "off". .TP \fBdata=\fP\fI[ordered/writeback]\fR When data=ordered is set, the user data modified by a transaction is -flushed to the disk before the transaction is commited to disk. This +flushed to the disk before the transaction is committed to disk. This should prevent the user from seeing uninitialized blocks in a file after a crash. Data=writeback mode writes the user data to the disk at any time after it's dirtied. This doesn't provide the same diff --git a/gnbd/man/fence_gnbd.8 b/gnbd/man/fence_gnbd.8 index c338da3..9bf185a 100644 --- a/gnbd/man/fence_gnbd.8 +++ b/gnbd/man/fence_gnbd.8 @@ -63,13 +63,13 @@ deprecated. Please use \fInodename\fP instead. The cluster name of the node to be fenced (required) .TP \fIservers = < hostname [ hostname ... ] >\fP -A whitespace seperated list of the servers to fence the client from, in +A whitespace separated list of the servers to fence the client from, in either IP address or hostname form. .TP \fIoption = multipath\fP Select multipath style fencing. \fBWARNING:\fP When multipath style fencing is used, if the kgnbd_portd process of a gnbd server node cannot be contacted, it -is fenced as well, using its appropriate fencig method. This means that when +is fenced as well, using its appropriate fencing method. This means that when a client is fenced, any node listed as its server that does not have the gnbd_serv module loaded (which starts kgnbd_portd) will also be fenced. .TP @@ -79,8 +79,8 @@ before the server is fenced. This parameter is only valid when used with multipath style fencing (see above). The default is 3. .TP \fIwait_time = < param >\fP -length of time, in seconds, to wait between retrys. This parameter -is only valid when used with multipath sytle fencing (see above). The default +length of time, in seconds, to wait between retries. This parameter +is only valid when used with multipath style fencing (see above). The default is 2. .SH SEE ALSO diff --git a/gnbd/man/gnbd_export.8 b/gnbd/man/gnbd_export.8 index 3eb2679..2a3a686 100644 --- a/gnbd/man/gnbd_export.8 +++ b/gnbd/man/gnbd_export.8 @@ -37,7 +37,7 @@ connects to the cluster manager via the \fBmagma\fP interface. \fBWARNING:\fP You must NOT specify this option if you wish to use gnbd with dm multipathing, or run GFS on gnbd server machines. To set up dm multipathing over gnbd, all -gnbds involved must run with caching disabled. Data corruption will occur +GNBDs involved must run with caching disabled. Data corruption will occur if the GNBD devices are run with caching. Any device that is exported without the \fB-c\fP option can also be used locally, but you must access the device directly. You MUST NOT use gnbd_import to import devices exported from the @@ -105,7 +105,7 @@ Remove named GNBD(s). \fB-u\fP \fIuid\fR Manually set UID. -Manunally set the Universal Identifier for an exported device. This option is +Manually set the Universal Identifier for an exported device. This option is used with \fB-e\fP. The UID is used by device-mapper-multipath to determine which devices belong in a multipath map. A device must have a UID to be multipathed. However, for most SCSI devices the default Get UID command @@ -126,9 +126,9 @@ Get UID Command. This is a command the gnbd_export will run to get a Universal Identifier for the exported device. The UID is necessary to use device-mapper-multipath with GNBD (see \fB-u\fP for more information). The command must use the full path -of any executeable that you wish to run. A command can contain the %M, %m or +of any executable that you wish to run. A command can contain the %M, %m or %n escape sequences. %M will be expanded to the major number of the exported -device, %m will be expaned to the minor number of the exported device, and +device, %m will be expanded to the minor number of the exported device, and %n will be expanded to the sysfs name for the device. If no command is given, gnbd will use the default command \fI"/usr/sbin/gnbd_get_uid"\fR. This command will work for most scsi devices. diff --git a/gnbd/man/gnbd_import.8 b/gnbd/man/gnbd_import.8 index 029b135..5d59e07 100644 --- a/gnbd/man/gnbd_import.8 +++ b/gnbd/man/gnbd_import.8 @@ -29,7 +29,7 @@ restart it. Check fenced. List all the IP addresses currently IO fenced from the specified \fIserver\fR. -If the sepecified server does not have any IP addresses fenced, nothing will +If the specified server does not have any IP addresses fenced, nothing will be returned. If the server machine is not running gnbd_serv, an error will be returned. .TP @@ -146,7 +146,7 @@ Unfence. Unfence the specified host. \fBWARNING\fP: Unfencing a client at the incorrect time can result in data corruption. In normal operation, it should never be -necessary to run this comman. See the \fB-t\fP option. +necessary to run this command. See the \fB-t\fP option. .TP \fB-U\fP \fIGNBD\fR Get UID. diff --git a/gnbd/man/gnbd_serv.8 b/gnbd/man/gnbd_serv.8 index 9551093..fa5e686 100644 --- a/gnbd/man/gnbd_serv.8 +++ b/gnbd/man/gnbd_serv.8 @@ -11,7 +11,7 @@ gnbd_serv - gnbd server daemon .SH DESCRIPTION gnbd_serv manages gnbd devices exported by gnbd_export and connections from -gnbd_import. It servs up data from the local disks to the connected gnbd +gnbd_import. It serves up data from the local disks to the connected gnbd clients. .SH OPTIONS diff --git a/group/man/gfs_controld.8 b/group/man/gfs_controld.8 index 60b00d3..1c699b8 100644 --- a/group/man/gfs_controld.8 +++ b/group/man/gfs_controld.8 @@ -60,7 +60,7 @@ cannot interoperate with older versions that did not support this option. Three options can be used to tune the behavior of the plock_ownership optimization. All three relate to the caching of lock ownership state. -Specifically, they define how agressively cached ownership state is dropped. +Specifically, they define how aggressively cached ownership state is dropped. More caching of ownership state can result in better performance, at the expense of more memory usage. diff --git a/rgmanager/ChangeLog b/rgmanager/ChangeLog index eda28eb..249e6ca 100644 --- a/rgmanager/ChangeLog +++ b/rgmanager/ChangeLog @@ -1,3 +1,7 @@ +2008-02-26 Lon Hohberger + * src/resources/ip.sh: Fix netmask handling in ip.sh + * src/utils/clustat.c: Don't show estranged nodes if they're down + 2008-01-25 Lon Hohberger * src/daemons/rg_thread.c: Fix case that broke 'clusvcadm -e -n ' case #430220 diff --git a/rgmanager/src/resources/ip.sh b/rgmanager/src/resources/ip.sh index b0bef76..fe97391 100755 --- a/rgmanager/src/resources/ip.sh +++ b/rgmanager/src/resources/ip.sh @@ -692,6 +692,10 @@ ipv4() if [ $? -ne 0 ]; then continue fi + + if [ "${addr/\/*/}" = "${addr}" ]; then + addr="$addr/$maskbits" + fi ocf_log info "Adding IPv4 address $addr to $dev" fi if [ "$1" = "del" ]; then diff --git a/rgmanager/src/utils/clustat.c b/rgmanager/src/utils/clustat.c index 23c0492..ed9b29b 100644 --- a/rgmanager/src/utils/clustat.c +++ b/rgmanager/src/utils/clustat.c @@ -719,6 +719,10 @@ build_member_field_size(int cols, int *nodesize) void txt_member_state(cman_node_t *node, int nodesize) { + /* If it's down and not in cluster.conf, don't show it */ + if ((node->cn_member & (FLAG_NOCFG | FLAG_UP)) == FLAG_NOCFG) + return; + printf(" %-*.*s ", nodesize, nodesize, node->cn_name); printf("%4d ", node->cn_nodeid); @@ -754,6 +758,10 @@ txt_member_state(cman_node_t *node, int nodesize) void xml_member_state(cman_node_t *node) { + /* If it's down and not in cluster.conf, don't show it */ + if ((node->cn_member & (FLAG_NOCFG | FLAG_UP)) == FLAG_NOCFG) + return; + printf(" \n", hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 4 16:55:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 04 Mar 2008 16:55:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-5-ga02dfd2 Message-ID: <20080304165510.30233.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=a02dfd2bcbe018c550ea04895ba4335da8dff4b0 The branch, RHEL5 has been updated via a02dfd2bcbe018c550ea04895ba4335da8dff4b0 (commit) via df967d230a1e7fc023a40bcd30ebea9ac7943e83 (commit) via 6b59b6b4ef29c5b529a16cc09f8a1e4132d0e8d3 (commit) via d87228b0155d79a4708b61444e4d6a19256bd098 (commit) from b5135c44bda382d274e6013ef9cdb6cef969d9bb (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a02dfd2bcbe018c550ea04895ba4335da8dff4b0 Author: Lon Hohberger Date: Tue Mar 4 11:49:28 2008 -0500 Update changelog commit df967d230a1e7fc023a40bcd30ebea9ac7943e83 Author: Lon Hohberger Date: Tue Mar 4 11:31:33 2008 -0500 Fix permissions commit 6b59b6b4ef29c5b529a16cc09f8a1e4132d0e8d3 Author: Lon Hohberger Date: Tue Mar 4 11:29:42 2008 -0500 Update changelog commit d87228b0155d79a4708b61444e4d6a19256bd098 Author: Lon Hohberger Date: Tue Mar 4 11:29:03 2008 -0500 Add Sybase failover agent ----------------------------------------------------------------------- Summary of changes: rgmanager/ChangeLog | 5 + rgmanager/src/resources/ASEHAagent.sh | 893 +++++++++++++++++++++++++++++++++ rgmanager/src/resources/Makefile | 2 +- 3 files changed, 899 insertions(+), 1 deletions(-) create mode 100755 rgmanager/src/resources/ASEHAagent.sh diff --git a/rgmanager/ChangeLog b/rgmanager/ChangeLog index 3660f84..49cd4a0 100644 --- a/rgmanager/ChangeLog +++ b/rgmanager/ChangeLog @@ -1,3 +1,8 @@ +2008-03-04 Lon Hohberger + * src/resources/Makefile, ASEHAagent.sh: Add support for Sybase ASE + failover, #435795 + * src/resources/ip.sh: fix netmask handling problem #434886 + 2008-02-01 Lon Hohberger * src/daemons/rg_state.c, slang_event.c, groups.c, restart_counter.c, include/restart_counter.h, resgroup.h, diff --git a/rgmanager/src/resources/ASEHAagent.sh b/rgmanager/src/resources/ASEHAagent.sh new file mode 100755 index 0000000..6d781d7 --- /dev/null +++ b/rgmanager/src/resources/ASEHAagent.sh @@ -0,0 +1,893 @@ +#!/bin/bash + +# +# Sybase Availability Agent for Red Hat Cluster v15.0.2 +# Copyright (C) - 2007 +# Sybase, Inc. All rights reserved. +# +# Sybase Availability Agent for Red Hat Cluster v15.0.2 is licensed +# under the GNU General Public License Version 2. +# +# Author(s): +# Jian-ping Hui +# +# Description: Service script for starting/stopping/monitoring \ +# Sybase Adaptive Server on: \ +# Red Hat Enterprise Linux 5 ES \ +# Red Hat Enterprise Linux 5 AS +# +# NOTES: +# +# (1) Before running this script, we assume that user has installed +# Sybase ASE 15.0.2 or higher version on the machine. Please +# customize your configuration in /etc/cluster/cluster.conf according +# to your actual environment. We assume the following files exist before +# you start the service: +# /$sybase_home/SYBASE.sh +# /$sybase_home/$sybase_ase/install/RUN_$server_name +# +# (2) You can customize the interval value in the meta-data section if needed: +# +# +# +# +# +# +# +# +# +# +# +# +# +# The timeout value is not supported by Redhat in RHCS5.0. +# +# (3) This script should be put under /usr/share/cluster. Its owner should be "root" with +# execution permission. +# + +. /etc/init.d/functions +. $(dirname $0)/ocf-shellfuncs + +PROG=${0} + +export LD_POINTER_GUARD=0 + +####################################################################################### +# Declare some variables we will use in the script. Please don't change their values. # +####################################################################################### +declare login_string="" +declare RUNSERVER_SCRIPT=$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase/install/RUN_$OCF_RESKEY_server_name +declare CONSOLE_LOG=$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase/install/$OCF_RESKEY_server_name.log + +################################################################################################## +# This function will be called by rgmanager to get the meta data of resource agent "ASEHAagent". # +# NEVER CHANGE ANYTHING IN THIS FUNCTION. +################################################################################################## +meta_data() +{ + cat < + + 1.0 + + + Sybase ASE Failover Instance + + + Sybase ASE Failover Instance + + + + + + Instance name of resource agent "ASEHAagent" + + + name + + + + + + + The home directory of sybase products + + + SYBASE home directory + + + + + + + The directory name under sybase_home where ASE products are installed + + + SYBASE_ASE directory name + + + + + + + The directory name under sybase_home where OCS products are installed, i.e. ASE-15_0 + + + SYBASE_OCS directory name + + + + + + + The ASE server name which is configured for the HA service + + + ASE server name + + + + + + + The full path of login file which contains the login/password pair + + + Login file + + + + + + + The full path of interfaces file which is used to start/access the ASE server + + + Interfaces file + + + + + + + The user who can run ASE server + + + Sybase user + + + + + + + The maximum seconds to wait for the ASE server to shutdown before killing the process directly + + + Shutdown timeout value + + + + + + + The maximum seconds to wait for an ASE server to complete before determining that the server had failed to start + + + Start timeout value + + + + + + + The maximum seconds to wait for the response of ASE server before determining that the server had no response while running deep probe + + + Deep probe timeout value + + + + + + + + + + + + + + + + + + + + + + + +EOT +} + +################################################################################################## +# Function Name: validate_all # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# OCF_ERR_ARGS Parameters are invalid # +# Description: Do some validation on the user-configurable stuff at the beginning of the script. # +################################################################################################## +verify_all() +{ + ocf_log debug "ASEHAagent: Start 'verify_all'" + + # Check if the parameter 'sybase_home' is set. + if [[ -z "$OCF_RESKEY_sybase_home" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_home' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_home' is a valid path. + if [[ ! -d $OCF_RESKEY_sybase_home ]] + then + ocf_log err "ASEHAagent: The sybase_home '$OCF_RESKEY_sybase_home' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the script file SYBASE.sh exists + if [[ ! -f $OCF_RESKEY_sybase_home/SYBASE.sh ]] + then + ocf_log err "ASEHAagent: The file $OCF_RESKEY_sybase_home/SYBASE.sh is required to run this script. Failed to run the script." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_ase' is set. + if [[ -z "$OCF_RESKEY_sybase_ase" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_ase' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the directory /$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase exists. + if [[ ! -d $OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase ]] + then + ocf_log err "ASEHAagent: The directory '$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_ocs' is set. + if [[ -z "$OCF_RESKEY_sybase_ocs" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_ocs' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the directory /$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs exists. + if [[ ! -d $OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs ]] + then + ocf_log err "ASEHAagent: The directory '$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'server_name' is set. + if [[ -z "$OCF_RESKEY_server_name" ]] + then + ocf_log err "ASEHAagent: The parameter 'server_name' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the Run_server file exists. + if [[ ! -f $RUNSERVER_SCRIPT ]] + then + ocf_log err "ASEHAagent: There file $RUNSERVER_SCRIPT doesn't exist. The sybase directory may be incorrect." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'login_file' is set. + if [[ -z "$OCF_RESKEY_login_file" ]] + then + ocf_log err "ASEHAagent: The parameter 'login_file' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the login file exist. + if [[ ! -f $OCF_RESKEY_login_file ]] + then + ocf_log err "ASEHAagent: The login file '$OCF_RESKEY_login_file' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_user' is set + if [[ -z "$OCF_RESKEY_sybase_user" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_user' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the user 'sybase_user' exist + id -u $OCF_RESKEY_sybase_user + if [[ $? != 0 ]] + then + ocf_log err "ASEHAagent: The user '$OCF_RESKEY_sybase_user' doesn't exist in the system." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'interfaces_file' is set + if [[ -z "$OCF_RESKEY_interfaces_file" ]] + then + ocf_log err "ASEHAagent: The parameter 'interfaces_file' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the file 'interfaces_file' exists + if [[ ! -f $OCF_RESKEY_interfaces_file ]] + then + ocf_log err "ASEHAagent: The interfaces file '$OCF_RESKEY_interfaces_file' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'shutdown_timeout' is a valid value + if [[ $OCF_RESKEY_shutdown_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'shutdown_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'start_timeout' is a valid value + if [[ $OCF_RESKEY_start_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'start_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'deep_probe_timeout' is a valid value + if [[ $OCF_RESKEY_deep_probe_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'deep_probe_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + ocf_log debug "ASEHAagent: End 'verify_all' successfully." + + return 0 +} + +################################################################################################################ +# Function name: get_login_string # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: Analyze the login_file to format the login string. This function will set the global variable # +# "login_string". If the login/password is clear text, the "login_string" will become to "-Ulogin # +# -Ppassword" if there is no error. If there are any errors in this function, the string # +# "login_string" will be still empty. In current stage, the encrypted string is not supported # +# because "haisql" is not available on this platform. # +################################################################################################################ +get_login_string() +{ + tmpstring="" + login_sting="" + + # Read the first column. The valid value will be "normal" or "encrypted". Any other values are invalid. + login_type=`head -1 $OCF_RESKEY_login_file | awk '{print $1}'` + if [[ $login_type = "normal" ]] + then + # The login/password pair is saved in clear text. + # Abstract the login/password from the line. + tmpstring=`head -1 $OCF_RESKEY_login_file | awk '{print $2}'` + + # Abstract "user" from the string. + user=`echo $tmpstring | awk -F'/' '{print $1}'` + # Check if the "user" string is NULL. If it is NULL, it means this is not a valid user. + if [[ -z $user ]] + then + ocf_log err "ASEHAagent: Login username is not specified in the file '$OCF_RESKEY_login_file'" + return 1 + fi + + # Abstract "password" from the string. + passwd=`echo $tmpstring | awk -F'/' '{print $2}'` + + # Format the "login_string". + login_string="-U$user -P$passwd" + else + # The login_type is invalid value. + ocf_log err "ASEHAagent: Login type specified in the file $OCF_RESKEY_login_file is not 'normal' or 'encrypted' which are only supported values." + return 1 + fi + + # The "login_file" has been analyzed successfully. Now, the value of "login_string" contains the login/password information. + return 0 +} + +############################################################################################## +# Function name: ase_start # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: This function is used to start the ASE server in primary or secondary server. # +############################################################################################## +ase_start() +{ + ocf_log debug "ASEHAagent: Start 'ase_start'" + + # Check if the server is running. If yes, return SUCCESS directly. Otherwise, continue the start work. + ase_is_running + if [[ $? = 0 ]] + then + # The server is running. + ocf_log info "ASEHAagent: Server is running. Start is success." + return 0 + fi + + # The server is not running. We need to start it. + # If the log file existed, delete it. + if [[ -f $CONSOLE_LOG ]] + then + rm -f $CONSOLE_LOG + fi + + ocf_log debug "ASEHAagent: Starting '$OCF_RESKEY_server_name'..." + + # Run runserver script to start the server. Since this script will be run by root and ASE server + # needs to be run by another user, we need to change the user to sybase_user first. Then, run + # the script to start the server. + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run the RUNSERVER_SCRIPT to start the server. + . $RUNSERVER_SCRIPT > $CONSOLE_LOG 2>&1 & +EOF + + # Monitor every 1 seconds if the server has + # recovered, until RECOVERY_TIMEOUT. + t=0 + while [[ $t -le $OCF_RESKEY_start_timeout ]] + do + grep -s "Recovery complete." $CONSOLE_LOG > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The server has not completed the recovery. We need to continue to monitor the recovery + # process. + t=`expr $t + 1` + else + # The server has completed the recovery. + ocf_log info "ASEHAagent: ASE server '$OCF_RESKEY_server_name' started successfully." + break + fi + sleep 1 + done + + # If $t is larger than start_timeout, it means the ASE server cannot start in given time. Otherwise, it + # means the ASE server has started successfully. + if [[ $t -gt $OCF_RESKEY_start_timeout ]] + then + # The server cannot start in specified time. We think the start is failed. + ocf_log err "ASEHAagent: Failed to start ASE server '$OCF_RESKEY_server_name'. Please check the server error log $CONSOLE_LOG for possible problems." + return 1 + fi + + ocf_log debug "ASEHAagent: End 'ase_start' successfully." + + return 0 +} + +############################################################################################# +# Function name: ase_stop # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: This function is used to stop the ASE server in primary or secondary server. # +############################################################################################# +ase_stop() +{ + ocf_log debug "ASEHAagent: Start 'ase_stop'" + + # Check if the ASE server is still running. + ase_is_running + if [[ $? != 0 ]] + then + # The ASE server is not running. We need not to shutdown it. + ocf_log info "ASEHAagent: The dataserver $OCF_RESKEY_server_name is not running." + return 0 + fi + + # Call get_login_string() to parse the login/password string + get_login_string + if [[ $? = 1 ]] + then + # The login account cannot be used. So we will kill the process directly. + ocf_log info "ASEHAagent: Cannot parse the login file $OCF_RESKEY_login_file. Kill the processes of ASE directly." + # Kill the OS processes immediately. + kill_ase 0 + return $? + fi + + # Just in case things are hung, start a process that will wait for the + # timeout period, then kill any remaining porcesses. We'll need to + # monitor this process (set -m), so we can terminate it later if it is + # not needed. + set -m + $PROG kill & + KILL_PID=$! # If successful, we will also terminate watchdog process + + # Run "shutdown with nowait" from isql command line to shutdown the server + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run "shutdown with nowait" to shutdown the server immediately. + (echo "use master" ; echo go ; echo "shutdown with nowait"; echo go) | \ + \$SYBASE/\$SYBASE_OCS/bin/isql $login_string -S$OCF_RESKEY_server_name -I$OCF_RESKEY_interfaces_file & +EOF + + sleep 5 + + # Check if the server has been shutted down successfully + t=0 + while [[ $t -lt $OCF_RESKEY_shutdown_timeout ]] + do + # Search "usshutdown: exiting" in the server log. If found, it means the server has been shutted down. + # Otherwise, we need to wait. + tail $CONSOLE_LOG | grep "ueshutdown: exiting" > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The shutdown is still in processing. Wait... + sleep 2 + t=`expr $t+2` + else + # The shutdown is success. + ocf_log info "ASEHAagent: ASE server '$OCF_RESKEY_server_name' shutdown with isql successfully." + break + fi + done + + # If $t is larger than shutdown_timeout, it means the ASE server cannot be shutted down in given time. We need + # to wait for the background kill process to kill the OS processes directly. + if [[ $t -ge $OCF_RESKEY_shutdown_timeout ]] + then + ocf_log err "ASEHAagent: Shutdown of '$OCF_RESKEY_server_name' from isql failed. Server is either down or unreachable." + fi + + # Here, the ASE server has been shutted down by isql command or killed by background process. We need to do + # further check to make sure all processes have gone away before saying shutdown is complete. This stops the + # other node from starting up the package before it has been stopped and the file system has been unmounted. + + # Get all processes ids from log file + declare -a ENGINE_ALL=(`sed -n -e '/engine /s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG`) + typeset -i num_procs=${#ENGINE_ALL[@]} + + # We cannot find any process id from log file. It may be because the log file is corrupted or be deleted. + # In this case, we determine the shutdown is failed. + if [[ "${ENGINE_ALL[@]}" = "" ]] + then + ocf_log err "ASEHAagent: Unable to find the process id from $CONSOLE_LOG." + ocf_log err "ASEHAagent: Stop ASE server failed." + return 1 + fi + + # Monitor the system processes to make sure all ASE related processes have gone away. + while true + do + # To every engine process, search it in system processes list. If it is not in the + # list, it means this process has gone away. Otherwise, we need to wait for it is + # killed by background process. + for i in ${ENGINE_ALL[@]} + do + ps -fu $OCF_RESKEY_sybase_user | awk '{print $2}' | grep $i | grep -v grep + if [[ $? != 0 ]] + then + ocf_log debug "ASEHAagent: $i process has stopped." + c=0 + while (( c < $num_procs )) + do + if [[ ${ENGINE_ALL[$c]} = $i ]] + then + unset ENGINE_ALL[$c] + c=$num_procs + fi + (( c = c + 1 )) + done + fi + done + + # To here, all processes should have gone away. + if [[ ${ENGINE_ALL[@]} = "" ]] + then + # + # Looks like shutdown was successful, so kill the + # script to kill any hung processes, which we started earlier. + # Check to see if the script is still running. If jobs + # returns that the script is done, then we don't need to kill + # it. + # + job=$(jobs | grep -v Done) + if [[ ${job} != "" ]] + then + ocf_log debug "ASEHAagent: Killing the kill_ase script." + + kill -15 $KILL_PID > /dev/null 2>&1 + fi + break + fi + sleep 5 + done + + ocf_log debug "ASEHAagent: End 'ase_stop'." + + return 0 +} + +#################################################################################### +# Function name: ase_is_running # +# Parameter: None # +# Return value: # +# 0 ASE server is running # +# 1 ASE server is not running or there are errors # +# Description: This function is used to check if the ASE server is still running . # +#################################################################################### +ase_is_running() +{ + # If the error log doesn't exist, we can say there is no ASE is running. + if [[ ! -f $CONSOLE_LOG ]] + then + return 1 + fi + + # The error log file exists. Check if the engine 0 is alive. + ENGINE_0=(`sed -n -e '/engine 0/s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG`) + if [[ "$ENGINE_0" = "" ]] + then + # The engine 0 is down. + return 1 + else + kill -s 0 $ENGINE_0 > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The engine 0 is not running. + return 1 + else + # The engine 0 is running. + return 0 + fi + fi + + return 1 +} + +#################################################################################### +# Function name: ase_is_running # +# Parameter: # +# DELAY The seconds to wait before killing the ASE processes. 0 means # +# kill the ASE processes immediately. # +# Return value: None # +# 1 ASE server is not running or there are errors # +# Description: This function is used to check if the ASE server is still running . # +#################################################################################### +kill_ase() +{ + ocf_log debug "ASEHAagent: Start 'kill_ase'." + + DELAY=$1 + + # Wait for sometime before sending a kill signal. + t=0 + while [[ $t -lt $DELAY ]] + do + sleep 1 + t=`expr $t+1` + done + + # Get the process ids from log file + declare -a ENGINE_ALL=`sed -n -e '/engine /s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG` + + # If there is no process id found in the log file, we need not to continue. + if [[ "${ENGINE_ALL[@]}" = "" ]] + then + ocf_log err "ASEHAagent: Unable to find the process id from $CONSOLE_LOG." + return + fi + + # Kill the datasever process(es) + for pid in ${ENGINE_ALL[@]} + do + kill -9 $pid > /dev/null 2>&1 + if [[ $? != 0 ]] + then + ocf_log info "ASEHAagent: kill_ase function did NOT find process $pid running." + else + ocf_log info "ASEHAagent: kill_ase function did find process $pid running. Sent SIGTERM." + fi + done + + ocf_log debug "ASEHAagent: End 'kill_ase'." +} + + +####################################################################################### +# Function name: terminate # +# Parameter: None # +# Return value: Always be 1 # +# Description: This function is called automatically after this script is terminated. # +####################################################################################### +terminate() +{ + ocf_log debug "ASEHAagent: This monitor script has been signaled to terminate." + exit 1 +} + +##################################################################################### +# Function name: ase_status # +# Parameter: # +# 0 Level 0 probe. In this level, we just check if engine 0 is alive # +# 10 Level 10 probe. In this level, we need to probe if the ASE server # +# still has response. # +# Return value: # +# 0 The server is still alive # +# 1 The server is down # +# Description: This function is used to check if the ASE server is still running. # +##################################################################################### +ase_status() +{ + ocf_log debug "ASEHAagent: Start 'ase_status'." + + # Step 1: Check if the engine 0 is alive + ase_is_running + if [[ $? = 1 ]] + then + # ASE is down. Return fail to rgmanager to trigger the failover process. + ocf_log err "ASEHAagent: ASE server is down." + return 1 + fi + + # ASE process is still alive. + # Step2: If this is level 10 probe, We need to check if the ASE server still has response. + if [[ $1 -gt 0 ]] + then + ocf_log debug "ASEHAagent: Need to run deep probe." + # Run deep probe + deep_probe + if [[ $? = 1 ]] + then + # Deep probe failed. This means the server has been down. + ocf_log err "ASEHAagent: Deep probe found the ASE server is down." + return 1 + fi + fi + + ocf_log debug "ASEHAagent: End 'ase_status'." + + return 0 +} + +#################################################################################### +# Function name: deep_probe # +# Parameter: None # +# Return value: # +# 0 ASE server is alive # +# 1 ASE server is down # +# Description: This function is used to run deep probe to make sure the ASE server # +# still has response. # +#################################################################################### +deep_probe() +{ + declare -i rv + + ocf_log debug "ASEHAagent: Start 'deep_probe'." + + # Declare two temporary files which will be used in this probe. + tmpfile1="/tmp/ASEHAagent.1" + tmpfile2="/tmp/ASEHAagent.2" + + # Get the login_string by analyzing the login_file. + get_login_string + if [[ $? = 1 ]] + then + # Login string cannot be fetched. Cannot continue the deep probe. + ocf_log err "ASEHAagent: Cannot run the deep probe because of incorrect login file $OCF_RESKEY_login_file. Deep probe failed." + return 1 + fi + + rm -f $tmpfile1 + + # The login file is correct. We have gotten the login account and password from it. + # Run isql command in background. + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run a very simple SQL statement to make sure the server is still ok. The output will be put to + # tmpfile1. + (echo "select 1"; echo "go") | + \$SYBASE/\$SYBASE_OCS/bin/isql $login_string -S$OCF_RESKEY_server_name -I$OCF_RESKEY_interfaces_file -t $OCF_RESKEY_deep_probe_timeout -e -o$tmpfile1 & + # Record the isql command process id to temporary file. If the isql is hung, we need this process id + # to kill the hung process. + echo \$! > $tmpfile2 +EOF + + declare -i t=0 + + # Monitor the output file tmpfile1. + while [[ $t -lt $OCF_RESKEY_deep_probe_timeout ]] + do + # If the SQL statement is executed successfully, we will get the following output: + # 1> select 1 + # + # ----------- + # 1 + # + # (1 row affected) + # So, we determine if the execution is success by searching the keyword "(1 row affected)". + grep "(1 row affected)" $tmpfile1 + if [[ $? = 0 ]] + then + ocf_log debug "ASEHAagent: Deep probe sucess." + break + else + sleep 1 + t=`expr $t+1` + fi + done + + # If $t is larger than deep_probe_timeout, it means the isql command line cannot finish in given time. + # This means the deep probe failed. We need to kill the isql process manually. + if [[ $t -ge $OCF_RESKEY_deep_probe_timeout ]] + then + ocf_log err "ASEHAagent: Deep probe fail. The dataserver has no response." + + # Read the process id of isql process from tmpfile2 + pid=`cat $tmpfile2 | awk '{print $1}'` + + # Kill the isql process directly. + kill -9 $pid + return 1 + fi + + ocf_log debug "ASEHAagent: End 'deep_probe'." + + return 0 +} + +trap terminate SIGTERM + +############################# +# Do some real work here... # +############################# +case $1 in + start) + verify_all || exit 1 + ase_start + exit $? + ;; + stop) + verify_all || exit 1 + ase_stop + exit $? + ;; + status | monitor) + verify_all || exit 1 + ase_status $OCF_CHECK_LEVEL + exit $? + ;; + kill) + kill_ase $OCF_RESKEY_shutdown_timeout + ;; + meta-data) + meta_data + exit $? + ;; + validate-all) + verify_all + exit $? + ;; + *) + echo "Usage: $SCRIPT {start|stop|monitor|status|validate-all|meta-data}" + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac +exit 0 + diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile index 7a58e24..c623be9 100644 --- a/rgmanager/src/resources/Makefile +++ b/rgmanager/src/resources/Makefile @@ -22,7 +22,7 @@ RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \ apache.sh openldap.sh samba.sh mysql.sh \ postgres-8.sh tomcat-5.sh lvm.sh lvm_by_lv.sh lvm_by_vg.sh \ vm.sh SAPInstance SAPDatabase named.sh \ - oracledb.sh + oracledb.sh ASEHAagent.sh METADATA=apache.metadata openldap.metadata samba.metadata \ mysql.metadata postgres-8.metadata tomcat-5.metadata \ hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 4 16:57:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 04 Mar 2008 16:57:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-56-g72d3a74 Message-ID: <20080304165659.30921.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=72d3a7438aef3d8c31873fb96544f7540fdb8e47 The branch, master has been updated via 72d3a7438aef3d8c31873fb96544f7540fdb8e47 (commit) via d99d2628cc09095e01df8f88a932ec0112ab240d (commit) via 401124a75d66e51e87e122905b43abadbc9fe5d6 (commit) via d95fb5fd0cc171bbbf6de16fff602f964439bc92 (commit) from 774ff2ed50643bb83cbe593520673976cb0007cf (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 72d3a7438aef3d8c31873fb96544f7540fdb8e47 Merge: d99d2628cc09095e01df8f88a932ec0112ab240d 774ff2ed50643bb83cbe593520673976cb0007cf Author: Lon Hohberger Date: Tue Mar 4 11:55:32 2008 -0500 Merge branch 'master' of ssh://lhh@sources.redhat.com/git/cluster commit d99d2628cc09095e01df8f88a932ec0112ab240d Author: Lon Hohberger Date: Tue Mar 4 11:54:40 2008 -0500 Add / fix Oracle 10g failover agent commit 401124a75d66e51e87e122905b43abadbc9fe5d6 Author: Lon Hohberger Date: Tue Mar 4 11:38:39 2008 -0500 Update changelog commit d95fb5fd0cc171bbbf6de16fff602f964439bc92 Author: Lon Hohberger Date: Tue Mar 4 11:29:03 2008 -0500 Add Sybase failover agent ----------------------------------------------------------------------- Summary of changes: rgmanager/ChangeLog | 4 + rgmanager/src/resources/ASEHAagent.sh | 893 +++++++++++++++++++++ rgmanager/src/resources/Makefile | 3 +- rgmanager/src/resources/{oracleas => oracledb.sh} | 207 ++++-- 4 files changed, 1041 insertions(+), 66 deletions(-) create mode 100644 rgmanager/src/resources/ASEHAagent.sh rename rgmanager/src/resources/{oracleas => oracledb.sh} (77%) diff --git a/rgmanager/ChangeLog b/rgmanager/ChangeLog index 249e6ca..117e5a3 100644 --- a/rgmanager/ChangeLog +++ b/rgmanager/ChangeLog @@ -1,3 +1,7 @@ +2008-03-04 Lon Hohberger + * src/resources/ASEHAagent.sh, Makefile: Add Sybase failover agent + * src/resources/oracledb.sh, Makefile: Add Oracle 10g failover agent + 2008-02-26 Lon Hohberger * src/resources/ip.sh: Fix netmask handling in ip.sh * src/utils/clustat.c: Don't show estranged nodes if they're down diff --git a/rgmanager/src/resources/ASEHAagent.sh b/rgmanager/src/resources/ASEHAagent.sh new file mode 100644 index 0000000..6d781d7 --- /dev/null +++ b/rgmanager/src/resources/ASEHAagent.sh @@ -0,0 +1,893 @@ +#!/bin/bash + +# +# Sybase Availability Agent for Red Hat Cluster v15.0.2 +# Copyright (C) - 2007 +# Sybase, Inc. All rights reserved. +# +# Sybase Availability Agent for Red Hat Cluster v15.0.2 is licensed +# under the GNU General Public License Version 2. +# +# Author(s): +# Jian-ping Hui +# +# Description: Service script for starting/stopping/monitoring \ +# Sybase Adaptive Server on: \ +# Red Hat Enterprise Linux 5 ES \ +# Red Hat Enterprise Linux 5 AS +# +# NOTES: +# +# (1) Before running this script, we assume that user has installed +# Sybase ASE 15.0.2 or higher version on the machine. Please +# customize your configuration in /etc/cluster/cluster.conf according +# to your actual environment. We assume the following files exist before +# you start the service: +# /$sybase_home/SYBASE.sh +# /$sybase_home/$sybase_ase/install/RUN_$server_name +# +# (2) You can customize the interval value in the meta-data section if needed: +# +# +# +# +# +# +# +# +# +# +# +# +# +# The timeout value is not supported by Redhat in RHCS5.0. +# +# (3) This script should be put under /usr/share/cluster. Its owner should be "root" with +# execution permission. +# + +. /etc/init.d/functions +. $(dirname $0)/ocf-shellfuncs + +PROG=${0} + +export LD_POINTER_GUARD=0 + +####################################################################################### +# Declare some variables we will use in the script. Please don't change their values. # +####################################################################################### +declare login_string="" +declare RUNSERVER_SCRIPT=$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase/install/RUN_$OCF_RESKEY_server_name +declare CONSOLE_LOG=$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase/install/$OCF_RESKEY_server_name.log + +################################################################################################## +# This function will be called by rgmanager to get the meta data of resource agent "ASEHAagent". # +# NEVER CHANGE ANYTHING IN THIS FUNCTION. +################################################################################################## +meta_data() +{ + cat < + + 1.0 + + + Sybase ASE Failover Instance + + + Sybase ASE Failover Instance + + + + + + Instance name of resource agent "ASEHAagent" + + + name + + + + + + + The home directory of sybase products + + + SYBASE home directory + + + + + + + The directory name under sybase_home where ASE products are installed + + + SYBASE_ASE directory name + + + + + + + The directory name under sybase_home where OCS products are installed, i.e. ASE-15_0 + + + SYBASE_OCS directory name + + + + + + + The ASE server name which is configured for the HA service + + + ASE server name + + + + + + + The full path of login file which contains the login/password pair + + + Login file + + + + + + + The full path of interfaces file which is used to start/access the ASE server + + + Interfaces file + + + + + + + The user who can run ASE server + + + Sybase user + + + + + + + The maximum seconds to wait for the ASE server to shutdown before killing the process directly + + + Shutdown timeout value + + + + + + + The maximum seconds to wait for an ASE server to complete before determining that the server had failed to start + + + Start timeout value + + + + + + + The maximum seconds to wait for the response of ASE server before determining that the server had no response while running deep probe + + + Deep probe timeout value + + + + + + + + + + + + + + + + + + + + + + + +EOT +} + +################################################################################################## +# Function Name: validate_all # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# OCF_ERR_ARGS Parameters are invalid # +# Description: Do some validation on the user-configurable stuff at the beginning of the script. # +################################################################################################## +verify_all() +{ + ocf_log debug "ASEHAagent: Start 'verify_all'" + + # Check if the parameter 'sybase_home' is set. + if [[ -z "$OCF_RESKEY_sybase_home" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_home' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_home' is a valid path. + if [[ ! -d $OCF_RESKEY_sybase_home ]] + then + ocf_log err "ASEHAagent: The sybase_home '$OCF_RESKEY_sybase_home' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the script file SYBASE.sh exists + if [[ ! -f $OCF_RESKEY_sybase_home/SYBASE.sh ]] + then + ocf_log err "ASEHAagent: The file $OCF_RESKEY_sybase_home/SYBASE.sh is required to run this script. Failed to run the script." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_ase' is set. + if [[ -z "$OCF_RESKEY_sybase_ase" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_ase' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the directory /$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase exists. + if [[ ! -d $OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase ]] + then + ocf_log err "ASEHAagent: The directory '$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_ocs' is set. + if [[ -z "$OCF_RESKEY_sybase_ocs" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_ocs' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the directory /$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs exists. + if [[ ! -d $OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs ]] + then + ocf_log err "ASEHAagent: The directory '$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'server_name' is set. + if [[ -z "$OCF_RESKEY_server_name" ]] + then + ocf_log err "ASEHAagent: The parameter 'server_name' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the Run_server file exists. + if [[ ! -f $RUNSERVER_SCRIPT ]] + then + ocf_log err "ASEHAagent: There file $RUNSERVER_SCRIPT doesn't exist. The sybase directory may be incorrect." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'login_file' is set. + if [[ -z "$OCF_RESKEY_login_file" ]] + then + ocf_log err "ASEHAagent: The parameter 'login_file' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the login file exist. + if [[ ! -f $OCF_RESKEY_login_file ]] + then + ocf_log err "ASEHAagent: The login file '$OCF_RESKEY_login_file' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_user' is set + if [[ -z "$OCF_RESKEY_sybase_user" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_user' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the user 'sybase_user' exist + id -u $OCF_RESKEY_sybase_user + if [[ $? != 0 ]] + then + ocf_log err "ASEHAagent: The user '$OCF_RESKEY_sybase_user' doesn't exist in the system." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'interfaces_file' is set + if [[ -z "$OCF_RESKEY_interfaces_file" ]] + then + ocf_log err "ASEHAagent: The parameter 'interfaces_file' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the file 'interfaces_file' exists + if [[ ! -f $OCF_RESKEY_interfaces_file ]] + then + ocf_log err "ASEHAagent: The interfaces file '$OCF_RESKEY_interfaces_file' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'shutdown_timeout' is a valid value + if [[ $OCF_RESKEY_shutdown_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'shutdown_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'start_timeout' is a valid value + if [[ $OCF_RESKEY_start_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'start_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'deep_probe_timeout' is a valid value + if [[ $OCF_RESKEY_deep_probe_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'deep_probe_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + ocf_log debug "ASEHAagent: End 'verify_all' successfully." + + return 0 +} + +################################################################################################################ +# Function name: get_login_string # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: Analyze the login_file to format the login string. This function will set the global variable # +# "login_string". If the login/password is clear text, the "login_string" will become to "-Ulogin # +# -Ppassword" if there is no error. If there are any errors in this function, the string # +# "login_string" will be still empty. In current stage, the encrypted string is not supported # +# because "haisql" is not available on this platform. # +################################################################################################################ +get_login_string() +{ + tmpstring="" + login_sting="" + + # Read the first column. The valid value will be "normal" or "encrypted". Any other values are invalid. + login_type=`head -1 $OCF_RESKEY_login_file | awk '{print $1}'` + if [[ $login_type = "normal" ]] + then + # The login/password pair is saved in clear text. + # Abstract the login/password from the line. + tmpstring=`head -1 $OCF_RESKEY_login_file | awk '{print $2}'` + + # Abstract "user" from the string. + user=`echo $tmpstring | awk -F'/' '{print $1}'` + # Check if the "user" string is NULL. If it is NULL, it means this is not a valid user. + if [[ -z $user ]] + then + ocf_log err "ASEHAagent: Login username is not specified in the file '$OCF_RESKEY_login_file'" + return 1 + fi + + # Abstract "password" from the string. + passwd=`echo $tmpstring | awk -F'/' '{print $2}'` + + # Format the "login_string". + login_string="-U$user -P$passwd" + else + # The login_type is invalid value. + ocf_log err "ASEHAagent: Login type specified in the file $OCF_RESKEY_login_file is not 'normal' or 'encrypted' which are only supported values." + return 1 + fi + + # The "login_file" has been analyzed successfully. Now, the value of "login_string" contains the login/password information. + return 0 +} + +############################################################################################## +# Function name: ase_start # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: This function is used to start the ASE server in primary or secondary server. # +############################################################################################## +ase_start() +{ + ocf_log debug "ASEHAagent: Start 'ase_start'" + + # Check if the server is running. If yes, return SUCCESS directly. Otherwise, continue the start work. + ase_is_running + if [[ $? = 0 ]] + then + # The server is running. + ocf_log info "ASEHAagent: Server is running. Start is success." + return 0 + fi + + # The server is not running. We need to start it. + # If the log file existed, delete it. + if [[ -f $CONSOLE_LOG ]] + then + rm -f $CONSOLE_LOG + fi + + ocf_log debug "ASEHAagent: Starting '$OCF_RESKEY_server_name'..." + + # Run runserver script to start the server. Since this script will be run by root and ASE server + # needs to be run by another user, we need to change the user to sybase_user first. Then, run + # the script to start the server. + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run the RUNSERVER_SCRIPT to start the server. + . $RUNSERVER_SCRIPT > $CONSOLE_LOG 2>&1 & +EOF + + # Monitor every 1 seconds if the server has + # recovered, until RECOVERY_TIMEOUT. + t=0 + while [[ $t -le $OCF_RESKEY_start_timeout ]] + do + grep -s "Recovery complete." $CONSOLE_LOG > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The server has not completed the recovery. We need to continue to monitor the recovery + # process. + t=`expr $t + 1` + else + # The server has completed the recovery. + ocf_log info "ASEHAagent: ASE server '$OCF_RESKEY_server_name' started successfully." + break + fi + sleep 1 + done + + # If $t is larger than start_timeout, it means the ASE server cannot start in given time. Otherwise, it + # means the ASE server has started successfully. + if [[ $t -gt $OCF_RESKEY_start_timeout ]] + then + # The server cannot start in specified time. We think the start is failed. + ocf_log err "ASEHAagent: Failed to start ASE server '$OCF_RESKEY_server_name'. Please check the server error log $CONSOLE_LOG for possible problems." + return 1 + fi + + ocf_log debug "ASEHAagent: End 'ase_start' successfully." + + return 0 +} + +############################################################################################# +# Function name: ase_stop # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: This function is used to stop the ASE server in primary or secondary server. # +############################################################################################# +ase_stop() +{ + ocf_log debug "ASEHAagent: Start 'ase_stop'" + + # Check if the ASE server is still running. + ase_is_running + if [[ $? != 0 ]] + then + # The ASE server is not running. We need not to shutdown it. + ocf_log info "ASEHAagent: The dataserver $OCF_RESKEY_server_name is not running." + return 0 + fi + + # Call get_login_string() to parse the login/password string + get_login_string + if [[ $? = 1 ]] + then + # The login account cannot be used. So we will kill the process directly. + ocf_log info "ASEHAagent: Cannot parse the login file $OCF_RESKEY_login_file. Kill the processes of ASE directly." + # Kill the OS processes immediately. + kill_ase 0 + return $? + fi + + # Just in case things are hung, start a process that will wait for the + # timeout period, then kill any remaining porcesses. We'll need to + # monitor this process (set -m), so we can terminate it later if it is + # not needed. + set -m + $PROG kill & + KILL_PID=$! # If successful, we will also terminate watchdog process + + # Run "shutdown with nowait" from isql command line to shutdown the server + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run "shutdown with nowait" to shutdown the server immediately. + (echo "use master" ; echo go ; echo "shutdown with nowait"; echo go) | \ + \$SYBASE/\$SYBASE_OCS/bin/isql $login_string -S$OCF_RESKEY_server_name -I$OCF_RESKEY_interfaces_file & +EOF + + sleep 5 + + # Check if the server has been shutted down successfully + t=0 + while [[ $t -lt $OCF_RESKEY_shutdown_timeout ]] + do + # Search "usshutdown: exiting" in the server log. If found, it means the server has been shutted down. + # Otherwise, we need to wait. + tail $CONSOLE_LOG | grep "ueshutdown: exiting" > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The shutdown is still in processing. Wait... + sleep 2 + t=`expr $t+2` + else + # The shutdown is success. + ocf_log info "ASEHAagent: ASE server '$OCF_RESKEY_server_name' shutdown with isql successfully." + break + fi + done + + # If $t is larger than shutdown_timeout, it means the ASE server cannot be shutted down in given time. We need + # to wait for the background kill process to kill the OS processes directly. + if [[ $t -ge $OCF_RESKEY_shutdown_timeout ]] + then + ocf_log err "ASEHAagent: Shutdown of '$OCF_RESKEY_server_name' from isql failed. Server is either down or unreachable." + fi + + # Here, the ASE server has been shutted down by isql command or killed by background process. We need to do + # further check to make sure all processes have gone away before saying shutdown is complete. This stops the + # other node from starting up the package before it has been stopped and the file system has been unmounted. + + # Get all processes ids from log file + declare -a ENGINE_ALL=(`sed -n -e '/engine /s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG`) + typeset -i num_procs=${#ENGINE_ALL[@]} + + # We cannot find any process id from log file. It may be because the log file is corrupted or be deleted. + # In this case, we determine the shutdown is failed. + if [[ "${ENGINE_ALL[@]}" = "" ]] + then + ocf_log err "ASEHAagent: Unable to find the process id from $CONSOLE_LOG." + ocf_log err "ASEHAagent: Stop ASE server failed." + return 1 + fi + + # Monitor the system processes to make sure all ASE related processes have gone away. + while true + do + # To every engine process, search it in system processes list. If it is not in the + # list, it means this process has gone away. Otherwise, we need to wait for it is + # killed by background process. + for i in ${ENGINE_ALL[@]} + do + ps -fu $OCF_RESKEY_sybase_user | awk '{print $2}' | grep $i | grep -v grep + if [[ $? != 0 ]] + then + ocf_log debug "ASEHAagent: $i process has stopped." + c=0 + while (( c < $num_procs )) + do + if [[ ${ENGINE_ALL[$c]} = $i ]] + then + unset ENGINE_ALL[$c] + c=$num_procs + fi + (( c = c + 1 )) + done + fi + done + + # To here, all processes should have gone away. + if [[ ${ENGINE_ALL[@]} = "" ]] + then + # + # Looks like shutdown was successful, so kill the + # script to kill any hung processes, which we started earlier. + # Check to see if the script is still running. If jobs + # returns that the script is done, then we don't need to kill + # it. + # + job=$(jobs | grep -v Done) + if [[ ${job} != "" ]] + then + ocf_log debug "ASEHAagent: Killing the kill_ase script." + + kill -15 $KILL_PID > /dev/null 2>&1 + fi + break + fi + sleep 5 + done + + ocf_log debug "ASEHAagent: End 'ase_stop'." + + return 0 +} + +#################################################################################### +# Function name: ase_is_running # +# Parameter: None # +# Return value: # +# 0 ASE server is running # +# 1 ASE server is not running or there are errors # +# Description: This function is used to check if the ASE server is still running . # +#################################################################################### +ase_is_running() +{ + # If the error log doesn't exist, we can say there is no ASE is running. + if [[ ! -f $CONSOLE_LOG ]] + then + return 1 + fi + + # The error log file exists. Check if the engine 0 is alive. + ENGINE_0=(`sed -n -e '/engine 0/s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG`) + if [[ "$ENGINE_0" = "" ]] + then + # The engine 0 is down. + return 1 + else + kill -s 0 $ENGINE_0 > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The engine 0 is not running. + return 1 + else + # The engine 0 is running. + return 0 + fi + fi + + return 1 +} + +#################################################################################### +# Function name: ase_is_running # +# Parameter: # +# DELAY The seconds to wait before killing the ASE processes. 0 means # +# kill the ASE processes immediately. # +# Return value: None # +# 1 ASE server is not running or there are errors # +# Description: This function is used to check if the ASE server is still running . # +#################################################################################### +kill_ase() +{ + ocf_log debug "ASEHAagent: Start 'kill_ase'." + + DELAY=$1 + + # Wait for sometime before sending a kill signal. + t=0 + while [[ $t -lt $DELAY ]] + do + sleep 1 + t=`expr $t+1` + done + + # Get the process ids from log file + declare -a ENGINE_ALL=`sed -n -e '/engine /s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG` + + # If there is no process id found in the log file, we need not to continue. + if [[ "${ENGINE_ALL[@]}" = "" ]] + then + ocf_log err "ASEHAagent: Unable to find the process id from $CONSOLE_LOG." + return + fi + + # Kill the datasever process(es) + for pid in ${ENGINE_ALL[@]} + do + kill -9 $pid > /dev/null 2>&1 + if [[ $? != 0 ]] + then + ocf_log info "ASEHAagent: kill_ase function did NOT find process $pid running." + else + ocf_log info "ASEHAagent: kill_ase function did find process $pid running. Sent SIGTERM." + fi + done + + ocf_log debug "ASEHAagent: End 'kill_ase'." +} + + +####################################################################################### +# Function name: terminate # +# Parameter: None # +# Return value: Always be 1 # +# Description: This function is called automatically after this script is terminated. # +####################################################################################### +terminate() +{ + ocf_log debug "ASEHAagent: This monitor script has been signaled to terminate." + exit 1 +} + +##################################################################################### +# Function name: ase_status # +# Parameter: # +# 0 Level 0 probe. In this level, we just check if engine 0 is alive # +# 10 Level 10 probe. In this level, we need to probe if the ASE server # +# still has response. # +# Return value: # +# 0 The server is still alive # +# 1 The server is down # +# Description: This function is used to check if the ASE server is still running. # +##################################################################################### +ase_status() +{ + ocf_log debug "ASEHAagent: Start 'ase_status'." + + # Step 1: Check if the engine 0 is alive + ase_is_running + if [[ $? = 1 ]] + then + # ASE is down. Return fail to rgmanager to trigger the failover process. + ocf_log err "ASEHAagent: ASE server is down." + return 1 + fi + + # ASE process is still alive. + # Step2: If this is level 10 probe, We need to check if the ASE server still has response. + if [[ $1 -gt 0 ]] + then + ocf_log debug "ASEHAagent: Need to run deep probe." + # Run deep probe + deep_probe + if [[ $? = 1 ]] + then + # Deep probe failed. This means the server has been down. + ocf_log err "ASEHAagent: Deep probe found the ASE server is down." + return 1 + fi + fi + + ocf_log debug "ASEHAagent: End 'ase_status'." + + return 0 +} + +#################################################################################### +# Function name: deep_probe # +# Parameter: None # +# Return value: # +# 0 ASE server is alive # +# 1 ASE server is down # +# Description: This function is used to run deep probe to make sure the ASE server # +# still has response. # +#################################################################################### +deep_probe() +{ + declare -i rv + + ocf_log debug "ASEHAagent: Start 'deep_probe'." + + # Declare two temporary files which will be used in this probe. + tmpfile1="/tmp/ASEHAagent.1" + tmpfile2="/tmp/ASEHAagent.2" + + # Get the login_string by analyzing the login_file. + get_login_string + if [[ $? = 1 ]] + then + # Login string cannot be fetched. Cannot continue the deep probe. + ocf_log err "ASEHAagent: Cannot run the deep probe because of incorrect login file $OCF_RESKEY_login_file. Deep probe failed." + return 1 + fi + + rm -f $tmpfile1 + + # The login file is correct. We have gotten the login account and password from it. + # Run isql command in background. + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run a very simple SQL statement to make sure the server is still ok. The output will be put to + # tmpfile1. + (echo "select 1"; echo "go") | + \$SYBASE/\$SYBASE_OCS/bin/isql $login_string -S$OCF_RESKEY_server_name -I$OCF_RESKEY_interfaces_file -t $OCF_RESKEY_deep_probe_timeout -e -o$tmpfile1 & + # Record the isql command process id to temporary file. If the isql is hung, we need this process id + # to kill the hung process. + echo \$! > $tmpfile2 +EOF + + declare -i t=0 + + # Monitor the output file tmpfile1. + while [[ $t -lt $OCF_RESKEY_deep_probe_timeout ]] + do + # If the SQL statement is executed successfully, we will get the following output: + # 1> select 1 + # + # ----------- + # 1 + # + # (1 row affected) + # So, we determine if the execution is success by searching the keyword "(1 row affected)". + grep "(1 row affected)" $tmpfile1 + if [[ $? = 0 ]] + then + ocf_log debug "ASEHAagent: Deep probe sucess." + break + else + sleep 1 + t=`expr $t+1` + fi + done + + # If $t is larger than deep_probe_timeout, it means the isql command line cannot finish in given time. + # This means the deep probe failed. We need to kill the isql process manually. + if [[ $t -ge $OCF_RESKEY_deep_probe_timeout ]] + then + ocf_log err "ASEHAagent: Deep probe fail. The dataserver has no response." + + # Read the process id of isql process from tmpfile2 + pid=`cat $tmpfile2 | awk '{print $1}'` + + # Kill the isql process directly. + kill -9 $pid + return 1 + fi + + ocf_log debug "ASEHAagent: End 'deep_probe'." + + return 0 +} + +trap terminate SIGTERM + +############################# +# Do some real work here... # +############################# +case $1 in + start) + verify_all || exit 1 + ase_start + exit $? + ;; + stop) + verify_all || exit 1 + ase_stop + exit $? + ;; + status | monitor) + verify_all || exit 1 + ase_status $OCF_CHECK_LEVEL + exit $? + ;; + kill) + kill_ase $OCF_RESKEY_shutdown_timeout + ;; + meta-data) + meta_data + exit $? + ;; + validate-all) + verify_all + exit $? + ;; + *) + echo "Usage: $SCRIPT {start|stop|monitor|status|validate-all|meta-data}" + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac +exit 0 + diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile index f07122d..2c17e16 100644 --- a/rgmanager/src/resources/Makefile +++ b/rgmanager/src/resources/Makefile @@ -21,7 +21,8 @@ RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \ script.sh netfs.sh clusterfs.sh smb.sh \ apache.sh openldap.sh samba.sh mysql.sh \ postgres-8.sh tomcat-5.sh lvm.sh lvm_by_lv.sh lvm_by_vg.sh \ - vm.sh SAPInstance SAPDatabase named.sh + vm.sh SAPInstance SAPDatabase named.sh \ + oracledb.sh ASEHAagent.sh METADATA=apache.metadata openldap.metadata samba.metadata \ mysql.metadata postgres-8.metadata tomcat-5.metadata \ diff --git a/rgmanager/src/resources/oracleas b/rgmanager/src/resources/oracledb.sh similarity index 77% rename from rgmanager/src/resources/oracleas rename to rgmanager/src/resources/oracledb.sh index e806049..5b8e113 100755 --- a/rgmanager/src/resources/oracleas +++ b/rgmanager/src/resources/oracledb.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2003-2004 Red Hat, Inc. +# Copyright 2003-2004, 2006-2007 Red Hat, Inc. # # Author(s): # Hardy Merrill @@ -15,10 +15,8 @@ # # chkconfig: 345 99 01 # description: Service script for starting/stopping \ -# Oracle(R) Application Server software on: \ -# Red Hat Enterprise Linux 2.1 AS \ -# Red Hat Enterprise Linux 3 AS \ -# Red Hat Enterprise Linux 3 ES +# Oracle(R) Database 10g on \ +# Red Hat Enterprise Linux 5 # # NOTES: # @@ -26,27 +24,36 @@ # the need for this script to access anything outside of the ORACLE_HOME # path. # -# (2) You MUST customize ORACLE_USER, ORACLE_HOME, and ORACLE_SID to match -# your installation! +# (2) You MUST customize ORACLE_USER, ORACLE_HOME, ORACLE_SID, and +# ORACLE_HOSTNAME to match your installation if not running from within +# rgmanager. # # (3) Do NOT place this script in shared storage; place it in ORACLE_USER's -# home directory. +# home directory in non-clustered environments and /usr/share/cluster +# in rgmanager/Red Hat cluster environments. # # Oracle is a registered trademark of Oracle Corporation. # Oracle9i is a trademark of Oracle Corporation. +# Oracle10g is a trademark of Oracle Corporation. # All other trademarks are property of their respective owners. # . /etc/init.d/functions -declare SCRIPT="`basename $0`" +# +# Source stuff from /etc/sysconfig, but this may be overridden if +# this is being called as a cluster resource agent instead. +#. /etc/sysconfig/oracledb +declare SCRIPT="`basename $0`" +declare SCRIPTDIR="`dirname $0`" [ -n "$OCF_RESKEY_user" ] && ORACLE_USER=$OCF_RESKEY_user [ -n "$OCF_RESKEY_home" ] && ORACLE_HOME=$OCF_RESKEY_home [ -n "$OCF_RESKEY_name" ] && ORACLE_SID=$OCF_RESKEY_name [ -n "$OCF_RESKEY_lockfile" ] && LOCKFILE=$OCF_RESKEY_lockfile - +[ -n "$OCF_RESKEY_type" ] && ORACLE_TYPE=$OCF_RESKEY_type +[ -n "$OCF_RESKEY_vhost" ] && ORACLE_HOSTNAME=$OCF_RESKEY_vhost ###################################################### # Customize these to match your Oracle installation. # @@ -57,7 +64,7 @@ declare SCRIPT="`basename $0`" # to the Oracle user and restart. Oracle needs to run as the Oracle # user, not as root. # -[ -n "$ORACLE_USER" ] || ORACLE_USER=oracle +#[ -n "$ORACLE_USER" ] || ORACLE_USER=oracle # # 2. Oracle home. This is set up during the installation phase of Oracle. @@ -65,27 +72,43 @@ declare SCRIPT="`basename $0`" # you intend to use as the mount point for your Oracle Infrastructure # service. # -[ -n "$ORACLE_HOME" ] || ORACLE_HOME=/mnt/oracle/oracle-10g +#[ -n "$ORACLE_HOME" ] || ORACLE_HOME=/mnt/oracle/home # # 3. This is your SID. This is set up during oracle installation as well. # -[ -n "$ORACLE_SID" ] || ORACLE_SID=asdb +#[ -n "$ORACLE_SID" ] || ORACLE_SID=orcl # # 4. The oracle user probably doesn't have the permission to write to # /var/lock/subsys, so use the user's home directory. # -[ -n "$LOCKFILE" ] || LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" -#[ -n "$LOCKFILE" ] || LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" +#[ -n "$LOCKFILE" ] || LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" +[ -n "$LOCKFILE" ] || LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" #[ -n "$LOCKFILE" ] || LOCKFILE="/var/lock/subsys/oracle-ias" # Watch privileges +# +# 5. Type of Oracle Database. Currently supported: 10g 10g-iAS(untested!) +# +[ -n "$ORACLE_TYPE" ] || ORACLE_TYPE=10g + +# +# 6. Oracle virtual hostname. This is the hostname you gave Oracle during +# installation. +# +#[ -n "$ORACLE_HOSTNAME" ] || ORACLE_HOSTNAME=svc0.foo.test.com + + + ########################################################################### -export ORACLE_USER ORACLE_HOME ORACLE_SID LOCKFILE +ORACLE_TYPE=`echo $ORACLE_TYPE | tr A-Z a-z` +export ORACLE_USER ORACLE_HOME ORACLE_SID LOCKFILE ORACLE_TYPE +export ORACLE_HOSTNAME ########################## -# Set up paths we'll use. +# Set up paths we'll use. Not all are used by all the different types of +# Oracle installations # export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/opmn/lib export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH @@ -98,13 +121,6 @@ declare -r DB_PROCNAMES="pmon" declare -r LSNR_PROCNAME="tnslsnr" #declare -r LSNR_PROCNAME="tnslsnrXX" # testing -# -# The oracle user probably doesn't have the permission to write to -# /var/lock/subsys, so use the user's home directory. -# -declare -r LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" -#declare -r LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" -#declare -r LOCKFILE="/var/lock/subsys/oracle-ias" # Watch privileges ########################################################## # (Hopefully) No user-serviceable parts below this line. # @@ -113,14 +129,14 @@ meta_data() { cat < - + 1.0 - Oracle Application 10g Failover Instance + Oracle 10g Failover Instance - Oracle Application 10g Failover Instance + Oracle 10g Failover Instance @@ -145,7 +161,7 @@ meta_data() - + This is the Oracle (application, not user) home directory. This is configured when you install Oracle. @@ -156,6 +172,32 @@ meta_data() + + + This is the Oracle installation type. + Only "10g" and "10g-ias" are supported, and 10g-ias is + untested. + + + Oracle Installation Type + + + + + + + Virtual Hostname matching the installation hostname of + Oracle 10g. Note that during the start/stop of an oracledb + resource, your hostname will temporarily be changed to + this hostname. As such, it is recommended that oracledb + resources be instanced as part of an exclusive service only. + + + Virtual Hostname + + + + @@ -176,7 +218,7 @@ meta_data() - + @@ -615,15 +657,15 @@ validation_checks() # # If the oracle user doesn't exist, we're done. # - [ -n "$ORACLE_USER" ] || oops ORACLE_USER - id -u $ORACLE_USER > /dev/null || oops ORACLE_USER - id -g $ORACLE_USER > /dev/null || oops ORACLE_USER + [ -n "$ORACLE_USER" ] || oops "ORACLE_USER" + id -u $ORACLE_USER > /dev/null || oops "ORACLE_USER" + id -g $ORACLE_USER > /dev/null || oops "ORACLE_USER" # # If the oracle home isn't a directory, we're done # [ -n "$ORACLE_HOME" ] || oops ORACLE_HOME - [ -d "$ORACLE_HOME" ] || oops ORACLE_HOME + #[ -d "$ORACLE_HOME" ] || oops ORACLE_HOME # # If the oracle SID is NULL, we're done @@ -631,13 +673,27 @@ validation_checks() [ -n "$ORACLE_SID" ] || oops ORACLE_SID # + # If we don't know the type, we're done + # + [ "$ORACLE_TYPE" = "10g" ] || [ "$ORACLE_TYPE" = "10g-ias" ] || oops ORACLE_TYPE + + # + # If the hostname is zero-length, fix it + # + [ -n "$ORACLE_HOSTNAME" ] || ORACLE_HOSTNAME=`hostname` + + # # Super user? Automatically change UID and exec as oracle user. # Oracle needs to be run as the Oracle user, not root! # if [ "`id -u`" = "0" ]; then - echo "Restarting as $ORACLE_USER." - #exec su - $ORACLE_USER -c "$0 $*" - exec sudo -u $ORACLE_USER $0 $* + echo "Restarting $0 as $ORACLE_USER." + # + # Breaks on RHEL5 + # exec sudo -u $ORACLE_USER $0 $* + # + su $ORACLE_USER -c "$0 $*" + exit $? fi # @@ -658,12 +714,18 @@ validation_checks() # # Start Oracle9i Application Server Infrastructure # -start_ias() +start_oracle() { faction "Starting Oracle Database:" start_db || return 1 action "Starting Oracle Listener:" lsnrctl start || return 1 - action "Starting Oracle EM:" emctl start em || return 1 - action "Starting iAS Infrastructure:" opmnctl startall || return 1 + + if [ "$ORACLE_TYPE" = "10g" ]; then + action "Starting iSQL*Plus:" isqlplusctl start || return 1 + action "Starting Oracle EM DB Console:" emctl start dbconsole || return 1 + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + action "Starting Oracle EM:" emctl start em || return 1 + action "Starting iAS Infrastructure:" opmnctl startall || return 1 + fi if [ -n "$LOCKFILE" ]; then touch $LOCKFILE @@ -675,10 +737,22 @@ start_ias() # # Stop Oracle9i Application Server Infrastructure # -stop_ias() +stop_oracle() { - action "Stopping iAS Infrastructure:" opmnctl stopall || return 1 - action "Stopping Oracle EM:" emctl stop em || return 1 + if ! [ -e "$ORACLE_HOME/bin/lsnrctl" ]; then + echo "Oracle Listener Control is not available" + echo " ($ORACLE_HOME not mounted?)" + return 0 + fi + + if [ "$ORACLE_TYPE" = "10g" ]; then + action "Stopping Oracle EM DB Console:" emctl stop dbconsole || return 1 + action "Stopping iSQL*Plus:" isqlplusctl stop || return 1 + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + action "Stopping iAS Infrastructure:" opmnctl stopall || return 1 + action "Stopping Oracle EM:" emctl stop em || return 1 + fi + faction "Stopping Oracle Database:" stop_db || return 1 action "Stopping Oracle Listener:" lsnrctl stop faction "Waiting for all Oracle processes to exit:" exit_idle @@ -712,7 +786,7 @@ stop_ias() # - If all are running, return 0. In the "all-running" case, we recreate # $LOCKFILE if it does not exist. # -status_ias() +status_oracle() { declare -i subsys_lock=1 declare -i last @@ -735,10 +809,17 @@ status_ias() update_status $? $last last=$? - # Check & report opmn / opmn-managed process status - get_opmn_status $subsys_lock $depth - update_status $? $last - last=$? + if [ "$ORACLE_TYPE" = "10g" ]; then + # XXX Add isqlplus status check?! + emctl status dbconsole 2>&1 | grep "is running" + update_status $? $last + last=$? + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + # Check & report opmn / opmn-managed process status + get_opmn_status $subsys_lock $depth + update_status $? $last + last=$? + fi # # No lock file, but everything's running. Put the lock @@ -755,38 +836,34 @@ status_ias() ######################## # Do some real work... # ######################## +if [ "$1" = "meta-data" ]; then + meta_data + exit 0 +fi + +validation_checks $* + case $1 in - meta-data) - meta_data - exit $? - ;; - validate-all) - validation_checks $* - exit 0 # XXX XXX XXX - ;; start) - validation_checks $* - start_ias + start_oracle exit $? ;; stop) - validation_checks $* - stop_ias + stop_oracle exit $? ;; status|monitor) - validation_checks $* - status_ias $OCF_CHECK_LEVEL + status_oracle $OCF_CHECK_LEVEL exit $? ;; restart) $0 stop || exit $? $0 start || exit $? - exit $OCF_SUCCESS + exit 0 ;; *) - echo "usage: $SCRIPT {start|stop|status|restart|validate-all|monitor}" - exit $OCF_ERR_UNIMPLEMENTED + echo "usage: $SCRIPT {start|stop|status|restart|meta-data}" + exit 1 ;; -esac +esac exit 0 hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 4 22:52:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 04 Mar 2008 22:52:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-57-g9941c55 Message-ID: <20080304225218.24142.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=9941c556945e8e802738b2a700636293ec5696fd The branch, master has been updated via 9941c556945e8e802738b2a700636293ec5696fd (commit) from 72d3a7438aef3d8c31873fb96544f7540fdb8e47 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9941c556945e8e802738b2a700636293ec5696fd Author: Lon Hohberger Date: Tue Mar 4 17:24:15 2008 -0500 [fence] Make fence_xvmd support reloading of key files on the fly. ----------------------------------------------------------------------- Summary of changes: fence/agents/xvm/fence_xvm.c | 2 +- fence/agents/xvm/fence_xvmd.c | 31 +++++++++++++++++++++++++++++-- fence/agents/xvm/simple_auth.c | 2 ++ fence/agents/xvm/xvm.h | 1 + 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/fence/agents/xvm/fence_xvm.c b/fence/agents/xvm/fence_xvm.c index 4ce4693..8c8ce64 100644 --- a/fence/agents/xvm/fence_xvm.c +++ b/fence/agents/xvm/fence_xvm.c @@ -219,7 +219,7 @@ int fence_xen_domain(fence_xvm_args_t *args) { ip_list_t ipl; - char key[4096]; + char key[MAX_KEY_LEN]; int lfd, key_len = 0, fd; int attempts = 0; diff --git a/fence/agents/xvm/fence_xvmd.c b/fence/agents/xvm/fence_xvmd.c index 82f08f5..1280310 100644 --- a/fence/agents/xvm/fence_xvmd.c +++ b/fence/agents/xvm/fence_xvmd.c @@ -57,6 +57,7 @@ #define LIBVIRT_XEN_URI "xen:///" static int running = 1; +static int reload_key; int cleanup_xml(char *xmldesc, char **ret, size_t *retsz); @@ -573,6 +574,27 @@ xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args, virConnectClose(vp); vp = NULL; } + + if (reload_key) { + char temp_key[MAX_KEY_LEN]; + int ret; + + reload_key = 0; + + ret = read_key_file(args->key_file, temp_key, sizeof(temp_key)); + if (ret < 0) { + printf("Could not read %s; not updating key", + args->key_file); + } else { + memcpy(key, temp_key, MAX_KEY_LEN); + key_len = (size_t) ret; + + if (args->auth == AUTH_NONE) + args->auth = AUTH_SHA256; + if (args->hash == HASH_NONE) + args->hash = HASH_SHA256; + } + } n = select(fd+1, &rfds, NULL, NULL, &tv); if (n < 0) @@ -678,6 +700,11 @@ sigint_handler(int sig) running = 0; } +void +sighup_handler(int sig) +{ + reload_key = 1; +} void malloc_dump_table(void); @@ -687,7 +714,7 @@ main(int argc, char **argv) { fence_xvm_args_t args; int mc_sock; - char key[4096]; + char key[MAX_KEY_LEN]; int key_len = 0, x; char *my_options = "dfi:a:p:C:c:k:u?hLXV"; cman_handle_t ch = NULL; @@ -780,7 +807,6 @@ main(int argc, char **argv) if (x) printf("Checkpoint initialized\n"); } - if (args.family == PF_INET) mc_sock = ipv4_recv_sk(args.addr, args.port); else @@ -791,6 +817,7 @@ main(int argc, char **argv) } + signal(SIGHUP, sighup_handler); signal(SIGINT, sigint_handler); signal(SIGTERM, sigint_handler); signal(SIGQUIT, sigint_handler); diff --git a/fence/agents/xvm/simple_auth.c b/fence/agents/xvm/simple_auth.c index 0064e5c..7eb26ee 100644 --- a/fence/agents/xvm/simple_auth.c +++ b/fence/agents/xvm/simple_auth.c @@ -390,6 +390,8 @@ read_key_file(char *file, char *key, size_t max_len) while (remain) { nread = read(fd, p, remain); if (nread < 0) { + if (errno == EINTR) + continue; dbg_printf(2, "Error from read: %s\n", strerror(errno)); close(fd); return -1; diff --git a/fence/agents/xvm/xvm.h b/fence/agents/xvm/xvm.h index bee9f3f..4272246 100644 --- a/fence/agents/xvm/xvm.h +++ b/fence/agents/xvm/xvm.h @@ -59,6 +59,7 @@ typedef enum { #define DEFAULT_TTL 4 #define MAX_HASH_LENGTH SHA512_LENGTH +#define MAX_KEY_LEN 4096 typedef struct __attribute__ ((packed)) _fence_req { uint8_t request; /* Fence request */ hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 4 22:52:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 04 Mar 2008 22:52:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-6-gd5e690a Message-ID: <20080304225218.24107.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d5e690aa185be4fcaa411f82016c59921a729e5e The branch, RHEL5 has been updated via d5e690aa185be4fcaa411f82016c59921a729e5e (commit) from a02dfd2bcbe018c550ea04895ba4335da8dff4b0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d5e690aa185be4fcaa411f82016c59921a729e5e Author: Lon Hohberger Date: Tue Mar 4 17:31:32 2008 -0500 [CMAN] make qdisk master abdication work in all cases Red Hat bugzilla 430264 ----------------------------------------------------------------------- Summary of changes: cman/qdisk/main.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index 17e74ef..b3c29f4 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -920,7 +920,8 @@ quorum_loop(qd_ctx *ctx, node_info_t *ni, int max) ctx->qc_master = master_exists(ctx, ni, max, &low_id, &count); /* Resolve master conflict, if one exists */ - if (count > 1 && ctx->qc_status == S_MASTER) { + if (count >= 1 && ctx->qc_status == S_MASTER && + ctx->qc_master != ctx->qc_my_id) { clulog(LOG_WARNING, "Master conflict: abdicating\n"); /* Handle just like a recent upgrade */ hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 4 22:59:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 04 Mar 2008 22:59:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-6-g595e3ca Message-ID: <20080304225905.25769.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c The branch, RHEL4 has been updated via 595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c (commit) from b95f5dd435df474b5b5c55927ae86b52f21c0b28 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c Author: Lon Hohberger Date: Tue Mar 4 17:58:50 2008 -0500 [rgmanager] Add Oracle 10g database failover agent to RHEL4 branch ----------------------------------------------------------------------- Summary of changes: rgmanager/ChangeLog | 4 + rgmanager/src/resources/Makefile | 2 +- rgmanager/src/resources/{oracleas => oracledb.sh} | 185 +++++++++++++++------ 3 files changed, 139 insertions(+), 52 deletions(-) rename rgmanager/src/resources/{oracleas => oracledb.sh} (77%) diff --git a/rgmanager/ChangeLog b/rgmanager/ChangeLog index eb48f45..f4092f8 100644 --- a/rgmanager/ChangeLog +++ b/rgmanager/ChangeLog @@ -1,3 +1,7 @@ +2008-03-04 Lon Hohberger + * src/resources/Makefile, oracledb.sh: Add Oracle 10g failover + support (#182423) + 2008-02-26 Lon Hohberger * src/resources/ip.sh: Fix incorrect netmask handling; bz #434886 diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile index 5338b1c..d543468 100644 --- a/rgmanager/src/resources/Makefile +++ b/rgmanager/src/resources/Makefile @@ -21,7 +21,7 @@ RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \ script.sh netfs.sh clusterfs.sh smb.sh \ apache.sh openldap.sh samba.sh mysql.sh \ postgres-8.sh tomcat-5.sh lvm.sh lvm_by_lv.sh lvm_by_vg.sh \ - SAPInstance SAPDatabase + SAPInstance SAPDatabase oracledb.sh METADATA=apache.metadata openldap.metadata samba.metadata \ mysql.metadata postgres-8.metadata tomcat-5.metadata \ diff --git a/rgmanager/src/resources/oracleas b/rgmanager/src/resources/oracledb.sh similarity index 77% rename from rgmanager/src/resources/oracleas rename to rgmanager/src/resources/oracledb.sh index 21056df..5b8e113 100755 --- a/rgmanager/src/resources/oracleas +++ b/rgmanager/src/resources/oracledb.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2003-2004 Red Hat, Inc. +# Copyright 2003-2004, 2006-2007 Red Hat, Inc. # # Author(s): # Hardy Merrill @@ -15,10 +15,8 @@ # # chkconfig: 345 99 01 # description: Service script for starting/stopping \ -# Oracle(R) Application Server software on: \ -# Red Hat Enterprise Linux 2.1 AS \ -# Red Hat Enterprise Linux 3 AS \ -# Red Hat Enterprise Linux 3 ES +# Oracle(R) Database 10g on \ +# Red Hat Enterprise Linux 5 # # NOTES: # @@ -26,27 +24,36 @@ # the need for this script to access anything outside of the ORACLE_HOME # path. # -# (2) You MUST customize ORACLE_USER, ORACLE_HOME, and ORACLE_SID to match -# your installation! +# (2) You MUST customize ORACLE_USER, ORACLE_HOME, ORACLE_SID, and +# ORACLE_HOSTNAME to match your installation if not running from within +# rgmanager. # # (3) Do NOT place this script in shared storage; place it in ORACLE_USER's -# home directory. +# home directory in non-clustered environments and /usr/share/cluster +# in rgmanager/Red Hat cluster environments. # # Oracle is a registered trademark of Oracle Corporation. # Oracle9i is a trademark of Oracle Corporation. +# Oracle10g is a trademark of Oracle Corporation. # All other trademarks are property of their respective owners. # . /etc/init.d/functions -declare SCRIPT="`basename $0`" +# +# Source stuff from /etc/sysconfig, but this may be overridden if +# this is being called as a cluster resource agent instead. +#. /etc/sysconfig/oracledb +declare SCRIPT="`basename $0`" +declare SCRIPTDIR="`dirname $0`" [ -n "$OCF_RESKEY_user" ] && ORACLE_USER=$OCF_RESKEY_user [ -n "$OCF_RESKEY_home" ] && ORACLE_HOME=$OCF_RESKEY_home [ -n "$OCF_RESKEY_name" ] && ORACLE_SID=$OCF_RESKEY_name [ -n "$OCF_RESKEY_lockfile" ] && LOCKFILE=$OCF_RESKEY_lockfile - +[ -n "$OCF_RESKEY_type" ] && ORACLE_TYPE=$OCF_RESKEY_type +[ -n "$OCF_RESKEY_vhost" ] && ORACLE_HOSTNAME=$OCF_RESKEY_vhost ###################################################### # Customize these to match your Oracle installation. # @@ -57,7 +64,7 @@ declare SCRIPT="`basename $0`" # to the Oracle user and restart. Oracle needs to run as the Oracle # user, not as root. # -[ -n "$ORACLE_USER" ] || ORACLE_USER=oracle +#[ -n "$ORACLE_USER" ] || ORACLE_USER=oracle # # 2. Oracle home. This is set up during the installation phase of Oracle. @@ -65,27 +72,43 @@ declare SCRIPT="`basename $0`" # you intend to use as the mount point for your Oracle Infrastructure # service. # -[ -n "$ORACLE_HOME" ] || ORACLE_HOME=/mnt/oracle/oracle-10g +#[ -n "$ORACLE_HOME" ] || ORACLE_HOME=/mnt/oracle/home # # 3. This is your SID. This is set up during oracle installation as well. # -[ -n "$ORACLE_SID" ] || ORACLE_SID=asdb +#[ -n "$ORACLE_SID" ] || ORACLE_SID=orcl # # 4. The oracle user probably doesn't have the permission to write to # /var/lock/subsys, so use the user's home directory. # -[ -n "$LOCKFILE" ] || LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" -#[ -n "$LOCKFILE" ] || LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" +#[ -n "$LOCKFILE" ] || LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" +[ -n "$LOCKFILE" ] || LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" #[ -n "$LOCKFILE" ] || LOCKFILE="/var/lock/subsys/oracle-ias" # Watch privileges +# +# 5. Type of Oracle Database. Currently supported: 10g 10g-iAS(untested!) +# +[ -n "$ORACLE_TYPE" ] || ORACLE_TYPE=10g + +# +# 6. Oracle virtual hostname. This is the hostname you gave Oracle during +# installation. +# +#[ -n "$ORACLE_HOSTNAME" ] || ORACLE_HOSTNAME=svc0.foo.test.com + + + ########################################################################### -export ORACLE_USER ORACLE_HOME ORACLE_SID LOCKFILE +ORACLE_TYPE=`echo $ORACLE_TYPE | tr A-Z a-z` +export ORACLE_USER ORACLE_HOME ORACLE_SID LOCKFILE ORACLE_TYPE +export ORACLE_HOSTNAME ########################## -# Set up paths we'll use. +# Set up paths we'll use. Not all are used by all the different types of +# Oracle installations # export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/opmn/lib export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH @@ -98,13 +121,6 @@ declare -r DB_PROCNAMES="pmon" declare -r LSNR_PROCNAME="tnslsnr" #declare -r LSNR_PROCNAME="tnslsnrXX" # testing -# -# The oracle user probably doesn't have the permission to write to -# /var/lock/subsys, so use the user's home directory. -# -declare -r LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" -#declare -r LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" -#declare -r LOCKFILE="/var/lock/subsys/oracle-ias" # Watch privileges ########################################################## # (Hopefully) No user-serviceable parts below this line. # @@ -113,14 +129,14 @@ meta_data() { cat < - + 1.0 - Oracle Application 10g Failover Instance + Oracle 10g Failover Instance - Oracle Application 10g Failover Instance + Oracle 10g Failover Instance @@ -145,7 +161,7 @@ meta_data() - + This is the Oracle (application, not user) home directory. This is configured when you install Oracle. @@ -156,6 +172,32 @@ meta_data() + + + This is the Oracle installation type. + Only "10g" and "10g-ias" are supported, and 10g-ias is + untested. + + + Oracle Installation Type + + + + + + + Virtual Hostname matching the installation hostname of + Oracle 10g. Note that during the start/stop of an oracledb + resource, your hostname will temporarily be changed to + this hostname. As such, it is recommended that oracledb + resources be instanced as part of an exclusive service only. + + + Virtual Hostname + + + + @@ -615,15 +657,15 @@ validation_checks() # # If the oracle user doesn't exist, we're done. # - [ -n "$ORACLE_USER" ] || oops ORACLE_USER - id -u $ORACLE_USER > /dev/null || oops ORACLE_USER - id -g $ORACLE_USER > /dev/null || oops ORACLE_USER + [ -n "$ORACLE_USER" ] || oops "ORACLE_USER" + id -u $ORACLE_USER > /dev/null || oops "ORACLE_USER" + id -g $ORACLE_USER > /dev/null || oops "ORACLE_USER" # # If the oracle home isn't a directory, we're done # [ -n "$ORACLE_HOME" ] || oops ORACLE_HOME - [ -d "$ORACLE_HOME" ] || oops ORACLE_HOME + #[ -d "$ORACLE_HOME" ] || oops ORACLE_HOME # # If the oracle SID is NULL, we're done @@ -631,13 +673,27 @@ validation_checks() [ -n "$ORACLE_SID" ] || oops ORACLE_SID # + # If we don't know the type, we're done + # + [ "$ORACLE_TYPE" = "10g" ] || [ "$ORACLE_TYPE" = "10g-ias" ] || oops ORACLE_TYPE + + # + # If the hostname is zero-length, fix it + # + [ -n "$ORACLE_HOSTNAME" ] || ORACLE_HOSTNAME=`hostname` + + # # Super user? Automatically change UID and exec as oracle user. # Oracle needs to be run as the Oracle user, not root! # if [ "`id -u`" = "0" ]; then - echo "Restarting as $ORACLE_USER." - #exec su - $ORACLE_USER -c "$0 $*" - exec sudo -u $ORACLE_USER $0 $* + echo "Restarting $0 as $ORACLE_USER." + # + # Breaks on RHEL5 + # exec sudo -u $ORACLE_USER $0 $* + # + su $ORACLE_USER -c "$0 $*" + exit $? fi # @@ -658,12 +714,18 @@ validation_checks() # # Start Oracle9i Application Server Infrastructure # -start_ias() +start_oracle() { faction "Starting Oracle Database:" start_db || return 1 action "Starting Oracle Listener:" lsnrctl start || return 1 - action "Starting Oracle EM:" emctl start em || return 1 - action "Starting iAS Infrastructure:" opmnctl startall || return 1 + + if [ "$ORACLE_TYPE" = "10g" ]; then + action "Starting iSQL*Plus:" isqlplusctl start || return 1 + action "Starting Oracle EM DB Console:" emctl start dbconsole || return 1 + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + action "Starting Oracle EM:" emctl start em || return 1 + action "Starting iAS Infrastructure:" opmnctl startall || return 1 + fi if [ -n "$LOCKFILE" ]; then touch $LOCKFILE @@ -675,10 +737,22 @@ start_ias() # # Stop Oracle9i Application Server Infrastructure # -stop_ias() +stop_oracle() { - action "Stopping iAS Infrastructure:" opmnctl stopall || return 1 - action "Stopping Oracle EM:" emctl stop em || return 1 + if ! [ -e "$ORACLE_HOME/bin/lsnrctl" ]; then + echo "Oracle Listener Control is not available" + echo " ($ORACLE_HOME not mounted?)" + return 0 + fi + + if [ "$ORACLE_TYPE" = "10g" ]; then + action "Stopping Oracle EM DB Console:" emctl stop dbconsole || return 1 + action "Stopping iSQL*Plus:" isqlplusctl stop || return 1 + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + action "Stopping iAS Infrastructure:" opmnctl stopall || return 1 + action "Stopping Oracle EM:" emctl stop em || return 1 + fi + faction "Stopping Oracle Database:" stop_db || return 1 action "Stopping Oracle Listener:" lsnrctl stop faction "Waiting for all Oracle processes to exit:" exit_idle @@ -712,7 +786,7 @@ stop_ias() # - If all are running, return 0. In the "all-running" case, we recreate # $LOCKFILE if it does not exist. # -status_ias() +status_oracle() { declare -i subsys_lock=1 declare -i last @@ -735,10 +809,17 @@ status_ias() update_status $? $last last=$? - # Check & report opmn / opmn-managed process status - get_opmn_status $subsys_lock $depth - update_status $? $last - last=$? + if [ "$ORACLE_TYPE" = "10g" ]; then + # XXX Add isqlplus status check?! + emctl status dbconsole 2>&1 | grep "is running" + update_status $? $last + last=$? + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + # Check & report opmn / opmn-managed process status + get_opmn_status $subsys_lock $depth + update_status $? $last + last=$? + fi # # No lock file, but everything's running. Put the lock @@ -756,21 +837,23 @@ status_ias() # Do some real work... # ######################## if [ "$1" = "meta-data" ]; then + meta_data exit 0 fi + validation_checks $* case $1 in start) - start_ias + start_oracle exit $? ;; stop) - stop_ias + stop_oracle exit $? ;; status|monitor) - status_ias $OCF_CHECK_LEVEL + status_oracle $OCF_CHECK_LEVEL exit $? ;; restart) @@ -779,8 +862,8 @@ case $1 in exit 0 ;; *) - echo "usage: $SCRIPT {start|stop|status|restart}" + echo "usage: $SCRIPT {start|stop|status|restart|meta-data}" exit 1 ;; -esac +esac exit 0 hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 5 00:03:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 05 Mar 2008 00:03:00 -0000 Subject: Cluster Project tag, cman_1_0_21, created. gfs-kernel_2_6_9_76-6-g2a08798 Message-ID: <20080305000333.23443.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=2a08798bc9b438789e315e638f1911223863ed4f The tag, cman_1_0_21 has been created at 2a08798bc9b438789e315e638f1911223863ed4f (commit) - Log ----------------------------------------------------------------- commit 2a08798bc9b438789e315e638f1911223863ed4f Author: Chris Feist Date: Tue Mar 4 17:49:04 2008 -0600 Fixed makefiles to build. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 5 00:03:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 05 Mar 2008 00:03:00 -0000 Subject: Cluster Project tag, cman_, created. gfs-kernel_2_6_9_76-6-g2a08798 Message-ID: <20080305000332.23344.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=2a08798bc9b438789e315e638f1911223863ed4f The tag, cman_ has been created at 2a08798bc9b438789e315e638f1911223863ed4f (commit) - Log ----------------------------------------------------------------- commit 2a08798bc9b438789e315e638f1911223863ed4f Author: Chris Feist Date: Tue Mar 4 17:49:04 2008 -0600 Fixed makefiles to build. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 5 00:03:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 05 Mar 2008 00:03:00 -0000 Subject: Cluster Project tag, cman_1_0_19, created. gfs-kernel_2_6_9_76-2-g7cd1be5 Message-ID: <20080305000333.23369.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=7cd1be561cdb08155964672d0afc2cbe32a5af37 The tag, cman_1_0_19 has been created at 7cd1be561cdb08155964672d0afc2cbe32a5af37 (commit) - Log ----------------------------------------------------------------- commit 7cd1be561cdb08155964672d0afc2cbe32a5af37 Author: Lon Hohberger Date: Fri Feb 8 18:38:41 2008 +0000 Fix unused variable error ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 5 00:03:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 05 Mar 2008 00:03:00 -0000 Subject: Cluster Project tag, cman_1_0_20, created. gfs-kernel_2_6_9_76-2-g7cd1be5 Message-ID: <20080305000333.23406.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=7cd1be561cdb08155964672d0afc2cbe32a5af37 The tag, cman_1_0_20 has been created at 7cd1be561cdb08155964672d0afc2cbe32a5af37 (commit) - Log ----------------------------------------------------------------- commit 7cd1be561cdb08155964672d0afc2cbe32a5af37 Author: Lon Hohberger Date: Fri Feb 8 18:38:41 2008 +0000 Fix unused variable error ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 5 00:09:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 05 Mar 2008 00:09:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-8-g1befab3 Message-ID: <20080305000952.5976.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1befab3b0e83584f08b06b816adbc0f8b9dc11ab The branch, RHEL4 has been updated via 1befab3b0e83584f08b06b816adbc0f8b9dc11ab (commit) via 2a08798bc9b438789e315e638f1911223863ed4f (commit) from 595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1befab3b0e83584f08b06b816adbc0f8b9dc11ab Merge: 2a08798bc9b438789e315e638f1911223863ed4f 595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c Author: Chris Feist Date: Tue Mar 4 18:08:41 2008 -0600 Merge branch 'RHEL4' of ssh://sources.redhat.com/git/cluster into r4 commit 2a08798bc9b438789e315e638f1911223863ed4f Author: Chris Feist Date: Tue Mar 4 17:49:04 2008 -0600 Fixed makefiles to build. ----------------------------------------------------------------------- Summary of changes: cman/Makefile | 2 +- cman/cman_tool/Makefile | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cman/Makefile b/cman/Makefile index 3d96ef1..06043ed 100644 --- a/cman/Makefile +++ b/cman/Makefile @@ -12,8 +12,8 @@ ############################################################################### all: - cd cman_tool && ${MAKE} all cd lib && ${MAKE} all + cd cman_tool && ${MAKE} all cd qdisk && ${MAKE} all copytobin: diff --git a/cman/cman_tool/Makefile b/cman/cman_tool/Makefile index a83f2e0..8c3a692 100644 --- a/cman/cman_tool/Makefile +++ b/cman/cman_tool/Makefile @@ -28,6 +28,8 @@ else CFLAGS += -I${incdir}/cluster endif +CFLAGS += -I../lib + TARGET=cman_tool @@ -37,7 +39,7 @@ copytobin: all cp ${TARGET} ${top_srcdir}/bin cman_tool: main.o join.o join_ccs.o - $(CC) $(LDFLAGS) -L$(libdir) -o $@ $^ -lccs -lcman + $(CC) $(LDFLAGS) -L$(libdir) -L../lib -o $@ $^ -lccs -lcman main.o: main.c cman_tool.h $(CC) $(CFLAGS) -c -o $@ $< hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 5 20:07:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 05 Mar 2008 20:07:00 -0000 Subject: Cluster Project tag, fence_1_32_51, created. gfs-kernel_2_6_9_76-1-g515aa3d Message-ID: <20080305200744.4395.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=515aa3da10e9d73a238cc017ef9a5e4dc9556266 The tag, fence_1_32_51 has been created at 515aa3da10e9d73a238cc017ef9a5e4dc9556266 (commit) - Log ----------------------------------------------------------------- commit 515aa3da10e9d73a238cc017ef9a5e4dc9556266 Author: Ryan O'Hara Date: Wed Feb 6 17:39:17 2008 +0000 BZ 431002 - Support for LVM stripes, mirrors. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Wed Mar 5 23:08:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 05 Mar 2008 23:08:00 -0000 Subject: conga/luci cluster/cluster_svc-macros cluster/ ... Message-ID: <20080305230858.13413.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-05 23:08:58 Modified files: luci/cluster : cluster_svc-macros resource-form-macros resource_form_handlers.js luci/site/luci/Extensions: LuciClusterActions.py LuciDB.py LuciValidation.py LuciZope.py ResourceHandler.py RicciQueries.py cluster_adapters.py conga_constants.py Added files: luci/site/luci/Extensions/ClusterModel: OracleDB.py SybaseASE.py Log message: Add Sybase resource agent support Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&r1=1.47&r2=1.48 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.43&r2=1.44 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&r1=1.281&r2=1.282 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&r1=1.49&r2=1.50 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py.diff?cvsroot=cluster&r1=NONE&r2=1.1 From ccaulfield@sourceware.org Thu Mar 6 15:31:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Thu, 06 Mar 2008 15:31:00 -0000 Subject: Cluster Project branch, STABLE2, updated. gfs-kernel_0_1_22-44-g1f0985d Message-ID: <20080306153144.10199.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1f0985dfe6d4d79a539abbe4a681c10296837d91 The branch, STABLE2 has been updated via 1f0985dfe6d4d79a539abbe4a681c10296837d91 (commit) from 9e71edd75f382449fabd241962b07e3536725427 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1f0985dfe6d4d79a539abbe4a681c10296837d91 Author: Christine Caulfield Date: Thu Mar 6 15:29:06 2008 +0000 Make cman work with openais trunk or whitetank branch. By default cman will require the trunk of openais, but uncommenting a line in the Makefile will allow it to work with the whitetank branch instead. Someone who understands the make system might like to add this to ./configure. ----------------------------------------------------------------------- Summary of changes: cman/daemon/Makefile | 1 + cman/daemon/ais.c | 3 +-- cman/daemon/commands.c | 1 - cman/daemon/logging.c | 34 +++++++++++++++++++++++++++++++++- cman/daemon/logging.h | 16 +++++++++++++++- 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/cman/daemon/Makefile b/cman/daemon/Makefile index d32f7bb..ff169e1 100644 --- a/cman/daemon/Makefile +++ b/cman/daemon/Makefile @@ -26,6 +26,7 @@ CFLAGS += -DOPENAIS_EXTERNAL_SERVICE CFLAGS += -fPIC CFLAGS += -I${ccsincdir} -I${openaisincdir} CFLAGS += -I${incdir} +#CFLAGS += -DOPENAIS_WHITETANK LDFLAGS += -L${ccslibdir} -lccs diff --git a/cman/daemon/ais.c b/cman/daemon/ais.c index 286fd15..6f81453 100644 --- a/cman/daemon/ais.c +++ b/cman/daemon/ais.c @@ -37,7 +37,6 @@ #include #include #include -#include #include "list.h" #include "cnxman-socket.h" @@ -139,7 +138,7 @@ static inline void objdb_get_int(struct objdb_iface_ver0 *objdb, unsigned int ob * Exports the interface for the service */ static struct openais_service_handler cman_service_handler = { - .name = (char *)"openais CMAN membership service 2.01", + .name = (unsigned char *)"openais CMAN membership service 2.01", .id = CMAN_SERVICE, .flow_control = OPENAIS_FLOW_CONTROL_NOT_REQUIRED, .lib_exit_fn = cman_exit_fn, diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index e090674..4696047 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include "list.h" diff --git a/cman/daemon/logging.c b/cman/daemon/logging.c index 782a573..f7c626c 100644 --- a/cman/daemon/logging.c +++ b/cman/daemon/logging.c @@ -20,8 +20,11 @@ #include #include #include - +#ifndef OPENAIS_WHITETANK #include +#else +#include +#endif #include "list.h" #include "cnxman-socket.h" #include "cnxman-private.h" @@ -35,3 +38,32 @@ void set_debuglog(int subsystems) { subsys_mask = subsystems; } + +#ifdef OPENAIS_WHITETANK +void set_logger_level(struct objdb_iface_ver0 *objdb, char *ident, int level) +{ + unsigned int object_handle; + unsigned int logger_object_handle; + + fprintf(stderr, "CC: setting logger levels\n"); + objdb->object_find_reset(OBJECT_PARENT_HANDLE); + if (objdb->object_find(OBJECT_PARENT_HANDLE, + "logging", strlen("logging"), + &object_handle)) { + + objdb->object_create (OBJECT_PARENT_HANDLE, &object_handle, + "logging", strlen("logging")); + } + + objdb->object_key_create(object_handle, "to_stderr", strlen("to_stderr"), + "yes", strlen("yes")+1); + + objdb->object_create (object_handle, &logger_object_handle, + "logger", strlen("logger")); + + objdb->object_key_create(logger_object_handle, "ident", strlen("ident"), + ident, strlen(ident)+1); + objdb->object_key_create(logger_object_handle, "debug", strlen("debug"), + "on", strlen("on")+1); +} +#endif diff --git a/cman/daemon/logging.h b/cman/daemon/logging.h index dcb7932..83ceca2 100644 --- a/cman/daemon/logging.h +++ b/cman/daemon/logging.h @@ -9,7 +9,21 @@ ** ******************************************************************************* ******************************************************************************/ +#ifdef OPENAIS_WHITETANK +#include +#include + +#define LOGSYS_DECLARE_SUBSYS(subsys,priority) \ +__attribute__ ((constructor)) static void logsys_subsys_init (void) \ +{ \ + log_init(subsys); \ +} +void set_logger_level(struct objdb_iface_ver0 *objdb, char *ident, int level); +#define logsys_config_subsys_set(x,y,z) set_logger_level(global_objdb, x, z) + +#else #include +#endif extern void set_debuglog(int subsystems); @@ -22,7 +36,7 @@ extern void set_debuglog(int subsystems); extern int subsys_mask; -#define P_BARRIER(fmt, args...) if (subsys_mask & CMAN_DEBUG_BARRIER) log_printf(logsys_mkpri(LOG_LEVEL_DEBUG, logsys_subsys_id), "barrier: " fmt, ## args) +#define P_BARRIER(fmt, args...) if (subsys_mask & CMAN_DEBUG_BARRIER) log_printf(LOG_LEVEL_DEBUG , "barrier: " fmt, ## args) #define P_MEMB(fmt, args...) if (subsys_mask & CMAN_DEBUG_MEMB) log_printf(LOG_LEVEL_DEBUG , "memb: " fmt, ## args) #define P_DAEMON(fmt, args...) if (subsys_mask & CMAN_DEBUG_DAEMON) log_printf(LOG_LEVEL_DEBUG , "daemon: " fmt, ## args) #define P_AIS(fmt, args...) if (subsys_mask & CMAN_DEBUG_AIS) log_printf(LOG_LEVEL_DEBUG, "ais " fmt, ## args) hooks/post-receive -- Cluster Project From cfeist@sourceware.org Thu Mar 6 20:41:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Thu, 06 Mar 2008 20:41:00 -0000 Subject: Cluster Project tag, rgmanager_1_9_73, created. gfs-kernel_2_6_9_76-6-g595e3ca Message-ID: <20080306204119.349.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c The tag, rgmanager_1_9_73 has been created at 595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c (commit) - Log ----------------------------------------------------------------- commit 595e3cad6ac837bd37a7bd6b9280d1ca0c1e868c Author: Lon Hohberger Date: Tue Mar 4 17:58:50 2008 -0500 [rgmanager] Add Oracle 10g database failover agent to RHEL4 branch ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Thu Mar 6 20:41:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Thu, 06 Mar 2008 20:41:00 -0000 Subject: Cluster Project tag, magma-plugins_1_0_14, created. cman-kernel_2_6_9_55-10-g903b906 Message-ID: <20080306204119.329.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=903b90674afb18669f232c0b61e9a6d720dbe95c The tag, magma-plugins_1_0_14 has been created at 903b90674afb18669f232c0b61e9a6d720dbe95c (commit) - Log ----------------------------------------------------------------- commit 903b90674afb18669f232c0b61e9a6d720dbe95c Author: Lon Hohberger Date: Wed Jan 9 18:55:12 2008 +0000 Fix #294491 - make magma_sm.so retry in dlm EINPROG condition ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From teigland@sourceware.org Thu Mar 6 20:59:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 06 Mar 2008 20:59:00 -0000 Subject: Cluster Project annotated tag, cluster-2.02.00, created. cluster-2.02.00 Message-ID: <20080306205914.9981.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=7ae003d8477f0f3fdf337ea90146aa693a5591a5 The annotated tag, cluster-2.02.00 has been created at 7ae003d8477f0f3fdf337ea90146aa693a5591a5 (tag) tagging 1f0985dfe6d4d79a539abbe4a681c10296837d91 (commit) replaces gfs-kernel_0_1_22 tagged by David Teigland on Thu Mar 6 14:56:56 2008 -0600 - Log ----------------------------------------------------------------- cluster-2.02.00 release Chris Feist (4): Added date. (test git commit) Test git commit. Removed newline. Test git commit. Christine Caulfield (2): [CMAN] Don't ignore cman_tool version Make cman work with openais trunk or whitetank branch. David Teigland (1): updates Fabio M. Di Nitto (18): Update gnbd kernel modules to build with 2.6.24 EXPORT_SYMBOL(xtime) has been removed in 2.6.24. Update gfs to cope with 2.6.24 export op changes and other bits fix gfs for the removal of sendfile and helper functions Remove unused variable Fix build warning Bump kernel check to 2.6.24 Remove obsolete file Red Hat bugzilla 244343: Bugzilla 227892: Remove unrequire functions. This follow gfs2 changes Whitespace cleanup Stop linking against unrequired libraries. Cleanup man page. Man page cleanup. Clean up qdisk man page. Fix http://bugs.debian.org/465790 Sync missing commit from RHEL5 branch: Jonathan Brassow (2): - better checking for improper setup - Bug 431705: HA LVM should prevent users from running an invalid setup (2) Lon Hohberger (8): Fix #430272, #430220 Fix qdiskd master abdication logic (#430264) Make default TTL 4 instead of 2 per Fabio's recommendation (e.g. RFC2608). Make TTL configurable in cluster.conf/command line for fence_xvm. Make fenced's override wait time configurable. Fix short read handling in read_pipe Correct incorrect netmask handling in ip.sh * Make fence_ack_manual.sh accept -n Fix #435189 - fenced override doesn't allow rgmanager to recover because Patrick Caulfield (4): Improve startup error checking and logging. Oops. a bit too much cman3 fell into that last checkin Change a log_printf() into a syslog() so that the die message Implement a nicer way of getting the quorum disk information. Robert Peterson (1): Resolves: bz 223660: man gfs2(8) refers to the gfs2_mkfs manpage Ryan McCabe (3): Fix bz434790 Fix a few misspellings Feeling pedantic. More spelling fixes. ccaulfield (1): Allow unnamed parent objects. This fixes a bug where ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Thu Mar 6 21:27:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Thu, 06 Mar 2008 21:27:00 -0000 Subject: conga/luci cluster/cluster_svc-macros cluster/ ... Message-ID: <20080306212716.32718.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-06 21:27:16 Modified files: luci/cluster : cluster_svc-macros resource-form-macros resource_form_handlers.js luci/site/luci/Extensions: ResourceHandler.py luci/site/luci/Extensions/ClusterModel: ModelBuilder.py Log message: - UI support for the Oracle resource agent - Fix a bug that caused Sybase resources to not be displayed Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&r1=1.48&r2=1.49 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&r1=1.44&r2=1.45 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&r1=1.16&r2=1.17 From fabbione@sourceware.org Fri Mar 7 03:51:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 07 Mar 2008 03:51:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-58-g6679499 Message-ID: <20080307035130.19948.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=6679499462cb1d3f87047d7e23d1a73a5a9b68a4 The branch, master has been updated via 6679499462cb1d3f87047d7e23d1a73a5a9b68a4 (commit) from 9941c556945e8e802738b2a700636293ec5696fd (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6679499462cb1d3f87047d7e23d1a73a5a9b68a4 Author: Fabio M. Di Nitto Date: Fri Mar 7 04:45:05 2008 +0100 [BUILD] Fix configure script to handle releases Add concept of release_micro value used only for RELEASE_VERSION. Attention packagers: release_micro is a mandatory value. Add support for encoding release versions in the tarball by adding a file at release time: cluster/make$ cat official_release_version VERSION "2.2.10" will automatically set the release to 2.2.10 with library sonames to 2.2 NOTE: manual values will always override whatever is set by default. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: configure | 36 ++++++++++++++++++++++++++++++------ 1 files changed, 30 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 01901f8..fd7825e 100755 --- a/configure +++ b/configure @@ -82,6 +82,7 @@ my %options = ( enable_xen => \$enable_xen, release_major => \$release_major, release_minor => \$release_minor, + release_micro => \$release_micro, without_ccs => \$without_ccs, without_cman => \$without_cman, without_dlm => \$without_dlm, @@ -144,6 +145,7 @@ my $err = &GetOptions (\%options, 'conffile=s', 'release_major=s', 'release_minor=s', + 'release_micro=s', 'fence_agents=s', 'enable_xen', 'without_ccs', @@ -531,6 +533,9 @@ if (defined($release_major) && not length $release_major) { if (defined($release_minor) && not length $release_minor) { $release_minor=""; } +if (defined($release_micro) && not length $release_micro) { + $release_micro=""; +} @args = "find fence/agents -mindepth 2 -maxdepth 2 -name Makefile -printf '%h'"; open (IFILE, "@args |"); @@ -619,16 +624,35 @@ while () { close IFILE; -if ((not defined($release_major)) || (not defined($release_minor))) { - $release_major = DEVEL; - $release_minor = `date +%s`; - chomp $release_minor; +if ((not defined($release_major)) || (not defined($release_minor)) || (not defined($release_micro))) { + if ( -f 'make/official_release_version' ) { + my $current_version = 0; + open OFFICIAL_VERSION, '<', "make/official_release_version"; + while () { + if ($_ =~ /VERSION/) { + $current_version = $_; + last; + } + } + close OFFICIAL_VERSION; + $current_version =~ s/.*"(.*)"\n/$1/; + my @release_version = split /\./, $current_version; + $release_major = $release_version[0]; + $release_minor = $release_version[1]; + $release_micro = $release_version[2]; + } else { + $release_major = DEVEL; + $release_minor = `date +%s`; + chomp $release_minor; + $release_micro = 0; + } } print OFILE "RELEASE_MAJOR = $release_major\n"; print OFILE "RELEASE_MINOR = $release_minor\n"; -print OFILE "RELEASE_VERSION = $release_major.$release_minor\n"; -print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor\\\"\n"; +print OFILE "RELEASE_MICRO = $release_micro\n"; +print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; +print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; close OFILE; print "Completed Makefile configuration\n\n"; hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 7 03:53:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 07 Mar 2008 03:53:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-1-g3aa78ef Message-ID: <20080307035322.20522.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=3aa78efa2839cc3c00c8f70a3e2bb4c09ddc463c The branch, STABLE2 has been updated via 3aa78efa2839cc3c00c8f70a3e2bb4c09ddc463c (commit) from 1f0985dfe6d4d79a539abbe4a681c10296837d91 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 3aa78efa2839cc3c00c8f70a3e2bb4c09ddc463c Author: Fabio M. Di Nitto Date: Fri Mar 7 04:45:05 2008 +0100 [BUILD] Fix configure script to handle releases Add concept of release_micro value used only for RELEASE_VERSION. Attention packagers: release_micro is a mandatory value. Add support for encoding release versions in the tarball by adding a file at release time: cluster/make$ cat official_release_version VERSION "2.2.10" will automatically set the release to 2.2.10 with library sonames to 2.2 NOTE: manual values will always override whatever is set by default. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: configure | 36 ++++++++++++++++++++++++++++++------ 1 files changed, 30 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 01901f8..fd7825e 100755 --- a/configure +++ b/configure @@ -82,6 +82,7 @@ my %options = ( enable_xen => \$enable_xen, release_major => \$release_major, release_minor => \$release_minor, + release_micro => \$release_micro, without_ccs => \$without_ccs, without_cman => \$without_cman, without_dlm => \$without_dlm, @@ -144,6 +145,7 @@ my $err = &GetOptions (\%options, 'conffile=s', 'release_major=s', 'release_minor=s', + 'release_micro=s', 'fence_agents=s', 'enable_xen', 'without_ccs', @@ -531,6 +533,9 @@ if (defined($release_major) && not length $release_major) { if (defined($release_minor) && not length $release_minor) { $release_minor=""; } +if (defined($release_micro) && not length $release_micro) { + $release_micro=""; +} @args = "find fence/agents -mindepth 2 -maxdepth 2 -name Makefile -printf '%h'"; open (IFILE, "@args |"); @@ -619,16 +624,35 @@ while () { close IFILE; -if ((not defined($release_major)) || (not defined($release_minor))) { - $release_major = DEVEL; - $release_minor = `date +%s`; - chomp $release_minor; +if ((not defined($release_major)) || (not defined($release_minor)) || (not defined($release_micro))) { + if ( -f 'make/official_release_version' ) { + my $current_version = 0; + open OFFICIAL_VERSION, '<', "make/official_release_version"; + while () { + if ($_ =~ /VERSION/) { + $current_version = $_; + last; + } + } + close OFFICIAL_VERSION; + $current_version =~ s/.*"(.*)"\n/$1/; + my @release_version = split /\./, $current_version; + $release_major = $release_version[0]; + $release_minor = $release_version[1]; + $release_micro = $release_version[2]; + } else { + $release_major = DEVEL; + $release_minor = `date +%s`; + chomp $release_minor; + $release_micro = 0; + } } print OFILE "RELEASE_MAJOR = $release_major\n"; print OFILE "RELEASE_MINOR = $release_minor\n"; -print OFILE "RELEASE_VERSION = $release_major.$release_minor\n"; -print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor\\\"\n"; +print OFILE "RELEASE_MICRO = $release_micro\n"; +print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; +print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; close OFILE; print "Completed Makefile configuration\n\n"; hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 7 04:28:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 07 Mar 2008 04:28:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-2-g241d93e Message-ID: <20080307042819.5222.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=241d93efae78a509e8cae5a2300ff2205686a5f9 The branch, STABLE2 has been updated via 241d93efae78a509e8cae5a2300ff2205686a5f9 (commit) from 3aa78efa2839cc3c00c8f70a3e2bb4c09ddc463c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 241d93efae78a509e8cae5a2300ff2205686a5f9 Author: Fabio M. Di Nitto Date: Fri Mar 7 05:23:32 2008 +0100 [BUILD] Fix build system with openais whitetank Attempt to autodetect if we are building against openais trunk or whitetank release. So far the only way is to detect is to if liblogsys is installed or not. So far none of the openais headers include a version that could be used to #ifdef within the code directly. Allow to force the build against whitetank release by adding --openaiswhitetank configure option. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/daemon/Makefile | 3 +-- configure | 10 ++++++++++ make/defines.mk.input | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cman/daemon/Makefile b/cman/daemon/Makefile index ff169e1..0532e9b 100644 --- a/cman/daemon/Makefile +++ b/cman/daemon/Makefile @@ -22,11 +22,10 @@ include $(OBJDIR)/make/clean.mk include $(OBJDIR)/make/install.mk include $(OBJDIR)/make/uninstall.mk -CFLAGS += -DOPENAIS_EXTERNAL_SERVICE +CFLAGS += -DOPENAIS_EXTERNAL_SERVICE ${openaiswhitetank} CFLAGS += -fPIC CFLAGS += -I${ccsincdir} -I${openaisincdir} CFLAGS += -I${incdir} -#CFLAGS += -DOPENAIS_WHITETANK LDFLAGS += -L${ccslibdir} -lccs diff --git a/configure b/configure index fd7825e..be49f7f 100755 --- a/configure +++ b/configure @@ -62,6 +62,7 @@ my %options = ( readlinelibdir => \$readlinelibdir, openaisincdir => \$openaisincdir, openaislibdir => \$openaislibdir, + openaiswhitetank => \$openaiswhitetank, aisexecbin => \$aisexecbin, virtincdir => \$virtincdir, virtlibdir => \$virtlibdir, @@ -127,6 +128,7 @@ my $err = &GetOptions (\%options, 'readlinelibdir=s', 'openaisincdir=s', 'openaislibdir=s', + 'openaiswhitetank', 'aisexecbin=s', 'virtincdir=s', 'virtlibdir=s', @@ -207,6 +209,7 @@ if ($help || !$err) { print "--readlinelibdir=\tthe base directory for readline libraries. (Default: {libdir})\n"; print "--openaisincdir=\tthe base directory for openais include files. (Default: {incdir})\n"; print "--openaislibdir=\tthe base directory for openais libraries. (Default: {libdir}/openais)\n"; + print "--openaiswhitetank\tforce build against openais whitetank releases. (Default: autodetect)\n"; print "--aisexecbin=\tlocation of aisexec executable file. (Default: /usr/sbin/aisexec)\n"; print "--nssincdir=\tthe base directory for libnss include files. (Default: {incdir}/nss3)\n"; print "--nsslibdir=\tthe base directory for libnss libraries. (Default: {libdir})\n"; @@ -446,6 +449,12 @@ if (!$openaisincdir) { if (!$openaislibdir) { $openaislibdir="${libdir}/openais"; } +if (((!$openaiswhitetank) && (! -f "$openaislibdir/liblogsys.a" )) || ($openaiswhitetank)) { + $openaiswhitetank="-DOPENAIS_WHITETANK"; + printf "\nBuilding against OpenAIS Whitetank\n"; +} else { + $openaiswhitetank=""; +} if (!$aisexecbin) { $aisexecbin="/usr/sbin/aisexec"; } @@ -592,6 +601,7 @@ while () { $_ =~ s/\@SLANGLIBDIR\@/$slanglibdir/; $_ =~ s/\@OPENAISINCDIR\@/$openaisincdir/; $_ =~ s/\@OPENAISLIBDIR\@/$openaislibdir/; + $_ =~ s/\@OPENAISWHITETANK\@/$openaiswhitetank/; $_ =~ s/\@AISEXECBIN\@/$aisexecbin/; $_ =~ s/\@XENINCDIR\@/$xenincdir/; $_ =~ s/\@XENLIBDIR\@/$xenlibdir/; diff --git a/make/defines.mk.input b/make/defines.mk.input index 3f3f0e5..f3c732c 100644 --- a/make/defines.mk.input +++ b/make/defines.mk.input @@ -58,6 +58,7 @@ nsprincdir ?= @NSPRINCDIR@ nsprlibdir ?= @NSPRLIBDIR@ openaisincdir ?= @OPENAISINCDIR@ openaislibdir ?= @OPENAISLIBDIR@ +openaiswhitetank ?= @OPENAISWHITETANK@ aisexecbin ?= @AISEXECBIN@ xenincdir ?= @XENINCDIR@ xenlibdir ?= @XENLIBDIR@ hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 7 09:51:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 07 Mar 2008 09:51:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-59-g4e89285 Message-ID: <20080307095110.20586.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=4e89285efd017abcb2c812b5e01ecf61d5e3c4b4 The branch, master has been updated via 4e89285efd017abcb2c812b5e01ecf61d5e3c4b4 (commit) from 6679499462cb1d3f87047d7e23d1a73a5a9b68a4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4e89285efd017abcb2c812b5e01ecf61d5e3c4b4 Author: Fabio M. Di Nitto Date: Fri Mar 7 10:48:59 2008 +0100 [CCS] Upload all subsystem configs into objdb By adding the the whole cluster.conf to the objdb, we can start moving all the subsystems away from using ccs directly and ask cman for config bits. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: ccs/ccsais/config.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/ccs/ccsais/config.c b/ccs/ccsais/config.c index 9743725..485a95b 100644 --- a/ccs/ccsais/config.c +++ b/ccs/ccsais/config.c @@ -240,6 +240,14 @@ static int init_config(struct objdb_iface_ver0 *objdb, char *error_string) /* Nodes information */ read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "clusternodes", "clusternodes", 1); + /* all the others */ + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "quorumd", "quorumd", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "fence_xvmd", "fence_xvmd", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "fencedevices", "fencedevices", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "dlm", "dlm", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "gfs_controld", "gfs_controld", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "rm", "rm", 1); + /* Also get cluster name and config version number */ if (!ccs_get(cd, CONFIG_VERSION_PATH, &str)) { objdb->object_key_create(OBJECT_PARENT_HANDLE, hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 7 09:54:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 07 Mar 2008 09:54:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-60-g6391f50 Message-ID: <20080307095413.21288.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=6391f50fa3e108e9276ed097dde17a3becab9706 The branch, master has been updated via 6391f50fa3e108e9276ed097dde17a3becab9706 (commit) from 4e89285efd017abcb2c812b5e01ecf61d5e3c4b4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6391f50fa3e108e9276ed097dde17a3becab9706 Author: Fabio M. Di Nitto Date: Fri Mar 7 10:53:20 2008 +0100 Add toplevel .gitignore Ignore: make/defines.mk Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: .gitignore | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bce701 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +make/defines.mk hooks/post-receive -- Cluster Project From teigland@sourceware.org Fri Mar 7 15:21:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Fri, 07 Mar 2008 15:21:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-3-g73d4d07 Message-ID: <20080307152137.7569.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=73d4d073e91ac3b866afee9697e0da37e22a02be The branch, STABLE2 has been updated via 73d4d073e91ac3b866afee9697e0da37e22a02be (commit) from 241d93efae78a509e8cae5a2300ff2205686a5f9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 73d4d073e91ac3b866afee9697e0da37e22a02be Author: David Teigland Date: Fri Mar 7 09:17:43 2008 -0600 doc: update usage.txt ----------------------------------------------------------------------- Summary of changes: doc/usage.txt | 87 +++++++++++++++++++-------------------------------------- 1 files changed, 29 insertions(+), 58 deletions(-) diff --git a/doc/usage.txt b/doc/usage.txt index f9e2866..dac33f8 100644 --- a/doc/usage.txt +++ b/doc/usage.txt @@ -7,58 +7,23 @@ http://sources.redhat.com/cluster/ Install ------- -Install a Linux kernel with GFS2, DLM, configfs, IPV6 and SCTP, - 2.6.23-rc1 or later - - If you want to use gfs1 (from cluster/gfs-kernel), then you need to - export three additional symbols from gfs2 by adding the following lines - to the end of linux/fs/gfs2/locking.c: - EXPORT_SYMBOL_GPL(gfs2_unmount_lockproto); - EXPORT_SYMBOL_GPL(gfs2_mount_lockproto); - EXPORT_SYMBOL_GPL(gfs2_withdraw_lockproto); - -Install openais - get the latest "whitetank" (stable) release from - http://openais.org/ - or - svn checkout http://svn.osdl.org/openais - cd openais/branches/whitetank - make; make install DESTDIR=/ - -Install gfs/dlm/fencing/etc components - get the latest cluster-2.xx.yy tarball from - ftp://sources.redhat.com/pub/cluster/ - or - cvs -d :pserver:cvs@sources.redhat.com:/cvs/cluster login cvs - cvs -d :pserver:cvs@sources.redhat.com:/cvs/cluster checkout cluster - the password is "cvs" - cd cluster - ./configure --kernel_src=/path/to/kernel - make install - - NOTE: On 64-bit systems, you will usually need to add '--libdir=/usr/lib64' - to the configure line. - -Install LVM2/CLVM (optional) - cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 login cvs - cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 checkout LVM2 - cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 - the password is "cvs" - cd LVM2 - ./configure --with-clvmd=cman --with-cluster=shared - make; make install - - NOTE: On 64-bit systems, you will usually need to add '--libdir=/usr/lib64' - to the configure line. +Install the version of the linux kernel and openais that are compatible +with the given cluster release. gfs requires this additional kernel +patch that exports some symbols from gfs2: + ftp://sources.redhat.com/pub/cluster/releases/lockproto-exports.patch + +Install the cluster release +cd cluster +./configure --kernel_src=/usr/src/linux +(./configure --help for more options, --libdir=/usr/lib64 needed on x86-64) +make install + Load kernel modules ------------------- -modprobe gfs2 -modprobe gfs -modprobe lock_dlm -modprobe lock_nolock -modprobe dlm +gfs2, dlm, lock_dlm, lock_nolock (from the kernel) +gfs (from cluster/gfs-kernel) Configuration @@ -72,7 +37,7 @@ Create /etc/cluster/cluster.conf and copy it to all nodes. The one change you will need to make is to add nodeids for all nodes in the cluster. These are now mandatory. eg: - + If you already have a cluster.conf file with no nodeids in it, then you can use the 'ccs_tool addnodeids' command to add them. @@ -89,17 +54,17 @@ use for openais/cman/dlm communication. - + - + - + @@ -114,6 +79,10 @@ use for openais/cman/dlm communication. Startup procedure ----------------- +To use the init script, run "service cman start" on all nodes. When getting a +cluster set up initially, it can be helpful to do all the steps manually as +follows. + Run these commands on each cluster node: > mount -t configfs none /sys/kernel/config @@ -124,12 +93,12 @@ Run these commands on each cluster node: > fence_tool join > dlm_controld > gfs_controld -> clvmd (optional) -> mkfs -t gfs2 -p lock_dlm -t : -j <#journals> -> mount -t gfs2 [-v] +> clvmd (only necessary if using clvm volumes for gfs) +> mkfs -t gfs -p lock_dlm -t : -j <#journals> +> mount -t gfs [-v] Notes: -- replace "gfs2" with "gfs" above to use gfs1 instead of gfs2 +- replace "gfs" with "gfs2" above to use gfs2 instead of gfs - in mkfs should match the one in cluster.conf. - in mkfs is any name you pick, each fs must have a different name. - <#journals> in mkfs should be greater than or equal to the number of nodes @@ -141,8 +110,10 @@ Notes: of the cluster. - The group_tool command shows the status of fencing, dlm and gfs groups that the local node is part of. -- The "cman" init script can be used for starting everything up through - gfs_controld in the list above. +- See the following man pages for more details: + ccs(7), ccsd(8), cluster.conf(5), cman(5), cman_tool(8), groupd(8), + group_tool(8), fence(8), fenced(8), fence_tool(8), dlm_controld(8), + gfs_controld(8), gfs(8), gfs_mkfs(8) Shutdown procedure hooks/post-receive -- Cluster Project From fabbione@sourceware.org Sat Mar 8 05:45:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Sat, 08 Mar 2008 05:45:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-61-gd596d84 Message-ID: <20080308054550.3188.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d596d8495b708a990a1abd599fb9ff2b282df3d1 The branch, master has been updated via d596d8495b708a990a1abd599fb9ff2b282df3d1 (commit) from 6391f50fa3e108e9276ed097dde17a3becab9706 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d596d8495b708a990a1abd599fb9ff2b282df3d1 Author: Fabio M. Di Nitto Date: Sat Mar 8 06:44:48 2008 +0100 [BUILD] Allow release version to contain padding 0's Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: configure | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff --git a/configure b/configure index fd7825e..2cd1b56 100755 --- a/configure +++ b/configure @@ -648,11 +648,16 @@ if ((not defined($release_major)) || (not defined($release_minor)) || (not defin } } +print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; +print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; + +$release_major = abs $release_major; +$release_minor = abs $release_minor; +$release_micro = abs $release_micro; print OFILE "RELEASE_MAJOR = $release_major\n"; print OFILE "RELEASE_MINOR = $release_minor\n"; print OFILE "RELEASE_MICRO = $release_micro\n"; -print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; -print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; + close OFILE; print "Completed Makefile configuration\n\n"; hooks/post-receive -- Cluster Project From fabbione@sourceware.org Sat Mar 8 05:47:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Sat, 08 Mar 2008 05:47:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-5-gef1b4ba Message-ID: <20080308054719.3576.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ef1b4ba484adaed815f456dad63de841fe46ddaf The branch, STABLE2 has been updated via ef1b4ba484adaed815f456dad63de841fe46ddaf (commit) via 9f17344a230600ebbe4586c646e8de33ecc600ce (commit) from 73d4d073e91ac3b866afee9697e0da37e22a02be (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ef1b4ba484adaed815f456dad63de841fe46ddaf Author: Fabio M. Di Nitto Date: Fri Mar 7 10:53:20 2008 +0100 Add toplevel .gitignore Ignore: make/defines.mk Signed-off-by: Fabio M. Di Nitto commit 9f17344a230600ebbe4586c646e8de33ecc600ce Author: Fabio M. Di Nitto Date: Sat Mar 8 06:44:48 2008 +0100 [BUILD] Allow release version to contain padding 0's Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: .gitignore | 1 + configure | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5bce701 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +make/defines.mk diff --git a/configure b/configure index be49f7f..52beb94 100755 --- a/configure +++ b/configure @@ -658,11 +658,16 @@ if ((not defined($release_major)) || (not defined($release_minor)) || (not defin } } +print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; +print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; + +$release_major = abs $release_major; +$release_minor = abs $release_minor; +$release_micro = abs $release_micro; print OFILE "RELEASE_MAJOR = $release_major\n"; print OFILE "RELEASE_MINOR = $release_minor\n"; print OFILE "RELEASE_MICRO = $release_micro\n"; -print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; -print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; + close OFILE; print "Completed Makefile configuration\n\n"; hooks/post-receive -- Cluster Project From fabbione@sourceware.org Mon Mar 10 19:04:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 10 Mar 2008 19:04:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-62-g53d0c18 Message-ID: <20080310190417.4739.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=53d0c185cb0374ec037fdc2dd24752d07150edec The branch, master has been updated via 53d0c185cb0374ec037fdc2dd24752d07150edec (commit) from d596d8495b708a990a1abd599fb9ff2b282df3d1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 53d0c185cb0374ec037fdc2dd24752d07150edec Author: Fabio M. Di Nitto Date: Mon Mar 10 20:03:13 2008 +0100 [CCS] Fix xml -> objdb config import Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: ccs/ccsais/config.c | 34 ++++++++++++++++++++++++---------- 1 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ccs/ccsais/config.c b/ccs/ccsais/config.c index 485a95b..1365206 100644 --- a/ccs/ccsais/config.c +++ b/ccs/ccsais/config.c @@ -75,6 +75,28 @@ static struct lcr_comp ccs_comp_ver0 = { __attribute__ ((constructor)) static void ccs_comp_register(void) { lcr_interfaces_set(&ifaces_ver0[0], &ccsconfig_iface_ver0); lcr_component_register(&ccs_comp_ver0); +}; + +static int should_alloc(int ccs_fd, char *key) +{ + int keyerror, childerr; + char keypath[256], childpath[256]; + char *str = NULL; + + sprintf(keypath, "/cluster/%s/@*", key); + keyerror = ccs_get_list(ccs_fd, keypath, &str); + if(str) + free(str); + + sprintf(childpath, "/cluster/%s/child::*", key); + childerr = ccs_get_list(ccs_fd, childpath, &str); + if(str) + free(str); + + if (childerr && keyerror) + return 0; + + return 1; } static int read_config_for(int ccs_fd, struct objdb_iface_ver0 *objdb, unsigned int parent, @@ -89,9 +111,9 @@ static int read_config_for(int ccs_fd, struct objdb_iface_ver0 *objdb, unsigned int subkeycount = 0; int i; - if (always_create) { + if (should_alloc(ccs_fd, key) || always_create) objdb->object_create(parent, &object_handle, object, strlen(object)); - } + sprintf(path, "/cluster/%s/@*", key); /* Get the keys */ @@ -103,10 +125,6 @@ static int read_config_for(int ccs_fd, struct objdb_iface_ver0 *objdb, unsigned if (error || !str) break; - if (!object_handle) { - objdb->object_create(parent, &object_handle, object, strlen(object)); - } - equal = strchr(str, '='); if (equal) { @@ -167,10 +185,6 @@ static int read_config_for(int ccs_fd, struct objdb_iface_ver0 *objdb, unsigned { char subpath[1024]; - /* Allow for empty parents */ - if (!object_handle) - object_handle = parent; - /* Found a subkey, iterate through it's sub sections */ sprintf(subpath, "%s/%s[%d]", key, str, ++count); if (!read_config_for(ccs_fd, objdb, object_handle, str, subpath, 0)) hooks/post-receive -- Cluster Project From fabbione@sourceware.org Mon Mar 10 19:08:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 10 Mar 2008 19:08:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-63-g47cf653 Message-ID: <20080310190800.14697.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=47cf653fd1c28905f6caa750d715542d77fe4ee1 The branch, master has been updated via 47cf653fd1c28905f6caa750d715542d77fe4ee1 (commit) from 53d0c185cb0374ec037fdc2dd24752d07150edec (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 47cf653fd1c28905f6caa750d715542d77fe4ee1 Author: Fabio M. Di Nitto Date: Mon Mar 10 20:07:27 2008 +0100 [CCS] Cleanup duplicate vars from previous commit Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: ccs/ccsais/config.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ccs/ccsais/config.c b/ccs/ccsais/config.c index 1365206..12a15ec 100644 --- a/ccs/ccsais/config.c +++ b/ccs/ccsais/config.c @@ -80,16 +80,16 @@ __attribute__ ((constructor)) static void ccs_comp_register(void) { static int should_alloc(int ccs_fd, char *key) { int keyerror, childerr; - char keypath[256], childpath[256]; + char path[256]; char *str = NULL; - sprintf(keypath, "/cluster/%s/@*", key); - keyerror = ccs_get_list(ccs_fd, keypath, &str); + sprintf(path, "/cluster/%s/@*", key); + keyerror = ccs_get_list(ccs_fd, path, &str); if(str) free(str); - sprintf(childpath, "/cluster/%s/child::*", key); - childerr = ccs_get_list(ccs_fd, childpath, &str); + sprintf(path, "/cluster/%s/child::*", key); + childerr = ccs_get_list(ccs_fd, path, &str); if(str) free(str); hooks/post-receive -- Cluster Project From cfeist@sourceware.org Mon Mar 10 22:49:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Mon, 10 Mar 2008 22:49:00 -0000 Subject: Cluster Project tag, gfs-kernel_2_6_9_77, created. gfs-kernel_2_6_9_76-5-gb95f5dd Message-ID: <20080310224928.18096.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b95f5dd435df474b5b5c55927ae86b52f21c0b28 The tag, gfs-kernel_2_6_9_77 has been created at b95f5dd435df474b5b5c55927ae86b52f21c0b28 (commit) - Log ----------------------------------------------------------------- commit b95f5dd435df474b5b5c55927ae86b52f21c0b28 Author: David Teigland Date: Thu Feb 28 09:49:26 2008 -0600 lock_dlm: skip busy plocks in unlock bz 432707 Another problem with multiple threads manipulating the same plocks (also see bz 383391). In this case thread1 was waiting on a plock that was in the dlm, when thread2 came and tried to unlock it (due to the process exiting and closing all files). dlm returns EBUSY for the unlock, which causes lock_dlm to assert (another work around could be to just not assert on EBUSY.) The "busy" flag was recently added to plocks to work around another similar problem with multiple threads; use that to just skip the unlock on any plock that's busy. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From fabbione@sourceware.org Tue Mar 11 05:36:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 11 Mar 2008 05:36:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-64-g8b3e716 Message-ID: <20080311053643.28797.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=8b3e716720d8c66e183279589cf5d6f7d259ba96 The branch, master has been updated via 8b3e716720d8c66e183279589cf5d6f7d259ba96 (commit) from 47cf653fd1c28905f6caa750d715542d77fe4ee1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8b3e716720d8c66e183279589cf5d6f7d259ba96 Author: Fabio M. Di Nitto Date: Tue Mar 11 06:36:21 2008 +0100 [CCS] Fix possible memory corruption on double free Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: ccs/ccsais/config.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/ccs/ccsais/config.c b/ccs/ccsais/config.c index 12a15ec..07db749 100644 --- a/ccs/ccsais/config.c +++ b/ccs/ccsais/config.c @@ -85,8 +85,10 @@ static int should_alloc(int ccs_fd, char *key) sprintf(path, "/cluster/%s/@*", key); keyerror = ccs_get_list(ccs_fd, path, &str); - if(str) + if(str) { free(str); + str = NULL; + } sprintf(path, "/cluster/%s/child::*", key); childerr = ccs_get_list(ccs_fd, path, &str); hooks/post-receive -- Cluster Project From fabbione@sourceware.org Tue Mar 11 06:07:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 11 Mar 2008 06:07:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-8-g6c44b74 Message-ID: <20080311060701.2728.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=6c44b743290d210c13d1ca7fc18414ec4eaffe5c The branch, STABLE2 has been updated via 6c44b743290d210c13d1ca7fc18414ec4eaffe5c (commit) via c0186dcb13e57349fd6409dc7c4ba021854f1bd5 (commit) via 4f9f9dc5a95e738c098c5743f5e52f6af704bf88 (commit) from ef1b4ba484adaed815f456dad63de841fe46ddaf (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6c44b743290d210c13d1ca7fc18414ec4eaffe5c Author: Lon Hohberger Date: Tue Mar 4 11:54:40 2008 -0500 Add / fix Oracle 10g failover agent commit c0186dcb13e57349fd6409dc7c4ba021854f1bd5 Author: Lon Hohberger Date: Tue Mar 4 11:38:39 2008 -0500 Update changelog commit 4f9f9dc5a95e738c098c5743f5e52f6af704bf88 Author: Lon Hohberger Date: Tue Mar 4 11:29:03 2008 -0500 Add Sybase failover agent ----------------------------------------------------------------------- Summary of changes: rgmanager/ChangeLog | 4 + rgmanager/src/resources/ASEHAagent.sh | 893 +++++++++++++++++++++ rgmanager/src/resources/Makefile | 3 +- rgmanager/src/resources/{oracleas => oracledb.sh} | 207 ++++-- 4 files changed, 1041 insertions(+), 66 deletions(-) create mode 100644 rgmanager/src/resources/ASEHAagent.sh rename rgmanager/src/resources/{oracleas => oracledb.sh} (77%) diff --git a/rgmanager/ChangeLog b/rgmanager/ChangeLog index 249e6ca..117e5a3 100644 --- a/rgmanager/ChangeLog +++ b/rgmanager/ChangeLog @@ -1,3 +1,7 @@ +2008-03-04 Lon Hohberger + * src/resources/ASEHAagent.sh, Makefile: Add Sybase failover agent + * src/resources/oracledb.sh, Makefile: Add Oracle 10g failover agent + 2008-02-26 Lon Hohberger * src/resources/ip.sh: Fix netmask handling in ip.sh * src/utils/clustat.c: Don't show estranged nodes if they're down diff --git a/rgmanager/src/resources/ASEHAagent.sh b/rgmanager/src/resources/ASEHAagent.sh new file mode 100644 index 0000000..6d781d7 --- /dev/null +++ b/rgmanager/src/resources/ASEHAagent.sh @@ -0,0 +1,893 @@ +#!/bin/bash + +# +# Sybase Availability Agent for Red Hat Cluster v15.0.2 +# Copyright (C) - 2007 +# Sybase, Inc. All rights reserved. +# +# Sybase Availability Agent for Red Hat Cluster v15.0.2 is licensed +# under the GNU General Public License Version 2. +# +# Author(s): +# Jian-ping Hui +# +# Description: Service script for starting/stopping/monitoring \ +# Sybase Adaptive Server on: \ +# Red Hat Enterprise Linux 5 ES \ +# Red Hat Enterprise Linux 5 AS +# +# NOTES: +# +# (1) Before running this script, we assume that user has installed +# Sybase ASE 15.0.2 or higher version on the machine. Please +# customize your configuration in /etc/cluster/cluster.conf according +# to your actual environment. We assume the following files exist before +# you start the service: +# /$sybase_home/SYBASE.sh +# /$sybase_home/$sybase_ase/install/RUN_$server_name +# +# (2) You can customize the interval value in the meta-data section if needed: +# +# +# +# +# +# +# +# +# +# +# +# +# +# The timeout value is not supported by Redhat in RHCS5.0. +# +# (3) This script should be put under /usr/share/cluster. Its owner should be "root" with +# execution permission. +# + +. /etc/init.d/functions +. $(dirname $0)/ocf-shellfuncs + +PROG=${0} + +export LD_POINTER_GUARD=0 + +####################################################################################### +# Declare some variables we will use in the script. Please don't change their values. # +####################################################################################### +declare login_string="" +declare RUNSERVER_SCRIPT=$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase/install/RUN_$OCF_RESKEY_server_name +declare CONSOLE_LOG=$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase/install/$OCF_RESKEY_server_name.log + +################################################################################################## +# This function will be called by rgmanager to get the meta data of resource agent "ASEHAagent". # +# NEVER CHANGE ANYTHING IN THIS FUNCTION. +################################################################################################## +meta_data() +{ + cat < + + 1.0 + + + Sybase ASE Failover Instance + + + Sybase ASE Failover Instance + + + + + + Instance name of resource agent "ASEHAagent" + + + name + + + + + + + The home directory of sybase products + + + SYBASE home directory + + + + + + + The directory name under sybase_home where ASE products are installed + + + SYBASE_ASE directory name + + + + + + + The directory name under sybase_home where OCS products are installed, i.e. ASE-15_0 + + + SYBASE_OCS directory name + + + + + + + The ASE server name which is configured for the HA service + + + ASE server name + + + + + + + The full path of login file which contains the login/password pair + + + Login file + + + + + + + The full path of interfaces file which is used to start/access the ASE server + + + Interfaces file + + + + + + + The user who can run ASE server + + + Sybase user + + + + + + + The maximum seconds to wait for the ASE server to shutdown before killing the process directly + + + Shutdown timeout value + + + + + + + The maximum seconds to wait for an ASE server to complete before determining that the server had failed to start + + + Start timeout value + + + + + + + The maximum seconds to wait for the response of ASE server before determining that the server had no response while running deep probe + + + Deep probe timeout value + + + + + + + + + + + + + + + + + + + + + + + +EOT +} + +################################################################################################## +# Function Name: validate_all # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# OCF_ERR_ARGS Parameters are invalid # +# Description: Do some validation on the user-configurable stuff at the beginning of the script. # +################################################################################################## +verify_all() +{ + ocf_log debug "ASEHAagent: Start 'verify_all'" + + # Check if the parameter 'sybase_home' is set. + if [[ -z "$OCF_RESKEY_sybase_home" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_home' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_home' is a valid path. + if [[ ! -d $OCF_RESKEY_sybase_home ]] + then + ocf_log err "ASEHAagent: The sybase_home '$OCF_RESKEY_sybase_home' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the script file SYBASE.sh exists + if [[ ! -f $OCF_RESKEY_sybase_home/SYBASE.sh ]] + then + ocf_log err "ASEHAagent: The file $OCF_RESKEY_sybase_home/SYBASE.sh is required to run this script. Failed to run the script." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_ase' is set. + if [[ -z "$OCF_RESKEY_sybase_ase" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_ase' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the directory /$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase exists. + if [[ ! -d $OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase ]] + then + ocf_log err "ASEHAagent: The directory '$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ase' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_ocs' is set. + if [[ -z "$OCF_RESKEY_sybase_ocs" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_ocs' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the directory /$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs exists. + if [[ ! -d $OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs ]] + then + ocf_log err "ASEHAagent: The directory '$OCF_RESKEY_sybase_home/$OCF_RESKEY_sybase_ocs' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'server_name' is set. + if [[ -z "$OCF_RESKEY_server_name" ]] + then + ocf_log err "ASEHAagent: The parameter 'server_name' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the Run_server file exists. + if [[ ! -f $RUNSERVER_SCRIPT ]] + then + ocf_log err "ASEHAagent: There file $RUNSERVER_SCRIPT doesn't exist. The sybase directory may be incorrect." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'login_file' is set. + if [[ -z "$OCF_RESKEY_login_file" ]] + then + ocf_log err "ASEHAagent: The parameter 'login_file' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the login file exist. + if [[ ! -f $OCF_RESKEY_login_file ]] + then + ocf_log err "ASEHAagent: The login file '$OCF_RESKEY_login_file' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'sybase_user' is set + if [[ -z "$OCF_RESKEY_sybase_user" ]] + then + ocf_log err "ASEHAagent: The parameter 'sybase_user' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the user 'sybase_user' exist + id -u $OCF_RESKEY_sybase_user + if [[ $? != 0 ]] + then + ocf_log err "ASEHAagent: The user '$OCF_RESKEY_sybase_user' doesn't exist in the system." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'interfaces_file' is set + if [[ -z "$OCF_RESKEY_interfaces_file" ]] + then + ocf_log err "ASEHAagent: The parameter 'interfaces_file' is not set." + return $OCF_ERR_ARGS + fi + + # Check if the file 'interfaces_file' exists + if [[ ! -f $OCF_RESKEY_interfaces_file ]] + then + ocf_log err "ASEHAagent: The interfaces file '$OCF_RESKEY_interfaces_file' doesn't exist." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'shutdown_timeout' is a valid value + if [[ $OCF_RESKEY_shutdown_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'shutdown_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'start_timeout' is a valid value + if [[ $OCF_RESKEY_start_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'start_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + # Check if the parameter 'deep_probe_timeout' is a valid value + if [[ $OCF_RESKEY_deep_probe_timeout -eq 0 ]] + then + ocf_log err "ASEHAagent: The parameter 'deep_probe_timeout' is not set. Its value cannot be zero." + return $OCF_ERR_ARGS + fi + + ocf_log debug "ASEHAagent: End 'verify_all' successfully." + + return 0 +} + +################################################################################################################ +# Function name: get_login_string # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: Analyze the login_file to format the login string. This function will set the global variable # +# "login_string". If the login/password is clear text, the "login_string" will become to "-Ulogin # +# -Ppassword" if there is no error. If there are any errors in this function, the string # +# "login_string" will be still empty. In current stage, the encrypted string is not supported # +# because "haisql" is not available on this platform. # +################################################################################################################ +get_login_string() +{ + tmpstring="" + login_sting="" + + # Read the first column. The valid value will be "normal" or "encrypted". Any other values are invalid. + login_type=`head -1 $OCF_RESKEY_login_file | awk '{print $1}'` + if [[ $login_type = "normal" ]] + then + # The login/password pair is saved in clear text. + # Abstract the login/password from the line. + tmpstring=`head -1 $OCF_RESKEY_login_file | awk '{print $2}'` + + # Abstract "user" from the string. + user=`echo $tmpstring | awk -F'/' '{print $1}'` + # Check if the "user" string is NULL. If it is NULL, it means this is not a valid user. + if [[ -z $user ]] + then + ocf_log err "ASEHAagent: Login username is not specified in the file '$OCF_RESKEY_login_file'" + return 1 + fi + + # Abstract "password" from the string. + passwd=`echo $tmpstring | awk -F'/' '{print $2}'` + + # Format the "login_string". + login_string="-U$user -P$passwd" + else + # The login_type is invalid value. + ocf_log err "ASEHAagent: Login type specified in the file $OCF_RESKEY_login_file is not 'normal' or 'encrypted' which are only supported values." + return 1 + fi + + # The "login_file" has been analyzed successfully. Now, the value of "login_string" contains the login/password information. + return 0 +} + +############################################################################################## +# Function name: ase_start # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: This function is used to start the ASE server in primary or secondary server. # +############################################################################################## +ase_start() +{ + ocf_log debug "ASEHAagent: Start 'ase_start'" + + # Check if the server is running. If yes, return SUCCESS directly. Otherwise, continue the start work. + ase_is_running + if [[ $? = 0 ]] + then + # The server is running. + ocf_log info "ASEHAagent: Server is running. Start is success." + return 0 + fi + + # The server is not running. We need to start it. + # If the log file existed, delete it. + if [[ -f $CONSOLE_LOG ]] + then + rm -f $CONSOLE_LOG + fi + + ocf_log debug "ASEHAagent: Starting '$OCF_RESKEY_server_name'..." + + # Run runserver script to start the server. Since this script will be run by root and ASE server + # needs to be run by another user, we need to change the user to sybase_user first. Then, run + # the script to start the server. + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run the RUNSERVER_SCRIPT to start the server. + . $RUNSERVER_SCRIPT > $CONSOLE_LOG 2>&1 & +EOF + + # Monitor every 1 seconds if the server has + # recovered, until RECOVERY_TIMEOUT. + t=0 + while [[ $t -le $OCF_RESKEY_start_timeout ]] + do + grep -s "Recovery complete." $CONSOLE_LOG > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The server has not completed the recovery. We need to continue to monitor the recovery + # process. + t=`expr $t + 1` + else + # The server has completed the recovery. + ocf_log info "ASEHAagent: ASE server '$OCF_RESKEY_server_name' started successfully." + break + fi + sleep 1 + done + + # If $t is larger than start_timeout, it means the ASE server cannot start in given time. Otherwise, it + # means the ASE server has started successfully. + if [[ $t -gt $OCF_RESKEY_start_timeout ]] + then + # The server cannot start in specified time. We think the start is failed. + ocf_log err "ASEHAagent: Failed to start ASE server '$OCF_RESKEY_server_name'. Please check the server error log $CONSOLE_LOG for possible problems." + return 1 + fi + + ocf_log debug "ASEHAagent: End 'ase_start' successfully." + + return 0 +} + +############################################################################################# +# Function name: ase_stop # +# Parameter: None # +# Return value: # +# 0 SUCCESS # +# 1 FAIL # +# Description: This function is used to stop the ASE server in primary or secondary server. # +############################################################################################# +ase_stop() +{ + ocf_log debug "ASEHAagent: Start 'ase_stop'" + + # Check if the ASE server is still running. + ase_is_running + if [[ $? != 0 ]] + then + # The ASE server is not running. We need not to shutdown it. + ocf_log info "ASEHAagent: The dataserver $OCF_RESKEY_server_name is not running." + return 0 + fi + + # Call get_login_string() to parse the login/password string + get_login_string + if [[ $? = 1 ]] + then + # The login account cannot be used. So we will kill the process directly. + ocf_log info "ASEHAagent: Cannot parse the login file $OCF_RESKEY_login_file. Kill the processes of ASE directly." + # Kill the OS processes immediately. + kill_ase 0 + return $? + fi + + # Just in case things are hung, start a process that will wait for the + # timeout period, then kill any remaining porcesses. We'll need to + # monitor this process (set -m), so we can terminate it later if it is + # not needed. + set -m + $PROG kill & + KILL_PID=$! # If successful, we will also terminate watchdog process + + # Run "shutdown with nowait" from isql command line to shutdown the server + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run "shutdown with nowait" to shutdown the server immediately. + (echo "use master" ; echo go ; echo "shutdown with nowait"; echo go) | \ + \$SYBASE/\$SYBASE_OCS/bin/isql $login_string -S$OCF_RESKEY_server_name -I$OCF_RESKEY_interfaces_file & +EOF + + sleep 5 + + # Check if the server has been shutted down successfully + t=0 + while [[ $t -lt $OCF_RESKEY_shutdown_timeout ]] + do + # Search "usshutdown: exiting" in the server log. If found, it means the server has been shutted down. + # Otherwise, we need to wait. + tail $CONSOLE_LOG | grep "ueshutdown: exiting" > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The shutdown is still in processing. Wait... + sleep 2 + t=`expr $t+2` + else + # The shutdown is success. + ocf_log info "ASEHAagent: ASE server '$OCF_RESKEY_server_name' shutdown with isql successfully." + break + fi + done + + # If $t is larger than shutdown_timeout, it means the ASE server cannot be shutted down in given time. We need + # to wait for the background kill process to kill the OS processes directly. + if [[ $t -ge $OCF_RESKEY_shutdown_timeout ]] + then + ocf_log err "ASEHAagent: Shutdown of '$OCF_RESKEY_server_name' from isql failed. Server is either down or unreachable." + fi + + # Here, the ASE server has been shutted down by isql command or killed by background process. We need to do + # further check to make sure all processes have gone away before saying shutdown is complete. This stops the + # other node from starting up the package before it has been stopped and the file system has been unmounted. + + # Get all processes ids from log file + declare -a ENGINE_ALL=(`sed -n -e '/engine /s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG`) + typeset -i num_procs=${#ENGINE_ALL[@]} + + # We cannot find any process id from log file. It may be because the log file is corrupted or be deleted. + # In this case, we determine the shutdown is failed. + if [[ "${ENGINE_ALL[@]}" = "" ]] + then + ocf_log err "ASEHAagent: Unable to find the process id from $CONSOLE_LOG." + ocf_log err "ASEHAagent: Stop ASE server failed." + return 1 + fi + + # Monitor the system processes to make sure all ASE related processes have gone away. + while true + do + # To every engine process, search it in system processes list. If it is not in the + # list, it means this process has gone away. Otherwise, we need to wait for it is + # killed by background process. + for i in ${ENGINE_ALL[@]} + do + ps -fu $OCF_RESKEY_sybase_user | awk '{print $2}' | grep $i | grep -v grep + if [[ $? != 0 ]] + then + ocf_log debug "ASEHAagent: $i process has stopped." + c=0 + while (( c < $num_procs )) + do + if [[ ${ENGINE_ALL[$c]} = $i ]] + then + unset ENGINE_ALL[$c] + c=$num_procs + fi + (( c = c + 1 )) + done + fi + done + + # To here, all processes should have gone away. + if [[ ${ENGINE_ALL[@]} = "" ]] + then + # + # Looks like shutdown was successful, so kill the + # script to kill any hung processes, which we started earlier. + # Check to see if the script is still running. If jobs + # returns that the script is done, then we don't need to kill + # it. + # + job=$(jobs | grep -v Done) + if [[ ${job} != "" ]] + then + ocf_log debug "ASEHAagent: Killing the kill_ase script." + + kill -15 $KILL_PID > /dev/null 2>&1 + fi + break + fi + sleep 5 + done + + ocf_log debug "ASEHAagent: End 'ase_stop'." + + return 0 +} + +#################################################################################### +# Function name: ase_is_running # +# Parameter: None # +# Return value: # +# 0 ASE server is running # +# 1 ASE server is not running or there are errors # +# Description: This function is used to check if the ASE server is still running . # +#################################################################################### +ase_is_running() +{ + # If the error log doesn't exist, we can say there is no ASE is running. + if [[ ! -f $CONSOLE_LOG ]] + then + return 1 + fi + + # The error log file exists. Check if the engine 0 is alive. + ENGINE_0=(`sed -n -e '/engine 0/s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG`) + if [[ "$ENGINE_0" = "" ]] + then + # The engine 0 is down. + return 1 + else + kill -s 0 $ENGINE_0 > /dev/null 2>&1 + if [[ $? != 0 ]] + then + # The engine 0 is not running. + return 1 + else + # The engine 0 is running. + return 0 + fi + fi + + return 1 +} + +#################################################################################### +# Function name: ase_is_running # +# Parameter: # +# DELAY The seconds to wait before killing the ASE processes. 0 means # +# kill the ASE processes immediately. # +# Return value: None # +# 1 ASE server is not running or there are errors # +# Description: This function is used to check if the ASE server is still running . # +#################################################################################### +kill_ase() +{ + ocf_log debug "ASEHAagent: Start 'kill_ase'." + + DELAY=$1 + + # Wait for sometime before sending a kill signal. + t=0 + while [[ $t -lt $DELAY ]] + do + sleep 1 + t=`expr $t+1` + done + + # Get the process ids from log file + declare -a ENGINE_ALL=`sed -n -e '/engine /s/^.*os pid \([0-9]*\).*online$/\1/p' $CONSOLE_LOG` + + # If there is no process id found in the log file, we need not to continue. + if [[ "${ENGINE_ALL[@]}" = "" ]] + then + ocf_log err "ASEHAagent: Unable to find the process id from $CONSOLE_LOG." + return + fi + + # Kill the datasever process(es) + for pid in ${ENGINE_ALL[@]} + do + kill -9 $pid > /dev/null 2>&1 + if [[ $? != 0 ]] + then + ocf_log info "ASEHAagent: kill_ase function did NOT find process $pid running." + else + ocf_log info "ASEHAagent: kill_ase function did find process $pid running. Sent SIGTERM." + fi + done + + ocf_log debug "ASEHAagent: End 'kill_ase'." +} + + +####################################################################################### +# Function name: terminate # +# Parameter: None # +# Return value: Always be 1 # +# Description: This function is called automatically after this script is terminated. # +####################################################################################### +terminate() +{ + ocf_log debug "ASEHAagent: This monitor script has been signaled to terminate." + exit 1 +} + +##################################################################################### +# Function name: ase_status # +# Parameter: # +# 0 Level 0 probe. In this level, we just check if engine 0 is alive # +# 10 Level 10 probe. In this level, we need to probe if the ASE server # +# still has response. # +# Return value: # +# 0 The server is still alive # +# 1 The server is down # +# Description: This function is used to check if the ASE server is still running. # +##################################################################################### +ase_status() +{ + ocf_log debug "ASEHAagent: Start 'ase_status'." + + # Step 1: Check if the engine 0 is alive + ase_is_running + if [[ $? = 1 ]] + then + # ASE is down. Return fail to rgmanager to trigger the failover process. + ocf_log err "ASEHAagent: ASE server is down." + return 1 + fi + + # ASE process is still alive. + # Step2: If this is level 10 probe, We need to check if the ASE server still has response. + if [[ $1 -gt 0 ]] + then + ocf_log debug "ASEHAagent: Need to run deep probe." + # Run deep probe + deep_probe + if [[ $? = 1 ]] + then + # Deep probe failed. This means the server has been down. + ocf_log err "ASEHAagent: Deep probe found the ASE server is down." + return 1 + fi + fi + + ocf_log debug "ASEHAagent: End 'ase_status'." + + return 0 +} + +#################################################################################### +# Function name: deep_probe # +# Parameter: None # +# Return value: # +# 0 ASE server is alive # +# 1 ASE server is down # +# Description: This function is used to run deep probe to make sure the ASE server # +# still has response. # +#################################################################################### +deep_probe() +{ + declare -i rv + + ocf_log debug "ASEHAagent: Start 'deep_probe'." + + # Declare two temporary files which will be used in this probe. + tmpfile1="/tmp/ASEHAagent.1" + tmpfile2="/tmp/ASEHAagent.2" + + # Get the login_string by analyzing the login_file. + get_login_string + if [[ $? = 1 ]] + then + # Login string cannot be fetched. Cannot continue the deep probe. + ocf_log err "ASEHAagent: Cannot run the deep probe because of incorrect login file $OCF_RESKEY_login_file. Deep probe failed." + return 1 + fi + + rm -f $tmpfile1 + + # The login file is correct. We have gotten the login account and password from it. + # Run isql command in background. + su $OCF_RESKEY_sybase_user -c ksh << EOF + # set required SYBASE environment by running SYBASE.sh. + . $OCF_RESKEY_sybase_home/SYBASE.sh + # Run a very simple SQL statement to make sure the server is still ok. The output will be put to + # tmpfile1. + (echo "select 1"; echo "go") | + \$SYBASE/\$SYBASE_OCS/bin/isql $login_string -S$OCF_RESKEY_server_name -I$OCF_RESKEY_interfaces_file -t $OCF_RESKEY_deep_probe_timeout -e -o$tmpfile1 & + # Record the isql command process id to temporary file. If the isql is hung, we need this process id + # to kill the hung process. + echo \$! > $tmpfile2 +EOF + + declare -i t=0 + + # Monitor the output file tmpfile1. + while [[ $t -lt $OCF_RESKEY_deep_probe_timeout ]] + do + # If the SQL statement is executed successfully, we will get the following output: + # 1> select 1 + # + # ----------- + # 1 + # + # (1 row affected) + # So, we determine if the execution is success by searching the keyword "(1 row affected)". + grep "(1 row affected)" $tmpfile1 + if [[ $? = 0 ]] + then + ocf_log debug "ASEHAagent: Deep probe sucess." + break + else + sleep 1 + t=`expr $t+1` + fi + done + + # If $t is larger than deep_probe_timeout, it means the isql command line cannot finish in given time. + # This means the deep probe failed. We need to kill the isql process manually. + if [[ $t -ge $OCF_RESKEY_deep_probe_timeout ]] + then + ocf_log err "ASEHAagent: Deep probe fail. The dataserver has no response." + + # Read the process id of isql process from tmpfile2 + pid=`cat $tmpfile2 | awk '{print $1}'` + + # Kill the isql process directly. + kill -9 $pid + return 1 + fi + + ocf_log debug "ASEHAagent: End 'deep_probe'." + + return 0 +} + +trap terminate SIGTERM + +############################# +# Do some real work here... # +############################# +case $1 in + start) + verify_all || exit 1 + ase_start + exit $? + ;; + stop) + verify_all || exit 1 + ase_stop + exit $? + ;; + status | monitor) + verify_all || exit 1 + ase_status $OCF_CHECK_LEVEL + exit $? + ;; + kill) + kill_ase $OCF_RESKEY_shutdown_timeout + ;; + meta-data) + meta_data + exit $? + ;; + validate-all) + verify_all + exit $? + ;; + *) + echo "Usage: $SCRIPT {start|stop|monitor|status|validate-all|meta-data}" + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac +exit 0 + diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile index f07122d..2c17e16 100644 --- a/rgmanager/src/resources/Makefile +++ b/rgmanager/src/resources/Makefile @@ -21,7 +21,8 @@ RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \ script.sh netfs.sh clusterfs.sh smb.sh \ apache.sh openldap.sh samba.sh mysql.sh \ postgres-8.sh tomcat-5.sh lvm.sh lvm_by_lv.sh lvm_by_vg.sh \ - vm.sh SAPInstance SAPDatabase named.sh + vm.sh SAPInstance SAPDatabase named.sh \ + oracledb.sh ASEHAagent.sh METADATA=apache.metadata openldap.metadata samba.metadata \ mysql.metadata postgres-8.metadata tomcat-5.metadata \ diff --git a/rgmanager/src/resources/oracleas b/rgmanager/src/resources/oracledb.sh similarity index 77% rename from rgmanager/src/resources/oracleas rename to rgmanager/src/resources/oracledb.sh index e806049..5b8e113 100755 --- a/rgmanager/src/resources/oracleas +++ b/rgmanager/src/resources/oracledb.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright 2003-2004 Red Hat, Inc. +# Copyright 2003-2004, 2006-2007 Red Hat, Inc. # # Author(s): # Hardy Merrill @@ -15,10 +15,8 @@ # # chkconfig: 345 99 01 # description: Service script for starting/stopping \ -# Oracle(R) Application Server software on: \ -# Red Hat Enterprise Linux 2.1 AS \ -# Red Hat Enterprise Linux 3 AS \ -# Red Hat Enterprise Linux 3 ES +# Oracle(R) Database 10g on \ +# Red Hat Enterprise Linux 5 # # NOTES: # @@ -26,27 +24,36 @@ # the need for this script to access anything outside of the ORACLE_HOME # path. # -# (2) You MUST customize ORACLE_USER, ORACLE_HOME, and ORACLE_SID to match -# your installation! +# (2) You MUST customize ORACLE_USER, ORACLE_HOME, ORACLE_SID, and +# ORACLE_HOSTNAME to match your installation if not running from within +# rgmanager. # # (3) Do NOT place this script in shared storage; place it in ORACLE_USER's -# home directory. +# home directory in non-clustered environments and /usr/share/cluster +# in rgmanager/Red Hat cluster environments. # # Oracle is a registered trademark of Oracle Corporation. # Oracle9i is a trademark of Oracle Corporation. +# Oracle10g is a trademark of Oracle Corporation. # All other trademarks are property of their respective owners. # . /etc/init.d/functions -declare SCRIPT="`basename $0`" +# +# Source stuff from /etc/sysconfig, but this may be overridden if +# this is being called as a cluster resource agent instead. +#. /etc/sysconfig/oracledb +declare SCRIPT="`basename $0`" +declare SCRIPTDIR="`dirname $0`" [ -n "$OCF_RESKEY_user" ] && ORACLE_USER=$OCF_RESKEY_user [ -n "$OCF_RESKEY_home" ] && ORACLE_HOME=$OCF_RESKEY_home [ -n "$OCF_RESKEY_name" ] && ORACLE_SID=$OCF_RESKEY_name [ -n "$OCF_RESKEY_lockfile" ] && LOCKFILE=$OCF_RESKEY_lockfile - +[ -n "$OCF_RESKEY_type" ] && ORACLE_TYPE=$OCF_RESKEY_type +[ -n "$OCF_RESKEY_vhost" ] && ORACLE_HOSTNAME=$OCF_RESKEY_vhost ###################################################### # Customize these to match your Oracle installation. # @@ -57,7 +64,7 @@ declare SCRIPT="`basename $0`" # to the Oracle user and restart. Oracle needs to run as the Oracle # user, not as root. # -[ -n "$ORACLE_USER" ] || ORACLE_USER=oracle +#[ -n "$ORACLE_USER" ] || ORACLE_USER=oracle # # 2. Oracle home. This is set up during the installation phase of Oracle. @@ -65,27 +72,43 @@ declare SCRIPT="`basename $0`" # you intend to use as the mount point for your Oracle Infrastructure # service. # -[ -n "$ORACLE_HOME" ] || ORACLE_HOME=/mnt/oracle/oracle-10g +#[ -n "$ORACLE_HOME" ] || ORACLE_HOME=/mnt/oracle/home # # 3. This is your SID. This is set up during oracle installation as well. # -[ -n "$ORACLE_SID" ] || ORACLE_SID=asdb +#[ -n "$ORACLE_SID" ] || ORACLE_SID=orcl # # 4. The oracle user probably doesn't have the permission to write to # /var/lock/subsys, so use the user's home directory. # -[ -n "$LOCKFILE" ] || LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" -#[ -n "$LOCKFILE" ] || LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" +#[ -n "$LOCKFILE" ] || LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" +[ -n "$LOCKFILE" ] || LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" #[ -n "$LOCKFILE" ] || LOCKFILE="/var/lock/subsys/oracle-ias" # Watch privileges +# +# 5. Type of Oracle Database. Currently supported: 10g 10g-iAS(untested!) +# +[ -n "$ORACLE_TYPE" ] || ORACLE_TYPE=10g + +# +# 6. Oracle virtual hostname. This is the hostname you gave Oracle during +# installation. +# +#[ -n "$ORACLE_HOSTNAME" ] || ORACLE_HOSTNAME=svc0.foo.test.com + + + ########################################################################### -export ORACLE_USER ORACLE_HOME ORACLE_SID LOCKFILE +ORACLE_TYPE=`echo $ORACLE_TYPE | tr A-Z a-z` +export ORACLE_USER ORACLE_HOME ORACLE_SID LOCKFILE ORACLE_TYPE +export ORACLE_HOSTNAME ########################## -# Set up paths we'll use. +# Set up paths we'll use. Not all are used by all the different types of +# Oracle installations # export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/opmn/lib export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH @@ -98,13 +121,6 @@ declare -r DB_PROCNAMES="pmon" declare -r LSNR_PROCNAME="tnslsnr" #declare -r LSNR_PROCNAME="tnslsnrXX" # testing -# -# The oracle user probably doesn't have the permission to write to -# /var/lock/subsys, so use the user's home directory. -# -declare -r LOCKFILE="/home/$ORACLE_USER/.oracle-ias.lock" -#declare -r LOCKFILE="$ORACLE_HOME/.oracle-ias.lock" -#declare -r LOCKFILE="/var/lock/subsys/oracle-ias" # Watch privileges ########################################################## # (Hopefully) No user-serviceable parts below this line. # @@ -113,14 +129,14 @@ meta_data() { cat < - + 1.0 - Oracle Application 10g Failover Instance + Oracle 10g Failover Instance - Oracle Application 10g Failover Instance + Oracle 10g Failover Instance @@ -145,7 +161,7 @@ meta_data() - + This is the Oracle (application, not user) home directory. This is configured when you install Oracle. @@ -156,6 +172,32 @@ meta_data() + + + This is the Oracle installation type. + Only "10g" and "10g-ias" are supported, and 10g-ias is + untested. + + + Oracle Installation Type + + + + + + + Virtual Hostname matching the installation hostname of + Oracle 10g. Note that during the start/stop of an oracledb + resource, your hostname will temporarily be changed to + this hostname. As such, it is recommended that oracledb + resources be instanced as part of an exclusive service only. + + + Virtual Hostname + + + + @@ -176,7 +218,7 @@ meta_data() - + @@ -615,15 +657,15 @@ validation_checks() # # If the oracle user doesn't exist, we're done. # - [ -n "$ORACLE_USER" ] || oops ORACLE_USER - id -u $ORACLE_USER > /dev/null || oops ORACLE_USER - id -g $ORACLE_USER > /dev/null || oops ORACLE_USER + [ -n "$ORACLE_USER" ] || oops "ORACLE_USER" + id -u $ORACLE_USER > /dev/null || oops "ORACLE_USER" + id -g $ORACLE_USER > /dev/null || oops "ORACLE_USER" # # If the oracle home isn't a directory, we're done # [ -n "$ORACLE_HOME" ] || oops ORACLE_HOME - [ -d "$ORACLE_HOME" ] || oops ORACLE_HOME + #[ -d "$ORACLE_HOME" ] || oops ORACLE_HOME # # If the oracle SID is NULL, we're done @@ -631,13 +673,27 @@ validation_checks() [ -n "$ORACLE_SID" ] || oops ORACLE_SID # + # If we don't know the type, we're done + # + [ "$ORACLE_TYPE" = "10g" ] || [ "$ORACLE_TYPE" = "10g-ias" ] || oops ORACLE_TYPE + + # + # If the hostname is zero-length, fix it + # + [ -n "$ORACLE_HOSTNAME" ] || ORACLE_HOSTNAME=`hostname` + + # # Super user? Automatically change UID and exec as oracle user. # Oracle needs to be run as the Oracle user, not root! # if [ "`id -u`" = "0" ]; then - echo "Restarting as $ORACLE_USER." - #exec su - $ORACLE_USER -c "$0 $*" - exec sudo -u $ORACLE_USER $0 $* + echo "Restarting $0 as $ORACLE_USER." + # + # Breaks on RHEL5 + # exec sudo -u $ORACLE_USER $0 $* + # + su $ORACLE_USER -c "$0 $*" + exit $? fi # @@ -658,12 +714,18 @@ validation_checks() # # Start Oracle9i Application Server Infrastructure # -start_ias() +start_oracle() { faction "Starting Oracle Database:" start_db || return 1 action "Starting Oracle Listener:" lsnrctl start || return 1 - action "Starting Oracle EM:" emctl start em || return 1 - action "Starting iAS Infrastructure:" opmnctl startall || return 1 + + if [ "$ORACLE_TYPE" = "10g" ]; then + action "Starting iSQL*Plus:" isqlplusctl start || return 1 + action "Starting Oracle EM DB Console:" emctl start dbconsole || return 1 + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + action "Starting Oracle EM:" emctl start em || return 1 + action "Starting iAS Infrastructure:" opmnctl startall || return 1 + fi if [ -n "$LOCKFILE" ]; then touch $LOCKFILE @@ -675,10 +737,22 @@ start_ias() # # Stop Oracle9i Application Server Infrastructure # -stop_ias() +stop_oracle() { - action "Stopping iAS Infrastructure:" opmnctl stopall || return 1 - action "Stopping Oracle EM:" emctl stop em || return 1 + if ! [ -e "$ORACLE_HOME/bin/lsnrctl" ]; then + echo "Oracle Listener Control is not available" + echo " ($ORACLE_HOME not mounted?)" + return 0 + fi + + if [ "$ORACLE_TYPE" = "10g" ]; then + action "Stopping Oracle EM DB Console:" emctl stop dbconsole || return 1 + action "Stopping iSQL*Plus:" isqlplusctl stop || return 1 + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + action "Stopping iAS Infrastructure:" opmnctl stopall || return 1 + action "Stopping Oracle EM:" emctl stop em || return 1 + fi + faction "Stopping Oracle Database:" stop_db || return 1 action "Stopping Oracle Listener:" lsnrctl stop faction "Waiting for all Oracle processes to exit:" exit_idle @@ -712,7 +786,7 @@ stop_ias() # - If all are running, return 0. In the "all-running" case, we recreate # $LOCKFILE if it does not exist. # -status_ias() +status_oracle() { declare -i subsys_lock=1 declare -i last @@ -735,10 +809,17 @@ status_ias() update_status $? $last last=$? - # Check & report opmn / opmn-managed process status - get_opmn_status $subsys_lock $depth - update_status $? $last - last=$? + if [ "$ORACLE_TYPE" = "10g" ]; then + # XXX Add isqlplus status check?! + emctl status dbconsole 2>&1 | grep "is running" + update_status $? $last + last=$? + elif [ "$ORACLE_TYPE" = "10g-ias" ]; then + # Check & report opmn / opmn-managed process status + get_opmn_status $subsys_lock $depth + update_status $? $last + last=$? + fi # # No lock file, but everything's running. Put the lock @@ -755,38 +836,34 @@ status_ias() ######################## # Do some real work... # ######################## +if [ "$1" = "meta-data" ]; then + meta_data + exit 0 +fi + +validation_checks $* + case $1 in - meta-data) - meta_data - exit $? - ;; - validate-all) - validation_checks $* - exit 0 # XXX XXX XXX - ;; start) - validation_checks $* - start_ias + start_oracle exit $? ;; stop) - validation_checks $* - stop_ias + stop_oracle exit $? ;; status|monitor) - validation_checks $* - status_ias $OCF_CHECK_LEVEL + status_oracle $OCF_CHECK_LEVEL exit $? ;; restart) $0 stop || exit $? $0 start || exit $? - exit $OCF_SUCCESS + exit 0 ;; *) - echo "usage: $SCRIPT {start|stop|status|restart|validate-all|monitor}" - exit $OCF_ERR_UNIMPLEMENTED + echo "usage: $SCRIPT {start|stop|status|restart|meta-data}" + exit 1 ;; -esac +esac exit 0 hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 14:47:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 14:47:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-66-ge2c8836 Message-ID: <20080311144743.10649.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=e2c8836c385b24f1e56674aa458e3b298b7a1cb9 The branch, master has been updated via e2c8836c385b24f1e56674aa458e3b298b7a1cb9 (commit) via 50cb9cec8a522fafbca262e99933d5186407909e (commit) from 8b3e716720d8c66e183279589cf5d6f7d259ba96 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e2c8836c385b24f1e56674aa458e3b298b7a1cb9 Author: Lon Hohberger Date: Tue Mar 11 10:44:19 2008 -0400 [rgmanager] Don't call quotaoff if quotas are not used commit 50cb9cec8a522fafbca262e99933d5186407909e Author: Lon Hohberger Date: Tue Mar 11 10:43:37 2008 -0400 [CMAN] Fix "Node X is undead" loop bug This was caused by an improper assignment to ps_incarnation after a node decides to evict another node. The fix is to simply make the internal (memory) assignments before calling qd_write_status() ----------------------------------------------------------------------- Summary of changes: cman/qdisk/main.c | 34 +++++++++++++------------- rgmanager/src/resources/fs.sh | 51 ++++++++++++++++++++++++++++++---------- 2 files changed, 55 insertions(+), 30 deletions(-) diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index ca69624..8bd8c7d 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -252,23 +252,6 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) state_run(ni[x].ni_status.ps_state)) { /* - Write eviction notice if we're the master. - */ - if (ctx->qc_status == S_MASTER) { - clulog(LOG_NOTICE, - "Writing eviction notice for node %d\n", - ni[x].ni_status.ps_nodeid); - qd_write_status(ctx, ni[x].ni_status.ps_nodeid, - S_EVICT, NULL, NULL, NULL); - if (ctx->qc_flags & RF_ALLOW_KILL) { - clulog(LOG_DEBUG, "Telling CMAN to " - "kill the node\n"); - cman_kill_node(ctx->qc_ch, - ni[x].ni_status.ps_nodeid); - } - } - - /* Mark our internal views as dead if nodes miss too many heartbeats... This will cause a master transition if no live master exists. @@ -285,6 +268,23 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) ni[x].ni_evil_incarnation = ni[x].ni_status.ps_incarnation; + /* + Write eviction notice if we're the master. + */ + if (ctx->qc_status == S_MASTER) { + clulog(LOG_NOTICE, + "Writing eviction notice for node %d\n", + ni[x].ni_status.ps_nodeid); + qd_write_status(ctx, ni[x].ni_status.ps_nodeid, + S_EVICT, NULL, NULL, NULL); + if (ctx->qc_flags & RF_ALLOW_KILL) { + clulog(LOG_DEBUG, "Telling CMAN to " + "kill the node\n"); + cman_kill_node(ctx->qc_ch, + ni[x].ni_status.ps_nodeid); + } + } + /* Clear our master mask for the node after eviction */ if (mask) clear_bit(mask, (ni[x].ni_status.ps_nodeid-1), diff --git a/rgmanager/src/resources/fs.sh b/rgmanager/src/resources/fs.sh index 10a167f..1de57d3 100755 --- a/rgmanager/src/resources/fs.sh +++ b/rgmanager/src/resources/fs.sh @@ -797,21 +797,14 @@ activeMonitor() { # -# Enable quotas on the mount point if the user requested them +# Decide which quota options are enabled and return a string +# which we can pass to quotaon # -enable_fs_quotas() +quota_opts() { - declare -i need_check=0 - declare -i rv declare quotaopts="" - declare mopt declare opts=$1 - declare mp=$2 - - if [ -z "`which quotaon`" ]; then - ocf_log err "quotaon not found in $PATH" - return $OCF_ERR_GENERIC - fi + declare mopt for mopt in `echo $opts | sed -e s/,/\ /g`; do case $mopt in @@ -830,6 +823,33 @@ enable_fs_quotas() esac done + echo $quotaopts + return 0 +} + + + +# +# Enable quotas on the mount point if the user requested them +# +enable_fs_quotas() +{ + declare -i need_check=0 + declare -i rv + declare quotaopts="" + declare mopt + declare opts=$1 + declare mp=$2 + + if [ -z "`which quotaon`" ]; then + ocf_log err "quotaon not found in $PATH" + return $OCF_ERR_GENERIC + fi + + quotaopts=$(quota_opts $opts) + + ocf_log info "quotaopts = $quotaopts" + [ -z "$quotaopts" ] && return 0 # Ok, create quota files if they don't exist @@ -1089,6 +1109,7 @@ stopFilesystem() { typeset force_umount="" typeset self_fence="" typeset fstype="" + typeset quotaopts="" # @@ -1154,11 +1175,15 @@ stop: Could not match $OCF_RESKEY_device with a real device" ;; $YES) sync; sync; sync - ocf_log info "unmounting $mp" + quotaopts=$(quota_opts $OCF_RESKEY_options) + if [ -n "$quotaopts" ]; then + ocf_log debug "Turning off quotas for $mp" + quotaoff -$quotaopts $mp &> /dev/null + fi activeMonitor stop || return $OCF_ERR_GENERIC - quotaoff -gu $mp &> /dev/null + ocf_log info "unmounting $mp" umount $mp if [ $? -eq 0 ]; then umount_failed= hooks/post-receive -- Cluster Project From teigland@sourceware.org Tue Mar 11 17:20:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Tue, 11 Mar 2008 17:20:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-7-gb70ad6f Message-ID: <20080311172052.13251.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b70ad6fe5a5795a699ad208ab009a4c952e9078f The branch, RHEL5 has been updated via b70ad6fe5a5795a699ad208ab009a4c952e9078f (commit) from d5e690aa185be4fcaa411f82016c59921a729e5e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b70ad6fe5a5795a699ad208ab009a4c952e9078f Author: David Teigland Date: Tue Mar 11 12:18:23 2008 -0500 groupd: purge messages from dead nodes bz 436984 In the fix for bug 258121, 70294dd8b717de89f2d168c0837c011648908558, we began taking nodedown events via the groupd cpg, instead of via the per group cpg. Messages still come in via the per group cpg. I believe that that opened the possibility of processing a message from a node after processing the nodedown for it. In Nate's revolver test, we saw it happen; revolver killed nodes 1,2,3, leaving just node 4: 1205198713 0:default confchg left 3 joined 0 total 1 1205198713 0:default confchg removed node 1 reason 3 1205198713 0:default confchg removed node 2 reason 3 1205198713 0:default confchg removed node 3 reason 3 ... 1205198713 0:default mark_node_started: event not starting 12 from 2 ----------------------------------------------------------------------- Summary of changes: group/daemon/app.c | 25 +++++++++++++++++++++++++ group/daemon/cpg.c | 1 + group/daemon/gd_internal.h | 1 + 3 files changed, 27 insertions(+), 0 deletions(-) diff --git a/group/daemon/app.c b/group/daemon/app.c index db5f88b..df17896 100644 --- a/group/daemon/app.c +++ b/group/daemon/app.c @@ -702,6 +702,31 @@ int queue_app_message(group_t *g, struct save_msg *save) return 0; } +/* This is called when we get the nodedown for the per-group cpg; we know + that after the cpg nodedown we won't get any further messages. bz 436984 + It's conceivable but unlikely that the nodedown processing (initiated by + the groupd cpg nodedown) could begin before the per-group cpg nodedown + is received where this purging occurs. If it does, then we may need to + add code to wait for the nodedown to happen in both the groupd cpg and the + per-group cpg before processing the nodedown. */ + +void purge_node_messages(group_t *g, int nodeid) +{ + struct save_msg *save, *tmp; + + list_for_each_entry_safe(save, tmp, &g->messages, list) { + if (save->nodeid != nodeid) + continue; + + log_group(g, "purge msg from dead node %d", nodeid); + + list_del(&save->list); + if (save->msg_long) + free(save->msg_long); + free(save); + } +} + static void del_app_nodes(app_t *a) { node_t *node, *tmp; diff --git a/group/daemon/cpg.c b/group/daemon/cpg.c index edd593f..d5cfb8d 100644 --- a/group/daemon/cpg.c +++ b/group/daemon/cpg.c @@ -413,6 +413,7 @@ void process_confchg(void) case CPG_REASON_NODEDOWN: case CPG_REASON_PROCDOWN: /* process_node_down(g, saved_left[i].nodeid); */ + purge_node_messages(g, saved_left[i].nodeid); break; default: log_error(g, "unknown leave reason %d node %d", diff --git a/group/daemon/gd_internal.h b/group/daemon/gd_internal.h index 9c0026c..691d187 100644 --- a/group/daemon/gd_internal.h +++ b/group/daemon/gd_internal.h @@ -263,6 +263,7 @@ void groupd_down(int nodeid); char *msg_type(int type); int process_app(group_t *g); int is_our_join(event_t *ev); +void purge_node_messages(group_t *g, int nodeid); /* main.c */ void app_stop(app_t *a); hooks/post-receive -- Cluster Project From teigland@sourceware.org Tue Mar 11 18:46:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Tue, 11 Mar 2008 18:46:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-9-g7bf8c23 Message-ID: <20080311184648.17140.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=7bf8c23aebfe9097222955cb98383743e2a35965 The branch, STABLE2 has been updated via 7bf8c23aebfe9097222955cb98383743e2a35965 (commit) from 6c44b743290d210c13d1ca7fc18414ec4eaffe5c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 7bf8c23aebfe9097222955cb98383743e2a35965 Author: David Teigland Date: Tue Mar 11 12:18:23 2008 -0500 groupd: purge messages from dead nodes bz 436984 In the fix for bug 258121, 70294dd8b717de89f2d168c0837c011648908558, we began taking nodedown events via the groupd cpg, instead of via the per group cpg. Messages still come in via the per group cpg. I believe that that opened the possibility of processing a message from a node after processing the nodedown for it. In Nate's revolver test, we saw it happen; revolver killed nodes 1,2,3, leaving just node 4: 1205198713 0:default confchg left 3 joined 0 total 1 1205198713 0:default confchg removed node 1 reason 3 1205198713 0:default confchg removed node 2 reason 3 1205198713 0:default confchg removed node 3 reason 3 ... 1205198713 0:default mark_node_started: event not starting 12 from 2 ----------------------------------------------------------------------- Summary of changes: group/daemon/app.c | 25 +++++++++++++++++++++++++ group/daemon/cpg.c | 1 + group/daemon/gd_internal.h | 1 + 3 files changed, 27 insertions(+), 0 deletions(-) diff --git a/group/daemon/app.c b/group/daemon/app.c index f73d3bc..93f5c21 100644 --- a/group/daemon/app.c +++ b/group/daemon/app.c @@ -691,6 +691,31 @@ int queue_app_message(group_t *g, struct save_msg *save) return 0; } +/* This is called when we get the nodedown for the per-group cpg; we know + that after the cpg nodedown we won't get any further messages. bz 436984 + It's conceivable but unlikely that the nodedown processing (initiated by + the groupd cpg nodedown) could begin before the per-group cpg nodedown + is received where this purging occurs. If it does, then we may need to + add code to wait for the nodedown to happen in both the groupd cpg and the + per-group cpg before processing the nodedown. */ + +void purge_node_messages(group_t *g, int nodeid) +{ + struct save_msg *save, *tmp; + + list_for_each_entry_safe(save, tmp, &g->messages, list) { + if (save->nodeid != nodeid) + continue; + + log_group(g, "purge msg from dead node %d", nodeid); + + list_del(&save->list); + if (save->msg_long) + free(save->msg_long); + free(save); + } +} + static void del_app_nodes(app_t *a) { node_t *node, *tmp; diff --git a/group/daemon/cpg.c b/group/daemon/cpg.c index ecdf418..3ac42f9 100644 --- a/group/daemon/cpg.c +++ b/group/daemon/cpg.c @@ -402,6 +402,7 @@ void process_confchg(void) case CPG_REASON_NODEDOWN: case CPG_REASON_PROCDOWN: /* process_node_down(g, saved_left[i].nodeid); */ + purge_node_messages(g, saved_left[i].nodeid); break; default: log_error(g, "unknown leave reason %d node %d", diff --git a/group/daemon/gd_internal.h b/group/daemon/gd_internal.h index 8562801..404e769 100644 --- a/group/daemon/gd_internal.h +++ b/group/daemon/gd_internal.h @@ -263,6 +263,7 @@ void groupd_down(int nodeid); char *msg_type(int type); int process_app(group_t *g); int is_our_join(event_t *ev); +void purge_node_messages(group_t *g, int nodeid); /* main.c */ void app_stop(app_t *a); hooks/post-receive -- Cluster Project From teigland@sourceware.org Tue Mar 11 18:49:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Tue, 11 Mar 2008 18:49:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-67-g966f6d0 Message-ID: <20080311184933.18748.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=966f6d098ec0576be68603852ea29e38fe12e7fc The branch, master has been updated via 966f6d098ec0576be68603852ea29e38fe12e7fc (commit) from e2c8836c385b24f1e56674aa458e3b298b7a1cb9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 966f6d098ec0576be68603852ea29e38fe12e7fc Author: David Teigland Date: Tue Mar 11 12:18:23 2008 -0500 groupd: purge messages from dead nodes bz 436984 In the fix for bug 258121, 70294dd8b717de89f2d168c0837c011648908558, we began taking nodedown events via the groupd cpg, instead of via the per group cpg. Messages still come in via the per group cpg. I believe that that opened the possibility of processing a message from a node after processing the nodedown for it. In Nate's revolver test, we saw it happen; revolver killed nodes 1,2,3, leaving just node 4: 1205198713 0:default confchg left 3 joined 0 total 1 1205198713 0:default confchg removed node 1 reason 3 1205198713 0:default confchg removed node 2 reason 3 1205198713 0:default confchg removed node 3 reason 3 ... 1205198713 0:default mark_node_started: event not starting 12 from 2 ----------------------------------------------------------------------- Summary of changes: group/daemon/app.c | 25 +++++++++++++++++++++++++ group/daemon/cpg.c | 1 + group/daemon/gd_internal.h | 1 + 3 files changed, 27 insertions(+), 0 deletions(-) diff --git a/group/daemon/app.c b/group/daemon/app.c index f73d3bc..93f5c21 100644 --- a/group/daemon/app.c +++ b/group/daemon/app.c @@ -691,6 +691,31 @@ int queue_app_message(group_t *g, struct save_msg *save) return 0; } +/* This is called when we get the nodedown for the per-group cpg; we know + that after the cpg nodedown we won't get any further messages. bz 436984 + It's conceivable but unlikely that the nodedown processing (initiated by + the groupd cpg nodedown) could begin before the per-group cpg nodedown + is received where this purging occurs. If it does, then we may need to + add code to wait for the nodedown to happen in both the groupd cpg and the + per-group cpg before processing the nodedown. */ + +void purge_node_messages(group_t *g, int nodeid) +{ + struct save_msg *save, *tmp; + + list_for_each_entry_safe(save, tmp, &g->messages, list) { + if (save->nodeid != nodeid) + continue; + + log_group(g, "purge msg from dead node %d", nodeid); + + list_del(&save->list); + if (save->msg_long) + free(save->msg_long); + free(save); + } +} + static void del_app_nodes(app_t *a) { node_t *node, *tmp; diff --git a/group/daemon/cpg.c b/group/daemon/cpg.c index ecdf418..3ac42f9 100644 --- a/group/daemon/cpg.c +++ b/group/daemon/cpg.c @@ -402,6 +402,7 @@ void process_confchg(void) case CPG_REASON_NODEDOWN: case CPG_REASON_PROCDOWN: /* process_node_down(g, saved_left[i].nodeid); */ + purge_node_messages(g, saved_left[i].nodeid); break; default: log_error(g, "unknown leave reason %d node %d", diff --git a/group/daemon/gd_internal.h b/group/daemon/gd_internal.h index 8562801..404e769 100644 --- a/group/daemon/gd_internal.h +++ b/group/daemon/gd_internal.h @@ -263,6 +263,7 @@ void groupd_down(int nodeid); char *msg_type(int type); int process_app(group_t *g); int is_our_join(event_t *ev); +void purge_node_messages(group_t *g, int nodeid); /* main.c */ void app_stop(app_t *a); hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 19:10:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 19:10:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-68-gf49cfa0 Message-ID: <20080311191049.31138.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=f49cfa0cdb5d5f3c739b361392f6c9a7e6ae6d53 The branch, master has been updated via f49cfa0cdb5d5f3c739b361392f6c9a7e6ae6d53 (commit) from 966f6d098ec0576be68603852ea29e38fe12e7fc (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f49cfa0cdb5d5f3c739b361392f6c9a7e6ae6d53 Author: Lon Hohberger Date: Tue Mar 11 14:54:49 2008 -0400 [rgmanager] Make ip.sh check link states of non-ethernet devices Resolves: Red Hat Bugzilla #331661 ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/ip.sh | 18 +++++------------- 1 files changed, 5 insertions(+), 13 deletions(-) diff --git a/rgmanager/src/resources/ip.sh b/rgmanager/src/resources/ip.sh index fe97391..66b4c2e 100755 --- a/rgmanager/src/resources/ip.sh +++ b/rgmanager/src/resources/ip.sh @@ -444,22 +444,14 @@ findSlaves() return $OCF_ERR_GENERIC fi - ## Strip possible VLAN (802.1q) suffixes - ## - Roland Gadinger - mastif=${mastif%%.*} + ## Strip possible VLAN (802.1q) suffixes + ## - Roland Gadinger + mastif=${mastif%%.*} while read line; do set - $line - while [ $# -gt 0 ]; do - case $1 in - eth*:) - interfaces="${1/:/} $interfaces" - continue 2 - ;; - esac - shift - done - done < <( /sbin/ip link list | grep "master $mastif" ) + interfaces="${2/:/} $interfaces" + done < <( /sbin/ip -o link list | grep "master $mastif" ) echo $interfaces } hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 19:11:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 19:11:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-10-ged685c5 Message-ID: <20080311191117.32349.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ed685c5699aaf592ba3714529dce9f9719c34b10 The branch, STABLE2 has been updated via ed685c5699aaf592ba3714529dce9f9719c34b10 (commit) from 7bf8c23aebfe9097222955cb98383743e2a35965 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ed685c5699aaf592ba3714529dce9f9719c34b10 Author: Lon Hohberger Date: Tue Mar 11 14:54:49 2008 -0400 [rgmanager] Make ip.sh check link states of non-ethernet devices Resolves: Red Hat Bugzilla #331661 ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/ip.sh | 18 +++++------------- 1 files changed, 5 insertions(+), 13 deletions(-) diff --git a/rgmanager/src/resources/ip.sh b/rgmanager/src/resources/ip.sh index fe97391..66b4c2e 100755 --- a/rgmanager/src/resources/ip.sh +++ b/rgmanager/src/resources/ip.sh @@ -444,22 +444,14 @@ findSlaves() return $OCF_ERR_GENERIC fi - ## Strip possible VLAN (802.1q) suffixes - ## - Roland Gadinger - mastif=${mastif%%.*} + ## Strip possible VLAN (802.1q) suffixes + ## - Roland Gadinger + mastif=${mastif%%.*} while read line; do set - $line - while [ $# -gt 0 ]; do - case $1 in - eth*:) - interfaces="${1/:/} $interfaces" - continue 2 - ;; - esac - shift - done - done < <( /sbin/ip link list | grep "master $mastif" ) + interfaces="${2/:/} $interfaces" + done < <( /sbin/ip -o link list | grep "master $mastif" ) echo $interfaces } hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 19:11:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 19:11:00 -0000 Subject: Cluster Project branch, STABLE, updated. rgmanager_1_9_66-10-g67f3b6d Message-ID: <20080311191127.401.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=67f3b6dd2c711cb1077b88daea7bb6dd27fcf0ec The branch, STABLE has been updated via 67f3b6dd2c711cb1077b88daea7bb6dd27fcf0ec (commit) from d9888e929c2dd0e8a9803abbd237dfb4fcb573e0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 67f3b6dd2c711cb1077b88daea7bb6dd27fcf0ec Author: Lon Hohberger Date: Tue Mar 11 14:54:49 2008 -0400 [rgmanager] Make ip.sh check link states of non-ethernet devices Resolves: Red Hat Bugzilla #331661 ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/ip.sh | 18 +++++------------- 1 files changed, 5 insertions(+), 13 deletions(-) diff --git a/rgmanager/src/resources/ip.sh b/rgmanager/src/resources/ip.sh index 2c6e6bd..0c47e66 100755 --- a/rgmanager/src/resources/ip.sh +++ b/rgmanager/src/resources/ip.sh @@ -444,22 +444,14 @@ findSlaves() return $OCF_ERR_GENERIC fi - ## Strip possible VLAN (802.1q) suffixes - ## - Roland Gadinger - mastif=${mastif%%.*} + ## Strip possible VLAN (802.1q) suffixes + ## - Roland Gadinger + mastif=${mastif%%.*} while read line; do set - $line - while [ $# -gt 0 ]; do - case $1 in - eth*:) - interfaces="${1/:/} $interfaces" - continue 2 - ;; - esac - shift - done - done < <( /sbin/ip link list | grep "master $mastif" ) + interfaces="${2/:/} $interfaces" + done < <( /sbin/ip -o link list | grep "master $mastif" ) echo $interfaces } hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 19:16:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 19:16:00 -0000 Subject: Cluster Project branch, STABLE, updated. rgmanager_1_9_66-12-g5ee43ba Message-ID: <20080311191649.2526.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=5ee43bab4b9c3048e58eb5f1de61d57b1a28e045 The branch, STABLE has been updated via 5ee43bab4b9c3048e58eb5f1de61d57b1a28e045 (commit) via 5459b747db65955eb0ddced1524e909e0d19f52f (commit) from 67f3b6dd2c711cb1077b88daea7bb6dd27fcf0ec (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5ee43bab4b9c3048e58eb5f1de61d57b1a28e045 Author: Lon Hohberger Date: Fri Jan 25 18:13:24 2008 +0000 Fix qdiskd master abdication logic (#430264) commit 5459b747db65955eb0ddced1524e909e0d19f52f Author: Lon Hohberger Date: Tue Mar 11 10:43:37 2008 -0400 [CMAN] Fix "Node X is undead" loop bug This was caused by an improper assignment to ps_incarnation after a node decides to evict another node. The fix is to simply make the internal (memory) assignments before calling qd_write_status() ----------------------------------------------------------------------- Summary of changes: cman/qdisk/main.c | 37 +++++++++++++++++++------------------ 1 files changed, 19 insertions(+), 18 deletions(-) diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index 1956c46..cb20590 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -252,23 +252,6 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) state_run(ni[x].ni_status.ps_state)) { /* - Write eviction notice if we're the master. - */ - if (ctx->qc_status == S_MASTER) { - clulog(LOG_NOTICE, - "Writing eviction notice for node %d\n", - ni[x].ni_status.ps_nodeid); - qd_write_status(ctx, ni[x].ni_status.ps_nodeid, - S_EVICT, NULL, NULL, NULL); - if (ctx->qc_flags & RF_ALLOW_KILL) { - clulog(LOG_DEBUG, "Telling CMAN to " - "kill the node\n"); - cman_kill_node(ctx->qc_ch, - ni[x].ni_status.ps_nodeid); - } - } - - /* Mark our internal views as dead if nodes miss too many heartbeats... This will cause a master transition if no live master exists. @@ -285,6 +268,23 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) ni[x].ni_evil_incarnation = ni[x].ni_status.ps_incarnation; + /* + Write eviction notice if we're the master. + */ + if (ctx->qc_status == S_MASTER) { + clulog(LOG_NOTICE, + "Writing eviction notice for node %d\n", + ni[x].ni_status.ps_nodeid); + qd_write_status(ctx, ni[x].ni_status.ps_nodeid, + S_EVICT, NULL, NULL, NULL); + if (ctx->qc_flags & RF_ALLOW_KILL) { + clulog(LOG_DEBUG, "Telling CMAN to " + "kill the node\n"); + cman_kill_node(ctx->qc_ch, + ni[x].ni_status.ps_nodeid); + } + } + /* Clear our master mask for the node after eviction */ if (mask) clear_bit(mask, (ni[x].ni_status.ps_nodeid-1), @@ -932,7 +932,8 @@ quorum_loop(qd_ctx *ctx, node_info_t *ni, int max) ctx->qc_master = master_exists(ctx, ni, max, &low_id, &count); /* Resolve master conflict, if one exists */ - if (count > 1 && ctx->qc_status == S_MASTER) { + if (count >= 1 && ctx->qc_status == S_MASTER && + ctx->qc_master != ctx->qc_my_id) { clulog(LOG_WARNING, "Master conflict: abdicating\n"); /* Handle just like a recent upgrade */ hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 20:00:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 20:00:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-69-g674aec4 Message-ID: <20080311200017.16393.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=674aec455c8f4506c390532276d1392aa017f1b6 The branch, master has been updated via 674aec455c8f4506c390532276d1392aa017f1b6 (commit) from f49cfa0cdb5d5f3c739b361392f6c9a7e6ae6d53 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 674aec455c8f4506c390532276d1392aa017f1b6 Author: Lon Hohberger Date: Tue Mar 11 15:59:50 2008 -0400 [rgmanager] Set cloexec bit in msg_socket.c Resolves Red Hat bugzilla #433313. Rgmanager did not have the close on exec bit set for any sockets it was managing, causing problems with SELinux ----------------------------------------------------------------------- Summary of changes: rgmanager/src/clulib/msg_socket.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/rgmanager/src/clulib/msg_socket.c b/rgmanager/src/clulib/msg_socket.c index 9e88ed7..c392757 100644 --- a/rgmanager/src/clulib/msg_socket.c +++ b/rgmanager/src/clulib/msg_socket.c @@ -36,6 +36,15 @@ static msg_ops_t sock_msg_ops; +static void +set_cloexec(int sock) +{ + long sock_flags; + + sock_flags = fcntl(sock, F_GETFD); + fcntl(sock, F_SETFD, sock_flags | FD_CLOEXEC); +} + static int sock_connect(void) { @@ -336,6 +345,8 @@ sock_msg_accept(msgctx_t *listenctx, msgctx_t *acceptctx) if (acceptctx->u.local_info.sockfd < 0) return -1; + set_cloexec(acceptctx->u.local_info.sockfd); + acceptctx->flags = (SKF_READ | SKF_WRITE); return 0; } @@ -359,6 +370,7 @@ sock_msg_listen(int me, void *portp, msgctx_t **listen_ctx) if (sock < 0) return -1; + set_cloexec(sock); unlink(RGMGR_SOCK); om = umask(077); su.sun_family = PF_LOCAL; hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 20:03:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 20:03:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-11-gad67890 Message-ID: <20080311200317.18306.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ad6789072de8bc98e5ec439f2160f330be0f9730 The branch, STABLE2 has been updated via ad6789072de8bc98e5ec439f2160f330be0f9730 (commit) from ed685c5699aaf592ba3714529dce9f9719c34b10 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ad6789072de8bc98e5ec439f2160f330be0f9730 Author: Lon Hohberger Date: Tue Mar 11 15:59:50 2008 -0400 [rgmanager] Set cloexec bit in msg_socket.c Resolves Red Hat bugzilla #433313. Rgmanager did not have the close on exec bit set for any sockets it was managing, causing problems with SELinux ----------------------------------------------------------------------- Summary of changes: rgmanager/src/clulib/msg_socket.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/rgmanager/src/clulib/msg_socket.c b/rgmanager/src/clulib/msg_socket.c index 9e88ed7..c392757 100644 --- a/rgmanager/src/clulib/msg_socket.c +++ b/rgmanager/src/clulib/msg_socket.c @@ -36,6 +36,15 @@ static msg_ops_t sock_msg_ops; +static void +set_cloexec(int sock) +{ + long sock_flags; + + sock_flags = fcntl(sock, F_GETFD); + fcntl(sock, F_SETFD, sock_flags | FD_CLOEXEC); +} + static int sock_connect(void) { @@ -336,6 +345,8 @@ sock_msg_accept(msgctx_t *listenctx, msgctx_t *acceptctx) if (acceptctx->u.local_info.sockfd < 0) return -1; + set_cloexec(acceptctx->u.local_info.sockfd); + acceptctx->flags = (SKF_READ | SKF_WRITE); return 0; } @@ -359,6 +370,7 @@ sock_msg_listen(int me, void *portp, msgctx_t **listen_ctx) if (sock < 0) return -1; + set_cloexec(sock); unlink(RGMGR_SOCK); om = umask(077); su.sun_family = PF_LOCAL; hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 20:06:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 20:06:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-12-gdb6a74a Message-ID: <20080311200658.19974.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=db6a74a9900257848aa4c07256b77b2d10a7db13 The branch, RHEL4 has been updated via db6a74a9900257848aa4c07256b77b2d10a7db13 (commit) via 5aeaf6345cd4672e0ef52a753b4f6cf56a64d5b5 (commit) via 43571d7af75bdb6a0b19d40048da1491b6499efb (commit) via df101a4507641607e5869f2f15c05cb1be6e0639 (commit) from 1befab3b0e83584f08b06b816adbc0f8b9dc11ab (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit db6a74a9900257848aa4c07256b77b2d10a7db13 Author: Lon Hohberger Date: Tue Mar 4 17:31:32 2008 -0500 [CMAN] make qdisk master abdication work in all cases Red Hat bugzilla 430264 commit 5aeaf6345cd4672e0ef52a753b4f6cf56a64d5b5 Author: Lon Hohberger Date: Tue Mar 11 14:54:49 2008 -0400 [rgmanager] Make ip.sh check link states of non-ethernet devices Resolves: Red Hat Bugzilla #331661 commit 43571d7af75bdb6a0b19d40048da1491b6499efb Author: Lon Hohberger Date: Mon Mar 10 09:58:08 2008 -0400 Merge, part 2 commit df101a4507641607e5869f2f15c05cb1be6e0639 Author: Lon Hohberger Date: Mon Mar 10 09:56:40 2008 -0400 Commit phase 1 of update from rhel5 branch ----------------------------------------------------------------------- Summary of changes: cman/qdisk/main.c | 3 +- rgmanager/event-script.txt | 311 +++++ rgmanager/include/clulog.h | 2 +- rgmanager/include/event.h | 145 +++ rgmanager/include/members.h | 35 + rgmanager/include/reslist.h | 65 +- .../include/{rg_locks.h => restart_counter.h} | 38 +- rgmanager/include/rg_queue.h | 26 +- rgmanager/include/{rg_locks.h => sets.h} | 51 +- rgmanager/man/clusvcadm.8 | 13 +- rgmanager/rgmanager/event-script.txt | 311 +++++ rgmanager/src/clulib/rg_strings.c | 208 +++- rgmanager/src/clulib/sets.c | 370 ++++++ rgmanager/src/clulib/signals.c | 18 + rgmanager/src/clulib/tmgr.c | 128 ++ rgmanager/src/daemons/event_config.c | 541 +++++++++ rgmanager/src/daemons/fo_domain.c | 113 ++- rgmanager/src/daemons/groups.c | 366 +++++- rgmanager/src/daemons/main.c | 2 +- rgmanager/src/daemons/reslist.c | 92 ++- rgmanager/src/daemons/resrules.c | 101 ++- rgmanager/src/daemons/restart_counter.c | 205 ++++ rgmanager/src/daemons/restree.c | 532 ++++----- rgmanager/src/daemons/rg_event.c | 573 +++++++++ rgmanager/src/daemons/service_op.c | 204 ++++ rgmanager/src/daemons/slang_event.c | 1264 ++++++++++++++++++++ rgmanager/src/daemons/test.c | 116 ++- rgmanager/src/resources/Makefile | 9 +- rgmanager/src/resources/clusterfs.sh | 59 +- rgmanager/src/resources/default_event_script.sl | 314 +++++ rgmanager/src/resources/ip.sh | 18 +- rgmanager/src/resources/ocf-shellfuncs | 4 + rgmanager/src/resources/script.sh | 2 +- rgmanager/src/resources/service.sh | 104 ++- rgmanager/src/resources/svclib_nfslock | 28 + .../src/resources/utils/named-parse-config.pl | 26 + rgmanager/src/resources/utils/ra-skelet.sh | 2 +- 37 files changed, 5822 insertions(+), 577 deletions(-) create mode 100644 rgmanager/event-script.txt create mode 100644 rgmanager/include/event.h create mode 100644 rgmanager/include/members.h copy rgmanager/include/{rg_locks.h => restart_counter.h} (53%) copy rgmanager/include/{rg_locks.h => sets.h} (53%) create mode 100644 rgmanager/rgmanager/event-script.txt create mode 100644 rgmanager/src/clulib/sets.c create mode 100644 rgmanager/src/clulib/tmgr.c create mode 100644 rgmanager/src/daemons/event_config.c create mode 100644 rgmanager/src/daemons/restart_counter.c create mode 100644 rgmanager/src/daemons/rg_event.c create mode 100644 rgmanager/src/daemons/service_op.c create mode 100644 rgmanager/src/daemons/slang_event.c create mode 100644 rgmanager/src/resources/default_event_script.sl create mode 100644 rgmanager/src/resources/utils/named-parse-config.pl diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index 9eb2bbd..8e63c88 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -935,7 +935,8 @@ quorum_loop(qd_ctx *ctx, node_info_t *ni, int max) ctx->qc_master = master_exists(ctx, ni, max, &low_id, &count); /* Resolve master conflict, if one exists */ - if (count > 1 && ctx->qc_status == S_MASTER) { + if (count >= 1 && ctx->qc_status == S_MASTER && + ctx->qc_master != ctx->qc_my_id) { clulog(LOG_WARNING, "Master conflict: abdicating\n"); /* Handle just like a recent upgrade */ diff --git a/rgmanager/event-script.txt b/rgmanager/event-script.txt new file mode 100644 index 0000000..00a8b4c --- /dev/null +++ b/rgmanager/event-script.txt @@ -0,0 +1,311 @@ +TODO: +* Return correct error codes to clusvcadm (currently it always returns + "Unknown") +* Write glue for 'migrate' operations and migrate-enabled services + +Basic configuration specification: + + + + + + + + + (note, all service ops and such deal with node ID, not + with node names) + + + + + + service_owner="3"/> + + + service_owner="3"/> + + + + ... + + +General globals available from all scripts: + + node_self - local node ID + event_type - event class, either: + EVENT_NONE - unspecified / unknown + EVENT_NODE - node transition + EVENT_SERVICE - service transition + EVENT_USER - a user-generated request + EVENT_CONFIG - [NOT CONFIGURABLE] + +Node event globals (i.e. when event_type == EVENT_NODE): + + node_id - node ID which is transitioning + node_name - name of node which is transitioning + node_state - new node state (NODE_ONLINE or NODE_OFFLINE, or if you prefer, + 1 or 0, respectively) + node_clean - 0 if the node has not been fenced, 1 if the node has been + fenced + +Service event globals (i.e. when event_type == EVENT_SERVICE): + + service_name - Name of service which transitioned + service_state - new state of service + service_owner - new owner of service (or <0 if service is no longer + running) + service_last_owner - Last owner of service if known. Used for when + service_state = "recovering" generally, in order to + apply restart/relocate/disable policy. + +User event globals (i.e. when event_type == EVENT_USER): + + service_name - service to perform request upon + user_request - request to perform (USER_ENABLE, USER_DISABLE, + USER_STOP, USER_RELOCATE, [TODO] USER_MIGRATE) + user_target - target node ID if applicable + + +Scripting functions - Informational: + + node_list = nodes_online(); + + Returns a list of all online nodes. + + service_list = service_list(); + + Returns a list of all configured services. + + (restarts, last_owner, owner, state) = service_status(service_name); + + Returns the state, owner, last_owner, and restarts. Note that + all return values are optional, but are right-justified per S-Lang + specification. This means if you only want the 'state', you can use: + + (state) = service_status(service_name); + + However, if you need the restart count, you must provide all four + return values as above. + + (nofailback, restricted, ordered, node_list) = + service_domain_info(service_name); + + Returns the failover domain specification, if it exists, for the + specified service name. The node list returned is an ordered list + according to priority levels. In the case of unordered domains, + the ordering of the returned list is pseudo-random. + +Scripting functions - Operational: + + err = service_start(service_name, node_list, [avoid_list]); + + Start a non-running, (but runnable, i.e. not failed) + service on the first node in node_list. Failing that, start it on + the second node in node_list and so forth. One may also specify + an avoid list, but it's better to just use the subtract() function + below. If the start is successful, the node ID running the service + is returned. If the start is unsuccessful, a value < 0 is returned. + + err = service_stop(service_name, [0 = stop, 1 = disable]); + + Stop a running service. The second parameter is optional, and if + non-zero is specified, the service will enter the disabled state. + + ... stuff that's not done but needs to be: + + err = service_relocate(service_name, node_list); + + Move a running service to the specified node_list in order of + preference. In the case of VMs, this is actually a migrate-or- + relocate operation. + +Utility functions - Node list manipulation + + node_list = union(left_node_list, right_node_list); + + Calculates the union between the two node list, removing duplicates + and preserving ordering according to left_node_list. Any added + values from right_node_list will appear in their order, but + after left_node_list in the returned list. + + node_list = intersection(left_node_list, right_node_list); + + Calculates the intersection (items in both lists) between the two + node lists, removing duplicates and preserving ordering according + to left_node_list. Any added values from right_node_list will + appear in their order, but after left_node_list in the returned list. + + node_list = delta(left_node_list, right_node_list); + + Calculates the delta (items not in both lists) between the two + node lists, removing duplicates and preserving ordering according + to left_node_list. Any added values from right_node_list will + appear in their order, but after left_node_list in the returned list. + + node_list = subtract(left_node_list, right_node_list); + + Removes any duplicates as well as items specified in right_node_list + from left_node_list. Example: + + all_nodes = nodes_online(); + allowed_nodes = subtract(nodes_online, node_to_avoid); + + node_list = shuffle(node_list_old); + + Rearranges the contents of node_list_old randomly and returns a + new node list. + +Utility functions - Logging: + + debug(item1, item2, ...); LOG_DEBUG level + info(...); LOG_INFO level + notice(...); LOG_NOTICE level + warning(...); LOG_WARNING level + err(...); LOG_ERR level + crit(...); LOG_CRIT level + alert(...); LOG_ALERT level + emerg(...); LOG_EMERG level + + items - These can be strings, integer lists, or integers. Logging + string lists is not supported. + + level - the level is consistent with syslog(8) + + stop_processing(); + + Calling this function will prevent further event scripts from being + executed on a particular event. Call this script if, for example, + you do not wish for the default event handler to process the event. + + Note: This does NOT terminate the caller script; that is, the + script being executed will run to completion. + +Event scripts are written in a language called S-Lang; documentation specifics +about the language are available at http://www.s-lang.org + +Example script (creating a follows-but-avoid-after-start behavior): +% +% If the main queue server and replication queue server are on the same +% node, relocate the replication server somewhere else if possible. +% +define my_sap_event_trigger() +{ + variable state, owner_rep, owner_main; + variable nodes, allowed; + + % + % If this was a service event, don't execute the default event + % script trigger after this script completes. + % + if (event_type == EVENT_SERVICE) { + stop_processing(); + } + + (owner_main, state) = service_status("service:main_queue"); + (owner_rep, state) = service_status("service:replication_server"); + + if ((event_type == EVENT_NODE) and (owner_main == node_id) and + (node_state == NODE_OFFLINE) and (owner_rep >= 0)) { + % + % uh oh, the owner of the main server died. Restart it + % on the node running the replication server + % + notice("Starting Main Queue Server on node ", owner_rep); + ()=service_start("service:main_queue", owner_rep); + return; + } + + % + % S-Lang doesn't short-circuit prior to 2.1.0 + % + if ((owner_main >= 0) and + ((owner_main == owner_rep) or (owner_rep < 0))) { + + % + % Get all online nodes + % + nodes = nodes_online(); + + % + % Drop out the owner of the main server + % + allowed = subtract(nodes, owner_main); + if ((owner_rep >= 0) and (length(allowed) == 0)) { + % + % Only one node is online and the rep server is + % already running. Don't do anything else. + % + return; + } + + if ((length(allowed) == 0) and (owner_rep < 0)) { + % + % Only node online is the owner ... go ahead + % and start it, even though it doesn't increase + % availability to do so. + % + allowed = owner_main; + } + + % + % Move the replication server off the node that is + % running the main server if a node's available. + % + if (owner_rep >= 0) { + ()=service_stop("service:replication_server"); + } + ()=service_start("service:replication_server", allowed); + } + + return; +} + +my_sap_event_trigger(); + + +Relevant section from cluster.conf: + + + + + + + + + + + + + + + + + + + + + diff --git a/rgmanager/include/clulog.h b/rgmanager/include/clulog.h index 856d83c..e6b7ff8 100644 --- a/rgmanager/include/clulog.h +++ b/rgmanager/include/clulog.h @@ -38,7 +38,7 @@ extern "C" { #include #include -#define LOGLEVEL_DFLT LOG_INFO +#define LOGLEVEL_DFLT LOG_NOTICE #define MAX_LOGMSG_LEN 512 /* diff --git a/rgmanager/include/event.h b/rgmanager/include/event.h new file mode 100644 index 0000000..58edcd5 --- /dev/null +++ b/rgmanager/include/event.h @@ -0,0 +1,145 @@ +/* + Copyright Red Hat, Inc. 2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +#ifndef _EVENT_H +#define _EVENT_H + +/* 128 is a bit big, but it should be okay */ +typedef struct __rge_q { + char rg_name[128]; + uint32_t rg_state; + uint32_t pad1; + int rg_owner; + int rg_last_owner; +} group_event_t; + +typedef struct __ne_q { + int ne_local; + int ne_nodeid; + int ne_state; + int ne_clean; +} node_event_t; + +typedef struct __cfg_q { + int cfg_version; + int cfg_oldversion; +} config_event_t; + +typedef struct __user_q { + char u_name[128]; + msgctx_t *u_ctx; + int u_request; + int u_arg1; + int u_arg2; + int u_target; /* Node ID */ +} user_event_t; + +typedef enum { + EVENT_NONE=0, + EVENT_CONFIG, + EVENT_NODE, + EVENT_RG, + EVENT_USER +} event_type_t; + +/* Data that's distributed which indicates which + node is the event master */ +typedef struct __rgm { + uint32_t m_magic; + uint32_t m_nodeid; + uint64_t m_master_time; + uint8_t m_reserved[112]; +} event_master_t; + +#define swab_event_master_t(ptr) \ +{\ + swab32((ptr)->m_nodeid);\ + swab32((ptr)->m_magic);\ + swab64((ptr)->m_master_time);\ +} + +/* Just a magic # to help us ensure we've got good + date from VF */ +#define EVENT_MASTER_MAGIC 0xfabab0de + +/* Event structure - internal to the event subsystem; use + the queueing functions below which allocate this struct + and pass it to the event handler */ +typedef struct _event { + /* Not used dynamically - part of config info */ + list_head(); + char *ev_name; + char *ev_script; + char *ev_script_file; + int ev_prio; + int ev_pad; + /* --- end config part */ + int ev_type; /* config & generated by rgmanager*/ + int ev_transaction; + union { + group_event_t group; + node_event_t node; + config_event_t config; + user_event_t user; + } ev; +} event_t; + +#define EVENT_PRIO_COUNT 100 + +typedef struct _event_table { + int max_prio; + int pad; + event_t *entries[0]; +} event_table_t; + + +int construct_events(int ccsfd, event_table_t **); +void deconstruct_events(event_table_t **); +void print_events(event_table_t *); + +/* Does the event match a configured event? */ +int event_match(event_t *pattern, event_t *actual); + +/* Event queueing functions. */ +void node_event_q(int local, int nodeID, int state, int clean); +void rg_event_q(char *name, uint32_t state, int owner, int last); +void user_event_q(char *svc, int request, int arg1, int arg2, + int target, msgctx_t *ctx); +void config_event_q(int old_version, int new_version); + +/* Call this to see if there's a master. */ +int event_master_info_cached(event_master_t *); + +/* Call this to get the node ID of the current + master *or* become the master if none exists */ +int event_master(void); + +/* Setup */ +int central_events_enabled(void); +void set_central_events(int flag); +int slang_process_event(event_table_t *event_table, event_t *ev); + +/* For distributed events. */ +void set_transition_throttling(int nsecs); + +/* Simplified service start. */ +int service_op_start(char *svcName, int *target_list, int target_list_len, + int *new_owner); +int service_op_stop(char *svcName, int do_disable, int event_type); + + +#endif diff --git a/rgmanager/include/members.h b/rgmanager/include/members.h new file mode 100644 index 0000000..08feee0 --- /dev/null +++ b/rgmanager/include/members.h @@ -0,0 +1,35 @@ +#ifndef _MEMBERS_H +#define _MEMBERS_H + +#include + +typedef enum { + NODE_STATE_DOWN = 0, + NODE_STATE_UP = 1, + NODE_STATE_CLEAN = 2 +} node_state_t; + + +int get_my_nodeid(cman_handle_t h); +int my_id(void); +cluster_member_list_t * get_member_list(cman_handle_t h); +void free_member_list(cluster_member_list_t *ml); +void member_set_state(int nodeid, int state); +int memb_count(cluster_member_list_t *ml); +int member_online(int nodeid); +int memb_online(cluster_member_list_t *ml, int nodeid); +int memb_online_name(cluster_member_list_t *ml, char *name); +int memb_name_to_id(cluster_member_list_t *ml, char *name); +int memb_mark_down(cluster_member_list_t *ml, int nodeid); +char * memb_id_to_name(cluster_member_list_t *ml, int nodeid); +cman_node_t * memb_id_to_p(cluster_member_list_t *ml, int nodeid); +cman_node_t * memb_name_to_p(cluster_member_list_t *ml, char *name); +void free_member_list(cluster_member_list_t *ml); +cluster_member_list_t *memb_gained(cluster_member_list_t *old, + cluster_member_list_t *new); +cluster_member_list_t *memb_lost(cluster_member_list_t *old, + cluster_member_list_t *new); + +cluster_member_list_t *member_list_dup(cluster_member_list_t *old); + +#endif diff --git a/rgmanager/include/reslist.h b/rgmanager/include/reslist.h index 7b98f23..c4dce68 100644 --- a/rgmanager/include/reslist.h +++ b/rgmanager/include/reslist.h @@ -25,31 +25,33 @@ #include +#define RA_PRIMARY (1<<0) /** Primary key */ +#define RA_UNIQUE (1<<1) /** Unique for given type */ +#define RA_REQUIRED (1<<2) /** Required (or an error if not present */ +#define RA_INHERIT (1<<3) /** Inherit a parent resource's attr */ +#define RA_RECONFIG (1<<4) /** Allow inline reconfiguration */ + #define RF_INLINE (1<<0) #define RF_DEFINED (1<<1) #define RF_NEEDSTART (1<<2) /** Used when adding/changing resources */ #define RF_NEEDSTOP (1<<3) /** Used when deleting/changing resources */ #define RF_COMMON (1<<4) /** " */ +#define RF_INDEPENDENT (1<<5) /** Define this for a resource if it is + otherwise an independent subtree */ +#define RF_RECONFIG (1<<6) + +#define RF_INIT (1<<7) /** Resource rule: Initialize this resource + class on startup */ +#define RF_DESTROY (1<<8) /** Resource rule flag: Destroy this + resource class if you delete it from + the configuration */ + + #define RES_STOPPED (0) #define RES_STARTED (1) #define RES_FAILED (2) -/* - Resource operations - */ -#define RS_START (0) -#define RS_STOP (1) -#define RS_STATUS (2) -#define RS_RESINFO (3) -#define RS_RESTART (4) -#define RS_RELOAD (5) -#define RS_CONDRESTART (6) -#define RS_RECOVER (7) -#define RS_CONDSTART (8) /** Start if flagged with RF_NEEDSTART */ -#define RS_CONDSTOP (9) /** STOP if flagged with RF_NEEDSTOP */ - - #ifndef SHAREDIR #define SHAREDIR "/usr/share/rgmanager" #endif @@ -65,33 +67,20 @@ #include -typedef enum { -/* -#define RA_PRIMARY (1<<0) -#define RA_UNIQUE (1<<1) -#define RA_REQUIRED (1<<2) -#define RA_INHERIT (1<<3) - */ - RA_PRIMARY = (1<<0), - RA_UNIQUE = (1<<1), - RA_REQUIRED= (1<<2), - RA_INHERIT = (1<<3), - RA_SPEC = (1<<4) -} ra_flag_t; - typedef struct _resource_attribute { char *ra_name; char *ra_value; - ra_flag_t ra_flags; + int ra_flags; + int _pad_; } resource_attr_t; typedef struct _resource_child { + char *rc_name; int rc_startlevel; int rc_stoplevel; int rc_forbid; int rc_flags; - char *rc_name; } resource_child_t; @@ -110,7 +99,7 @@ typedef struct _resource_rule { char * rr_type; char * rr_agent; char * rr_version; /** agent XML spec version; OCF-ism */ - int rr_root; + int rr_flags; int rr_maxrefs; resource_attr_t * rr_attrs; resource_child_t * rr_childtypes; @@ -137,6 +126,7 @@ typedef struct _rg_node { struct _rg_node *rn_child, *rn_parent; resource_t *rn_resource; resource_act_t *rn_actions; + restart_counter_t rn_restart_counter; int rn_state; /* State of this instance of rn_resource */ int rn_flags; int rn_last_status; @@ -149,7 +139,7 @@ typedef struct _fod_node { list_head(); char *fdn_name; int fdn_prio; - int _pad_; /* align */ + uint64_t fdn_nodeid; /* on rhel4 this will be 64-bit int */ } fod_node_t; typedef struct _fod { @@ -169,7 +159,11 @@ int res_stop(resource_node_t **tree, resource_t *res, void *ret); int res_status(resource_node_t **tree, resource_t *res, void *ret); int res_condstart(resource_node_t **tree, resource_t *res, void *ret); int res_condstop(resource_node_t **tree, resource_t *res, void *ret); +int res_exec(resource_node_t *node, int op, const char *arg, int depth); /*int res_resinfo(resource_node_t **tree, resource_t *res, void *ret);*/ +int expand_time(char *val); +int store_action(resource_act_t **actsp, char *name, int depth, int timeout, int interval); + /* Calculate differences @@ -206,8 +200,10 @@ void destroy_resource_tree(resource_node_t **tree); int construct_domains(int ccsfd, fod_t **domains); void deconstruct_domains(fod_t **domains); void print_domains(fod_t **domains); -int node_should_start(uint64_t nodeid, cluster_member_list_t *membership, +int node_should_start(int nodeid, cluster_member_list_t *membership, char *rg_name, fod_t **domains); +int node_domain_set(fod_t *domain, int **ret, int *retlen); +int node_domain_set_safe(char *domainname, int **ret, int *retlen, int *flags); /* @@ -216,6 +212,7 @@ int node_should_start(uint64_t nodeid, cluster_member_list_t *membership, resource_t *find_resource_by_ref(resource_t **reslist, char *type, char *ref); resource_t *find_root_by_ref(resource_t **reslist, char *ref); resource_rule_t *find_rule_by_type(resource_rule_t **rulelist, char *type); +void res_build_name(char *, size_t, resource_t *); /* Internal functions; shouldn't be needed. diff --git a/rgmanager/include/rg_locks.h b/rgmanager/include/restart_counter.h similarity index 53% copy from rgmanager/include/rg_locks.h copy to rgmanager/include/restart_counter.h index 78d6096..2f158ad 100644 --- a/rgmanager/include/rg_locks.h +++ b/rgmanager/include/restart_counter.h @@ -1,5 +1,5 @@ /* - Copyright Red Hat, Inc. 2004-2007 + Copyright Red Hat, Inc. 2007 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published @@ -15,34 +15,18 @@ Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef __RG_LOCKS_H -#define __RG_LOCKS_H +/* Time-based restart counters for rgmanager */ -int rg_running(void); +#ifndef _RESTART_COUNTER_H +#define _RESTART_COUNTER_H -int rg_locked(void); -int rg_lockall(int flag); -int rg_unlockall(int flag); +typedef void *restart_counter_t; -int rg_quorate(void); -int rg_set_quorate(void); -int rg_set_inquorate(void); - -int rg_inc_threads(void); -int rg_dec_threads(void); -int rg_wait_threads(void); - -int rg_initialized(void); -int rg_set_initialized(void); -int rg_set_uninitialized(void); -int rg_wait_initialized(void); - -int rg_inc_status(void); -int rg_dec_status(void); -int rg_set_statusmax(int max); - -int ccs_lock(void); -int ccs_unlock(int fd); +int restart_add(restart_counter_t arg); +int restart_clear(restart_counter_t arg); +int restart_count(restart_counter_t arg); +int restart_treshold_exceeded(restart_counter_t arg); +restart_counter_t restart_init(time_t expire_timeout, int max_restarts); +int restart_cleanup(restart_counter_t arg); #endif - diff --git a/rgmanager/include/rg_queue.h b/rgmanager/include/rg_queue.h index ac26ce8..87e9e40 100644 --- a/rgmanager/include/rg_queue.h +++ b/rgmanager/include/rg_queue.h @@ -1,9 +1,27 @@ +/* + Copyright Red Hat, Inc. 2004-2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ #ifndef _RG_QUEUE_H #define _RG_QUEUE_H #include #include #include #include +#include /** @@ -15,12 +33,12 @@ typedef struct _request { uint32_t rr_request; /** Request */ uint32_t rr_errorcode; /** Error condition */ uint32_t rr_orig_request; /** Original request */ - uint32_t rr_resp_fd; /** FD to send response */ uint64_t rr_target; /** Target node */ uint32_t rr_arg0; /** Integer argument */ uint32_t rr_arg1; /** Integer argument */ + uint32_t rr_arg2; /** Integer argument */ uint32_t rr_line; /** Line no */ - uint32_t _pad_; /** pad */ + uint32_t rr_resp_fd; /** FD to send response */ char *rr_file; /** Who made req */ time_t rr_when; /** time to execute */ } request_t; @@ -28,7 +46,7 @@ typedef struct _request { int _rq_queue_request(request_t **queue, char *name, uint32_t request, uint32_t err, uint32_t oldreq, uint32_t fd, time_t when, - uint64_t target, uint32_t arg0, uint32_t arg1, char *file, + uint36_t target, uint32_t arg0, uint32_t arg1, char *file, int line); #define rq_queue_request(queue, name, request, err, oldreq,\ @@ -41,5 +59,7 @@ int rq_queue_empty(request_t **q); void rq_free(request_t *foo); void forward_request(request_t *req); +void forward_message(int fd, void *msg, int nodeid); + #endif diff --git a/rgmanager/include/rg_locks.h b/rgmanager/include/sets.h similarity index 53% copy from rgmanager/include/rg_locks.h copy to rgmanager/include/sets.h index 78d6096..8cc271b 100644 --- a/rgmanager/include/rg_locks.h +++ b/rgmanager/include/sets.h @@ -1,5 +1,5 @@ /* - Copyright Red Hat, Inc. 2004-2007 + Copyright Red Hat, Inc. 2007 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published @@ -15,34 +15,25 @@ Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef __RG_LOCKS_H -#define __RG_LOCKS_H - -int rg_running(void); - -int rg_locked(void); -int rg_lockall(int flag); -int rg_unlockall(int flag); - -int rg_quorate(void); -int rg_set_quorate(void); -int rg_set_inquorate(void); - -int rg_inc_threads(void); -int rg_dec_threads(void); -int rg_wait_threads(void); - -int rg_initialized(void); -int rg_set_initialized(void); -int rg_set_uninitialized(void); -int rg_wait_initialized(void); - -int rg_inc_status(void); -int rg_dec_status(void); -int rg_set_statusmax(int max); - -int ccs_lock(void); -int ccs_unlock(int fd); +/** + @file sets.h - Header file for sets.c + @author Lon Hohberger + */ +#ifndef _SETS_H +#define _SETS_H + +#include +typedef uint64_t set_type_t; + +int s_add(set_type_t *, int *, set_type_t); +int s_union(set_type_t *, int, set_type_t *, + int, set_type_t **, int *); + +int s_intersection(set_type_t *, int, set_type_t *, + int, set_type_t **, int *); +int s_delta(set_type_t *, int, set_type_t *, + int, set_type_t **, int *); +int s_subtract(set_type_t *, int, set_type_t *, int, set_type_t **, int *); +int s_shuffle(set_type_t *, int); #endif - diff --git a/rgmanager/man/clusvcadm.8 b/rgmanager/man/clusvcadm.8 index dcc5691..20ae823 100644 --- a/rgmanager/man/clusvcadm.8 +++ b/rgmanager/man/clusvcadm.8 @@ -49,12 +49,8 @@ service Lock the local resource group manager. This should only be used if the administrator intends to perform a global, cluster-wide shutdown. This prevents starting resource groups on the local node, allowing -services will not fail over during the shutdown of the cluster. Generally, -administrators should use the -.B -clushutdown(8) -command to accomplish this. Once the cluster quorum is dissolved, this -state is reset. +services will not fail over during the shutdown of the cluster. +Once the cluster quorum is dissolved, this state is reset. .IP "\-m " When used in conjunction with either the .B @@ -88,11 +84,10 @@ service until a member transition or until it is enabled again. .IP \-u Unlock the cluster's service managers. This allows services to transition -again. It will be necessary to re-enable all services in the stopped state -if this is run after \fB clushutdown(8)\fR. +again. .IP \-v Display version information and exit. .SH "SEE ALSO" -clustat(8), clushutdown(8) +clustat(8) diff --git a/rgmanager/rgmanager/event-script.txt b/rgmanager/rgmanager/event-script.txt new file mode 100644 index 0000000..00a8b4c --- /dev/null +++ b/rgmanager/rgmanager/event-script.txt @@ -0,0 +1,311 @@ +TODO: +* Return correct error codes to clusvcadm (currently it always returns + "Unknown") +* Write glue for 'migrate' operations and migrate-enabled services + +Basic configuration specification: + + + + + + + + + (note, all service ops and such deal with node ID, not + with node names) + + + + + + service_owner="3"/> + + + service_owner="3"/> + + + + ... + + +General globals available from all scripts: + + node_self - local node ID + event_type - event class, either: + EVENT_NONE - unspecified / unknown + EVENT_NODE - node transition + EVENT_SERVICE - service transition + EVENT_USER - a user-generated request + EVENT_CONFIG - [NOT CONFIGURABLE] + +Node event globals (i.e. when event_type == EVENT_NODE): + + node_id - node ID which is transitioning + node_name - name of node which is transitioning + node_state - new node state (NODE_ONLINE or NODE_OFFLINE, or if you prefer, + 1 or 0, respectively) + node_clean - 0 if the node has not been fenced, 1 if the node has been + fenced + +Service event globals (i.e. when event_type == EVENT_SERVICE): + + service_name - Name of service which transitioned + service_state - new state of service + service_owner - new owner of service (or <0 if service is no longer + running) + service_last_owner - Last owner of service if known. Used for when + service_state = "recovering" generally, in order to + apply restart/relocate/disable policy. + +User event globals (i.e. when event_type == EVENT_USER): + + service_name - service to perform request upon + user_request - request to perform (USER_ENABLE, USER_DISABLE, + USER_STOP, USER_RELOCATE, [TODO] USER_MIGRATE) + user_target - target node ID if applicable + + +Scripting functions - Informational: + + node_list = nodes_online(); + + Returns a list of all online nodes. + + service_list = service_list(); + + Returns a list of all configured services. + + (restarts, last_owner, owner, state) = service_status(service_name); + + Returns the state, owner, last_owner, and restarts. Note that + all return values are optional, but are right-justified per S-Lang + specification. This means if you only want the 'state', you can use: + + (state) = service_status(service_name); + + However, if you need the restart count, you must provide all four + return values as above. + + (nofailback, restricted, ordered, node_list) = + service_domain_info(service_name); + + Returns the failover domain specification, if it exists, for the + specified service name. The node list returned is an ordered list + according to priority levels. In the case of unordered domains, + the ordering of the returned list is pseudo-random. + +Scripting functions - Operational: + + err = service_start(service_name, node_list, [avoid_list]); + + Start a non-running, (but runnable, i.e. not failed) + service on the first node in node_list. Failing that, start it on + the second node in node_list and so forth. One may also specify + an avoid list, but it's better to just use the subtract() function + below. If the start is successful, the node ID running the service + is returned. If the start is unsuccessful, a value < 0 is returned. + + err = service_stop(service_name, [0 = stop, 1 = disable]); + + Stop a running service. The second parameter is optional, and if + non-zero is specified, the service will enter the disabled state. + + ... stuff that's not done but needs to be: + + err = service_relocate(service_name, node_list); + + Move a running service to the specified node_list in order of + preference. In the case of VMs, this is actually a migrate-or- + relocate operation. + +Utility functions - Node list manipulation + + node_list = union(left_node_list, right_node_list); + + Calculates the union between the two node list, removing duplicates + and preserving ordering according to left_node_list. Any added + values from right_node_list will appear in their order, but + after left_node_list in the returned list. + + node_list = intersection(left_node_list, right_node_list); + + Calculates the intersection (items in both lists) between the two + node lists, removing duplicates and preserving ordering according + to left_node_list. Any added values from right_node_list will + appear in their order, but after left_node_list in the returned list. + + node_list = delta(left_node_list, right_node_list); + + Calculates the delta (items not in both lists) between the two + node lists, removing duplicates and preserving ordering according + to left_node_list. Any added values from right_node_list will + appear in their order, but after left_node_list in the returned list. + + node_list = subtract(left_node_list, right_node_list); + + Removes any duplicates as well as items specified in right_node_list + from left_node_list. Example: + + all_nodes = nodes_online(); + allowed_nodes = subtract(nodes_online, node_to_avoid); + + node_list = shuffle(node_list_old); + + Rearranges the contents of node_list_old randomly and returns a + new node list. + +Utility functions - Logging: + + debug(item1, item2, ...); LOG_DEBUG level + info(...); LOG_INFO level + notice(...); LOG_NOTICE level + warning(...); LOG_WARNING level + err(...); LOG_ERR level + crit(...); LOG_CRIT level + alert(...); LOG_ALERT level + emerg(...); LOG_EMERG level + + items - These can be strings, integer lists, or integers. Logging + string lists is not supported. + + level - the level is consistent with syslog(8) + + stop_processing(); + + Calling this function will prevent further event scripts from being + executed on a particular event. Call this script if, for example, + you do not wish for the default event handler to process the event. + + Note: This does NOT terminate the caller script; that is, the + script being executed will run to completion. + +Event scripts are written in a language called S-Lang; documentation specifics +about the language are available at http://www.s-lang.org + +Example script (creating a follows-but-avoid-after-start behavior): +% +% If the main queue server and replication queue server are on the same +% node, relocate the replication server somewhere else if possible. +% +define my_sap_event_trigger() +{ + variable state, owner_rep, owner_main; + variable nodes, allowed; + + % + % If this was a service event, don't execute the default event + % script trigger after this script completes. + % + if (event_type == EVENT_SERVICE) { + stop_processing(); + } + + (owner_main, state) = service_status("service:main_queue"); + (owner_rep, state) = service_status("service:replication_server"); + + if ((event_type == EVENT_NODE) and (owner_main == node_id) and + (node_state == NODE_OFFLINE) and (owner_rep >= 0)) { + % + % uh oh, the owner of the main server died. Restart it + % on the node running the replication server + % + notice("Starting Main Queue Server on node ", owner_rep); + ()=service_start("service:main_queue", owner_rep); + return; + } + + % + % S-Lang doesn't short-circuit prior to 2.1.0 + % + if ((owner_main >= 0) and + ((owner_main == owner_rep) or (owner_rep < 0))) { + + % + % Get all online nodes + % + nodes = nodes_online(); + + % + % Drop out the owner of the main server + % + allowed = subtract(nodes, owner_main); + if ((owner_rep >= 0) and (length(allowed) == 0)) { + % + % Only one node is online and the rep server is + % already running. Don't do anything else. + % + return; + } + + if ((length(allowed) == 0) and (owner_rep < 0)) { + % + % Only node online is the owner ... go ahead + % and start it, even though it doesn't increase + % availability to do so. + % + allowed = owner_main; + } + + % + % Move the replication server off the node that is + % running the main server if a node's available. + % + if (owner_rep >= 0) { + ()=service_stop("service:replication_server"); + } + ()=service_start("service:replication_server", allowed); + } + + return; +} + +my_sap_event_trigger(); + + +Relevant section from cluster.conf: + + + + + + + + + + + + + + + + + + + + + diff --git a/rgmanager/src/clulib/rg_strings.c b/rgmanager/src/clulib/rg_strings.c index 4728789..fb7598f 100644 --- a/rgmanager/src/clulib/rg_strings.c +++ b/rgmanager/src/clulib/rg_strings.c @@ -1,35 +1,179 @@ -const char *rg_state_strings[] = { - "stopped", - "starting", - "started", - "stopping", - "failed", - "uninitialized", - "checking", - "recoverable", - "recovering", - "disabled", - "" +/* + Copyright Red Hat, Inc. 2004-2006 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +#include +#include + +struct string_val { + int val; + char *str; +}; + + +const struct string_val rg_error_strings[] = { + { RG_EEXCL, "Service not runnable: cannot run exclusive" }, + { RG_EDOMAIN, "Service not runnable: restricted failover domain offline" }, + { RG_ESCRIPT, "S/Lang Script Error" }, + { RG_EFENCE, "Fencing operation pending; try again later" }, + { RG_ENODE, "Target node dead / nonexistent" }, + { RG_ERUN, "Service is already running" }, + { RG_EQUORUM, "Operation requires quorum" }, + { RG_EINVAL, "Invalid operation for resource" }, + { RG_EDEPEND, "Operation violates dependency rule" }, + { RG_EAGAIN, "Temporary failure; try again" }, + { RG_EDEADLCK, "Operation would cause a deadlock" }, + { RG_ENOSERVICE,"Service does not exist" }, + { RG_EFORWARD, "Service not mastered locally" }, + { RG_EABORT, "Aborted; service failed" }, + { RG_EFAIL, "Failure" }, + { RG_ESUCCESS, "Success" }, + { RG_YES, "Yes" }, + { RG_NO, "No" }, + { 0, NULL } +}; + + +const struct string_val rg_req_strings[] = { + {RG_SUCCESS, "success" }, + {RG_FAIL, "fail"}, + {RG_START, "start"}, + {RG_STOP, "stop"}, + {RG_STATUS, "status"}, + {RG_DISABLE, "disable"}, + {RG_STOP_RECOVER, "stop (recovery)"}, + {RG_START_RECOVER, "start (recovery)"}, + {RG_RESTART, "restart"}, + {RG_EXITING, "exiting"}, + {RG_INIT, "initialize"}, + {RG_ENABLE, "enable"}, + {RG_STATUS_NODE, "status inquiry"}, + {RG_RELOCATE, "relocate"}, + {RG_CONDSTOP, "conditional stop"}, + {RG_CONDSTART, "conditional start"}, + {RG_START_REMOTE,"remote start"}, + {RG_STOP_USER, "user stop"}, + {RG_STOP_EXITING, "stop (shutdown)"}, + {RG_LOCK, "locking"}, + {RG_UNLOCK, "unlocking"}, + {RG_QUERY_LOCK, "lock status inquiry"}, + {RG_MIGRATE, "migrate"}, + {RG_STATUS_INQUIRY, "out of band service status inquiry"}, + {RG_NONE, "none"}, + {0, NULL} +}; + + +const struct string_val rg_state_strings[] = { + {RG_STATE_STOPPED, "stopped"}, + {RG_STATE_STARTING, "starting"}, + {RG_STATE_STARTED, "started"}, + {RG_STATE_STOPPING, "stopping"}, + {RG_STATE_FAILED, "failed"}, + {RG_STATE_UNINITIALIZED, "uninitialized"}, + {RG_STATE_CHECK, "checking"}, + {RG_STATE_ERROR, "recoverable"}, + {RG_STATE_RECOVER, "recovering"}, + {RG_STATE_DISABLED, "disabled"}, + {RG_STATE_MIGRATE, "migrating"}, + {0, NULL} }; -const char *rg_req_strings[] = { - "success", - "fail", - "start", - "stop", - "status", - "disable", - "stop (recovery)", - "start (recovery)", - "restart", - "exiting", - "initialize", - "enable", - "status inquiry", - "relocate", - "conditional stop", - "conditional start", - "remote start", - "user stop", - "" + +const struct string_val agent_ops[] = { + {RS_START, "start"}, + {RS_STOP, "stop"}, + {RS_STATUS, "status"}, + {RS_RESINFO, "resinfo"}, + {RS_RESTART, "restart"}, + {RS_RELOAD, "reload"}, + {RS_CONDRESTART, "condrestart"}, /* Unused */ + {RS_RECOVER, "recover"}, + {RS_CONDSTART, "condstart"}, + {RS_CONDSTOP, "condstop"}, + {RS_MONITOR, "monitor"}, + {RS_META_DATA, "meta-data"}, /* printenv */ + {RS_VALIDATE, "validate-all"}, + {RS_MIGRATE, "migrate"}, + {RS_RECONFIG, "reconfig"}, + {0 , NULL} }; + + +static inline const char * +rg_search_table(const struct string_val *table, int val) +{ + int x; + + for (x = 0; table[x].str != NULL; x++) { + if (table[x].val == val) { + return table[x].str; + } + } + + return "Unknown"; +} + + +static inline int +rg_search_table_by_str(const struct string_val *table, const char *val) +{ + int x; + + for (x = 0; table[x].str != NULL; x++) { + if (!strcasecmp(table[x].str, val)) + return table[x].val; + } + + return -1; +} + + + +const char * +rg_strerror(int val) +{ + return rg_search_table(rg_error_strings, val); +} + +const char * +rg_state_str(int val) +{ + return rg_search_table(rg_state_strings, val); +} + + +int +rg_state_str_to_id(const char *val) +{ + return rg_search_table_by_str(rg_state_strings, val); +} + + + +const char * +rg_req_str(int val) +{ + return rg_search_table(rg_req_strings, val); +} + + +const char * +agent_op_str(int val) +{ + return rg_search_table(agent_ops, val); +} diff --git a/rgmanager/src/clulib/sets.c b/rgmanager/src/clulib/sets.c new file mode 100644 index 0000000..f734064 --- /dev/null +++ b/rgmanager/src/clulib/sets.c @@ -0,0 +1,370 @@ +/* + Copyright Red Hat, Inc. 2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +/** + @file sets.c - Order-preserving set functions (union / intersection / delta) + (designed for integer types; a la int, uint64_t, etc...) + @author Lon Hohberger + */ +#include +#include +#include +#include +#include +#include + + +/** + Add a value to a set. This function disregards an add if the value is already + in the set. Note that the maximum length of set s must be preallocated; this + function doesn't do error or bounds checking. + + @param s Set to modify + @param curlen Current length (modified if added) + @param val Value to add + @return 0 if not added, 1 if added + */ +int +s_add(set_type_t *s, int *curlen, set_type_t val) +{ + int idx=0; + + for (; idx < *curlen; idx++) + if (s[idx] == val) + return 0; + s[*curlen] = val; + ++(*curlen); + return 1; +} + + +/** + Union-set function. Allocates and returns a new set which is the union of + the two given sets 'left' and 'right'. Also returns the new set length. + + @param left Left set - order is preserved on this set; that is, + this is the set where the caller cares about ordering. + @param ll Length of left set. + @param right Right set - order is not preserved on this set during + the union operation + @param rl Length of right set + @param ret Return set. Should * not * be preallocated. + @param retl Return set length. Should be ready to accept 1 integer + upon calling this function + @return 0 on success, -1 on error + */ +int +s_union(set_type_t *left, int ll, set_type_t *right, int rl, + set_type_t **ret, int *retl) +{ + int l, r, cnt = 0, total; + + total = ll + rl; /* Union will never exceed both sets */ + + *ret = malloc(sizeof(set_type_t)*total); + if (!*ret) { + return -1; + } + memset((void *)(*ret), 0, sizeof(set_type_t)*total); + + cnt = 0; + + /* Add all the ones on the left */ + for (l = 0; l < ll; l++) + s_add(*ret, &cnt, left[l]); + + /* Add the ones on the left */ + for (r = 0; r < rl; r++) + s_add(*ret, &cnt, right[r]); + + *retl = cnt; + + return 0; +} + + +/** + Intersection-set function. Allocates and returns a new set which is the + intersection of the two given sets 'left' and 'right'. Also returns the new + set length. + + @param left Left set - order is preserved on this set; that is, + this is the set where the caller cares about ordering. + @param ll Length of left set. + @param right Right set - order is not preserved on this set during + the union operation + @param rl Length of right set + @param ret Return set. Should * not * be preallocated. + @param retl Return set length. Should be ready to accept 1 integer + upon calling this function + @return 0 on success, -1 on error + */ +int +s_intersection(set_type_t *left, int ll, set_type_t *right, int rl, + set_type_t **ret, int *retl) +{ + int l, r, cnt = 0, total; + + total = ll; /* Intersection will never exceed one of the two set + sizes */ + + *ret = malloc(sizeof(set_type_t)*total); + if (!*ret) { + return -1; + } + memset((void *)(*ret), 0, sizeof(set_type_t)*total); + + cnt = 0; + /* Find duplicates */ + for (l = 0; l < ll; l++) { + for (r = 0; r < rl; r++) { + if (left[l] != right[r]) + continue; + if (s_add(*ret, &cnt, right[r])) + break; + } + } + + *retl = cnt; + return 0; +} + + +/** + Delta-set function. Allocates and returns a new set which is the delta (i.e. + numbers not in both sets) of the two given sets 'left' and 'right'. Also + returns the new set length. + + @param left Left set - order is preserved on this set; that is, + this is the set where the caller cares about ordering. + @param ll Length of left set. + @param right Right set - order is not preserved on this set during + the union operation + @param rl Length of right set + @param ret Return set. Should * not * be preallocated. + @param retl Return set length. Should be ready to accept 1 integer + upon calling this function + @return 0 on success, -1 on error + */ +int +s_delta(set_type_t *left, int ll, set_type_t *right, int rl, + set_type_t **ret, int *retl) +{ + int l, r, cnt = 0, total, found; + + total = ll + rl; /* Union will never exceed both sets */ + + *ret = malloc(sizeof(set_type_t)*total); + if (!*ret) { + return -1; + } + memset((void *)(*ret), 0, sizeof(set_type_t)*total); + + cnt = 0; + + /* not efficient, but it works */ + /* Add all the ones on the left */ + for (l = 0; l < ll; l++) { + found = 0; + for (r = 0; r < rl; r++) { + if (right[r] == left[l]) { + found = 1; + break; + } + } + + if (found) + continue; + s_add(*ret, &cnt, left[l]); + } + + + /* Add all the ones on the right*/ + for (r = 0; r < rl; r++) { + found = 0; + for (l = 0; l < ll; l++) { + if (right[r] == left[l]) { + found = 1; + break; + } + } + + if (found) + continue; + s_add(*ret, &cnt, right[r]); + } + + *retl = cnt; + + return 0; +} + + +/** + Subtract-set function. Allocates and returns a new set which is the + subtraction of the right set from the left set. + Also returns the new set length. + + @param left Left set - order is preserved on this set; that is, + this is the set where the caller cares about ordering. + @param ll Length of left set. + @param right Right set - order is not preserved on this set during + the union operation + @param rl Length of right set + @param ret Return set. Should * not * be preallocated. + @param retl Return set length. Should be ready to accept 1 integer + upon calling this function + @return 0 on success, -1 on error + */ +int +s_subtract(set_type_t *left, int ll, set_type_t *right, int rl, + set_type_t **ret, int *retl) +{ + int l, r, cnt = 0, total, found; + + total = ll; /* Union will never exceed left set length*/ + + *ret = malloc(sizeof(set_type_t)*total); + if (!*ret) { + return -1; + } + memset((void *)(*ret), 0, sizeof(set_type_t)*total); + + cnt = 0; + + /* not efficient, but it works */ + for (l = 0; l < ll; l++) { + found = 0; + for (r = 0; r < rl; r++) { + if (right[r] == left[l]) { + found = 1; + break; + } + } + + if (found) + continue; + s_add(*ret, &cnt, left[l]); + } + + *retl = cnt; + + return 0; +} + + +/** + Shuffle-set function. Weakly randomizes ordering of a set in-place. + + @param set Set to randomize + @param sl Length of set + @return 0 + */ +int +s_shuffle(set_type_t *set, int sl) +{ + int x, newidx; + unsigned r_state = 0; + set_type_t t; + struct timeval tv; + + gettimeofday(&tv, NULL); + r_state = (int)(tv.tv_usec); + + for (x = 0; x < sl; x++) { + newidx = (rand_r(&r_state) % sl); + if (newidx == x) + continue; + t = set[x]; + set[x] = set[newidx]; + set[newidx] = t; + } + + return 0; +} + + +#ifdef STANDALONE +/* Testbed */ +/* + gcc -o sets sets.c -DSTANDALONE -ggdb -I../../include \ + -Wall -Werror -Wstrict-prototypes -Wextra + */ +int +main(int __attribute__ ((unused)) argc, char __attribute__ ((unused)) **argv) +{ + set_type_t a[] = { 1, 2, 3, 3, 3, 2, 2, 3 }; + set_type_t b[] = { 2, 3, 4 }; + set_type_t *i; + int ilen = 0, x; + + s_union(a, 8, b, 3, &i, &ilen); + + /* Should return length of 4 - { 1 2 3 4 } */ + printf("set_union [%d] = ", ilen); + for ( x = 0; x < ilen; x++) { + printf("%d ", (int)i[x]); + } + printf("\n"); + + s_shuffle(i, ilen); + printf("shuffled [%d] = ", ilen); + for ( x = 0; x < ilen; x++) { + printf("%d ", (int)i[x]); + } + printf("\n"); + + + free(i); + + /* Should return length of 2 - { 2 3 } */ + s_intersection(a, 8, b, 3, &i, &ilen); + + printf("set_intersection [%d] = ", ilen); + for ( x = 0; x < ilen; x++) { + printf("%d ", (int)i[x]); + } + printf("\n"); + + free(i); + + /* Should return length of 2 - { 1 4 } */ + s_delta(a, 8, b, 3, &i, &ilen); + + printf("set_delta [%d] = ", ilen); + for ( x = 0; x < ilen; x++) { + printf("%d ", (int)i[x]); + } + printf("\n"); + + free(i); + + /* Should return length of 1 - { 1 } */ + s_subtract(a, 8, b, 3, &i, &ilen); + + printf("set_subtract [%d] = ", ilen); + for ( x = 0; x < ilen; x++) { + printf("%d ", (int)i[x]); + } + printf("\n"); + + free(i); + + + return 0; +} +#endif diff --git a/rgmanager/src/clulib/signals.c b/rgmanager/src/clulib/signals.c index 1d49ee5..fa9f4a6 100644 --- a/rgmanager/src/clulib/signals.c +++ b/rgmanager/src/clulib/signals.c @@ -1,3 +1,21 @@ +/* + Copyright Red Hat, Inc. 2003-2006 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ #include #include #include diff --git a/rgmanager/src/clulib/tmgr.c b/rgmanager/src/clulib/tmgr.c new file mode 100644 index 0000000..2565f26 --- /dev/null +++ b/rgmanager/src/clulib/tmgr.c @@ -0,0 +1,128 @@ +/* + Copyright Red Hat, Inc. 2007 + Copyright Crosswalk 2006-2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +#ifdef WRAP_THREADS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct _thr { + list_head(); + void *(*fn)(void *arg); + char **name; + pthread_t th; +} mthread_t; + +static mthread_t *_tlist = NULL; +static int _tcount = 0; +static pthread_rwlock_t _tlock = PTHREAD_RWLOCK_INITIALIZER; + +void +dump_thread_states(FILE *fp) +{ + int x; + mthread_t *curr; + fprintf(fp, "Thread Information\n"); + pthread_rwlock_rdlock(&_tlock); + list_for(&_tlist, curr, x) { + fprintf(fp, " Thread #%d id: %d function: %s\n", + x, (unsigned)curr->th, curr->name[0]); + } + pthread_rwlock_unlock(&_tlock); + fprintf(fp, "\n\n"); +} + + +int __real_pthread_create(pthread_t *, const pthread_attr_t *, + void *(*)(void*), void *); +int +__wrap_pthread_create(pthread_t *th, const pthread_attr_t *attr, + void *(*start_routine)(void*), + void *arg) +{ + void *fn = start_routine; + mthread_t *new; + int ret; + + new = malloc(sizeof (*new)); + + ret = __real_pthread_create(th, attr, start_routine, arg); + if (ret) { + if (new) + free(new); + return ret; + } + + if (new) { + new->th = *th; + new->fn = start_routine; + new->name = backtrace_symbols(&fn, 1); + pthread_rwlock_wrlock(&_tlock); + list_insert(&_tlist, new); + ++_tcount; + pthread_rwlock_unlock(&_tlock); + } + + return ret; +} + + +void __real_pthread_exit(void *); +void +__wrap_pthread_exit(void *exitval) +{ + mthread_t *old; + int ret = 0, found = 0; + pthread_t me = pthread_self(); + + pthread_rwlock_rdlock(&_tlock); + list_for(&_tlist, old, ret) { + if (old->th == me) { + found = 1; + break; + } + } + if (!found) + old = NULL; + pthread_rwlock_unlock(&_tlock); + + if (!old) + __real_pthread_exit(exitval); + + pthread_rwlock_wrlock(&_tlock); + list_remove(&_tlist, old); + --_tcount; + pthread_rwlock_unlock(&_tlock); + + if (old->name) + free(old->name); + free(old); + __real_pthread_exit(exitval); +} +#endif diff --git a/rgmanager/src/daemons/event_config.c b/rgmanager/src/daemons/event_config.c new file mode 100644 index 0000000..c52e8e1 --- /dev/null +++ b/rgmanager/src/daemons/event_config.c @@ -0,0 +1,541 @@ +/** + Copyright Red Hat, Inc. 2002-2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +/** @file + * CCS event parsing, based on failover domain parsing + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CONFIG_NODE_ID_TO_NAME \ + "/cluster/clusternodes/clusternode[@nodeid=\"%d\"]/@name" +#define CONFIG_NODE_NAME_TO_ID \ + "/cluster/clusternodes/clusternode[@name=\"%s\"]/@nodeid" + +void deconstruct_events(event_table_t **); +void print_event(event_t *ev); + +//#define DEBUG + +#ifdef DEBUG +#define ENTER() clulog(LOG_DEBUG, "ENTER: %s\n", __FUNCTION__) +#define RETURN(val) {\ + clulog(LOG_DEBUG, "RETURN: %s line=%d value=%d\n", __FUNCTION__, \ + __LINE__, (val));\ + return(val);\ +} +#else +#define ENTER() +#define RETURN(val) return(val) +#endif + +#ifdef NO_CCS +#define ccs_get(fd, query, ret) conf_get(query, ret) +#endif + +/* + + + slang_script_stuff(); + start_service(); + + + */ +int +event_match(event_t *pattern, event_t *actual) +{ + if (pattern->ev_type != EVENT_NONE && + actual->ev_type != pattern->ev_type) + return 0; + + /* If there's no event class specified, the rest is + irrelevant */ + if (pattern->ev_type == EVENT_NONE) + return 1; + + switch(pattern->ev_type) { + case EVENT_NODE: + if (pattern->ev.node.ne_nodeid >= 0 && + actual->ev.node.ne_nodeid != + pattern->ev.node.ne_nodeid) { + return 0; + } + if (pattern->ev.node.ne_local >= 0 && + actual->ev.node.ne_local != + pattern->ev.node.ne_local) { + return 0; + } + if (pattern->ev.node.ne_state >= 0 && + actual->ev.node.ne_state != + pattern->ev.node.ne_state) { + return 0; + } + if (pattern->ev.node.ne_clean >= 0 && + actual->ev.node.ne_clean != + pattern->ev.node.ne_clean) { + return 0; + } + return 1; /* All specified params match */ + case EVENT_RG: + if (pattern->ev.group.rg_name[0] && + strcasecmp(actual->ev.group.rg_name, + pattern->ev.group.rg_name)) { + return 0; + } + if (pattern->ev.group.rg_state != (uint32_t)-1 && + actual->ev.group.rg_state != + pattern->ev.group.rg_state) { + return 0; + } + if (pattern->ev.group.rg_owner >= 0 && + actual->ev.group.rg_owner != + pattern->ev.group.rg_owner) { + return 0; + } + return 1; + case EVENT_CONFIG: + if (pattern->ev.config.cfg_version >= 0 && + actual->ev.config.cfg_version != + pattern->ev.config.cfg_version) { + return 0; + } + if (pattern->ev.config.cfg_oldversion >= 0 && + actual->ev.config.cfg_oldversion != + pattern->ev.config.cfg_oldversion) { + return 0; + } + return 1; + case EVENT_USER: + if (pattern->ev.user.u_name[0] && + strcasecmp(actual->ev.user.u_name, + pattern->ev.user.u_name)) { + return 0; + } + if (pattern->ev.user.u_request != 0 && + actual->ev.user.u_request != + pattern->ev.user.u_request) { + return 0; + } + if (pattern->ev.user.u_target != 0 && + actual->ev.user.u_target != + pattern->ev.user.u_target) { + return 0; + } + return 1; + default: + break; + } + + return 0; +} + + +char * +ccs_node_id_to_name(int ccsfd, int nodeid) +{ + char xpath[256], *ret = 0; + + snprintf(xpath, sizeof(xpath), CONFIG_NODE_ID_TO_NAME, + nodeid); + if (ccs_get(ccsfd, xpath, &ret) == 0) + return ret; + return NULL; +} + + +int +ccs_node_name_to_id(int ccsfd, char *name) +{ + char xpath[256], *ret = 0; + int rv = 0; + + snprintf(xpath, sizeof(xpath), CONFIG_NODE_NAME_TO_ID, + name); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + rv = atoi(ret); + free(ret); + return rv; + } + return 0; +} + + +static void +deconstruct_event(event_t *ev) +{ + if (ev->ev_script) + free(ev->ev_script); + if (ev->ev_name) + free(ev->ev_name); + free(ev); +} + + +static int +get_node_event(int ccsfd, char *base, event_t *ev) +{ + char xpath[256], *ret = NULL; + + /* Clear out the possibilitiies */ + ev->ev.node.ne_nodeid = -1; + ev->ev.node.ne_local = -1; + ev->ev.node.ne_state = -1; + ev->ev.node.ne_clean = -1; + + snprintf(xpath, sizeof(xpath), "%s/@node_id", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev.node.ne_nodeid = atoi(ret); + free(ret); + if (ev->ev.node.ne_nodeid <= 0) + return -1; + } else { + /* See if there's a node name */ + snprintf(xpath, sizeof(xpath), "%s/@node", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev.node.ne_nodeid = + ccs_node_name_to_id(ccsfd, ret); + free(ret); + if (ev->ev.node.ne_nodeid <= 0) + return -1; + } + } + + snprintf(xpath, sizeof(xpath), "%s/@node_state", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + if (!strcasecmp(ret, "up")) { + ev->ev.node.ne_state = 1; + } else if (!strcasecmp(ret, "down")) { + ev->ev.node.ne_state = 0; + } else { + ev->ev.node.ne_state = !!atoi(ret); + } + free(ret); + } + + snprintf(xpath, sizeof(xpath), "%s/@node_clean", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev.node.ne_clean = !!atoi(ret); + free(ret); + } + + snprintf(xpath, sizeof(xpath), "%s/@node_local", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev.node.ne_local = !!atoi(ret); + free(ret); + } + + return 0; +} + + +static int +get_rg_event(int ccsfd, char *base, event_t *ev) +{ + char xpath[256], *ret = NULL; + + /* Clear out the possibilitiies */ + ev->ev.group.rg_name[0] = 0; + ev->ev.group.rg_state = (uint32_t)-1; + ev->ev.group.rg_owner = -1; + + snprintf(xpath, sizeof(xpath), "%s/@service", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + strncpy(ev->ev.group.rg_name, ret, + sizeof(ev->ev.group.rg_name)); + free(ret); + if (!strlen(ev->ev.group.rg_name)) { + return -1; + } + } + + snprintf(xpath, sizeof(xpath), "%s/@service_state", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + if (!isdigit(ret[0])) { + ev->ev.group.rg_state = + rg_state_str_to_id(ret); + } else { + ev->ev.group.rg_state = atoi(ret); + } + free(ret); + } + + snprintf(xpath, sizeof(xpath), "%s/@service_owner", base); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + if (!isdigit(ret[0])) { + ev->ev.group.rg_owner = + ccs_node_name_to_id(ccsfd, ret); + } else { + ev->ev.group.rg_owner = !!atoi(ret); + } + free(ret); + } + + return 0; +} + + +static int +get_config_event(int __attribute__((unused)) ccsfd, + char __attribute__((unused)) *base, + event_t __attribute__((unused)) *ev) +{ + errno = ENOSYS; + return -1; +} + + +static event_t * +get_event(int ccsfd, char *base, int idx, int *_done) +{ + event_t *ev; + char xpath[256]; + char *ret = NULL; + + *_done = 0; + snprintf(xpath, sizeof(xpath), "%s/event[%d]/@name", + base, idx); + if (ccs_get(ccsfd, xpath, &ret) != 0) { + *_done = 1; + return NULL; + } + + ev = malloc(sizeof(*ev)); + if (!ev) + return NULL; + memset(ev, 0, sizeof(*ev)); + ev->ev_name = ret; + + /* Get the script file / inline from config */ + ret = NULL; + snprintf(xpath, sizeof(xpath), "%s/event[%d]/@file", + base, idx); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev_script_file = ret; + } else { + snprintf(xpath, sizeof(xpath), "%s/event[%d]", + base, idx); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev_script = ret; + } else { + goto out_fail; + } + } + + /* Get the priority ordering (must be nonzero) */ + ev->ev_prio = 99; + ret = NULL; + snprintf(xpath, sizeof(xpath), "%s/event[%d]/@priority", + base, idx); + if (ccs_get(ccsfd, xpath, &ret) == 0) { + ev->ev_prio = atoi(ret); + if (ev->ev_prio <= 0 || ev->ev_prio > EVENT_PRIO_COUNT) { + clulog(LOG_ERR, + "event %s: priority %s invalid\n", + ev->ev_name, ret); + goto out_fail; + } + free(ret); + } + + /* Get the event class */ + snprintf(xpath, sizeof(xpath), "%s/event[%d]/@class", + base, idx); + ret = NULL; + if (ccs_get(ccsfd, xpath, &ret) == 0) { + snprintf(xpath, sizeof(xpath), "%s/event[%d]", + base, idx); + if (!strcasecmp(ret, "node")) { + ev->ev_type = EVENT_NODE; + if (get_node_event(ccsfd, xpath, ev) < 0) + goto out_fail; + } else if (!strcasecmp(ret, "service") || + !strcasecmp(ret, "resource") || + !strcasecmp(ret, "rg") ) { + ev->ev_type = EVENT_RG; + if (get_rg_event(ccsfd, xpath, ev) < 0) + goto out_fail; + } else if (!strcasecmp(ret, "config") || + !strcasecmp(ret, "reconfig")) { + ev->ev_type = EVENT_CONFIG; + if (get_config_event(ccsfd, xpath, ev) < 0) + goto out_fail; + } else { + clulog(LOG_ERR, + "event %s: class %s unrecognized\n", + ev->ev_name, ret); + goto out_fail; + } + + free(ret); + ret = NULL; + } + + return ev; +out_fail: + if (ret) + free(ret); + deconstruct_event(ev); + return NULL; +} + + +static event_t * +get_default_event(void) +{ + event_t *ev; + char xpath[1024]; + + ev = malloc(sizeof(*ev)); + if (!ev) + return NULL; + memset(ev, 0, sizeof(*ev)); + ev->ev_name = strdup("Default"); + + /* Get the script file / inline from config */ + snprintf(xpath, sizeof(xpath), "%s/default_event_script.sl", + RESOURCE_ROOTDIR); + + ev->ev_prio = 100; + ev->ev_type = EVENT_NONE; + ev->ev_script_file = strdup(xpath); + if (!ev->ev_script_file || ! ev->ev_name) { + deconstruct_event(ev); + return NULL; + } + + return ev; +} + + +/** + * similar API to failover domain + */ +int +construct_events(int ccsfd, event_table_t **events) +{ + char xpath[256]; + event_t *ev; + int x = 1, done = 0; + + /* Allocate the event list table */ + *events = malloc(sizeof(event_table_t) + + sizeof(event_t) * (EVENT_PRIO_COUNT+1)); + if (!*events) + return -1; + memset(*events, 0, sizeof(event_table_t) + + sizeof(event_t) * (EVENT_PRIO_COUNT+1)); + (*events)->max_prio = EVENT_PRIO_COUNT; + + snprintf(xpath, sizeof(xpath), + RESOURCE_TREE_ROOT "/events"); + + do { + ev = get_event(ccsfd, xpath, x++, &done); + if (ev) + list_insert(&((*events)->entries[ev->ev_prio]), ev); + } while (!done); + + ev = get_default_event(); + if (ev) + list_insert(&((*events)->entries[ev->ev_prio]), ev); + + return 0; +} + + +void +print_event(event_t *ev) +{ + printf(" Name: %s\n", ev->ev_name); + + switch(ev->ev_type) { + case EVENT_NODE: + printf(" Node %d State %d\n", ev->ev.node.ne_nodeid, + ev->ev.node.ne_state); + break; + case EVENT_RG: + printf(" RG %s State %s\n", ev->ev.group.rg_name, + rg_state_str(ev->ev.group.rg_state)); + break; + case EVENT_CONFIG: + printf(" Config change - unsupported\n"); + break; + default: + printf(" (Any event)\n"); + break; + } + + if (ev->ev_script) { + printf(" Inline script.\n"); + } else { + printf(" File: %s\n", ev->ev_script_file); + } +} + + +void +print_events(event_table_t *events) +{ + int x, y; + event_t *ev; + + for (x = 0; x <= events->max_prio; x++) { + if (!events->entries[x]) + continue; + printf("Event Priority Level %d:\n", x); + list_for(&(events->entries[x]), ev, y) { + print_event(ev); + } + } +} + + +void +deconstruct_events(event_table_t **eventsp) +{ + int x; + event_table_t *events = *eventsp; + event_t *ev = NULL; + + if (!events) + return; + + for (x = 0; x <= events->max_prio; x++) { + while ((ev = (events->entries[x]))) { + list_remove(&(events->entries[x]), ev); + deconstruct_event(ev); + } + } + + free(events); + *eventsp = NULL; +} + + diff --git a/rgmanager/src/daemons/fo_domain.c b/rgmanager/src/daemons/fo_domain.c index 5dedbd5..a434fe0 100644 --- a/rgmanager/src/daemons/fo_domain.c +++ b/rgmanager/src/daemons/fo_domain.c @@ -27,11 +27,14 @@ #include #include #include +#include #include #include #include #include #include +#include +#include //#define DEBUG @@ -94,6 +97,23 @@ get_node(int ccsfd, char *base, int idx, fod_t *domain) fodn->fdn_name = ret; fodn->fdn_prio = 0; + snprintf(xpath, sizeof(xpath), + "/cluster/clusternodes/clusternode[@name=\"%s\"]/@nodeid", + ret); + if (ccs_get(ccsfd, xpath, &ret) != 0) { + clulog(LOG_WARNING, "Node %s has no nodeid attribute\n", + fodn->fdn_name); + fodn->fdn_nodeid = -1; + } else { + /* 64-bit-ism on rhel4? */ + fodn->fdn_nodeid = atoi(ret); + } + + /* Don't even bother getting priority if we're not ordered (it's set + to 0 above */ + if (!(domain->fd_flags & FOD_ORDERED)) + return fodn; + snprintf(xpath, sizeof(xpath), "%s/failoverdomainnode[%d]/@priority", base, idx); if (ccs_get(ccsfd, xpath, &ret) != 0) @@ -226,6 +246,11 @@ print_domains(fod_t **domains) { fod_t *fod; fod_node_t *fodn = NULL; + /* + int x; + int *node_set = NULL; + int node_set_len = 0; + */ list_do(domains, fod) { printf("Failover domain: %s\n", fod->fd_name); @@ -243,9 +268,21 @@ print_domains(fod_t **domains) } list_do(&fod->fd_nodes, fodn) { - printf(" Node %s (priority %d)\n", - fodn->fdn_name, fodn->fdn_prio); + printf(" Node %s (id %d, priority %d)\n", + fodn->fdn_name, fodn->fdn_nodeid, + fodn->fdn_prio); } while (!list_done(&fod->fd_nodes, fodn)); + + /* + node_domain_set(fod, &node_set, &node_set_len); + printf(" Failover Order = {"); + for (x = 0; x < node_set_len; x++) { + printf(" %d ", node_set[x]); + } + free(node_set); + printf("}\n"); + */ + } while (!list_done(domains, fod)); } @@ -265,7 +302,7 @@ int node_in_domain(char *nodename, fod_t *domain, cluster_member_list_t *membership) { - int member_online = 0, member_match = 0, preferred = 100, myprio = -1; + int online = 0, member_match = 0, preferred = 100, myprio = -1; fod_node_t *fodn; list_do(&domain->fd_nodes, fodn) { @@ -282,7 +319,7 @@ node_in_domain(char *nodename, fod_t *domain, * If we get here, we know: * A member of the domain is online somewhere */ - member_online = 1; + online = 1; if (!strcmp(nodename, fodn->fdn_name)) { /* * If we get here, we know: @@ -296,7 +333,7 @@ node_in_domain(char *nodename, fod_t *domain, preferred = fodn->fdn_prio; } while (!list_done(&domain->fd_nodes, fodn)); - if (!member_online) + if (!online) return 0; if (!member_match) @@ -311,6 +348,70 @@ node_in_domain(char *nodename, fod_t *domain, } +int +node_domain_set(fod_t *domain, uint64_t **ret, int *retlen) +{ + int x, i, j; + int *tmpset; + int ts_count; + + fod_node_t *fodn; + + /* Count domain length */ + list_for(&domain->fd_nodes, fodn, x) { } + + *retlen = 0; + *ret = malloc(sizeof(int) * x); + if (!(*ret)) + return -1; + tmpset = malloc(sizeof(int) * x); + if (!(*tmpset)) + return -1; + + if (domain->fd_flags & FOD_ORDERED) { + for (i = 1; i <= 100; i++) { + + ts_count = 0; + list_for(&domain->fd_nodes, fodn, x) { + if (fodn->fdn_prio == i) { + s_add(tmpset, &ts_count, + fodn->fdn_nodeid); + } + } + + if (!ts_count) + continue; + + /* Shuffle stuff at this prio level */ + if (ts_count > 1) + s_shuffle(tmpset, ts_count); + for (j = 0; j < ts_count; j++) + s_add(*ret, retlen, tmpset[j]); + } + } + + /* Add unprioritized nodes */ + ts_count = 0; + list_for(&domain->fd_nodes, fodn, x) { + if (!fodn->fdn_prio) { + s_add(tmpset, &ts_count, + fodn->fdn_nodeid); + } + } + + if (!ts_count) + return 0; + + /* Shuffle stuff at this prio level */ + if (ts_count > 1) + s_shuffle(tmpset, ts_count); + for (j = 0; j < ts_count; j++) + s_add(*ret, retlen, tmpset[j]); + + return 0; +} + + /** * See if a given nodeid should start a specified service svcid. * @@ -411,7 +512,7 @@ node_should_start(uint64_t nodeid, cluster_member_list_t *membership, RETURN(FOD_BEST); } - if (get_rg_state(rg_name, &svc_state) == FAIL) { + if (get_rg_state(rg_name, &svc_state) == RG_EFAIL) { /* * Couldn't get the service state, thats odd */ diff --git a/rgmanager/src/daemons/groups.c b/rgmanager/src/daemons/groups.c index ebd37dc..45dc912 100644 --- a/rgmanager/src/daemons/groups.c +++ b/rgmanager/src/daemons/groups.c @@ -1,5 +1,5 @@ /* - Copyright Red Hat, Inc. 2002-2003 + Copyright Red Hat, Inc. 2002-2006 Copyright Mission Critical Linux, Inc. 2000 This program is free software; you can redistribute it and/or modify it @@ -19,21 +19,27 @@ */ //#define DEBUG #include -#include -#include #include +#include #include #include #include #include #include +#include #include #include #include +#include -#define cm_svccount cm_pad[0] /* Theses are uint8_t size */ -#define cm_svcexcl cm_pad[1] +/* Use address field in this because we never use it internally, + and there is no extra space in the cman_node_t type. + */ +#define cn_svccount cm_pad[0] /* Theses are uint8_t size */ +#define cn_svcexcl cm_pad[1] + +extern event_table_t *master_event_table; static int config_version = 0; static resource_t *_resources = NULL; @@ -41,9 +47,17 @@ static resource_rule_t *_rules = NULL; static resource_node_t *_tree = NULL; static fod_t *_domains = NULL; +#ifdef WRAP_LOCKS +pthread_mutex_t config_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; +pthread_mutex_t status_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; +#else pthread_mutex_t config_mutex = PTHREAD_MUTEX_INITIALIZER; -pthread_rwlock_t resource_lock = PTHREAD_RWLOCK_INITIALIZER; pthread_mutex_t status_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif +pthread_rwlock_t resource_lock = PTHREAD_RWLOCK_INITIALIZER; + +void res_build_name(char *, size_t, resource_t *); +int group_migratory(char *groupname, int lock); struct status_arg { @@ -72,14 +86,41 @@ node_should_start_safe(uint64_t nodeid, cluster_member_list_t *membership, int +node_domain_set_safe(char *domainname, uint64_t **ret, int *retlen, int *flags) +{ + fod_t *fod; + int rv = -1, found = 0, x = 0; + + pthread_rwlock_rdlock(&resource_lock); + + list_for(&_domains, fod, x) { + if (!strcasecmp(fod->fd_name, domainname)) { + found = 1; + break; + } + } // while (!list_done(&_domains, fod)); + + if (found) { + rv = node_domain_set(fod, ret, retlen); + *flags = fod->fd_flags; + } + + pthread_rwlock_unlock(&resource_lock); + + return rv; +} + + +int count_resource_groups(cluster_member_list_t *ml) { resource_t *res; - char *rgname, *val; + resource_node_t *node; + char rgname[64], *val; int x; rg_state_t st; void *lockp; - cluster_member_t *mp; + cluster_member_list_t *mp; for (x = 0; x < ml->cml_count; x++) { ml->cml_members[x].cm_svccount = 0; @@ -88,11 +129,11 @@ count_resource_groups(cluster_member_list_t *ml) pthread_rwlock_rdlock(&resource_lock); - list_do(&_resources, res) { - if (res->r_rule->rr_root == 0) - continue; + list_do(&_tree, node) { + + res = node->rn_resource; - rgname = res->r_attrs[0].ra_value; + res_build_name(rgname, sizeof(rgname), res); if (rg_lock(rgname, &lockp) < 0) { clulog(LOG_ERR, "#XX: Unable to obtain cluster " @@ -126,10 +167,9 @@ count_resource_groups(cluster_member_list_t *ml) ++mp->cm_svcexcl; } - } while (!list_done(&_resources, res)); + } while (!list_done(&_tree, node)); pthread_rwlock_unlock(&resource_lock); - return 0; } @@ -168,12 +208,35 @@ is_exclusive(char *svcName) } -int get_rg_state_local(char *, rg_state_t *); +resource_node_t * +node_by_ref(resource_node_t **tree, char *name) +{ + resource_t *res; + resource_node_t *node, *ret = NULL; + char rgname[64]; + int x; + + list_for(tree, node, x) { + + res = node->rn_resource; + res_build_name(rgname, sizeof(rgname), res); + + if (!strcasecmp(name, rgname)) { + ret = node; + break; + } + } + + return ret; +} + + int count_resource_groups_local(cluster_member_t *mp) { resource_t *res; - char *rgname, *val; + resource_node_t *node; + char rgname[64]; rg_state_t st; mp->cm_svccount = 0; @@ -181,20 +244,18 @@ count_resource_groups_local(cluster_member_t *mp) pthread_rwlock_rdlock(&resource_lock); - list_do(&_resources, res) { + list_do(&_tree, node) { - if (res->r_rule->rr_root == 0) - continue; + res = node->rn_resource; - rgname = res->r_attrs[0].ra_value; + res_build_name(rgname, sizeof(rgname), res); if (get_rg_state_local(rgname, &st) < 0) { continue; } if (st.rs_state != RG_STATE_STARTED && - st.rs_state != RG_STATE_STARTING && - st.rs_state != RG_STATE_STOPPING) + st.rs_state != RG_STATE_STARTING) continue; if (mp->cm_id != st.rs_owner) @@ -202,13 +263,12 @@ count_resource_groups_local(cluster_member_t *mp) ++mp->cm_svccount; - if (is_exclusive_res(res)) + if (is_exclusive_res(res)) ++mp->cm_svcexcl; - } while (!list_done(&_resources, res)); + } while (!list_done(&_tree, node)); pthread_rwlock_unlock(&resource_lock); - return 0; } @@ -225,6 +285,7 @@ have_exclusive_resources(void) pthread_rwlock_unlock(&resource_lock); return 1; } + } while (!list_done(&_resources, res)); pthread_rwlock_unlock(&resource_lock); @@ -237,9 +298,8 @@ int check_exclusive_resources(cluster_member_list_t *membership, char *svcName) { cluster_member_t *mp; - int exclusive, count; + int exclusive, count, excl; resource_t *res; - char *val; mp = memb_id_to_p(membership, my_id()); assert(mp); @@ -250,14 +310,13 @@ check_exclusive_resources(cluster_member_list_t *membership, char *svcName) res = find_root_by_ref(&_resources, svcName); if (!res) { pthread_rwlock_unlock(&resource_lock); - return FAIL; + return RG_ENOSERVICE; } - val = res_attr_value(res, "exclusive"); + + excl = is_exclusive_res(res); pthread_rwlock_unlock(&resource_lock); - if (exclusive || (count && val && - (!strcmp(val, "yes") || (atoi(val)>0)))) { - return 1; - } + if (exclusive || (count && excl)) + return RG_YES; return 0; } @@ -343,6 +402,42 @@ best_target_node(cluster_member_list_t *allowed, uint64_t owner, } +int +check_depend(resource_t *res) +{ + char *val; + rg_state_t rs; + + val = res_attr_value(res, "depend"); + if (!val) + /* No dependency */ + return -1; + + if (get_rg_state_local(val, &rs) == 0) + return (rs.rs_state == RG_STATE_STARTED); + + return 1; +} + + +int +check_depend_safe(char *rg_name) +{ + resource_t *res; + int ret; + + pthread_rwlock_rdlock(&resource_lock); + res = find_root_by_ref(&_resources, rg_name); + if (!res) + return -1; + + ret = check_depend(res); + pthread_rwlock_unlock(&resource_lock); + + return ret; +} + + /** Start or failback a resource group: if it's not running, start it. If it is running and we're a better member to run it, then ask for @@ -353,9 +448,9 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus, cluster_member_list_t *membership) { char *val; - cluster_member_t *mp; + cman_node_t *mp; int autostart, exclusive; - void *lockp; + struct dlm_lksb lockp; mp = memb_id_to_p(membership, my_id()); assert(mp); @@ -414,6 +509,14 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus, } } + /* See if service this one depends on is running. If not, + don't start it */ + if (check_depend(node->rn_resource) == 0) { + clulog(LOG_DEBUG, + "Skipping RG %s: Dependency missing\n", svcName); + return; + } + val = res_attr_value(node->rn_resource, "exclusive"); exclusive = val && ((!strcmp(val, "yes") || (atoi(val)>0))); @@ -450,13 +553,14 @@ void consider_relocate(char *svcName, rg_state_t *svcStatus, uint64_t nodeid, cluster_member_list_t *membership) { - int a, b; + int a, b, req = RG_RELOCATE; /* Service must be running locally in order to consider for a relocate */ - if (svcStatus->rs_state != RG_STATE_STARTED || + if ((svcStatus->rs_state != RG_STATE_STARTING && + svcStatus->rs_state != RG_STATE_STARTED) || svcStatus->rs_owner != my_id()) return; @@ -476,14 +580,73 @@ consider_relocate(char *svcName, rg_state_t *svcStatus, uint64_t nodeid, if (a <= b) return; - clulog(LOG_DEBUG, "Relocating group %s to better node %s\n", + if (0) { /* Migrate not supported on RHEL4 */ + req = RG_MIGRATE; + } + + clulog(LOG_NOTICE, "%s %s to better node %s\n", + req==RG_MIGRATE ? "Migrating":"Relocating", svcName, memb_id_to_name(membership, nodeid)); - rt_enqueue_request(svcName, RG_RELOCATE, -1, 0, nodeid, 0, 0); + rt_enqueue_request(svcName, req, NULL, 0, nodeid, 0, 0); +} + + +char ** +get_service_names(int *len) +{ + resource_node_t *node = NULL; + int nservices, ncopied = 0, x; + char **ret = NULL; + char rg_name[64]; + + pthread_rwlock_rdlock(&resource_lock); + + nservices = 0; + list_do(&_tree, node) { + ++nservices; + } while (!list_done(&_tree, node)); + + ret = malloc(sizeof(char *) * (nservices + 1)); + if (!ret) + goto out_fail; + + memset(ret, 0, sizeof(char *) * (nservices + 1)); + nservices = 0; + list_for(&_tree, node, nservices) { + res_build_name(rg_name, sizeof(rg_name), + node->rn_resource); + + if (!strlen(rg_name)) + continue; + + ret[ncopied] = strdup(rg_name); + if (ret[ncopied]) { + ncopied++; + } else { + goto out_fail; + } + } + + if (len) + *len = ncopied; + pthread_rwlock_unlock(&resource_lock); + return ret; + +out_fail: + pthread_rwlock_unlock(&resource_lock); + for (x = 0; x < ncopied; x++) + free(ret[x]); + if (ret) + free(ret); + return NULL; } + + + /** * Called to decide what services to start locally during a node_event. * Originally a part of node_event, it is now its own function to cut down @@ -1140,6 +1303,13 @@ check_config_update(void) } +void +dump_config_version(FILE *fp) +{ + fprintf(fp, "Cluster configuration version %d\n\n", config_version); +} + + /** Initialize resource groups. This reads all the resource groups from CCS, builds the tree, etc. Ideally, we'll have a similar function @@ -1149,12 +1319,14 @@ check_config_update(void) int init_resource_groups(int reconfigure) { - int fd, x; + int fd, x, y, cnt; + event_table_t *evt = NULL; resource_t *reslist = NULL, *res; resource_rule_t *rulelist = NULL, *rule; resource_node_t *tree = NULL; fod_t *domains = NULL, *fod; + event_t *evp; char *val; if (reconfigure) @@ -1178,10 +1350,11 @@ init_resource_groups(int reconfigure) pthread_mutex_lock(&config_mutex); config_version = atoi(val); pthread_mutex_unlock(&config_mutex); + free(val); } - + if (ccs_get(fd, "/cluster/rm/@statusmax", &val) == 0) { - if (strlen(val)) + if (strlen(val)) rg_set_statusmax(atoi(val)); free(val); } @@ -1214,6 +1387,24 @@ init_resource_groups(int reconfigure) x = 0; list_do(&domains, fod) { ++x; } while (!list_done(&domains, fod)); clulog(LOG_DEBUG, "%d domains defined\n", x); + construct_events(fd, &evt); + cnt = 0; + if (evt) { + for (x=0; x <= evt->max_prio; x++) { + if (!evt->entries[x]) + continue; + + y = 0; + + list_do(&evt->entries[x], evp) { + ++y; + } while (!list_done(&evt->entries[x], evp)); + + cnt += y; + } + } + clulog(LOG_DEBUG, "%d events defined\n", x); + /* Reconfiguration done */ ccs_unlock(fd); @@ -1242,6 +1433,9 @@ init_resource_groups(int reconfigure) if (_domains) deconstruct_domains(&_domains); _domains = domains; + if (master_event_table) + deconstruct_events(&master_event_table); + master_event_table = evt; pthread_rwlock_unlock(&resource_lock); if (reconfigure) { @@ -1282,6 +1476,94 @@ get_recovery_policy(char *rg_name, char *buf, size_t buflen) } +int +get_service_property(char *rg_name, char *prop, char *buf, size_t buflen) +{ + int ret = 0; + resource_t *res; + char *val; + + memset(buf, 0, buflen); + +#if 0 + if (!strcmp(prop, "domain")) { + /* not needed */ + strncpy(buf, "", buflen); + } else if (!strcmp(prop, "autostart")) { + strncpy(buf, "1", buflen); + } else if (!strcmp(prop, "hardrecovery")) { + strncpy(buf, "0", buflen); + } else if (!strcmp(prop, "exclusive")) { + strncpy(buf, "0", buflen); + } else if (!strcmp(prop, "nfslock")) { + strncpy(buf, "0", buflen); + } else if (!strcmp(prop, "recovery")) { + strncpy(buf, "restart", buflen); + } else if (!strcmp(prop, "depend")) { + /* not needed */ + strncpy(buf, "", buflen); + } else { + /* not found / no defaults */ + ret = -1; + } +#endif + + pthread_rwlock_rdlock(&resource_lock); + res = find_root_by_ref(&_resources, rg_name); + if (res) { + val = res_attr_value(res, prop); + if (val) { + ret = 0; + strncpy(buf, val, buflen); + } + } + pthread_rwlock_unlock(&resource_lock); + +#if 0 + if (ret == 0) + printf("%s(%s, %s) = %s\n", __FUNCTION__, rg_name, prop, buf); + else + printf("%s(%s, %s) = NOT FOUND\n", __FUNCTION__, rg_name, prop); +#endif + + return ret; +} + + +int +add_restart(char *rg_name) +{ + resource_node_t *node; + int ret = 1; + + pthread_rwlock_rdlock(&resource_lock); + node = node_by_ref(&_tree, rg_name); + if (node) { + ret = restart_add(node->rn_restart_counter); + } + pthread_rwlock_unlock(&resource_lock); + + return ret; +} + + +int +check_restart(char *rg_name) +{ + resource_node_t *node; + int ret = 0; + + pthread_rwlock_rdlock(&resource_lock); + node = node_by_ref(&_tree, rg_name); + if (node) { + ret = restart_threshold_exceeded(node->rn_restart_counter); + } + pthread_rwlock_unlock(&resource_lock); + + return ret; +} + + void kill_resource_groups(void) { diff --git a/rgmanager/src/daemons/main.c b/rgmanager/src/daemons/main.c index 1f0db93..2b52f23 100644 --- a/rgmanager/src/daemons/main.c +++ b/rgmanager/src/daemons/main.c @@ -586,7 +586,7 @@ event_loop(int clusterfd) return 0; /* No new messages. Drop in the status check requests. */ - if (n == 0) { + if (n == 0 && rg_quorate()) { do_status_checks(); return 0; } diff --git a/rgmanager/src/daemons/reslist.c b/rgmanager/src/daemons/reslist.c index dbf685a..745d88a 100644 --- a/rgmanager/src/daemons/reslist.c +++ b/rgmanager/src/daemons/reslist.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -27,6 +26,7 @@ #include #include #include +#include #include #include #ifndef NO_CCS @@ -37,6 +37,13 @@ char *attr_value(resource_node_t *node, char *attrname); char *rg_attr_value(resource_node_t *node, char *attrname); +void +res_build_name(char *buf, size_t buflen, resource_t *res) +{ + snprintf(buf, buflen, "%s:%s", res->r_rule->rr_type, + res->r_attrs[0].ra_value); +} + /** Find and determine an attribute's value. @@ -170,18 +177,29 @@ primary_attr_value(resource_t *res) /** Compare two resources. + @param left Left resource + @param right Right resource + @return -1 on different resource, 0 if the same, 1 if different, + 2 if different, but only safe resources are different + */ int rescmp(resource_t *left, resource_t *right) { - int x, y = 0, found; + int x, y = 0, found = 0, ret = 0; + /* Completely different resource class... */ if (strcmp(left->r_rule->rr_type, right->r_rule->rr_type)) { - //printf("Er, wildly different resource type! "); return -1; } + /* + printf("Comparing %s:%s to %s:%s\n", + left->r_rule->rr_type, left->r_attrs[0].ra_value, + right->r_rule->rr_type, right->r_attrs[0].ra_value) + */ + for (x = 0; left->r_attrs && left->r_attrs[x].ra_name; x++) { found = 0; @@ -197,35 +215,52 @@ rescmp(resource_t *left, resource_t *right) left->r_attrs[x].ra_flags) { /* Flags are different. Change in resource agents? */ - //printf("flags differ "); + /* + printf("* flags differ %08x vs %08x\n", + left->r_attrs[x].ra_flags, + right->r_attrs[y].ra_flags); + */ return 1; } if (strcmp(right->r_attrs[y].ra_value, left->r_attrs[x].ra_value)) { /* Different attribute value. */ - //printf("different value for attr '%s' ", - //right->r_attrs[y].ra_name); - return 1; + /* + printf("* different value for attr '%s':" + " '%s' vs '%s'", + right->r_attrs[y].ra_name, + left->r_attrs[x].ra_value, + right->r_attrs[y].ra_value); + */ + if (left->r_attrs[x].ra_flags & RA_RECONFIG) { + /* printf(" [SAFE]\n"); */ + ret = 2; + } else { + /* printf("\n"); */ + return 1; + } } } /* Attribute missing -> different attribute value. */ if (!found) { - //printf("Attribute %s deleted ", - //left->r_attrs[x].ra_name); + /* + printf("* Attribute '%s' deleted\n", + left->r_attrs[x].ra_name); + */ return 1; } } /* Different attribute count */ if (x != y) { - //printf("Attribute count differ (attributes added!) "); + /* printf("* Attribute count differ (attributes added!) "); */ return 1; } /* All the same */ - return 0; + return ret; } @@ -280,11 +315,24 @@ resource_t * find_root_by_ref(resource_t **reslist, char *ref) { resource_t *curr; + char ref_buf[128]; + char *type; + char *name = ref; int x; + snprintf(ref_buf, sizeof(ref_buf), "%s", ref); + + type = ref_buf; + if ((name = strchr(ref_buf, ':'))) { + *name = 0; + name++; + } else { + /* Default type */ + type = "service"; + name = ref; + } + list_do(reslist, curr) { - if (curr->r_rule->rr_root == 0) - continue; /* This should be one operation - the primary attr @@ -292,15 +340,18 @@ find_root_by_ref(resource_t **reslist, char *ref) */ for (x = 0; curr->r_attrs && curr->r_attrs[x].ra_name; x++) { + if (strcmp(type, curr->r_rule->rr_type)) + continue; if (!(curr->r_attrs[x].ra_flags & RA_PRIMARY)) continue; - if (strcmp(ref, curr->r_attrs[x].ra_value)) + if (strcmp(name, curr->r_attrs[x].ra_value)) continue; return curr; } } while (!list_done(reslist, curr)); + return NULL; } @@ -421,14 +472,14 @@ xpath_get_one(xmlDocPtr doc, xmlXPathContextPtr ctx, char *query) if (((node->type == XML_ATTRIBUTE_NODE) && strstr(query, "@*")) || ((node->type == XML_ELEMENT_NODE) && strstr(query, "child::*"))){ if (node->children && node->children->content) - size = strlen(node->children->content)+ - strlen(node->name)+2; + size = strlen((char *)node->children->content)+ + strlen((char *)node->name)+2; else - size = strlen(node->name)+2; + size = strlen((char *)node->name)+2; nnv = 1; } else { if (node->children && node->children->content) { - size = strlen(node->children->content)+1; + size = strlen((char *)node->children->content)+1; } else { goto out; } @@ -524,6 +575,8 @@ print_resource(resource_t *res) printf(" [NEEDSTOP]"); if (res->r_flags & RF_COMMON) printf(" [COMMON]"); + if (res->r_flags & RF_RECONFIG) + printf(" [RECONFIG]"); printf("\n"); if (res->r_rule->rr_maxrefs) @@ -559,6 +612,8 @@ print_resource(resource_t *res) printf(" unique"); if (res->r_attrs[x].ra_flags & RA_REQUIRED) printf(" required"); + if (res->r_attrs[x].ra_flags & RA_RECONFIG) + printf(" reconfig"); if (res->r_attrs[x].ra_flags & RA_INHERIT) printf(" inherit(\"%s\")", res->r_attrs[x].ra_value); printf(" ]\n"); @@ -817,6 +872,7 @@ load_resources(int ccsfd, resource_t **reslist, resource_rule_t **rulelist) "Error storing %s resource\n", newres->r_rule->rr_type); #endif + destroy_resource(newres); } diff --git a/rgmanager/src/daemons/resrules.c b/rgmanager/src/daemons/resrules.c index 282eb5a..b8317d4 100644 --- a/rgmanager/src/daemons/resrules.c +++ b/rgmanager/src/daemons/resrules.c @@ -19,14 +19,16 @@ #include #include #include -#include #include #include #include +#include #include #include #include #include +#include +#include #include #include #include @@ -599,6 +601,17 @@ print_resource_rule(resource_rule_t *rr) printf("Max instances: %d\n", rr->rr_maxrefs); if (rr->rr_agent) printf("Agent: %s\n", basename(rr->rr_agent)); + + printf("Flags: "); + if (rr->rr_flags) { + if (rr->rr_flags & RF_INIT) + printf("init_on_add "); + if (rr->rr_flags & RF_DESTROY) + printf("destroy_on_delete "); + } else { + printf("(none)"); + } + printf("\n"); printf("Attributes:\n"); if (!rr->rr_attrs) { @@ -614,18 +627,25 @@ print_resource_rule(resource_rule_t *rr) continue; } - printf(" ["); - if (rr->rr_attrs[x].ra_flags & RA_PRIMARY) - printf(" primary"); - if (rr->rr_attrs[x].ra_flags & RA_UNIQUE) - printf(" unique"); - if (rr->rr_attrs[x].ra_flags & RA_REQUIRED) - printf(" required"); - if (rr->rr_attrs[x].ra_flags & RA_INHERIT) - printf(" inherit"); - else if (rr->rr_attrs[x].ra_value) - printf(" default=\"%s\"", rr->rr_attrs[x].ra_value); - printf(" ]\n"); + if (rr->rr_attrs[x].ra_flags) { + printf(" ["); + if (rr->rr_attrs[x].ra_flags & RA_PRIMARY) + printf(" primary"); + if (rr->rr_attrs[x].ra_flags & RA_UNIQUE) + printf(" unique"); + if (rr->rr_attrs[x].ra_flags & RA_REQUIRED) + printf(" required"); + if (rr->rr_attrs[x].ra_flags & RA_INHERIT) + printf(" inherit"); + if (rr->rr_attrs[x].ra_flags & RA_RECONFIG) + printf(" reconfig"); + printf(" ]"); + } + + if (rr->rr_attrs[x].ra_value) + printf(" default=\"%s\"\n", rr->rr_attrs[x].ra_value); + else + printf("\n"); } actions: @@ -761,6 +781,18 @@ _get_rule_attrs(xmlDocPtr doc, xmlXPathContextPtr ctx, char *base, } /* + See if this can be reconfigured on the fly without a + stop/start + */ + snprintf(xpath, sizeof(xpath), "%s/parameter[%d]/@reconfig", + base, x); + if ((ret = xpath_get_one(doc,ctx,xpath))) { + if ((atoi(ret) != 0) || (ret[0] == 'y')) + flags |= RA_RECONFIG; + free(ret); + } + + /* See if this is supposed to be inherited */ snprintf(xpath, sizeof(xpath), "%s/parameter[%d]/@inherit", @@ -891,6 +923,10 @@ read_pipe(int fd, char **file, size_t *length) n = read(fd, buf, sizeof(buf)); if (n < 0) { + + if (errno == EINTR) + continue; + if (*file) free(*file); return -1; @@ -899,7 +935,7 @@ read_pipe(int fd, char **file, size_t *length) if (n == 0 && (!*length)) return 0; - if (n != sizeof(buf)) { + if (n == 0) { done = 1; } @@ -1024,6 +1060,7 @@ load_resource_rulefile(char *filename, resource_rule_t **rules) break; memset(rr,0,sizeof(*rr)); + rr->rr_flags = RF_INIT | RF_DESTROY; rr->rr_type = type; snprintf(base, sizeof(base), "/resource-agent[%d]", ruleid); @@ -1035,12 +1072,13 @@ load_resource_rulefile(char *filename, resource_rule_t **rules) snprintf(base, sizeof(base), "/resource-agent[%d]/special[@tag=\"rgmanager\"]", ruleid); - _get_root(doc, ctx, base, rr); _get_maxparents(doc, ctx, base, rr); + _get_rule_flag(doc, ctx, base, rr, "init_on_add", RF_INIT); + _get_rule_flag(doc, ctx, base, rr, "destroy_on_delete", RF_DESTROY); rr->rr_agent = strdup(filename); /* - Second, add the allowable-children fields + Second, add the children fields */ _get_childtypes(doc, ctx, base, rr); @@ -1095,8 +1133,9 @@ load_resource_rules(const char *rpath, resource_rule_t **rules) { DIR *dir; struct dirent *de; - char *fn;//, *dot; + char *fn, *dot; char path[2048]; + struct stat st_buf; dir = opendir(rpath); if (!dir) @@ -1109,14 +1148,40 @@ load_resource_rules(const char *rpath, resource_rule_t **rules) if (!fn) continue; + /* Ignore files with common backup extension */ if ((fn != NULL) && (strlen(fn) > 0) && (fn[strlen(fn)-1] == '~')) continue; + /* Ignore hidden files */ + if (*fn == '.') + continue; + + dot = strrchr(fn, '.'); + if (dot) { + /* Ignore RPM installed save files, patches, + diffs, etc. */ + if (!strncasecmp(dot, ".rpm", 4)) { + fprintf(stderr, "Warning: " + "Ignoring %s/%s: Bad extension %s\n", + rpath, de->d_name, dot); + continue; + } + } + snprintf(path, sizeof(path), "%s/%s", rpath, de->d_name); - load_resource_rulefile(path, rules); + if (stat(path, &st_buf) < 0) + continue; + + if (S_ISDIR(st_buf.st_mode)) + continue; + + if (st_buf.st_mode & (S_IXUSR|S_IXOTH|S_IXGRP)) { + //printf("Loading resource rule from %s\n", path); + load_resource_rulefile(path, rules); + } } xmlCleanupParser(); diff --git a/rgmanager/src/daemons/restart_counter.c b/rgmanager/src/daemons/restart_counter.c new file mode 100644 index 0000000..c889c6d --- /dev/null +++ b/rgmanager/src/daemons/restart_counter.c @@ -0,0 +1,205 @@ +/* + Copyright Red Hat, Inc. 2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +/* Time-based restart counters for rgmanager */ + +#include +#include +#include +#include +#include +#include +#include +#include + + + +#define RESTART_INFO_MAGIC 0x184820ab + +typedef struct { + list_head(); + time_t restart_time; +} restart_item_t; + +typedef struct { + int magic; + time_t expire_timeout; + int max_restarts; + int restart_count; + restart_item_t *restart_nodes; +} restart_info_t; + + +#define VALIDATE(arg, ret) \ +do { \ + if (!arg) {\ + errno = EINVAL; \ + return ret; \ + } \ + if (((restart_info_t *)arg)->magic != RESTART_INFO_MAGIC) {\ + errno = EINVAL; \ + return ret; \ + } \ +} while(0) + + +/* Remove expired restarts */ +static int +restart_timer_purge(restart_counter_t arg, time_t now) +{ + restart_info_t *restarts = (restart_info_t *)arg; + restart_item_t *i; + int x, done = 0; + + VALIDATE(arg, -1); + + /* No timeout */ + if (restarts->expire_timeout == 0) + return 0; + + do { + done = 1; + list_for(&restarts->restart_nodes, i, x) { + if ((now - i->restart_time) >= + restarts->expire_timeout) { + restarts->restart_count--; + list_remove(&restarts->restart_nodes, i); + done = 0; + break; + } + } + } while(!done); + + return 0; +} + + +int +restart_count(restart_counter_t arg) +{ + restart_info_t *restarts = (restart_info_t *)arg; + time_t now; + + VALIDATE(arg, -1); + now = time(NULL); + restart_timer_purge(arg, now); + return restarts->restart_count; +} + + +int +restart_threshold_exceeded(restart_counter_t arg) +{ + restart_info_t *restarts = (restart_info_t *)arg; + time_t now; + + VALIDATE(arg, -1); + now = time(NULL); + restart_timer_purge(arg, now); + if (restarts->restart_count >= restarts->max_restarts) + return 1; + return 0; +} + + +/* Add a restart entry to the list. Returns 1 if restart + count is exceeded */ +int +restart_add(restart_counter_t arg) +{ + restart_info_t *restarts = (restart_info_t *)arg; + restart_item_t *i; + time_t t; + + if (!arg) + /* No max restarts / threshold = always + ok to restart! */ + return 0; + + VALIDATE(arg, -1); + + i = malloc(sizeof(*i)); + if (!i) { + return -1; + } + + t = time(NULL); + i->restart_time = t; + + list_insert(&restarts->restart_nodes, i); + restarts->restart_count++; + + /* Check and remove old entries */ + restart_timer_purge(restarts, t); + + if (restarts->restart_count >= restarts->max_restarts) + return 1; + + return 0; +} + + +int +restart_clear(restart_counter_t arg) +{ + restart_info_t *restarts = (restart_info_t *)arg; + restart_item_t *i; + + VALIDATE(arg, -1); + while ((i = restarts->restart_nodes)) { + list_remove(&restarts->restart_nodes, i); + free(i); + } + + restarts->restart_count = 0; + + return 0; +} + + +restart_counter_t +restart_init(time_t expire_timeout, int max_restarts) +{ + restart_info_t *info; + + if (max_restarts < 0) { + errno = EINVAL; + return NULL; + } + + info = malloc(sizeof(*info)); + if (info == NULL) + return NULL; + + info->magic = RESTART_INFO_MAGIC; + info->expire_timeout = expire_timeout; + info->max_restarts = max_restarts; + info->restart_count = 0; + info->restart_nodes = NULL; + + return (void *)info; +} + + +int +restart_cleanup(restart_counter_t arg) +{ + VALIDATE(arg, -1); + restart_clear(arg); + free(arg); + return 0; +} diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c index 95b2450..fc9cde1 100644 --- a/rgmanager/src/daemons/restree.c +++ b/rgmanager/src/daemons/restree.c @@ -1,5 +1,5 @@ /* - Copyright Red Hat, Inc. 2004 + Copyright Red Hat, Inc. 2004-2006 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -39,12 +40,15 @@ void malloc_zap_mutex(void); #endif - /* XXX from resrules.c */ int store_childtype(resource_child_t **childp, char *name, int start, int stop, int forbid, int flags); int _res_op(resource_node_t **tree, resource_t *first, char *type, void * __attribute__((unused))ret, int op); +static inline int +_res_op_internal(resource_node_t **tree, resource_t *first, + char *type, void *__attribute__((unused))ret, int realop, + resource_node_t *node); void print_env(char **env); static inline int _res_op_internal(resource_node_t **tree, resource_t *first, char *type, void *__attribute__((unused))ret, int realop, @@ -63,22 +67,6 @@ void * act_dup(resource_act_t *acts); time_t get_time(char *action, int depth, resource_node_t *node); -const char *res_ops[] = { - "start", - "stop", - "status", - "resinfo", - "restart", - "reload", - "condrestart", /* Unused */ - "recover", - "condstart", - "condstop", - "monitor", - "meta-data", /* printenv */ - "validate-all" -}; - const char *ocf_errors[] = { "success", // 0 @@ -110,14 +98,13 @@ _no_op_mode(int arg) const char * ocf_strerror(int ret) { - if (ret < OCF_RA_MAX) + if (ret >= 0 && ret < OCF_RA_MAX) return ocf_errors[ret]; return "unspecified"; } - /** Destroys an environment variable array. @@ -143,7 +130,7 @@ kill_env(char **env) @see build_env */ static void -add_ocf_stuff(resource_t *res, char **env, int depth) +add_ocf_stuff(resource_t *res, char **env, int depth, int refcnt) { char ver[10]; char *minor, *val; @@ -227,6 +214,17 @@ add_ocf_stuff(resource_t *res, char **env, int depth) return; snprintf(val, n, "%s=%s", OCF_CHECK_LEVEL_STR, ver); *env = val; env++; + + /* + Store the resource local refcnt (0 for now) + */ + snprintf(ver, sizeof(ver), "%d", refcnt); + n = strlen(OCF_REFCNT_STR) + strlen(ver) + 2; + val = malloc(n); + if (!val) + return; + snprintf(val, n, "%s=%s", OCF_REFCNT_STR, ver); + *env = val; env++; } @@ -234,14 +232,13 @@ add_ocf_stuff(resource_t *res, char **env, int depth) Allocate and fill an environment variable array. @param node Node in resource tree to use for parameters - @param op Operation (start/stop/status/monitor/etc.) @param depth Depth (status/monitor/etc.) @return Newly allocated environment array or NULL if one could not be formed. @see kill_env res_exec add_ocf_stuff */ static char ** -build_env(resource_node_t *node, int op, int depth) +build_env(resource_node_t *node, int depth, int refcnt) { resource_t *res = node->rn_resource; char **env; @@ -249,7 +246,7 @@ build_env(resource_node_t *node, int op, int depth) int x, attrs, n; for (attrs = 0; res->r_attrs && res->r_attrs[attrs].ra_name; attrs++); - attrs += 7; /* + attrs += 8; /* Leave space for: OCF_RA_VERSION_MAJOR OCF_RA_VERSION_MINOR @@ -257,6 +254,7 @@ build_env(resource_node_t *node, int op, int depth) OCF_RESOURCE_INSTANCE OCF_RESOURCE_TYPE OCF_CHECK_LEVEL + OCF_RESKEY_RGMANAGER_meta_refcnt (null terminator) */ @@ -296,7 +294,7 @@ build_env(resource_node_t *node, int op, int depth) ++attrs; } - add_ocf_stuff(res, &env[attrs], depth); + add_ocf_stuff(res, &env[attrs], depth, refcnt); return env; } @@ -346,46 +344,35 @@ restore_signals(void) @see build_env */ int -res_exec(resource_node_t *node, int op, int depth) +res_exec(resource_node_t *node, int op, const char *arg, int depth) { int childpid, pid; int ret = 0; char **env = NULL; resource_t *res = node->rn_resource; + const char *op_str = agent_op_str(op); char fullpath[2048]; - if (!res->r_rule->rr_agent) { - clulog(LOG_DEBUG, - "%s on %s \"%s\" no rr_agent\n", - res_ops[op], res->r_rule->rr_type, - res->r_attrs->ra_value); + if (!res->r_rule->rr_agent) return 0; - } #ifdef DEBUG - env = build_env(node, op); - if (!env) { - clulog(LOG_DEBUG, - "%s on %s \"%s\" build_env failed %d\n", - res_ops[op], res->r_rule->rr_type, - res->r_attrs->ra_value, errno); + env = build_env(node, depth, node->rn_resource->r_incarnations); + if (!env) return -errno; - } #endif #ifdef NO_CCS if (_no_op_mode_) { - printf("[%s] %s:%s\n", res_ops[op], - res->r_rule->rr_type, res->r_attrs->ra_value); + printf("[%s] %s:%s\n", op_str, res->r_rule->rr_type, + res->r_attrs->ra_value); return 0; } #endif childpid = fork(); - if (childpid < 0) { - clulog(LOG_ERR, "%s: fork failed (%d)!\n", __func__, errno); + if (childpid < 0) return -errno; - } if (!childpid) { /* Child */ @@ -394,21 +381,16 @@ res_exec(resource_node_t *node, int op, int depth) #endif #if 0 printf("Exec of script %s, action %s type %s\n", - res->r_rule->rr_agent, res_ops[op], + res->r_rule->rr_agent, agent_op_str(op), res->r_rule->rr_type); #endif #ifndef DEBUG - env = build_env(node, op, depth); + env = build_env(node, depth, node->rn_resource->r_incarnations); #endif - if (!env) { - clulog(LOG_DEBUG, - "%s on %s \"%s\" build_env failed (ENOMEM)\n", - res_ops[op], res->r_rule->rr_type, - res->r_attrs->ra_value); + if (!env) exit(-ENOMEM); - } if (res->r_rule->rr_agent[0] != '/') snprintf(fullpath, sizeof(fullpath), "%s/%s", @@ -419,7 +401,10 @@ res_exec(resource_node_t *node, int op, int depth) restore_signals(); - execle(fullpath, fullpath, res_ops[op], NULL, env); + if (arg) + execle(fullpath, fullpath, op_str, arg, NULL, env); + else + execle(fullpath, fullpath, op_str, NULL, env); } #ifdef DEBUG @@ -436,16 +421,16 @@ res_exec(resource_node_t *node, int op, int depth) ret = WEXITSTATUS(ret); +#ifndef NO_CCS + if ((op == RS_STATUS && + node->rn_state == RES_STARTED && ret) || + (op != RS_STATUS && ret)) { +#else if (ret) { +#endif clulog(LOG_NOTICE, - "%s on %s:%s returned %d (%s)\n", - res_ops[op], res->r_rule->rr_type, - res->r_attrs->ra_value, ret, - ocf_strerror(ret)); - } else { - clulog(LOG_DEBUG, - "%s on %s:%s returned %d (%s)\n", - res_ops[op], res->r_rule->rr_type, + "%s on %s \"%s\" returned %d (%s)\n", + op_str, res->r_rule->rr_type, res->r_attrs->ra_value, ret, ocf_strerror(ret)); } @@ -456,15 +441,43 @@ res_exec(resource_node_t *node, int op, int depth) if (!WIFSIGNALED(ret)) assert(0); - clulog(LOG_ERR, - "%s on %s:%s caught signal %d\n", - res_ops[op], res->r_rule->rr_type, - res->r_attrs->ra_value, WTERMSIG(ret)); - return -EFAULT; } +static inline void +assign_restart_policy(resource_t *curres, resource_node_t *parent, + resource_node_t *node) +{ + char *val; + int max_restarts = 0; + time_t restart_expire_time = 0; + + node->rn_restart_counter = NULL; + + if (!curres || !node) + return; + if (parent) /* Non-parents don't get one for now */ + return; + + val = res_attr_value(curres, "max_restarts"); + if (!val) + return; + max_restarts = atoi(val); + if (max_restarts <= 0) + return; + val = res_attr_value(curres, "restart_expire_time"); + if (val) { + restart_expire_time = (time_t)expand_time(val); + if (!restart_expire_time) + return; + } + + node->rn_restart_counter = restart_init(restart_expire_time, + max_restarts); +} + + static inline int do_load_resource(int ccsfd, char *base, resource_rule_t *rule, @@ -545,7 +558,21 @@ do_load_resource(int ccsfd, char *base, node->rn_parent = parent; node->rn_resource = curres; node->rn_state = RES_STOPPED; + node->rn_flags = 0; node->rn_actions = (resource_act_t *)act_dup(curres->r_actions); + assign_restart_policy(curres, parent, node); + + snprintf(tok, sizeof(tok), "%s/@__independent_subtree", base); +#ifndef NO_CCS + if (ccs_get(ccsfd, tok, &ref) == 0) { +#else + if (conf_get(tok, &ref) == 0) { +#endif + if (atoi(ref) > 0 || strcasecmp(ref, "yes") == 0) + node->rn_flags |= RF_INDEPENDENT; + free(ref); + } + curres->r_refs++; *newnode = node; @@ -685,8 +712,10 @@ build_tree(int ccsfd, resource_node_t **tree, } } /* No resource rule matching the child? Press on... */ - if (!flags) + if (!flags) { + free(ref); continue; + } flags = 0; /* Don't descend on anything we should have already picked @@ -706,12 +735,9 @@ build_tree(int ccsfd, resource_node_t **tree, break; } - if (flags == 2) { - free(ref); - continue; - } - free(ref); + if (flags == 2) + continue; x = 1; switch(do_load_resource(ccsfd, tok, childrule, tree, @@ -758,21 +784,13 @@ build_resource_tree(int ccsfd, resource_node_t **tree, resource_rule_t **rulelist, resource_t **reslist) { - resource_rule_t *curr; resource_node_t *root = NULL; char tok[512]; snprintf(tok, sizeof(tok), "%s", RESOURCE_TREE_ROOT); /* Find and build the list of root nodes */ - list_do(rulelist, curr) { - - if (!curr->rr_root) - continue; - - build_tree(ccsfd, &root, NULL, NULL/*curr*/, rulelist, reslist, tok); - - } while (!list_done(rulelist, curr)); + build_tree(ccsfd, &root, NULL, NULL/*curr*/, rulelist, reslist, tok); if (root) *tree = root; @@ -797,6 +815,11 @@ destroy_resource_tree(resource_node_t **tree) destroy_resource_tree(&(*tree)->rn_child); list_remove(tree, node); + + if (node->rn_restart_counter) { + restart_cleanup(node->rn_restart_counter); + } + if(node->rn_actions){ free(node->rn_actions); } @@ -824,6 +847,8 @@ _print_resource_tree(resource_node_t **tree, int level) printf("NEEDSTART "); if (node->rn_flags & RF_COMMON) printf("COMMON "); + if (node->rn_flags & RF_INDEPENDENT) + printf("INDEPENDENT "); printf("]"); } printf(" {\n"); @@ -879,16 +904,17 @@ _do_child_levels(resource_node_t **tree, resource_t *first, void *ret, #if 0 printf("%s children of %s type %s (level %d)\n", - res_ops[op], + agent_op_str(op), node->rn_resource->r_rule->rr_type, rule->rr_childtypes[x].rc_name, l); #endif /* Do op on all children at our level */ - rv += _res_op(&node->rn_child, first, + rv |= _res_op(&node->rn_child, first, rule->rr_childtypes[x].rc_name, ret, op); - if (rv != 0 && op != RS_STOP) + + if (rv & SFL_FAILURE && op != RS_STOP) return rv; } @@ -900,46 +926,6 @@ _do_child_levels(resource_node_t **tree, resource_t *first, void *ret, } -#if 0 -static inline int -_do_child_default_level(resource_node_t **tree, resource_t *first, - void *ret, int op) -{ - resource_node_t *node = *tree; - resource_t *res = node->rn_resource; - resource_rule_t *rule = res->r_rule; - int x, rv = 0, lev; - - for (x = 0; rule->rr_childtypes && - rule->rr_childtypes[x].rc_name; x++) { - - if(op == RS_STOP) - lev = rule->rr_childtypes[x].rc_stoplevel; - else - lev = rule->rr_childtypes[x].rc_startlevel; - - if (lev) - continue; - - /* - printf("%s children of %s type %s (default level)\n", - res_ops[op], - node->rn_resource->r_rule->rr_type, - rule->rr_childtypes[x].rc_name); - */ - - rv = _res_op(&node->rn_child, first, - rule->rr_childtypes[x].rc_name, - ret, op); - if (rv != 0) - return rv; - } - - return 0; -} -#endif - - static inline int _xx_child_internal(resource_node_t *node, resource_t *first, resource_node_t *child, void *ret, int op) @@ -973,13 +959,14 @@ _do_child_default_level(resource_node_t **tree, resource_t *first, if (op == RS_START || op == RS_STATUS) { list_for(&node->rn_child, child, y) { - rv = _xx_child_internal(node, first, child, ret, op); - if (rv) + rv |= _xx_child_internal(node, first, child, ret, op); + + if (rv & SFL_FAILURE) return rv; } } else { list_for_rev(&node->rn_child, child, y) { - rv += _xx_child_internal(node, first, child, ret, op); + rv |= _xx_child_internal(node, first, child, ret, op); } } @@ -1019,26 +1006,39 @@ _res_op_by_level(resource_node_t **tree, resource_t *first, void *ret, return _res_op(&node->rn_child, first, NULL, ret, op); if (op == RS_START || op == RS_STATUS) { - rv = _do_child_levels(tree, first, ret, op); - if (rv != 0) + rv |= _do_child_levels(tree, first, ret, op); + if (rv & SFL_FAILURE) return rv; /* Start default level after specified ones */ - rv = _do_child_default_level(tree, first, ret, op); + rv |= _do_child_default_level(tree, first, ret, op); } /* stop */ else { - rv = _do_child_default_level(tree, first, ret, op); - if (rv != 0) - return rv; - - rv = _do_child_levels(tree, first, ret, op); + rv |= _do_child_default_level(tree, first, ret, op); + rv |= _do_child_levels(tree, first, ret, op); } return rv; } +void +mark_nodes(resource_node_t *node, int state, int flags) +{ + int x; + resource_node_t *child; + + list_for(&node->rn_child, child, x) { + if (child->rn_child) + mark_nodes(child->rn_child, state, flags); + } + + node->rn_state = state; + node->rn_flags |= (RF_NEEDSTART | RF_NEEDSTOP); +} + + /** Do a status on a resource node. This takes into account the last time the status operation was run and selects the highest possible resource depth @@ -1075,7 +1075,8 @@ do_status(resource_node_t *node) /* Ok, it's a 'status' action. See if enough time has elapsed for a given type of status action */ - if (delta < node->rn_actions[x].ra_interval) + if (delta < node->rn_actions[x].ra_interval || + !node->rn_actions[x].ra_interval) continue; if (idx == -1 || @@ -1090,29 +1091,22 @@ do_status(resource_node_t *node) return 0; } + node->rn_actions[idx].ra_last = now; - x = res_exec(node, RS_STATUS, node->rn_actions[idx].ra_depth); + x = res_exec(node, RS_STATUS, NULL, node->rn_actions[idx].ra_depth); node->rn_last_status = x; node->rn_last_depth = node->rn_actions[idx].ra_depth; node->rn_checked = 1; - /* Clear check levels below ours. */ - for (x=0; node->rn_actions[x].ra_name; x++) { - if (strcmp(node->rn_actions[x].ra_name, "status")) - continue; - if (node->rn_actions[x].ra_depth <= node->rn_last_depth) - node->rn_actions[x].ra_last = now; - } - - if (node->rn_last_status == 0) + if (x == 0) return 0; if (!has_recover) - return node->rn_last_status; + return x; /* Strange/failed status. Try to recover inline. */ - if ((x = res_exec(node, RS_RECOVER, 0)) == 0) + if ((x = res_exec(node, RS_RECOVER, NULL, 0)) == 0) return 0; return x; @@ -1162,8 +1156,9 @@ clear_checks(resource_node_t *node) { time_t now; int x = 0; + resource_t *res = node->rn_resource; - now = time(NULL); + now = res->r_started; for (; node->rn_actions[x].ra_name; x++) { @@ -1197,136 +1192,12 @@ clear_checks(resource_node_t *node) in the subtree). @see _res_op_by_level res_exec */ -#if 0 -int -_res_op(resource_node_t **tree, resource_t *first, - char *type, void * __attribute__((unused))ret, int realop) -{ - int rv, me; - resource_node_t *node; - int op; - - list_do(tree, node) { - - /* Restore default operation. */ - op = realop; - - /* If we're starting by type, do that funky thing. */ - if (type && strlen(type) && - strcmp(node->rn_resource->r_rule->rr_type, type)) - continue; - - /* If the resource is found, all nodes in the subtree must - have the operation performed as well. */ - me = !first || (node->rn_resource == first); - - /* - printf("begin %s: %s %s [0x%x]\n", res_ops[op], - node->rn_resource->r_rule->rr_type, - primary_attr_value(node->rn_resource), - node->rn_flags); - */ - - if (me) { - /* - If we've been marked as a node which - needs to be started or stopped, clear - that flag and start/stop this resource - and all resource babies. - - Otherwise, don't do anything; look for - children with RF_NEEDSTART and - RF_NEEDSTOP flags. - - CONDSTART and CONDSTOP are no-ops if - the appropriate flag is not set. - */ - if ((op == RS_CONDSTART) && - (node->rn_flags & RF_NEEDSTART)) { - /* - printf("Node %s:%s - CONDSTART\n", - node->rn_resource->r_rule->rr_type, - primary_attr_value(node->rn_resource)); - */ - op = RS_START; - } - - if ((op == RS_CONDSTOP) && - (node->rn_flags & RF_NEEDSTOP)) { - /* - printf("Node %s:%s - CONDSTOP\n", - node->rn_resource->r_rule->rr_type, - primary_attr_value(node->rn_resource)); - */ - op = RS_STOP; - } - } - - /* Start starts before children */ - if (me && (op == RS_START)) { - node->rn_flags &= ~RF_NEEDSTART; - - rv = res_exec(node, op, 0); - if (rv != 0) { - node->rn_state = RES_FAILED; - return rv; - } - - set_time("start", 0, node); - clear_checks(node); - - if (node->rn_state != RES_STARTED) { - ++node->rn_resource->r_incarnations; - node->rn_state = RES_STARTED; - } - } - - if (node->rn_child) { - rv = _res_op_by_level(&node, me?NULL:first, ret, op); - if (rv != 0) - return rv; - } - - /* Stop/status/etc stops after children have stopped */ - if (me && (op == RS_STOP)) { - node->rn_flags &= ~RF_NEEDSTOP; - rv = res_exec(node, op, 0); - - if (rv != 0) { - node->rn_state = RES_FAILED; - return rv; - } - - if (node->rn_state != RES_STOPPED) { - --node->rn_resource->r_incarnations; - node->rn_state = RES_STOPPED; - } - - } else if (me && (op == RS_STATUS)) { - - rv = do_status(node); - if (rv != 0) - return rv; - } - - /* - printf("end %s: %s %s\n", res_ops[op], - node->rn_resource->r_rule->rr_type, - primary_attr_value(node->rn_resource)); - */ - } while (!list_done(tree, node)); - - return 0; -} -#endif - - static inline int _res_op_internal(resource_node_t **tree, resource_t *first, char *type, void *__attribute__((unused))ret, int realop, resource_node_t *node) { - int rv, me, op; + int rv = 0, me, op; /* Restore default operation. */ op = realop; @@ -1378,12 +1249,18 @@ _res_op_internal(resource_node_t **tree, resource_t *first, /* Start starts before children */ if (me && (op == RS_START)) { - node->rn_flags &= ~RF_NEEDSTART; - rv = res_exec(node, op, 0); + if (node->rn_flags & RF_RECONFIG && + realop == RS_CONDSTART) { + rv = res_exec(node, RS_RECONFIG, NULL, 0); + op = realop; /* reset to CONDSTART */ + } else { + rv = res_exec(node, op, NULL, 0); + } + node->rn_flags &= ~(RF_NEEDSTART | RF_RECONFIG); if (rv != 0) { node->rn_state = RES_FAILED; - return rv; + return SFL_FAILURE; } set_time("start", 0, node); @@ -1396,24 +1273,53 @@ _res_op_internal(resource_node_t **tree, resource_t *first, } else if (me && (op == RS_STATUS)) { /* Check status before children*/ rv = do_status(node); - if (rv != 0) - return rv; - } + if (rv != 0) { + /* + If this node's status has failed, all of its + dependent children are failed, whether or not this + node is independent or not. + */ + mark_nodes(node, RES_FAILED, + RF_NEEDSTART | RF_NEEDSTOP); + + /* If we're an independent subtree, return a flag + stating that this section is recoverable apart + from siblings in the resource tree. All child + resources of this node must be restarted, + but siblings of this node are not affected. */ + if (node->rn_flags & RF_INDEPENDENT) + return SFL_RECOVERABLE; + + return SFL_FAILURE; + } - if (node->rn_child) { - rv = _res_op_by_level(&node, me?NULL:first, ret, op); - if (rv != 0) - return rv; } + if (node->rn_child) { + rv |= _res_op_by_level(&node, me?NULL:first, ret, op); + + /* If one or more child resources are failed and at least one + of them is not an independent subtree then let's check if + if we are an independent subtree. If so, mark ourself + and all our children as failed and return a flag stating + that this section is recoverable apart from siblings in + the resource tree. */ + if (op == RS_STATUS && (rv & SFL_FAILURE) && + (node->rn_flags & RF_INDEPENDENT)) { + mark_nodes(node, RES_FAILED, + RF_NEEDSTART | RF_NEEDSTOP); + rv = SFL_RECOVERABLE; + } + } + /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { node->rn_flags &= ~RF_NEEDSTOP; - rv = res_exec(node, op, 0); + rv = res_exec(node, op, NULL, 0); if (rv != 0) { node->rn_state = RES_FAILED; - return rv; + return SFL_FAILURE; } if (node->rn_state != RES_STOPPED) { @@ -1426,7 +1332,7 @@ _res_op_internal(resource_node_t **tree, resource_t *first, //node->rn_resource->r_rule->rr_type, //primary_attr_value(node->rn_resource)); - return 0; + return rv; } @@ -1452,24 +1358,31 @@ _res_op(resource_node_t **tree, resource_t *first, char *type, void * __attribute__((unused))ret, int realop) { resource_node_t *node; - int count = 0, rv; + int count = 0, rv = 0; if (realop == RS_STOP) { list_for_rev(tree, node, count) { - rv = _res_op_internal(tree, first, type, ret, realop, - node); - if (rv != 0) - return rv; + rv |= _res_op_internal(tree, first, type, ret, realop, + node); } } else { list_for(tree, node, count) { - rv = _res_op_internal(tree, first, type, ret, realop, - node); - if (rv != 0) + rv |= _res_op_internal(tree, first, type, ret, realop, + node); + + /* If we hit a problem during a 'status' op in an + independent subtree, rv will have the + SFL_RECOVERABLE bit set, but not SFL_FAILURE. + If we ever hit SFL_FAILURE during a status + operation, we're *DONE* - even if the subtree + is flagged w/ indy-subtree */ + + if (rv & SFL_FAILURE) return rv; } } - return 0; + + return rv; } /** @@ -1564,6 +1477,7 @@ int resource_delta(resource_t **leftres, resource_t **rightres) { resource_t *lc, *rc; + int ret; list_do(leftres, lc) { rc = find_resource_by_ref(rightres, lc->r_rule->rr_type, @@ -1576,10 +1490,25 @@ resource_delta(resource_t **leftres, resource_t **rightres) } /* Ok, see if the resource is the same */ - if (rescmp(lc, rc) == 0) { + ret = rescmp(lc, rc); + if (ret == 0) { + rc->r_flags |= RF_COMMON; + continue; + } + + if (ret == 2) { + /* return of 2 from rescmp means + the two resources differ only + by reconfigurable bits */ + /* Do nothing on condstop phase; + do a "reconfig" instead of + "start" on conststart phase */ rc->r_flags |= RF_COMMON; + rc->r_flags |= RF_NEEDSTART; + rc->r_flags |= RF_RECONFIG; continue; } + rc->r_flags |= RF_COMMON; /* Resource has changed. Flag it. */ @@ -1641,12 +1570,17 @@ resource_tree_delta(resource_node_t **ltree, resource_node_t **rtree) or is new), then we don't really care about its children. */ + if (rn->rn_resource->r_flags & RF_NEEDSTART) { rn->rn_flags |= RF_NEEDSTART; - continue; + if ((rn->rn_resource->r_flags & RF_RECONFIG) == 0) + continue; } - if (rc == 0) { + if (rc == 0 || rc == 2) { + if (rc == 2) + rn->rn_flags |= RF_NEEDSTART | RF_RECONFIG; + /* Ok, same resource. Recurse. */ ln->rn_flags |= RF_COMMON; rn->rn_flags |= RF_COMMON; diff --git a/rgmanager/src/daemons/rg_event.c b/rgmanager/src/daemons/rg_event.c new file mode 100644 index 0000000..f614668 --- /dev/null +++ b/rgmanager/src/daemons/rg_event.c @@ -0,0 +1,573 @@ +/* + Copyright Red Hat, Inc. 2006-2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + * resource group event queue. + */ +static event_t *event_queue = NULL; +#ifdef WRAP_LOCKS +static pthread_mutex_t event_queue_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; +static pthread_mutex_t mi_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; +#else +static pthread_mutex_t event_queue_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t mi_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif +static pthread_t event_thread = 0; +static int transition_throttling = 5; +static int central_events = 0; + +extern int running; +extern int shutdown_pending; +static int _master = 0; +static struct dlm_lksb _master_lock; +static int _xid = 0; +static event_master_t *mi = NULL; + +void hard_exit(void); +int init_resource_groups(int); +void flag_shutdown(int sig); +void flag_reconfigure(int sig); + +event_table_t *master_event_table = NULL; + + +void +set_transition_throttling(int nsecs) +{ + if (nsecs < 0) + nsecs = 0; + transition_throttling = nsecs; +} + + +void +set_central_events(int flag) +{ + central_events = flag; +} + + +int +central_events_enabled(void) +{ + return central_events; +} + + +/** + Called to handle the transition of a cluster member from up->down or + down->up. This handles initializing services (in the local node-up case), + exiting due to loss of quorum (local node-down), and service fail-over + (remote node down). This is the distributed node event processor; + for the local-only node event processor, see slang_event.c + + @param nodeID ID of the member which has come up/gone down. + @param nodeStatus New state of the member in question. + @see eval_groups + */ +void +node_event(int local, int nodeID, int nodeStatus, int clean) +{ + if (!running) + return; + + if (local) { + + /* Local Node Event */ + if (nodeStatus == 0) { + clulog(LOG_ERR, "Exiting uncleanly\n"); + hard_exit(); + } + + if (!rg_initialized()) { + if (init_resource_groups(0) != 0) { + clulog(LOG_ERR, + "#36: Cannot initialize services\n"); + hard_exit(); + } + } + + if (shutdown_pending) { + clulog(LOG_NOTICE, "Processing delayed exit signal\n"); + running = 0; + return; + } + setup_signal(SIGINT, flag_shutdown); + setup_signal(SIGTERM, flag_shutdown); + setup_signal(SIGHUP, flag_reconfigure); + + eval_groups(1, nodeID, 1); + return; + } + + /* + * Nothing to do for events from other nodes if we are not ready. + */ + if (!rg_initialized()) { + clulog(LOG_DEBUG, "Services not initialized.\n"); + return; + } + + eval_groups(0, nodeID, nodeStatus); +} + + +/** + Query CCS to see whether a node has fencing enabled or not in + the configuration. This does not check to see if it's in the + fence domain. + */ +int +node_has_fencing(int nodeid) +{ + int ccs_desc; + char *val = NULL; + char buf[1024]; + int ret = 1; + + ccs_desc = ccs_connect(); + if (ccs_desc < 0) { + clulog(LOG_ERR, "Unable to connect to ccsd; cannot handle" + " node event!\n"); + /* Assume node has fencing */ + return 1; + } + + snprintf(buf, sizeof(buf), + "/cluster/clusternodes/clusternode[@nodeid=\"%d\"]" + "/fence/method/device/@name", nodeid); + + if (ccs_get(ccs_desc, buf, &val) != 0) + ret = 0; + if (val) + free(val); + ccs_disconnect(ccs_desc); + return ret; +} + + +/** + Quick query to cman to see if a node has been fenced. + */ +int +node_fenced(int nodeid) +{ + cman_handle_t ch; + int fenced = 0; + uint64_t fence_time; + + ch = cman_init(NULL); + if (cman_get_fenceinfo(ch, nodeid, &fence_time, &fenced, NULL) < 0) + fenced = 0; + + cman_finish(ch); + + return fenced; +} + + +/** + Callback from view-formation when a commit occurs for the Transition- + Master key. + */ +int32_t +master_event_callback(char *key, uint64_t viewno, + void *data, uint32_t datalen) +{ + event_master_t *m; + + m = data; + if (datalen != (uint32_t)sizeof(*m)) { + clulog(LOG_ERR, "%s: wrong size\n", __FUNCTION__); + return 1; + } + + swab_event_master_t(m); + if (m->m_magic != EVENT_MASTER_MAGIC) { + clulog(LOG_ERR, "%s: wrong size\n", __FUNCTION__); + return 1; + } + + if (m->m_nodeid == my_id()) + clulog(LOG_DEBUG, "Master Commit: I am master\n"); + else + clulog(LOG_DEBUG, "Master Commit: %d is master\n", m->m_nodeid); + + pthread_mutex_lock(&mi_mutex); + if (mi) + free(mi); + mi = m; + pthread_mutex_unlock(&mi_mutex); + + return 0; +} + + +/** + Read the Transition-Master key from vf if it exists. If it doesn't, + attempt to become the transition-master. + */ +static int +find_master(void) +{ + event_master_t *masterinfo = NULL; + void *data; + uint32_t sz; + cluster_member_list_t *m; + uint64_t vn; + int master_id = -1; + + m = member_list(); + if (vf_read(m, "Transition-Master", &vn, + (void **)(&data), &sz) < 0) { + clulog(LOG_ERR, "Unable to discover master" + " status\n"); + masterinfo = NULL; + } else { + masterinfo = (event_master_t *)data; + } + free_member_list(m); + + if (masterinfo && (sz >= sizeof(*masterinfo))) { + swab_event_master_t(masterinfo); + if (masterinfo->m_magic == EVENT_MASTER_MAGIC) { + clulog(LOG_DEBUG, "Master Locate: %d is master\n", + masterinfo->m_nodeid); + pthread_mutex_lock(&mi_mutex); + if (mi) + free(mi); + mi = masterinfo; + pthread_mutex_unlock(&mi_mutex); + master_id = masterinfo->m_nodeid; + } + } + + return master_id; +} + + +/** + Return a copy of the cached event_master_t structure to the + caller. + */ +int +event_master_info_cached(event_master_t *mi_out) +{ + if (!central_events || !mi_out) { + errno = -EINVAL; + return -1; + } + + pthread_mutex_lock(&mi_mutex); + if (!mi) { + pthread_mutex_unlock(&mi_mutex); + errno = -ENOENT; + return -1; + } + + memcpy(mi_out, mi, sizeof(*mi)); + pthread_mutex_unlock(&mi_mutex); + return 0; +} + + +/** + Return the node ID of the master. If none exists, become + the master and return our own node ID. + */ +int +event_master(void) +{ + cluster_member_list_t *m = NULL; + event_master_t masterinfo; + int master_id = -1; + + /* We hold this forever. */ + if (_master) + return my_id(); + + m = member_list(); + pthread_mutex_lock(&mi_mutex); + + if (mi) { + master_id = mi->m_nodeid; + pthread_mutex_unlock(&mi_mutex); + if (memb_online(m, master_id)) { + //clulog(LOG_DEBUG, "%d is master\n", mi->m_nodeid); + goto out; + } + } + + pthread_mutex_unlock(&mi_mutex); + + memset(&_master_lock, 0, sizeof(_master_lock)); + if (clu_lock(LKM_EXMODE, &_master_lock, LKF_NOQUEUE, + "Transition-Master") < 0) { + /* not us, find out who is master */ + master_id = find_master(); + goto out; + } + + if (_master_lock.sb_status != 0) { + master_id = -1; + goto out; + } + + _master = 1; + + memset(&masterinfo, 0, sizeof(masterinfo)); + masterinfo.m_magic = EVENT_MASTER_MAGIC; + masterinfo.m_nodeid = my_id(); + masterinfo.m_master_time = (uint64_t)time(NULL); + swab_event_master_t(&masterinfo); + + if (vf_write(m, VFF_IGN_CONN_ERRORS | VFF_RETRY, + "Transition-Master", &masterinfo, + sizeof(masterinfo)) < 0) { + clulog(LOG_ERR, "Unable to advertise master" + " status to all nodes\n"); + } + + master_id = my_id(); +out: + free_member_list(m); + return master_id; +} + + + +void group_event(char *name, uint32_t state, int owner); + +/** + Event handling function. This only stays around as long as + events are on the queue. + */ +void * +_event_thread_f(void *arg) +{ + event_t *ev; + int notice = 0, count = 0; + + while (1) { + pthread_mutex_lock(&event_queue_mutex); + ev = event_queue; + if (ev) + list_remove(&event_queue, ev); + else + break; /* We're outta here */ + + ++count; + /* Event thread usually doesn't hang around. When it's + spawned, sleep for this many seconds in order to let + some events queue up */ + if ((count==1) && transition_throttling && !central_events) + sleep(transition_throttling); + + pthread_mutex_unlock(&event_queue_mutex); + + if (ev->ev_type == EVENT_CONFIG) { + /* + clulog(LOG_NOTICE, "Config Event: %d -> %d\n", + ev->ev.config.cfg_oldversion, + ev->ev.config.cfg_version); + */ + init_resource_groups(1); + free(ev); + continue; + } + + if (central_events) { + /* If the master node died or there isn't + one yet, take the master lock. */ + if (event_master() == my_id()) { + slang_process_event(master_event_table, + ev); + } + free(ev); + continue; + /* ALL OF THE CODE BELOW IS DISABLED + when using central_events */ + } + + if (ev->ev_type == EVENT_RG) { + /* + clulog(LOG_NOTICE, "RG Event: %s %s %d\n", + ev->ev.group.rg_name, + rg_state_str(ev->ev.group.rg_state), + ev->ev.group.rg_owner); + */ + group_event(ev->ev.group.rg_name, + ev->ev.group.rg_state, + ev->ev.group.rg_owner); + } else if (ev->ev_type == EVENT_NODE) { + /* + clulog(LOG_NOTICE, "Node Event: %s %d %s %s\n", + ev->ev.node.ne_local?"Local":"Remote", + ev->ev.node.ne_nodeid, + ev->ev.node.ne_state?"UP":"DOWN", + ev->ev.node.ne_clean?"Clean":"Dirty") + */ + + if (ev->ev.node.ne_state == 0 && + !ev->ev.node.ne_clean && + node_has_fencing(ev->ev.node.ne_nodeid)) { + notice = 0; + while (!node_fenced(ev->ev.node.ne_nodeid)) { + if (!notice) { + notice = 1; + clulog(LOG_INFO, "Waiting for " + "node #%d to be fenced\n", + ev->ev.node.ne_nodeid); + } + sleep(2); + } + + if (notice) + clulog(LOG_INFO, "Node #%d fenced; " + "continuing\n", + ev->ev.node.ne_nodeid); + } + + node_event(ev->ev.node.ne_local, + ev->ev.node.ne_nodeid, + ev->ev.node.ne_state, + ev->ev.node.ne_clean); + } + + free(ev); + } + + if (!central_events || _master) { + clulog(LOG_DEBUG, "%d events processed\n", count); + } + /* Mutex held */ + event_thread = 0; + pthread_mutex_unlock(&event_queue_mutex); + pthread_exit(NULL); +} + + +static void +insert_event(event_t *ev) +{ + pthread_attr_t attrs; + pthread_mutex_lock (&event_queue_mutex); + ev->ev_transaction = ++_xid; + list_insert(&event_queue, ev); + if (event_thread == 0) { + pthread_attr_init(&attrs); + pthread_attr_setinheritsched(&attrs, PTHREAD_INHERIT_SCHED); + pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); + pthread_attr_setstacksize(&attrs, 262144); + + pthread_create(&event_thread, &attrs, _event_thread_f, NULL); + pthread_attr_destroy(&attrs); + } + pthread_mutex_unlock (&event_queue_mutex); +} + + +static event_t * +new_event(void) +{ + event_t *ev; + + while (1) { + ev = malloc(sizeof(*ev)); + if (ev) { + break; + } + sleep(1); + } + memset(ev,0,sizeof(*ev)); + ev->ev_type = EVENT_NONE; + + return ev; +} + + +void +rg_event_q(char *name, uint32_t state, int owner, int last) +{ + event_t *ev = new_event(); + + ev->ev_type = EVENT_RG; + + strncpy(ev->ev.group.rg_name, name, 128); + ev->ev.group.rg_state = state; + ev->ev.group.rg_owner = owner; + ev->ev.group.rg_last_owner = last; + + insert_event(ev); +} + + +void +node_event_q(int local, int nodeID, int state, int clean) +{ + event_t *ev = new_event(); + + ev->ev_type = EVENT_NODE; + ev->ev.node.ne_state = state; + ev->ev.node.ne_local = local; + ev->ev.node.ne_nodeid = nodeID; + ev->ev.node.ne_clean = clean; + insert_event(ev); +} + + +void +config_event_q(int old_version, int new_version) +{ + event_t *ev = new_event(); + + ev->ev_type = EVENT_CONFIG; + ev->ev.config.cfg_version = new_version; + ev->ev.config.cfg_oldversion = old_version; + insert_event(ev); +} + +void +user_event_q(char *svc, int request, + int arg1, int arg2, int target, msgctx_t *ctx) +{ + event_t *ev = new_event(); + + ev->ev_type = EVENT_USER; + strncpy(ev->ev.user.u_name, svc, sizeof(ev->ev.user.u_name)); + ev->ev.user.u_request = request; + ev->ev.user.u_arg1 = arg1; + ev->ev.user.u_arg2 = arg2; + ev->ev.user.u_target = target; + ev->ev.user.u_ctx = ctx; + insert_event(ev); +} + diff --git a/rgmanager/src/daemons/service_op.c b/rgmanager/src/daemons/service_op.c new file mode 100644 index 0000000..6ee636a --- /dev/null +++ b/rgmanager/src/daemons/service_op.c @@ -0,0 +1,204 @@ +/* + Copyright Red Hat, Inc. 2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/* + * Send a message to the target node to start the service. + */ +int svc_start_remote(char *svcName, int request, uint32_t target); +void svc_report_failure(char *); +int get_service_state_internal(char *svcName, rg_state_t *svcStatus); + + +/** + * + */ +int +service_op_start(char *svcName, + int *target_list, + int target_list_len, + int *new_owner) +{ + int target; + int ret, x; + int excl = 0, dep = 0, fail = 0; + rg_state_t svcStatus; + + if (get_service_state_internal(svcName, &svcStatus) < 0) { + return RG_EFAIL; + } + + if (svcStatus.rs_state == RG_STATE_FAILED || + svcStatus.rs_state == RG_STATE_UNINITIALIZED) + return RG_EINVAL; + + for (x = 0; x < target_list_len; x++) { + + target = target_list[x]; + ret = svc_start_remote(svcName, RG_START_REMOTE, + target); + switch (ret) { + case RG_ERUN: + /* Someone stole the service while we were + trying to start it */ + get_rg_state_local(svcName, &svcStatus); + if (new_owner) + *new_owner = svcStatus.rs_owner; + return 0; + case RG_EEXCL: + ++excl; + continue; + case RG_EDEPEND: + ++dep; + continue; + case RG_EFAIL: + ++fail; + continue; + case RG_EABORT: + svc_report_failure(svcName); + return RG_EFAIL; + default: + /* deliberate fallthrough */ + clulog(LOG_ERR, + "#61: Invalid reply from member %d during" + " start operation!\n", target); + case RG_NO: + /* state uncertain */ + clulog(LOG_CRIT, "State Uncertain: svc:%s " + "nid:%d req:%s ret:%d\n", svcName, + target, rg_req_str(RG_START_REMOTE), ret); + return 0; + case 0: + if (new_owner) + *new_owner = target; + clulog(LOG_NOTICE, "Service %s is now running " + "on member %d\n", svcName, (int)target); + return 0; + } + } + + ret = RG_EFAIL; + if (excl == target_list_len) + ret = RG_EEXCL; + else if (dep == target_list_len) + ret = RG_EDEPEND; + + clulog(LOG_INFO, "Start failed; node reports: %d failures, " + "%d exclusive, %d dependency errors\n", fail, excl, dep); + return ret; +} + + +int +service_op_stop(char *svcName, int do_disable, int event_type) +{ + SmMessageSt msg; + int msg_ret; + msgctx_t ctx; + rg_state_t svcStatus; + int msgtarget = my_id(); + + /* Build the message header */ + msg.sm_hdr.gh_magic = GENERIC_HDR_MAGIC; + msg.sm_hdr.gh_command = RG_ACTION_REQUEST; + msg.sm_hdr.gh_arg1 = RG_ACTION_MASTER; + msg.sm_hdr.gh_length = sizeof (SmMessageSt); + + msg.sm_data.d_action = ((!do_disable) ? RG_STOP:RG_DISABLE); + + if (msg.sm_data.d_action == RG_STOP && event_type == EVENT_USER) + msg.sm_data.d_action = RG_STOP_USER; + + strncpy(msg.sm_data.d_svcName, svcName, + sizeof(msg.sm_data.d_svcName)); + msg.sm_data.d_ret = 0; + msg.sm_data.d_svcOwner = 0; + + /* Open a connection to the local node - it will decide what to + do in this case. XXX inefficient; should queue requests + locally and immediately forward requests otherwise */ + + if (get_service_state_internal(svcName, &svcStatus) < 0) + return RG_EFAIL; + if (svcStatus.rs_owner > 0) + msgtarget = svcStatus.rs_owner; + + if (msg_open(MSG_CLUSTER, msgtarget, RG_PORT, &ctx, 2)< 0) { + clulog(LOG_ERR, + "#58: Failed opening connection to member #%d\n", + my_id()); + return -1; + } + + /* Encode */ + swab_SmMessageSt(&msg); + + /* Send stop message to the other node */ + if (msg_send(&ctx, &msg, sizeof (SmMessageSt)) < + (int)sizeof (SmMessageSt)) { + clulog(LOG_ERR, "Failed to send complete message\n"); + msg_close(&ctx); + return -1; + } + + /* Check the response */ + do { + msg_ret = msg_receive(&ctx, &msg, + sizeof (SmMessageSt), 10); + if ((msg_ret == -1 && errno != ETIMEDOUT) || + (msg_ret > 0)) { + break; + } + } while(1); + + if (msg_ret != sizeof (SmMessageSt)) { + clulog(LOG_WARNING, "Strange response size: %d vs %d\n", + msg_ret, (int)sizeof(SmMessageSt)); + return 0; /* XXX really UNKNOWN */ + } + + /* Got a valid response from other node. */ + msg_close(&ctx); + + /* Decode */ + swab_SmMessageSt(&msg); + + return msg.sm_data.d_ret; +} + + +/* + TODO + service_op_migrate() + */ + diff --git a/rgmanager/src/daemons/slang_event.c b/rgmanager/src/daemons/slang_event.c new file mode 100644 index 0000000..92284b5 --- /dev/null +++ b/rgmanager/src/daemons/slang_event.c @@ -0,0 +1,1264 @@ +/* + Copyright Red Hat, Inc. 2007 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License version 2 as published + by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +/** + @file S/Lang event handling & intrinsic functions + vars + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +static int __sl_initialized = 0; + +static char **_service_list = NULL; +static int _service_list_len = 0; + +char **get_service_names(int *len); /* from groups.c */ +int get_service_property(char *rg_name, char *prop, char *buf, size_t buflen); +void push_int_array(int *stuff, int len); + + +/* ================================================================ + * Node states + * ================================================================ */ +static const int + _ns_online = 1, + _ns_offline = 0; + +/* ================================================================ + * Event information + * ================================================================ */ +static const int + _ev_none = EVENT_NONE, + _ev_node = EVENT_NODE, + _ev_service = EVENT_RG, + _ev_config = EVENT_CONFIG, + _ev_user = EVENT_USER; + +static const int + _rg_fail = RG_EFAIL, + _rg_success = RG_ESUCCESS, + _rg_edomain = RG_EDOMAIN, + _rg_edepend = RG_EDEPEND, + _rg_eabort = RG_EABORT, + _rg_einval = RG_EINVAL, + _rg_erun = RG_ERUN; + +static int + _stop_processing = 0, + _my_node_id = 0, + _node_state = 0, + _node_id = 0, + _node_clean = 0, + _service_owner = 0, + _service_last_owner = 0, + _service_restarts_exceeded = 0, + _user_request = 0, + _user_arg1 = 0, + _user_arg2 = 0, + _user_return = 0, + _rg_err = 0, + _event_type = 0; + +static char + *_node_name = NULL, + *_service_name = NULL, + *_service_state = NULL, + *_rg_err_str = "No Error"; + +static int + _user_enable = RG_ENABLE, + _user_disable = RG_DISABLE, + _user_stop = RG_STOP_USER, /* From clusvcadm */ + _user_relo = RG_RELOCATE, + _user_restart = RG_RESTART, + _user_migrate = RG_MIGRATE; + + +SLang_Intrin_Var_Type rgmanager_vars[] = +{ + /* Log levels (constants) */ + + /* Node state information */ + MAKE_VARIABLE("NODE_ONLINE", &_ns_online, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("NODE_OFFLINE", &_ns_offline, SLANG_INT_TYPE, 1), + + /* Node event information */ + MAKE_VARIABLE("node_self", &_my_node_id, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("node_state", &_node_state, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("node_id", &_node_id, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("node_name", &_node_name, SLANG_STRING_TYPE,1), + MAKE_VARIABLE("node_clean", &_node_clean, SLANG_INT_TYPE, 1), + + /* Service event information */ + MAKE_VARIABLE("service_name", &_service_name, SLANG_STRING_TYPE,1), + MAKE_VARIABLE("service_state", &_service_state,SLANG_STRING_TYPE,1), + MAKE_VARIABLE("service_owner", &_service_owner,SLANG_INT_TYPE, 1), + MAKE_VARIABLE("service_last_owner", &_service_last_owner, + SLANG_INT_TYPE, 1), + MAKE_VARIABLE("service_restarts_exceeded", &_service_restarts_exceeded, + SLANG_INT_TYPE, 1), + + /* User event information */ + MAKE_VARIABLE("user_request", &_user_request, SLANG_INT_TYPE,1), + MAKE_VARIABLE("user_arg1", &_user_arg1, SLANG_INT_TYPE,1), + MAKE_VARIABLE("user_arg2", &_user_arg2, SLANG_INT_TYPE,1), + MAKE_VARIABLE("user_service", &_service_name, SLANG_STRING_TYPE,1), + MAKE_VARIABLE("user_target", &_service_owner,SLANG_INT_TYPE, 1), + /* Return code to user requests; i.e. clusvcadm */ + MAKE_VARIABLE("user_return", &_user_return, SLANG_INT_TYPE, 0), + + /* General event information */ + MAKE_VARIABLE("event_type", &_event_type, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("EVENT_NONE", &_ev_none, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("EVENT_NODE", &_ev_node, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("EVENT_CONFIG", &_ev_config, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("EVENT_SERVICE", &_ev_service, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("EVENT_USER", &_ev_user, SLANG_INT_TYPE, 1), + + /* User request constants */ + MAKE_VARIABLE("USER_ENABLE", &_user_enable, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("USER_DISABLE", &_user_disable, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("USER_STOP", &_user_stop, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("USER_RELOCATE", &_user_relo, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("USER_RESTART", &_user_restart, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("USER_MIGRATE", &_user_migrate, SLANG_INT_TYPE, 1), + + /* Errors */ + MAKE_VARIABLE("rg_error", &_rg_err, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("rg_error_string",&_rg_err_str, SLANG_STRING_TYPE,1), + + /* From constants.c */ + MAKE_VARIABLE("FAIL", &_rg_fail, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("SUCCESS", &_rg_success, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("ERR_ABORT", &_rg_eabort, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("ERR_INVALID", &_rg_einval, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("ERR_DEPEND", &_rg_edepend, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("ERR_DOMAIN", &_rg_edomain, SLANG_INT_TYPE, 1), + MAKE_VARIABLE("ERR_RUNNING", &_rg_erun, SLANG_INT_TYPE, 1), + + SLANG_END_INTRIN_VAR_TABLE +}; + + +#define rg_error(errortype) \ +do { \ + _rg_err = errortype; \ + _rg_err_str = ##errortype; \ +} while(0) + + +int +get_service_state_internal(char *svcName, rg_state_t *svcStatus) +{ + struct dlm_lksb lock; + char buf[32]; + + get_rg_state_local(svcName, svcStatus); + if (svcStatus->rs_state == RG_STATE_UNINITIALIZED) { + if (rg_lock(svcName, &lock) < 0) { + errno = ENOLCK; + return -1; + } + + if (get_rg_state(svcName, svcStatus) < 0) { + errno = ENOENT; + rg_unlock(&lock); + return -1; + } + + /* We got a copy from another node - don't flip the state */ + if (svcStatus->rs_transition) { + rg_unlock(&lock); + return 0; + } + + /* Finish initializing the service state */ + svcStatus->rs_transition = (uint64_t)time(NULL); + + if (get_service_property(svcName, "autostart", + buf, sizeof(buf)) == 0) { + if (buf[0] == '0' || !strcasecmp(buf, "no")) { + svcStatus->rs_state = RG_STATE_DISABLED; + } else { + svcStatus->rs_state = RG_STATE_STOPPED; + } + } + + set_rg_state(svcName, svcStatus); + + rg_unlock(&lock); + } + + return 0; +} + + +/* + (restarts, last_owner, owner, state) = get_service_status(servicename) + */ +void +sl_service_status(char *svcName) +{ + rg_state_t svcStatus; + int restarts_exceeded = 0; + char *state_str; + + if (get_service_state_internal(svcName, &svcStatus) < 0) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to get status for %s", + __FUNCTION__, + svcName); + return; + } + + restarts_exceeded = check_restart(svcName); + if (SLang_push_integer(restarts_exceeded) < 0) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to push restarts_exceeded %s", + __FUNCTION__, + svcName); + return; + } + + if (SLang_push_integer(svcStatus.rs_restarts) < 0) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to push restarts for %s", + __FUNCTION__, + svcName); + return; + } + + if (SLang_push_integer(svcStatus.rs_last_owner) < 0) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to push last owner of %s", + __FUNCTION__, + svcName); + return; + } + + switch(svcStatus.rs_state) { + case RG_STATE_DISABLED: + case RG_STATE_STOPPED: + case RG_STATE_FAILED: + case RG_STATE_RECOVER: + case RG_STATE_ERROR: + /* There is no owner for these states. Ever. */ + svcStatus.rs_owner = -1; + } + + if (SLang_push_integer(svcStatus.rs_owner) < 0) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to push owner of %s", + __FUNCTION__, + svcName); + return; + } + + state_str = strdup(rg_state_str(svcStatus.rs_state)); + if (!state_str) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to duplicate state of %s", + __FUNCTION__, + svcName); + return; + } + + if (SLang_push_malloced_string(state_str) < 0) { + SLang_verror(SL_RunTime_Error, + "%s: Failed to push state of %s", + __FUNCTION__, + svcName); + free(state_str); + } +} + + +/** + (nofailback, restricted, ordered, nodelist) = service_domain_info(svcName); + */ +void +sl_domain_info(char *svcName) +{ + int *nodelist = NULL, listlen; + char buf[64]; + int flags = 0; + + if (get_service_property(svcName, "domain", buf, sizeof(buf)) < 0) { + /* no nodes */ + SLang_push_integer(0); + + /* no domain? */ +/* + str = strdup("none"); + if (SLang_push_malloced_string(str) < 0) { + free(state_str); + return; + } +*/ + + /* not ordered */ + SLang_push_integer(0); + /* not restricted */ + SLang_push_integer(0); + /* nofailback not set */ + SLang_push_integer(0); + } + + if (node_domain_set_safe(buf, &nodelist, &listlen, &flags) < 0) { + SLang_push_integer(0); + SLang_push_integer(0); + SLang_push_integer(0); + SLang_push_integer(0); + return; + } + + SLang_push_integer(!!(flags & FOD_NOFAILBACK)); + SLang_push_integer(!!(flags & FOD_RESTRICTED)); + SLang_push_integer(!!(flags & FOD_ORDERED)); + + push_int_array(nodelist, listlen); + free(nodelist); + +/* + str = strdup(buf); + if (SLang_push_malloced_string(str) < 0) { + free(state_str); + return; + } +*/ +} + + +static int +get_int_array(int **nodelist, int *len) +{ + SLang_Array_Type *a = NULL; + SLindex_Type i; + int *nodes = NULL, t, ret = -1; + + if (!nodelist || !len) + return -1; + + t = SLang_peek_at_stack(); + if (t == SLANG_INT_TYPE) { + + nodes = malloc(sizeof(int) * 1); + if (!nodes) + goto out; + if (SLang_pop_integer(&nodes[0]) < 0) + goto out; + + *len = 1; + ret = 0; + + } else if (t == SLANG_ARRAY_TYPE) { + if (SLang_pop_array_of_type(&a, SLANG_INT_TYPE) < 0) + goto out; + if (a->num_dims > 1) + goto out; + if (a->dims[0] < 0) + goto out; + nodes = malloc(sizeof(int) * a->dims[0]); + if (!nodes) + goto out; + for (i = 0; i < a->dims[0]; i++) + SLang_get_array_element(a, &i, &nodes[i]); + + *len = a->dims[0]; + ret = 0; + } + +out: + if (a) + SLang_free_array(a); + if (ret == 0) { + *nodelist = nodes; + } else { + if (nodes) + free(nodes); + } + + return ret; +} + + +/** + get_service_property(service_name, property) + */ +char * +sl_service_property(char *svcName, char *prop) +{ + char buf[96]; + + if (get_service_property(svcName, prop, buf, sizeof(buf)) < 0) + return NULL; + + /* does this work or do I have to push a malloce'd string? */ + return strdup(buf); +} + + +/** + usage: + + stop_service(name, disable_flag); + */ +int +sl_stop_service(void) +{ + char *svcname = NULL; + int nargs, t, ret = -1; + int do_disable = 0; + + nargs = SLang_Num_Function_Args; + + /* Takes one or two args */ + if (nargs <= 0 || nargs > 2) { + SLang_verror(SL_Syntax_Error, + "%s: Wrong # of args (%d), must be 1 or 2\n", + __FUNCTION__, + nargs); + return -1; + } + + if (nargs == 2) { + t = SLang_peek_at_stack(); + if (t != SLANG_INT_TYPE) { + SLang_verror(SL_Syntax_Error, + "%s: expected type %d got %d\n", + __FUNCTION__, SLANG_INT_TYPE, t); + goto out; + } + + if (SLang_pop_integer(&do_disable) < 0) { + SLang_verror(SL_Syntax_Error, + "%s: Failed to pop integer from stack!\n", + __FUNCTION__); + goto out; + } + + --nargs; + } + + if (nargs == 1) { + t = SLang_peek_at_stack(); + if (t != SLANG_STRING_TYPE) { + SLang_verror(SL_Syntax_Error, + "%s: expected type %d got %d\n", + __FUNCTION__, + SLANG_STRING_TYPE, t); + goto out; + } + + if (SLpop_string(&svcname) < 0) { + SLang_verror(SL_Syntax_Error, + "%s: Failed to pop string from stack!\n", + __FUNCTION__); + goto out; + } + } + + /* TODO: Meat of function goes here */ + ret = service_op_stop(svcname, do_disable, _event_type); +out: + if (svcname) + free(svcname); + _user_return = ret; + return ret; +} + + +/** + usage: + + start_service(name, ordered_node_list_allowed, + node_list_illegal) + */ +int +sl_start_service(void) +{ + char *svcname = NULL; + int *pref_list = NULL, pref_list_len = 0; + int *illegal_list = NULL, illegal_list_len = 0; + int nargs, t, newowner = 0, ret = -1; + + nargs = SLang_Num_Function_Args; + + /* Takes one, two, or three */ + if (nargs <= 0 || nargs > 3) { + SLang_verror(SL_Syntax_Error, + "%s: Wrong # of args (%d), must be 1 or 2\n", + __FUNCTION__, nargs); + return -1; + } + + if (nargs == 3) { + if (get_int_array(&illegal_list, &illegal_list_len) < 0) + goto out; + --nargs; + } + + if (nargs == 2) { + if (get_int_array(&pref_list, &pref_list_len) < 0) + goto out; + --nargs; + } + + if (nargs == 1) { + /* Just get the service name */ + t = SLang_peek_at_stack(); + if (t != SLANG_STRING_TYPE) { + SLang_verror(SL_Syntax_Error, + "%s: expected type %d got %d\n", + __FUNCTION__, + SLANG_STRING_TYPE, t); + goto out; + } + + if (SLpop_string(&svcname) < 0) + goto out; + } + + /* TODO: Meat of function goes here */ + ret = service_op_start(svcname, pref_list, + pref_list_len, &newowner); + + if (ret == 0 && newowner > 0) + ret = newowner; +out: + if (svcname) + free(svcname); + if (illegal_list) + free(illegal_list); + if (pref_list) + free(pref_list); + _user_return = ret; + return ret; +} + + +/* Take an array of integers given its length and + push it on to the S/Lang stack */ +void +push_int_array(int *stuff, int len) +{ + SLindex_Type arrlen, x; + SLang_Array_Type *arr; + int i; + + arrlen = len; + arr = SLang_create_array(SLANG_INT_TYPE, 0, NULL, &arrlen, 1); + if (!arr) + return; + + x = 0; + for (x = 0; x < len; x++) { + i = stuff[x]; + SLang_set_array_element(arr, &x, &i); + } + SLang_push_array(arr, 1); +} + + +/* + Returns an array of rgmanager-visible nodes online. How cool is that? + */ +void +sl_nodes_online(void) +{ + int i, *nodes, nodecount = 0; + + cluster_member_list_t *membership = member_list(); + if (!membership) + return; + nodes = malloc(sizeof(int) * membership->cml_count); + if (!nodes) + return; + + nodecount = 0; + for (i = 0; i < membership->cml_count; i++) { + if (membership->cml_members[i].cn_member && + membership->cml_members[i].cn_nodeid != 0) { + nodes[nodecount] = membership->cml_members[i].cn_nodeid; + ++nodecount; + } + } + free_member_list(membership); + push_int_array(nodes, nodecount); + free(nodes); +} + + +/* + Returns an array of rgmanager-defined services, in type:name format + We allocate/kill this list *once* per event to ensure we don't leak + memory + */ +void +sl_service_list(void) +{ + SLindex_Type svccount = _service_list_len, x = 0; + SLang_Array_Type *svcarray; + + svcarray = SLang_create_array(SLANG_STRING_TYPE, 0, NULL, &svccount, 1); + if (!svcarray) + return; + + for (; x < _service_list_len; x++) + SLang_set_array_element(svcarray, &x, &_service_list[x]); + + SLang_push_array(svcarray, 1); +} + + +/* s_union hook (see sets.c) */ +void +sl_union(void) +{ + int *arr1 = NULL, a1len = 0; + int *arr2 = NULL, a2len = 0; + int *ret = NULL, retlen = 0; + int nargs = SLang_Num_Function_Args; + + if (nargs != 2) + return; + + /* Remember: args on the stack are reversed */ + get_int_array(&arr2, &a2len); + get_int_array(&arr1, &a1len); + s_union(arr1, a1len, arr2, a2len, &ret, &retlen); + push_int_array(ret, retlen); + if (arr1) + free(arr1); + if (arr2) + free(arr2); + if (ret) + free(ret); + return; +} + + +/* s_intersection hook (see sets.c) */ +void +sl_intersection(void) +{ + int *arr1 = NULL, a1len = 0; + int *arr2 = NULL, a2len = 0; + int *ret = NULL, retlen = 0; + int nargs = SLang_Num_Function_Args; + + if (nargs != 2) + return; + + /* Remember: args on the stack are reversed */ + get_int_array(&arr2, &a2len); + get_int_array(&arr1, &a1len); + s_intersection(arr1, a1len, arr2, a2len, &ret, &retlen); + push_int_array(ret, retlen); + if (arr1) + free(arr1); + if (arr2) + free(arr2); + if (ret) + free(ret); + return; +} + + +/* s_delta hook (see sets.c) */ +void +sl_delta(void) +{ + int *arr1 = NULL, a1len = 0; + int *arr2 = NULL, a2len = 0; + int *ret = NULL, retlen = 0; + int nargs = SLang_Num_Function_Args; + + if (nargs != 2) + return; + + /* Remember: args on the stack are reversed */ + get_int_array(&arr2, &a2len); + get_int_array(&arr1, &a1len); + s_delta(arr1, a1len, arr2, a2len, &ret, &retlen); + push_int_array(ret, retlen); + if (arr1) + free(arr1); + if (arr2) + free(arr2); + if (ret) + free(ret); + return; +} + + +/* s_subtract hook (see sets.c) */ +void +sl_subtract(void) +{ + int *arr1 = NULL, a1len = 0; + int *arr2 = NULL, a2len = 0; + int *ret = NULL, retlen = 0; + int nargs = SLang_Num_Function_Args; + + if (nargs != 2) + return; + + /* Remember: args on the stack are reversed */ + get_int_array(&arr2, &a2len); + get_int_array(&arr1, &a1len); + s_subtract(arr1, a1len, arr2, a2len, &ret, &retlen); + push_int_array(ret, retlen); + if (arr1) + free(arr1); + if (arr2) + free(arr2); + if (ret) + free(ret); + return; +} + + +/* Shuffle array (see sets.c) */ +void +sl_shuffle(void) +{ + int *arr1 = NULL, a1len = 0; + int nargs = SLang_Num_Function_Args; + + if (nargs != 1) + return; + + /* Remember: args on the stack are reversed */ + get_int_array(&arr1, &a1len); + s_shuffle(arr1, a1len); + push_int_array(arr1, a1len); + if (arr1) + free(arr1); + return; +} + + +/* Converts an int array to a string so we can log it in one shot */ +static int +array_to_string(char *buf, int buflen, int *array, int arraylen) +{ + char intbuf[16]; + int x, len, remain = buflen; + + memset(intbuf, 0, sizeof(intbuf)); + memset(buf, 0, buflen); + len = snprintf(buf, buflen - 1, "[ "); + if (len == buflen) + return -1; + + remain -= len; + for (x = 0; x < arraylen; x++) { + len = snprintf(intbuf, sizeof(intbuf) - 1, "%d ", array[x]); + remain -= len; + if (remain > 0) { + strncat(buf, intbuf, len); + } else { + return -1; + } + } + + len = snprintf(intbuf, sizeof(intbuf) - 1 , "]"); + remain -= len; + if (remain > 0) { + strncat(buf, intbuf, len); + } else { + return -1; + } + return (buflen - remain); +} + + +/** + Start at the end of the arg list and work backwards, prepending a string. + This does not support standard clulog / printf formattting; rather, we + just allow integers / strings to be mixed on the stack, figure out the + type, convert it to the right type, and prepend it on to our log message + + The last must be a log level, as specified above: + LOG_DEBUG + ... + LOG_EMERG + + This matches up with clulog / syslog mappings in the var table; the above + are constants in the S/Lang interpreter. Any number of arguments may + be provided. Examples are: + + log(LOG_INFO, "String", 1, "string2"); + + Result: String1string2 + + log(LOG_INFO, "String ", 1, " string2"); + + Result: String 1 string2 + + */ +void +sl_clulog(int level) +{ + int t, nargs, len; + //int level; + int s_intval; + char *s_strval; + int *nodes = 0, nlen = 0; + char logbuf[512]; + char tmp[256]; + int need_free; + int remain = sizeof(logbuf)-2; + + nargs = SLang_Num_Function_Args; + if (nargs < 1) + return; + + memset(logbuf, 0, sizeof(logbuf)); + memset(tmp, 0, sizeof(tmp)); + logbuf[sizeof(logbuf)-1] = 0; + logbuf[sizeof(logbuf)-2] = '\n'; + + while (nargs && (t = SLang_peek_at_stack()) >= 0 && remain) { + switch(t) { + case SLANG_ARRAY_TYPE: + if (get_int_array(&nodes, &nlen) < 0) + return; + len = array_to_string(tmp, sizeof(tmp), + nodes, nlen); + if (len < 0) { + free(nodes); + return; + } + free(nodes); + break; + case SLANG_INT_TYPE: + if (SLang_pop_integer(&s_intval) < 0) + return; + len=snprintf(tmp, sizeof(tmp) - 1, "%d", s_intval); + break; + case SLANG_STRING_TYPE: + need_free = 0; + if (SLpop_string(&s_strval) < 0) + return; + len=snprintf(tmp, sizeof(tmp) - 1, "%s", s_strval); + SLfree(s_strval); + break; + default: + need_free = 0; + len=snprintf(tmp, sizeof(tmp) - 1, + "{UnknownType %d}", t); + break; + } + + --nargs; + + if (len > remain) + return; + remain -= len; + + memcpy(&logbuf[remain], tmp, len); + } + +#if 0 + printf("<%d> %s\n", level, &logbuf[remain]); +#endif + clulog(level, &logbuf[remain]); + return; +} + + +/* Logging functions */ +void +sl_log_debug(void) +{ + sl_clulog(LOG_DEBUG); +} + + +void +sl_log_info(void) +{ + sl_clulog(LOG_INFO); +} + + +void +sl_log_notice(void) +{ + sl_clulog(LOG_NOTICE); +} + + +void +sl_log_warning(void) +{ + sl_clulog(LOG_WARNING); +} + + +void +sl_log_err(void) +{ + sl_clulog(LOG_ERR); +} + + +void +sl_log_crit(void) +{ + sl_clulog(LOG_CRIT); +} + + +void +sl_log_alert(void) +{ + sl_clulog(LOG_ALERT); +} + + +void +sl_log_emerg(void) +{ + sl_clulog(LOG_EMERG); +} + + +void +sl_die(void) +{ + _stop_processing = 1; + return; +} + + +SLang_Intrin_Fun_Type rgmanager_slang[] = +{ + MAKE_INTRINSIC_0("nodes_online", sl_nodes_online, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("service_list", sl_service_list, SLANG_VOID_TYPE), + + MAKE_INTRINSIC_SS("service_property", sl_service_property, + SLANG_STRING_TYPE), + MAKE_INTRINSIC_S("service_domain_info", sl_domain_info, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("service_stop", sl_stop_service, SLANG_INT_TYPE), + MAKE_INTRINSIC_0("service_start", sl_start_service, SLANG_INT_TYPE), + MAKE_INTRINSIC_S("service_status", sl_service_status, + SLANG_VOID_TYPE), + + /* Node list manipulation */ + MAKE_INTRINSIC_0("union", sl_union, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("intersection", sl_intersection, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("delta", sl_delta, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("subtract", sl_subtract, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("shuffle", sl_shuffle, SLANG_VOID_TYPE), + + /* Logging */ + MAKE_INTRINSIC_0("debug", sl_log_debug, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("info", sl_log_info, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("notice", sl_log_notice, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("warning", sl_log_warning, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("err", sl_log_err, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("crit", sl_log_crit, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("alert", sl_log_alert, SLANG_VOID_TYPE), + MAKE_INTRINSIC_0("emerg", sl_log_emerg, SLANG_VOID_TYPE), + + MAKE_INTRINSIC_0("stop_processing", sl_die, SLANG_VOID_TYPE), + + SLANG_END_INTRIN_FUN_TABLE +}; + + +/* Hook for when we generate a script error */ +void +rgmanager_slang_error_hook(char *errstr) +{ + /* Don't just send errstr, because it might contain + "%s" for example which would result in a crash! + plus, we like the newline :) */ + clulog(LOG_ERR, "[S/Lang] %s\n", errstr); +} + + + +/* ================================================================ + * S/Lang initialization + * ================================================================ */ +int +do_init_slang(void) +{ + SLang_init_slang(); + SLang_init_slfile(); + + if (SLadd_intrin_fun_table(rgmanager_slang, NULL) < 0) + return 1; + if (SLadd_intrin_var_table (rgmanager_vars, NULL) < 0) + return 1; + + /* TODO: Make rgmanager S/Lang conformant. Though, it + might be a poor idea to provide access to all the + S/Lang libs */ + SLpath_set_load_path(RESOURCE_ROOTDIR); + + _my_node_id = my_id(); + __sl_initialized = 1; + + SLang_Error_Hook = rgmanager_slang_error_hook; + + return 0; +} + + +/* + Execute a script / file and return the result to the caller + Log an error if we receive one. + */ +int +do_slang_run(const char *file, const char *script) +{ + int ret = 0; + + if (file) + ret = SLang_load_file((char *)file); + else + ret = SLang_load_string((char *)script); + + if (ret < 0) { + clulog(LOG_ERR, "[S/Lang] Script Execution Failure\n"); + SLang_restart(1); + } + + return ret; +} + + +int +S_node_event(const char *file, const char *script, int nodeid, + int state, int clean) +{ + int ret; + cluster_member_list_t *membership = member_list(); + + _node_name = strdup(memb_id_to_name(membership, nodeid)); + _node_state = state; + _node_clean = clean; + _node_id = nodeid; + free_member_list(membership); + + ret = do_slang_run(file, script); + + _node_state = 0; + _node_clean = 0; + _node_id = 0; + if (_node_name) + free(_node_name); + _node_name = NULL; + + return ret; +} + + +int +S_service_event(const char *file, const char *script, char *name, + int state, int owner, int last_owner) +{ + int ret; + + _service_name = name; + _service_state = (char *)rg_state_str(state); + _service_owner = owner; + _service_last_owner = last_owner; + _service_restarts_exceeded = check_restart(name); + + switch(state) { + case RG_STATE_DISABLED: + case RG_STATE_STOPPED: + case RG_STATE_FAILED: + case RG_STATE_RECOVER: + case RG_STATE_ERROR: + /* There is no owner for these states. Ever. */ + _service_owner = -1; + } + + ret = do_slang_run(file, script); + + _service_name = NULL; + _service_state = 0; + _service_owner = 0; + _service_last_owner = 0; + _service_restarts_exceeded = 0; + + return ret; +} + + +int +S_user_event(const char *file, const char *script, char *name, + int request, int arg1, int arg2, int target, msgctx_t *ctx) +{ + int ret = RG_SUCCESS; + + _service_name = name; + _service_owner = target; + _user_request = request; + _user_arg1 = arg1; + _user_arg2 = arg2; + _user_return = 0; + + ret = do_slang_run(file, script); + if (ret < 0) { + _user_return = RG_ESCRIPT; + } + + _service_name = NULL; + _service_owner = 0; + _user_request = 0; + _user_arg1 = 0; + _user_arg2 = 0; + + /* XXX Send response code to caller - that 0 should be the + new service owner, if there is one */ + if (ctx) { + if (_user_return > 0) { + /* sl_start_service() squashes return code and + node ID into one value. <0 = error, >0 = + success, return-value == node id running + service */ + send_ret(ctx, name, 0, request, _user_return); + } else { + /* return value < 0 ... pass directly back; + don't transpose */ + send_ret(ctx, name, _user_return, request, 0); + } + msg_close(ctx); + msg_free_ctx(ctx); + } + _user_return = 0; + return ret; +} + + +int +slang_do_script(event_t *pattern, event_t *ev) +{ + _event_type = ev->ev_type; + int ret = 0; + + switch(ev->ev_type) { + case EVENT_NODE: + ret = S_node_event( + pattern->ev_script_file, + pattern->ev_script, + ev->ev.node.ne_nodeid, + ev->ev.node.ne_state, + ev->ev.node.ne_clean); + break; + case EVENT_RG: + ret = S_service_event( + pattern->ev_script_file, + pattern->ev_script, + ev->ev.group.rg_name, + ev->ev.group.rg_state, + ev->ev.group.rg_owner, + ev->ev.group.rg_last_owner); + break; + case EVENT_USER: + ret = S_user_event( + pattern->ev_script_file, + pattern->ev_script, + ev->ev.user.u_name, + ev->ev.user.u_request, + ev->ev.user.u_arg1, + ev->ev.user.u_arg2, + ev->ev.user.u_target, + ev->ev.user.u_ctx); + break; + default: + break; + } + + _event_type = EVENT_NONE; + return ret; +} + + + +/** + Process an event given our event table and the event that + occurred. Note that the caller is responsible for freeing the + event - do not free (ev) ... + */ +int +slang_process_event(event_table_t *event_table, event_t *ev) +{ + int x, y; + event_t *pattern; + + if (!__sl_initialized) + do_init_slang(); + + /* Get the service list once before processing events */ + if (!_service_list || !_service_list_len) + _service_list = get_service_names(&_service_list_len); + + _stop_processing = 0; + for (x = 1; x <= event_table->max_prio; x++) { + list_for(&event_table->entries[x], pattern, y) { + if (event_match(pattern, ev)) + slang_do_script(pattern, ev); + if (_stop_processing) + goto out; + } + } + + /* Default level = 0 */ + list_for(&event_table->entries[0], pattern, y) { + if (event_match(pattern, ev)) + slang_do_script(pattern, ev); + if (_stop_processing) + goto out; + } + +out: + /* Free the service list */ + if (_service_list) { + for(x = 0; x < _service_list_len; x++) { + free(_service_list[x]); + } + free(_service_list); + _service_list = NULL; + _service_list_len = 0; + } + + return 0; +} diff --git a/rgmanager/src/daemons/test.c b/rgmanager/src/daemons/test.c index fa77edd..55dc63d 100644 --- a/rgmanager/src/daemons/test.c +++ b/rgmanager/src/daemons/test.c @@ -1,3 +1,21 @@ +/* + Copyright Red Hat, Inc. 2004-2006 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ #include #include #include @@ -66,20 +84,22 @@ test_func(int argc, char **argv) fod_t *domains = NULL; resource_rule_t *rulelist = NULL, *currule; resource_t *reslist = NULL, *curres; - resource_node_t *tree = NULL; + resource_node_t *tree = NULL, *tmp, *rn = NULL; int ccsfd, ret = 0, rules = 0; + event_table_t *events = NULL; fprintf(stderr,"Running in test mode.\n"); conf_setconfig(argv[1]); ccsfd = ccs_lock(); - if (ccsfd == FAIL) { + if (ccsfd < 0) { printf("Error parsing %s\n", argv[1]); goto out; } load_resource_rules(agentpath, &rulelist); construct_domains(ccsfd, &domains); + construct_events(ccsfd, &events); load_resources(ccsfd, &reslist, &rulelist); build_resource_tree(ccsfd, &tree, &rulelist, &reslist); @@ -114,6 +134,11 @@ test_func(int argc, char **argv) printf("=== Failover Domains ===\n"); print_domains(&domains); } + + if (events) { + printf("=== Event Triggers ===\n"); + print_events(events); + } } ccs_unlock(ccsfd); @@ -128,6 +153,13 @@ test_func(int argc, char **argv) goto out; } + list_do(&tree, tmp) { + if (tmp->rn_resource == curres) { + rn = tmp; + break; + } + } while (!list_done(&tree, tmp)); + if (!strcmp(argv[1], "start")) { printf("Starting %s...\n", argv[3]); @@ -147,12 +179,29 @@ test_func(int argc, char **argv) } printf("Stop of %s complete\n", argv[3]); goto out; + } else if (!strcmp(argv[1], "migrate")) { + printf("Migrating %s to %s...\n", argv[3], argv[4]); + + #if 0 + if (!group_migratory(curres)) { + printf("No can do\n"); + ret = -1; + goto out; + } + #endif + + if (res_exec(rn, RS_MIGRATE, argv[4], 0)) { + ret = -1; + goto out; + } + printf("Migration of %s complete\n", argv[3]); + goto out; } else if (!strcmp(argv[1], "status")) { printf("Checking status of %s...\n", argv[3]); - if (res_status(&tree, curres, NULL)) { + ret = res_status(&tree, curres, NULL); + if (ret) { printf("Status check of %s failed\n", argv[3]); - ret = -1; goto out; } printf("Status of %s is good\n", argv[3]); @@ -160,6 +209,7 @@ test_func(int argc, char **argv) } out: + deconstruct_events(&events); deconstruct_domains(&domains); destroy_resource_tree(&tree); destroy_resources(&reslist); @@ -175,7 +225,9 @@ tree_delta_test(int argc, char **argv) resource_rule_t *rulelist = NULL, *currule, *rulelist2 = NULL; resource_t *reslist = NULL, *curres, *reslist2 = NULL; resource_node_t *tree = NULL, *tree2 = NULL; - int ccsfd, ret = 0; + resource_node_t *tn; + int ccsfd, ret = 0, need_init, need_kill; + char rg[64]; if (argc < 2) { printf("Operation requires two arguments\n"); @@ -234,6 +286,57 @@ tree_delta_test(int argc, char **argv) print_resource_tree(&tree); printf("=== New Resource Tree ===\n"); print_resource_tree(&tree2); + printf("=== Operations (down-phase) ===\n"); + list_do(&tree, tn) { + res_build_name(rg, sizeof(rg), tn->rn_resource); + /* Set state to uninitialized if we're killing a RG */ + need_init = 0; + + /* Set state to uninitialized if we're killing a RG */ + need_kill = 0; + if (tn->rn_resource->r_flags & RF_NEEDSTOP) { + need_kill = 1; + printf("[kill] "); + } + + if (!tn->rn_child && ((tn->rn_resource->r_rule->rr_flags & + RF_DESTROY) == 0) && group_migratory(&reslist, &tree, rg) && + need_kill == 1) { + /* Do something smart here: flip state? */ + printf("[no-op] %s was removed from the config, but I am not stopping it.\n", + rg); + continue; + } + + res_condstop(&tn, tn->rn_resource, NULL); + } while (!list_done(&tree, tn)); + printf("=== Operations (up-phase) ===\n"); + list_do(&tree2, tn) { + res_build_name(rg, sizeof(rg), tn->rn_resource); + /* New RG. We'll need to initialize it. */ + need_init = 0; + if (!(tn->rn_resource->r_flags & RF_RECONFIG) && + (tn->rn_resource->r_flags & RF_NEEDSTART)) + need_init = 1; + + if (need_init) { + printf("[init] "); + } + + if (!tn->rn_child && ((tn->rn_resource->r_rule->rr_flags & + RF_INIT) == 0) && group_migratory(&reslist2, &tree2, rg) && + need_init == 1) { + /* Do something smart here? */ + printf("[noop] %s was added, but I am not initializing it\n", rg); + continue; + } + + if (need_init) { + res_stop(&tn, tn->rn_resource, NULL); + } else { + res_condstart(&tn, tn->rn_resource, NULL); + } + } while (!list_done(&tree2, tn)); out: destroy_resource_tree(&tree2); @@ -289,6 +392,7 @@ main(int argc, char **argv) goto out; } else if (!strcmp(argv[1], "delta")) { shift(); + _no_op_mode(1); ret = tree_delta_test(argc, argv); goto out; } else { @@ -312,5 +416,5 @@ main(int argc, char **argv) out: xmlCleanupParser(); malloc_dump_table(); - return 0; + return ret; } diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile index d543468..c1f4a71 100644 --- a/rgmanager/src/resources/Makefile +++ b/rgmanager/src/resources/Makefile @@ -21,11 +21,12 @@ RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \ script.sh netfs.sh clusterfs.sh smb.sh \ apache.sh openldap.sh samba.sh mysql.sh \ postgres-8.sh tomcat-5.sh lvm.sh lvm_by_lv.sh lvm_by_vg.sh \ - SAPInstance SAPDatabase oracledb.sh + SAPInstance SAPDatabase named.sh \ + oracledb.sh METADATA=apache.metadata openldap.metadata samba.metadata \ mysql.metadata postgres-8.metadata tomcat-5.metadata \ - lvm.metadata + named.metadata lvm.metadata TARGETS=${RESOURCES} ocf-shellfuncs svclib_nfslock @@ -34,6 +35,9 @@ UTIL_TARGETS= \ utils/httpd-parse-config.pl utils/tomcat-parse-config.pl \ utils/member_util.sh +EVENT_TARGETS= \ + default_event_script.sl + all: install: all @@ -44,6 +48,7 @@ install: all install $(TARGETS) ${sharedir} install $(UTIL_TARGETS) ${sharedir}/utils install -m 644 $(METADATA) ${sharedir} + install -m 644 $(EVENT_TARGETS) ${sharedir} uninstall: ${UNINSTALL} ${UTIL_TARGETS} ${sharedir}/utils diff --git a/rgmanager/src/resources/clusterfs.sh b/rgmanager/src/resources/clusterfs.sh index 0bf14f0..34a5590 100755 --- a/rgmanager/src/resources/clusterfs.sh +++ b/rgmanager/src/resources/clusterfs.sh @@ -366,7 +366,7 @@ mountInUse () { typeset junk if [ $# -ne 2 ]; then - logAndPrint $LOG_ERR "Usage: mountInUse device mount_point". + ocf_log err "Usage: mountInUse device mount_point". return $FAIL fi @@ -444,14 +444,14 @@ isAlive() declare rw if [ $# -ne 1 ]; then - logAndPrint $LOG_ERR "Usage: isAlive mount_point" + ocf_log err "Usage: isAlive mount_point" return $FAIL fi mount_point=$1 test -d $mount_point if [ $? -ne 0 ]; then - logAndPrint $LOG_ERR "$mount_point is not a directory" + ocf_log err "$mount_point is not a directory" return $FAIL fi @@ -738,7 +738,7 @@ Cannot mount $dev on $mp, the device or mount point is already in use!" # # Mount the device # - logAndPrint $LOG_DEBUG "mount $fstype_option $mount_options $dev $mp" + ocf_log debug "mount $fstype_option $mount_options $dev $mp" mount $fstype_option $mount_options $dev $mp ret_val=$? if [ $ret_val -ne 0 ]; then @@ -761,6 +761,7 @@ stopFilesystem() { typeset -i try=1 typeset -i max_tries=3 # how many times to try umount typeset -i sleep_time=2 # time between each umount failure + typeset -i refs=0 typeset done="" typeset umount_failed="" typeset force_umount="" @@ -815,6 +816,18 @@ stop: Could not match $OCF_RESKEY_device with a real device" esac fi + # + # Check the rgmanager-supplied reference count if one exists. + # If the reference count is <= 1, we can safely proceed + # + if [ -n "$OCF_RESKEY_RGMANAGER_meta_refcnt" ]; then + refs=$OCF_RESKEY_RGMANAGER_meta_refcnt + if [ $refs -gt 1 ]; then + ((refs--)) + ocf_log debug "Not unmounting $OCF_RESOURCE_INSTANCE - still in use by $refs other service(s)" + return $OCF_SUCCESS + fi + fi # # Always do this hackery on clustered file systems. @@ -825,10 +838,10 @@ stop: Could not match $OCF_RESKEY_device with a real device" mkdir -p $mp/.clumanager/statd pkill -KILL -x lockd # Copy out the notify list; our - # IPs are already torn down - if notify_list_store $mp/.clumanager/statd; then - notify_list_broadcast $mp/.clumanager/statd - fi + # IPs are already torn down + if notify_list_store $mp/.clumanager/statd; then + notify_list_broadcast $mp/.clumanager/statd + fi fi # Always invalidate buffers on clusterfs resources @@ -857,7 +870,7 @@ stop: Could not match $OCF_RESKEY_device with a real device" sync; sync; sync ocf_log info "unmounting $dev ($mp)" - umount $dev + umount $mp if [ $? -eq 0 ]; then umount_failed= done=$YES @@ -907,8 +920,20 @@ stop: Could not match $OCF_RESKEY_device with a real device" case $1 in start) - startFilesystem - exit $? + declare tries=0 + declare rv + + while [ $tries -lt 3 ]; do + startFilesystem + rv=$? + if [ $rv -eq 0 ]; then + exit 0 + fi + + ((tries++)) + sleep 3 + done + exit $rv ;; stop) stopFilesystem @@ -916,16 +941,12 @@ stop) ;; status|monitor) isMounted ${OCF_RESKEY_device} ${OCF_RESKEY_mountpoint} - if [ $? -ne $YES ]; then - ocf_log err "fs:${OCF_RESKEY_name}: ${OCF_RESKEY_device} is not mounted on ${OCF_RESKEY_mountpoint}" - exit $OCF_ERR_GENERIC - fi + [ $? -ne $YES ] && exit $OCF_ERR_GENERIC isAlive ${OCF_RESKEY_mountpoint} - [ $? -eq $YES ] && exit 0 - - ocf_log err "clusterfs:${OCF_RESKEY_name}: Mount point is not accessible!" - exit $OCF_ERR_GENERIC + [ $? -ne $YES ] && exit $OCF_ERR_GENERIC + + exit 0 ;; restart) stopFilesystem diff --git a/rgmanager/src/resources/default_event_script.sl b/rgmanager/src/resources/default_event_script.sl new file mode 100644 index 0000000..e961266 --- /dev/null +++ b/rgmanager/src/resources/default_event_script.sl @@ -0,0 +1,314 @@ +define node_in_set(node_list, node) +{ + variable x, len; + + len = length(node_list); + for (x = 0; x < len; x++) { + if (node_list[x] == node) + return 1; + } + + return 0; +} + +define move_or_start(service, node_list) +{ + variable len; + variable state, owner; + variable depends; + + depends = service_property(service, "depend"); + if (depends != "") { + (owner, state) = service_status(depends); + if (owner < 0) { + debug(service, " is not runnable; dependency not met"); + return ERR_DEPEND; + } + } + + (owner, state) = service_status(service); + debug("Evaluating ", service, " state=", state, " owner=", owner); + + len = length(node_list); + if (len == 0) { + debug(service, " is not runnable"); + return ERR_DOMAIN; + } + + if (((event_type != EVENT_USER) and (state == "disabled")) or (state == "failed")) { + % + % Commenting out this block will -not- allow you to + % recover failed services from event scripts. Sorry. + % All it will get you is a false log message about + % starting this service. + % + % You may enable disabled services, but I recommend + % against it. + % + debug(service, " is not runnable"); + return -1; + } + + if (node_list[0] == owner) { + debug(service, " is already running on best node"); + return ERR_RUNNING; + } + + if ((owner >= 0) and (node_in_set(node_list, owner) == 1)) { + notice("Moving ", service, " from ", owner, + " to ", node_list); + if (service_stop(service) < 0) { + return ERR_ABORT; + } + } else { + notice("Starting ", service, " on ", node_list); + } + + return service_start(service, node_list); +} + + +% +% Returns the set of online nodes in preferred/shuffled order which +% are allowed to run this service. Gives highest preference to current +% owner if nofailback is specified. +% +define allowed_nodes(service) +{ + variable anodes; + variable online; + variable nodes_domain; + variable ordered, restricted, nofailback; + variable state, owner; + variable depends; + + (nofailback, restricted, ordered, nodes_domain) = + service_domain_info(service); + + (owner, state) = service_status(service); + + anodes = nodes_online(); + + % Shuffle the array so we don't start all services on the same + % node. TODO - add RR, Least-services, placement policies... + online = shuffle(anodes); + + if (restricted == 1) { + anodes = intersection(nodes_domain, online); + } else { + % Ordered failover domains (nodes_domain) unioned with the + % online nodes basically just reorders the online node list + % according to failover domain priority rules. + anodes = union(intersection(nodes_domain, online), + online); + } + + if ((nofailback == 1) or (ordered == 0)) { + + if ((owner < 0) or (node_in_set(anodes, owner) == 0)) { + return anodes; + } + + % Because union takes left as priority, we can + % return the union of the current owner with the + % allowed node list. This means the service will + % remain on the same node it's currently on. + return union(owner, anodes); + } + + return anodes; +} + + +define default_node_event_handler() +{ + variable services = service_list(); + variable x; + variable nodes; + + % debug("Executing default node event handler"); + for (x = 0; x < length(services); x++) { + nodes = allowed_nodes(services[x]); + ()=move_or_start(services[x], nodes); + } +} + + +define default_service_event_handler() +{ + variable services = service_list(); + variable x; + variable depends; + variable depend_mode; + variable policy; + variable nodes; + variable tmp; + variable owner; + variable state; + + % debug("Executing default service event handler"); + + if (service_state == "recovering") { + + policy = service_property(service_name, "recovery"); + debug("Recovering", + " Service: ", service_name, + " Last owner: ", service_last_owner, + " Policy: ", policy, + " RTE: ", service_restarts_exceeded); + + if (policy == "disable") { + () = service_stop(service_name, 1); + return; + } + + nodes = allowed_nodes(service_name); + if (policy == "restart" and service_restarts_exceeded == 0) { + nodes = union(service_last_owner, nodes); + } else { + % relocate + tmp = subtract(nodes, service_last_owner); + if (length(tmp) == 0) { + () = service_stop(service_name,0); + return; + } + + nodes = union(tmp, service_last_owner); + } + + ()=move_or_start(service_name, nodes); + + return; + } + + for (x = 0; x < length(services); x++) { + if (service_name == services[x]) { + % don't do anything to ourself! + continue; + } + + % + % Simplistic dependency handling + % + depends = service_property(services[x], "depend"); + depend_mode = service_property(services[x], "depend_mode"); + + % No dependency; do nothing + if (depends != service_name) { + continue; + } + + (owner, state) = service_status(services[x]); + if ((service_state == "started") and (owner < 0) and + (state == "stopped")) { + info("Dependency met; starting ", services[x]); + nodes = allowed_nodes(services[x]); + ()=move_or_start(services[x], nodes); + } + + % service died - stop service(s) that depend on the dead + if ((service_owner < 0) and (owner >= 0) and + (depend_mode != "soft")) { + info("Dependency lost; stopping ", services[x]); + ()=service_stop(services[x]); + } + } +} + +define default_config_event_handler() +{ + % debug("Executing default config event handler"); +} + +define default_user_event_handler() +{ + variable ret; + variable nodes; + variable reordered; + variable x; + variable target = user_target; + variable found = 0; + variable owner, state; + + nodes = allowed_nodes(service_name); + (owner, state) = service_status(service_name); + + if (user_request == USER_RESTART) { + + if (owner >= 0) { + reordered = union(owner, nodes); + nodes = reordered; + } + + notice("Stopping ", service_name, " for relocate to ", nodes); + + found = service_stop(service_name); + if (found < 0) { + return ERR_ABORT; + } + + ret = move_or_start(service_name, nodes); + + } else if ((user_request == USER_RELOCATE) or + (user_request == USER_ENABLE)) { + + if (user_target > 0) { + for (x = 0; x < length(nodes); x++) { + % + % Put the preferred node at the front of the + % list for a user-relocate operation + % + if (nodes[x] == user_target) { + reordered = union(user_target, nodes); + nodes = reordered; + found = 1; + } + } + + if (found == 0) { + warning("User specified node ", user_target, + " is offline"); + } + } + + if ((owner >= 0) and (user_request == USER_RELOCATE)) { + if (service_stop(service_name) < 0) { + return ERR_ABORT; + } + + % + % The current owner shouldn't be the default + % for a relocate operation + % + reordered = subtract(nodes, owner); + nodes = union(reordered, owner); + } + + ret = move_or_start(service_name, nodes); + + } else if (user_request == USER_DISABLE) { + + ret = service_stop(service_name, 1); + + } else if (user_request == USER_STOP) { + + ret = service_stop(service_name); + + } + + % + % todo - migrate + % + + return ret; +} + +if (event_type == EVENT_NODE) + default_node_event_handler(); +if (event_type == EVENT_SERVICE) + default_service_event_handler(); +if (event_type == EVENT_CONFIG) + default_config_event_handler(); +if (event_type == EVENT_USER) + user_return=default_user_event_handler(); + diff --git a/rgmanager/src/resources/ip.sh b/rgmanager/src/resources/ip.sh index 517c4fd..b76bafc 100755 --- a/rgmanager/src/resources/ip.sh +++ b/rgmanager/src/resources/ip.sh @@ -444,22 +444,14 @@ findSlaves() return $OCF_ERR_GENERIC fi - ## Strip possible VLAN (802.1q) suffixes - ## - Roland Gadinger - mastif=${mastif%%.*} + ## Strip possible VLAN (802.1q) suffixes + ## - Roland Gadinger + mastif=${mastif%%.*} while read line; do set - $line - while [ $# -gt 0 ]; do - case $1 in - eth*:) - interfaces="${1/:/} $interfaces" - continue 2 - ;; - esac - shift - done - done < <( /sbin/ip link list | grep "master $mastif" ) + interfaces="${2/:/} $interfaces" + done < <( /sbin/ip -o link list | grep "master $mastif" ) echo $interfaces } diff --git a/rgmanager/src/resources/ocf-shellfuncs b/rgmanager/src/resources/ocf-shellfuncs index eb0147f..98156c0 100755 --- a/rgmanager/src/resources/ocf-shellfuncs +++ b/rgmanager/src/resources/ocf-shellfuncs @@ -174,6 +174,10 @@ ocf_log() { esac pretty_echo $__OCF_PRIO "$__OCF_MSG" + + if [ -z "`which clulog 2> /dev/null`" ]; then + return 0 + fi clulog -p $__LOG_PID -n $__LOG_NAME \ -s $__OCF_PRIO_N "$__OCF_MSG" } diff --git a/rgmanager/src/resources/script.sh b/rgmanager/src/resources/script.sh index 9a9455c..0141c80 100755 --- a/rgmanager/src/resources/script.sh +++ b/rgmanager/src/resources/script.sh @@ -115,5 +115,5 @@ ${OCF_RESKEY_file} $1 declare -i rv=$? if [ $rv -ne 0 ]; then ocf_log err "script:$OCF_RESKEY_name: $1 of $OCF_RESKEY_file failed (returned $rv)" - return $OCF_ERR_GENERIC + exit $OCF_ERR_GENERIC fi diff --git a/rgmanager/src/resources/service.sh b/rgmanager/src/resources/service.sh index da89301..339657d 100755 --- a/rgmanager/src/resources/service.sh +++ b/rgmanager/src/resources/service.sh @@ -1,8 +1,26 @@ #!/bin/bash # -# Dummy OCF script for resource group; the OCF spec doesn't support abstract -# resources. ;( +# Copyright Red Hat, Inc. 2004-2006 +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, +# MA 02139, USA. +# + +# +# Dummy OCF script for resource group # # Grab nfs lock tricks if available @@ -38,7 +56,7 @@ meta_data() - + Fail over domains define lists of cluster members to try in the event that a resource group fails. @@ -49,7 +67,7 @@ meta_data() - + If set to yes, this resource group will automatically be started after the cluster forms a quorum. If set to no, this resource @@ -59,10 +77,10 @@ meta_data() Automatic start after quorum formation - + - + If set to yes, the last owner will reboot if this resource group fails to stop cleanly, thus allowing the resource @@ -74,10 +92,10 @@ meta_data() Reboot if stop phase fails - + - + If set, this resource group will only relocate to nodes which have no other resource groups running in the @@ -91,7 +109,7 @@ meta_data() Exclusive resource group - + @@ -107,10 +125,10 @@ meta_data() Enable NFS lock workarounds - + - + This currently has three possible options: "restart" tries to restart failed parts of this resource group locally before @@ -123,8 +141,60 @@ meta_data() Failure recovery policy + + + + + + Top-level service this depends on, in "service:name" format. + + + Service dependency; will not start without the specified + service running. + + + + + Dependency mode + + + Service dependency mode. + hard - This service is stopped/started if its dependency + is stopped/started + soft - This service only depends on the other service for + initial startip. If the other service stops, this + service is not stopped. + + + + + + + Maximum restarts for this service. + + + Maximum restarts for this service. + + + + + + + Restart expiration time + + + Restart expiration time. A restart is forgotten + after this time. When combined with the max_restarts + option, this lets administrators specify a threshold + for when to fail over services. If max_restarts + is exceeded in this given expiration time, the service + is relocated instead of restarted again. + + + + @@ -135,10 +205,11 @@ meta_data() + - + @@ -149,7 +220,7 @@ meta_data() - + @@ -166,6 +237,7 @@ EOT # case $1 in start) + [ -d "/var/run/cluster/rgmanager" ] && touch "/var/run/cluster/rgmanager/$OCF_RESOURCE_INSTANCE" # # XXX If this is set, we kill lockd. If there is no # child IP address, then clients will NOT get the reclaim @@ -180,6 +252,7 @@ case $1 in exit 0 ;; stop) + [ -d "/var/run/cluster/rgmanager" ] && rm -f "/var/run/cluster/rgmanager/$OCF_RESOURCE_INSTANCE" exit 0 ;; recover|restart) @@ -195,7 +268,10 @@ case $1 in meta_data exit 0 ;; - verify-all) + validate-all) + exit 0 + ;; + reconfig) exit 0 ;; *) diff --git a/rgmanager/src/resources/svclib_nfslock b/rgmanager/src/resources/svclib_nfslock index de996b1..2101e1e 100644 --- a/rgmanager/src/resources/svclib_nfslock +++ b/rgmanager/src/resources/svclib_nfslock @@ -1,5 +1,22 @@ #!/bin/bash # +# Copyright Red Hat Inc., 2006 +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, +# MA 02139, USA. +# # Do reclaim-broadcasts when we kill lockd during shutdown/startup # of a cluster service. # @@ -163,6 +180,17 @@ notify_list_broadcast() declare lockd_pid=$(pidof lockd) declare nl_dir=$1 + # First of all, send lockd a SIGKILL. We hope nfsd is running. + # If it is, this will cause lockd to reset the grace period for + # lock reclaiming. + if [ -n "$lockd_pid" ]; then + ocf_log info "Asking lockd to drop locks (pid $lockd_pid)" + kill -9 $lockd_pid + else + ocf_log warning "lockd not running; cannot notify clients" + return 1 + fi + while read dev family addr maskbits; do if [ "$family" != "inet" ]; then continue diff --git a/rgmanager/src/resources/utils/named-parse-config.pl b/rgmanager/src/resources/utils/named-parse-config.pl new file mode 100644 index 0000000..4ac39c3 --- /dev/null +++ b/rgmanager/src/resources/utils/named-parse-config.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl -w + +## +## parse named.conf (from stdin) and add options from cluster.conf +## +## ./named-parse-config.pl "directory" "pid-file" "listen-on" +## +use strict; + +if ($#argv < 2) { + die ("Not enough arguments"); +} + +while (my $line = ) { + chomp($line); + $line =~ s/(.*?)\s*$/$1/; + if ($line =~ /^\s*options\s+\{/) { + print $line, "\n"; + print "\tdirectory \"$ARGV[0]\";\n"; + print "\tpid-file \"$ARGV[1]\";\n"; + print "\tlisten-on { $ARGV[2] };\n"; + } else { + print $line, "\n"; + } +} + diff --git a/rgmanager/src/resources/utils/ra-skelet.sh b/rgmanager/src/resources/utils/ra-skelet.sh index 67630e2..5530ae6 100644 --- a/rgmanager/src/resources/utils/ra-skelet.sh +++ b/rgmanager/src/resources/utils/ra-skelet.sh @@ -65,7 +65,7 @@ stop_generic() if [ ! -d "/proc/$pid" ]; then return 0; fi - + kill -TERM "$pid" if [ $? -ne 0 ]; then hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 20:14:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 20:14:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-14-gb2fb101 Message-ID: <20080311201414.30036.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b2fb1017061f86f02f3cd864e10b44e9fa347441 The branch, RHEL4 has been updated via b2fb1017061f86f02f3cd864e10b44e9fa347441 (commit) via edf5a1e10e95e0b02afbbc1e0a260141b128695e (commit) from db6a74a9900257848aa4c07256b77b2d10a7db13 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b2fb1017061f86f02f3cd864e10b44e9fa347441 Author: Lon Hohberger Date: Tue Mar 11 16:14:01 2008 -0400 Revert "Commit phase 1 of update from rhel5 branch" This reverts commit df101a4507641607e5869f2f15c05cb1be6e0639. This wasn't finished; I committed from the wrong branch. commit edf5a1e10e95e0b02afbbc1e0a260141b128695e Author: Lon Hohberger Date: Tue Mar 11 16:13:32 2008 -0400 Revert "Merge, part 2" This reverts commit 43571d7af75bdb6a0b19d40048da1491b6499efb. This wasn't finished. I pushed from the wrong branch :( ----------------------------------------------------------------------- Summary of changes: rgmanager/event-script.txt | 311 ----- rgmanager/include/clulog.h | 2 +- rgmanager/include/event.h | 145 --- rgmanager/include/members.h | 35 - rgmanager/include/reslist.h | 65 +- rgmanager/include/restart_counter.h | 32 - rgmanager/include/rg_queue.h | 26 +- rgmanager/include/sets.h | 39 - rgmanager/man/clusvcadm.8 | 13 +- rgmanager/rgmanager/event-script.txt | 311 ----- rgmanager/src/clulib/rg_strings.c | 208 +--- rgmanager/src/clulib/sets.c | 370 ------ rgmanager/src/clulib/signals.c | 18 - rgmanager/src/clulib/tmgr.c | 128 -- rgmanager/src/daemons/event_config.c | 541 --------- rgmanager/src/daemons/fo_domain.c | 113 +-- rgmanager/src/daemons/groups.c | 366 +----- rgmanager/src/daemons/main.c | 2 +- rgmanager/src/daemons/reslist.c | 92 +-- rgmanager/src/daemons/resrules.c | 101 +-- rgmanager/src/daemons/restart_counter.c | 205 ---- rgmanager/src/daemons/restree.c | 532 +++++---- rgmanager/src/daemons/rg_event.c | 573 --------- rgmanager/src/daemons/service_op.c | 204 ---- rgmanager/src/daemons/slang_event.c | 1264 -------------------- rgmanager/src/daemons/test.c | 116 +-- rgmanager/src/resources/Makefile | 9 +- rgmanager/src/resources/clusterfs.sh | 59 +- rgmanager/src/resources/default_event_script.sl | 314 ----- rgmanager/src/resources/ocf-shellfuncs | 4 - rgmanager/src/resources/script.sh | 2 +- rgmanager/src/resources/service.sh | 104 +-- rgmanager/src/resources/svclib_nfslock | 28 - .../src/resources/utils/named-parse-config.pl | 26 - rgmanager/src/resources/utils/ra-skelet.sh | 2 +- 35 files changed, 506 insertions(+), 5854 deletions(-) delete mode 100644 rgmanager/event-script.txt delete mode 100644 rgmanager/include/event.h delete mode 100644 rgmanager/include/members.h delete mode 100644 rgmanager/include/restart_counter.h delete mode 100644 rgmanager/include/sets.h delete mode 100644 rgmanager/rgmanager/event-script.txt delete mode 100644 rgmanager/src/clulib/sets.c delete mode 100644 rgmanager/src/clulib/tmgr.c delete mode 100644 rgmanager/src/daemons/event_config.c delete mode 100644 rgmanager/src/daemons/restart_counter.c delete mode 100644 rgmanager/src/daemons/rg_event.c delete mode 100644 rgmanager/src/daemons/service_op.c delete mode 100644 rgmanager/src/daemons/slang_event.c delete mode 100644 rgmanager/src/resources/default_event_script.sl delete mode 100644 rgmanager/src/resources/utils/named-parse-config.pl diff --git a/rgmanager/event-script.txt b/rgmanager/event-script.txt deleted file mode 100644 index 00a8b4c..0000000 --- a/rgmanager/event-script.txt +++ /dev/null @@ -1,311 +0,0 @@ -TODO: -* Return correct error codes to clusvcadm (currently it always returns - "Unknown") -* Write glue for 'migrate' operations and migrate-enabled services - -Basic configuration specification: - - - - - - - - - (note, all service ops and such deal with node ID, not - with node names) - - - - - - service_owner="3"/> - - - service_owner="3"/> - - - - ... - - -General globals available from all scripts: - - node_self - local node ID - event_type - event class, either: - EVENT_NONE - unspecified / unknown - EVENT_NODE - node transition - EVENT_SERVICE - service transition - EVENT_USER - a user-generated request - EVENT_CONFIG - [NOT CONFIGURABLE] - -Node event globals (i.e. when event_type == EVENT_NODE): - - node_id - node ID which is transitioning - node_name - name of node which is transitioning - node_state - new node state (NODE_ONLINE or NODE_OFFLINE, or if you prefer, - 1 or 0, respectively) - node_clean - 0 if the node has not been fenced, 1 if the node has been - fenced - -Service event globals (i.e. when event_type == EVENT_SERVICE): - - service_name - Name of service which transitioned - service_state - new state of service - service_owner - new owner of service (or <0 if service is no longer - running) - service_last_owner - Last owner of service if known. Used for when - service_state = "recovering" generally, in order to - apply restart/relocate/disable policy. - -User event globals (i.e. when event_type == EVENT_USER): - - service_name - service to perform request upon - user_request - request to perform (USER_ENABLE, USER_DISABLE, - USER_STOP, USER_RELOCATE, [TODO] USER_MIGRATE) - user_target - target node ID if applicable - - -Scripting functions - Informational: - - node_list = nodes_online(); - - Returns a list of all online nodes. - - service_list = service_list(); - - Returns a list of all configured services. - - (restarts, last_owner, owner, state) = service_status(service_name); - - Returns the state, owner, last_owner, and restarts. Note that - all return values are optional, but are right-justified per S-Lang - specification. This means if you only want the 'state', you can use: - - (state) = service_status(service_name); - - However, if you need the restart count, you must provide all four - return values as above. - - (nofailback, restricted, ordered, node_list) = - service_domain_info(service_name); - - Returns the failover domain specification, if it exists, for the - specified service name. The node list returned is an ordered list - according to priority levels. In the case of unordered domains, - the ordering of the returned list is pseudo-random. - -Scripting functions - Operational: - - err = service_start(service_name, node_list, [avoid_list]); - - Start a non-running, (but runnable, i.e. not failed) - service on the first node in node_list. Failing that, start it on - the second node in node_list and so forth. One may also specify - an avoid list, but it's better to just use the subtract() function - below. If the start is successful, the node ID running the service - is returned. If the start is unsuccessful, a value < 0 is returned. - - err = service_stop(service_name, [0 = stop, 1 = disable]); - - Stop a running service. The second parameter is optional, and if - non-zero is specified, the service will enter the disabled state. - - ... stuff that's not done but needs to be: - - err = service_relocate(service_name, node_list); - - Move a running service to the specified node_list in order of - preference. In the case of VMs, this is actually a migrate-or- - relocate operation. - -Utility functions - Node list manipulation - - node_list = union(left_node_list, right_node_list); - - Calculates the union between the two node list, removing duplicates - and preserving ordering according to left_node_list. Any added - values from right_node_list will appear in their order, but - after left_node_list in the returned list. - - node_list = intersection(left_node_list, right_node_list); - - Calculates the intersection (items in both lists) between the two - node lists, removing duplicates and preserving ordering according - to left_node_list. Any added values from right_node_list will - appear in their order, but after left_node_list in the returned list. - - node_list = delta(left_node_list, right_node_list); - - Calculates the delta (items not in both lists) between the two - node lists, removing duplicates and preserving ordering according - to left_node_list. Any added values from right_node_list will - appear in their order, but after left_node_list in the returned list. - - node_list = subtract(left_node_list, right_node_list); - - Removes any duplicates as well as items specified in right_node_list - from left_node_list. Example: - - all_nodes = nodes_online(); - allowed_nodes = subtract(nodes_online, node_to_avoid); - - node_list = shuffle(node_list_old); - - Rearranges the contents of node_list_old randomly and returns a - new node list. - -Utility functions - Logging: - - debug(item1, item2, ...); LOG_DEBUG level - info(...); LOG_INFO level - notice(...); LOG_NOTICE level - warning(...); LOG_WARNING level - err(...); LOG_ERR level - crit(...); LOG_CRIT level - alert(...); LOG_ALERT level - emerg(...); LOG_EMERG level - - items - These can be strings, integer lists, or integers. Logging - string lists is not supported. - - level - the level is consistent with syslog(8) - - stop_processing(); - - Calling this function will prevent further event scripts from being - executed on a particular event. Call this script if, for example, - you do not wish for the default event handler to process the event. - - Note: This does NOT terminate the caller script; that is, the - script being executed will run to completion. - -Event scripts are written in a language called S-Lang; documentation specifics -about the language are available at http://www.s-lang.org - -Example script (creating a follows-but-avoid-after-start behavior): -% -% If the main queue server and replication queue server are on the same -% node, relocate the replication server somewhere else if possible. -% -define my_sap_event_trigger() -{ - variable state, owner_rep, owner_main; - variable nodes, allowed; - - % - % If this was a service event, don't execute the default event - % script trigger after this script completes. - % - if (event_type == EVENT_SERVICE) { - stop_processing(); - } - - (owner_main, state) = service_status("service:main_queue"); - (owner_rep, state) = service_status("service:replication_server"); - - if ((event_type == EVENT_NODE) and (owner_main == node_id) and - (node_state == NODE_OFFLINE) and (owner_rep >= 0)) { - % - % uh oh, the owner of the main server died. Restart it - % on the node running the replication server - % - notice("Starting Main Queue Server on node ", owner_rep); - ()=service_start("service:main_queue", owner_rep); - return; - } - - % - % S-Lang doesn't short-circuit prior to 2.1.0 - % - if ((owner_main >= 0) and - ((owner_main == owner_rep) or (owner_rep < 0))) { - - % - % Get all online nodes - % - nodes = nodes_online(); - - % - % Drop out the owner of the main server - % - allowed = subtract(nodes, owner_main); - if ((owner_rep >= 0) and (length(allowed) == 0)) { - % - % Only one node is online and the rep server is - % already running. Don't do anything else. - % - return; - } - - if ((length(allowed) == 0) and (owner_rep < 0)) { - % - % Only node online is the owner ... go ahead - % and start it, even though it doesn't increase - % availability to do so. - % - allowed = owner_main; - } - - % - % Move the replication server off the node that is - % running the main server if a node's available. - % - if (owner_rep >= 0) { - ()=service_stop("service:replication_server"); - } - ()=service_start("service:replication_server", allowed); - } - - return; -} - -my_sap_event_trigger(); - - -Relevant section from cluster.conf: - - - - - - - - - - - - - - - - - - - - - diff --git a/rgmanager/include/clulog.h b/rgmanager/include/clulog.h index e6b7ff8..856d83c 100644 --- a/rgmanager/include/clulog.h +++ b/rgmanager/include/clulog.h @@ -38,7 +38,7 @@ extern "C" { #include #include -#define LOGLEVEL_DFLT LOG_NOTICE +#define LOGLEVEL_DFLT LOG_INFO #define MAX_LOGMSG_LEN 512 /* diff --git a/rgmanager/include/event.h b/rgmanager/include/event.h deleted file mode 100644 index 58edcd5..0000000 --- a/rgmanager/include/event.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -#ifndef _EVENT_H -#define _EVENT_H - -/* 128 is a bit big, but it should be okay */ -typedef struct __rge_q { - char rg_name[128]; - uint32_t rg_state; - uint32_t pad1; - int rg_owner; - int rg_last_owner; -} group_event_t; - -typedef struct __ne_q { - int ne_local; - int ne_nodeid; - int ne_state; - int ne_clean; -} node_event_t; - -typedef struct __cfg_q { - int cfg_version; - int cfg_oldversion; -} config_event_t; - -typedef struct __user_q { - char u_name[128]; - msgctx_t *u_ctx; - int u_request; - int u_arg1; - int u_arg2; - int u_target; /* Node ID */ -} user_event_t; - -typedef enum { - EVENT_NONE=0, - EVENT_CONFIG, - EVENT_NODE, - EVENT_RG, - EVENT_USER -} event_type_t; - -/* Data that's distributed which indicates which - node is the event master */ -typedef struct __rgm { - uint32_t m_magic; - uint32_t m_nodeid; - uint64_t m_master_time; - uint8_t m_reserved[112]; -} event_master_t; - -#define swab_event_master_t(ptr) \ -{\ - swab32((ptr)->m_nodeid);\ - swab32((ptr)->m_magic);\ - swab64((ptr)->m_master_time);\ -} - -/* Just a magic # to help us ensure we've got good - date from VF */ -#define EVENT_MASTER_MAGIC 0xfabab0de - -/* Event structure - internal to the event subsystem; use - the queueing functions below which allocate this struct - and pass it to the event handler */ -typedef struct _event { - /* Not used dynamically - part of config info */ - list_head(); - char *ev_name; - char *ev_script; - char *ev_script_file; - int ev_prio; - int ev_pad; - /* --- end config part */ - int ev_type; /* config & generated by rgmanager*/ - int ev_transaction; - union { - group_event_t group; - node_event_t node; - config_event_t config; - user_event_t user; - } ev; -} event_t; - -#define EVENT_PRIO_COUNT 100 - -typedef struct _event_table { - int max_prio; - int pad; - event_t *entries[0]; -} event_table_t; - - -int construct_events(int ccsfd, event_table_t **); -void deconstruct_events(event_table_t **); -void print_events(event_table_t *); - -/* Does the event match a configured event? */ -int event_match(event_t *pattern, event_t *actual); - -/* Event queueing functions. */ -void node_event_q(int local, int nodeID, int state, int clean); -void rg_event_q(char *name, uint32_t state, int owner, int last); -void user_event_q(char *svc, int request, int arg1, int arg2, - int target, msgctx_t *ctx); -void config_event_q(int old_version, int new_version); - -/* Call this to see if there's a master. */ -int event_master_info_cached(event_master_t *); - -/* Call this to get the node ID of the current - master *or* become the master if none exists */ -int event_master(void); - -/* Setup */ -int central_events_enabled(void); -void set_central_events(int flag); -int slang_process_event(event_table_t *event_table, event_t *ev); - -/* For distributed events. */ -void set_transition_throttling(int nsecs); - -/* Simplified service start. */ -int service_op_start(char *svcName, int *target_list, int target_list_len, - int *new_owner); -int service_op_stop(char *svcName, int do_disable, int event_type); - - -#endif diff --git a/rgmanager/include/members.h b/rgmanager/include/members.h deleted file mode 100644 index 08feee0..0000000 --- a/rgmanager/include/members.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _MEMBERS_H -#define _MEMBERS_H - -#include - -typedef enum { - NODE_STATE_DOWN = 0, - NODE_STATE_UP = 1, - NODE_STATE_CLEAN = 2 -} node_state_t; - - -int get_my_nodeid(cman_handle_t h); -int my_id(void); -cluster_member_list_t * get_member_list(cman_handle_t h); -void free_member_list(cluster_member_list_t *ml); -void member_set_state(int nodeid, int state); -int memb_count(cluster_member_list_t *ml); -int member_online(int nodeid); -int memb_online(cluster_member_list_t *ml, int nodeid); -int memb_online_name(cluster_member_list_t *ml, char *name); -int memb_name_to_id(cluster_member_list_t *ml, char *name); -int memb_mark_down(cluster_member_list_t *ml, int nodeid); -char * memb_id_to_name(cluster_member_list_t *ml, int nodeid); -cman_node_t * memb_id_to_p(cluster_member_list_t *ml, int nodeid); -cman_node_t * memb_name_to_p(cluster_member_list_t *ml, char *name); -void free_member_list(cluster_member_list_t *ml); -cluster_member_list_t *memb_gained(cluster_member_list_t *old, - cluster_member_list_t *new); -cluster_member_list_t *memb_lost(cluster_member_list_t *old, - cluster_member_list_t *new); - -cluster_member_list_t *member_list_dup(cluster_member_list_t *old); - -#endif diff --git a/rgmanager/include/reslist.h b/rgmanager/include/reslist.h index c4dce68..7b98f23 100644 --- a/rgmanager/include/reslist.h +++ b/rgmanager/include/reslist.h @@ -25,33 +25,31 @@ #include -#define RA_PRIMARY (1<<0) /** Primary key */ -#define RA_UNIQUE (1<<1) /** Unique for given type */ -#define RA_REQUIRED (1<<2) /** Required (or an error if not present */ -#define RA_INHERIT (1<<3) /** Inherit a parent resource's attr */ -#define RA_RECONFIG (1<<4) /** Allow inline reconfiguration */ - #define RF_INLINE (1<<0) #define RF_DEFINED (1<<1) #define RF_NEEDSTART (1<<2) /** Used when adding/changing resources */ #define RF_NEEDSTOP (1<<3) /** Used when deleting/changing resources */ #define RF_COMMON (1<<4) /** " */ -#define RF_INDEPENDENT (1<<5) /** Define this for a resource if it is - otherwise an independent subtree */ -#define RF_RECONFIG (1<<6) - -#define RF_INIT (1<<7) /** Resource rule: Initialize this resource - class on startup */ -#define RF_DESTROY (1<<8) /** Resource rule flag: Destroy this - resource class if you delete it from - the configuration */ - - #define RES_STOPPED (0) #define RES_STARTED (1) #define RES_FAILED (2) +/* + Resource operations + */ +#define RS_START (0) +#define RS_STOP (1) +#define RS_STATUS (2) +#define RS_RESINFO (3) +#define RS_RESTART (4) +#define RS_RELOAD (5) +#define RS_CONDRESTART (6) +#define RS_RECOVER (7) +#define RS_CONDSTART (8) /** Start if flagged with RF_NEEDSTART */ +#define RS_CONDSTOP (9) /** STOP if flagged with RF_NEEDSTOP */ + + #ifndef SHAREDIR #define SHAREDIR "/usr/share/rgmanager" #endif @@ -67,20 +65,33 @@ #include +typedef enum { +/* +#define RA_PRIMARY (1<<0) +#define RA_UNIQUE (1<<1) +#define RA_REQUIRED (1<<2) +#define RA_INHERIT (1<<3) + */ + RA_PRIMARY = (1<<0), + RA_UNIQUE = (1<<1), + RA_REQUIRED= (1<<2), + RA_INHERIT = (1<<3), + RA_SPEC = (1<<4) +} ra_flag_t; + typedef struct _resource_attribute { char *ra_name; char *ra_value; - int ra_flags; - int _pad_; + ra_flag_t ra_flags; } resource_attr_t; typedef struct _resource_child { - char *rc_name; int rc_startlevel; int rc_stoplevel; int rc_forbid; int rc_flags; + char *rc_name; } resource_child_t; @@ -99,7 +110,7 @@ typedef struct _resource_rule { char * rr_type; char * rr_agent; char * rr_version; /** agent XML spec version; OCF-ism */ - int rr_flags; + int rr_root; int rr_maxrefs; resource_attr_t * rr_attrs; resource_child_t * rr_childtypes; @@ -126,7 +137,6 @@ typedef struct _rg_node { struct _rg_node *rn_child, *rn_parent; resource_t *rn_resource; resource_act_t *rn_actions; - restart_counter_t rn_restart_counter; int rn_state; /* State of this instance of rn_resource */ int rn_flags; int rn_last_status; @@ -139,7 +149,7 @@ typedef struct _fod_node { list_head(); char *fdn_name; int fdn_prio; - uint64_t fdn_nodeid; /* on rhel4 this will be 64-bit int */ + int _pad_; /* align */ } fod_node_t; typedef struct _fod { @@ -159,11 +169,7 @@ int res_stop(resource_node_t **tree, resource_t *res, void *ret); int res_status(resource_node_t **tree, resource_t *res, void *ret); int res_condstart(resource_node_t **tree, resource_t *res, void *ret); int res_condstop(resource_node_t **tree, resource_t *res, void *ret); -int res_exec(resource_node_t *node, int op, const char *arg, int depth); /*int res_resinfo(resource_node_t **tree, resource_t *res, void *ret);*/ -int expand_time(char *val); -int store_action(resource_act_t **actsp, char *name, int depth, int timeout, int interval); - /* Calculate differences @@ -200,10 +206,8 @@ void destroy_resource_tree(resource_node_t **tree); int construct_domains(int ccsfd, fod_t **domains); void deconstruct_domains(fod_t **domains); void print_domains(fod_t **domains); -int node_should_start(int nodeid, cluster_member_list_t *membership, +int node_should_start(uint64_t nodeid, cluster_member_list_t *membership, char *rg_name, fod_t **domains); -int node_domain_set(fod_t *domain, int **ret, int *retlen); -int node_domain_set_safe(char *domainname, int **ret, int *retlen, int *flags); /* @@ -212,7 +216,6 @@ int node_domain_set_safe(char *domainname, int **ret, int *retlen, int *flags); resource_t *find_resource_by_ref(resource_t **reslist, char *type, char *ref); resource_t *find_root_by_ref(resource_t **reslist, char *ref); resource_rule_t *find_rule_by_type(resource_rule_t **rulelist, char *type); -void res_build_name(char *, size_t, resource_t *); /* Internal functions; shouldn't be needed. diff --git a/rgmanager/include/restart_counter.h b/rgmanager/include/restart_counter.h deleted file mode 100644 index 2f158ad..0000000 --- a/rgmanager/include/restart_counter.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -/* Time-based restart counters for rgmanager */ - -#ifndef _RESTART_COUNTER_H -#define _RESTART_COUNTER_H - -typedef void *restart_counter_t; - -int restart_add(restart_counter_t arg); -int restart_clear(restart_counter_t arg); -int restart_count(restart_counter_t arg); -int restart_treshold_exceeded(restart_counter_t arg); -restart_counter_t restart_init(time_t expire_timeout, int max_restarts); -int restart_cleanup(restart_counter_t arg); - -#endif diff --git a/rgmanager/include/rg_queue.h b/rgmanager/include/rg_queue.h index 87e9e40..ac26ce8 100644 --- a/rgmanager/include/rg_queue.h +++ b/rgmanager/include/rg_queue.h @@ -1,27 +1,9 @@ -/* - Copyright Red Hat, Inc. 2004-2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ #ifndef _RG_QUEUE_H #define _RG_QUEUE_H #include #include #include #include -#include /** @@ -33,12 +15,12 @@ typedef struct _request { uint32_t rr_request; /** Request */ uint32_t rr_errorcode; /** Error condition */ uint32_t rr_orig_request; /** Original request */ + uint32_t rr_resp_fd; /** FD to send response */ uint64_t rr_target; /** Target node */ uint32_t rr_arg0; /** Integer argument */ uint32_t rr_arg1; /** Integer argument */ - uint32_t rr_arg2; /** Integer argument */ uint32_t rr_line; /** Line no */ - uint32_t rr_resp_fd; /** FD to send response */ + uint32_t _pad_; /** pad */ char *rr_file; /** Who made req */ time_t rr_when; /** time to execute */ } request_t; @@ -46,7 +28,7 @@ typedef struct _request { int _rq_queue_request(request_t **queue, char *name, uint32_t request, uint32_t err, uint32_t oldreq, uint32_t fd, time_t when, - uint36_t target, uint32_t arg0, uint32_t arg1, char *file, + uint64_t target, uint32_t arg0, uint32_t arg1, char *file, int line); #define rq_queue_request(queue, name, request, err, oldreq,\ @@ -59,7 +41,5 @@ int rq_queue_empty(request_t **q); void rq_free(request_t *foo); void forward_request(request_t *req); -void forward_message(int fd, void *msg, int nodeid); - #endif diff --git a/rgmanager/include/sets.h b/rgmanager/include/sets.h deleted file mode 100644 index 8cc271b..0000000 --- a/rgmanager/include/sets.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -/** - @file sets.h - Header file for sets.c - @author Lon Hohberger - */ -#ifndef _SETS_H -#define _SETS_H - -#include -typedef uint64_t set_type_t; - -int s_add(set_type_t *, int *, set_type_t); -int s_union(set_type_t *, int, set_type_t *, - int, set_type_t **, int *); - -int s_intersection(set_type_t *, int, set_type_t *, - int, set_type_t **, int *); -int s_delta(set_type_t *, int, set_type_t *, - int, set_type_t **, int *); -int s_subtract(set_type_t *, int, set_type_t *, int, set_type_t **, int *); -int s_shuffle(set_type_t *, int); - -#endif diff --git a/rgmanager/man/clusvcadm.8 b/rgmanager/man/clusvcadm.8 index 20ae823..dcc5691 100644 --- a/rgmanager/man/clusvcadm.8 +++ b/rgmanager/man/clusvcadm.8 @@ -49,8 +49,12 @@ service Lock the local resource group manager. This should only be used if the administrator intends to perform a global, cluster-wide shutdown. This prevents starting resource groups on the local node, allowing -services will not fail over during the shutdown of the cluster. -Once the cluster quorum is dissolved, this state is reset. +services will not fail over during the shutdown of the cluster. Generally, +administrators should use the +.B +clushutdown(8) +command to accomplish this. Once the cluster quorum is dissolved, this +state is reset. .IP "\-m " When used in conjunction with either the .B @@ -84,10 +88,11 @@ service until a member transition or until it is enabled again. .IP \-u Unlock the cluster's service managers. This allows services to transition -again. +again. It will be necessary to re-enable all services in the stopped state +if this is run after \fB clushutdown(8)\fR. .IP \-v Display version information and exit. .SH "SEE ALSO" -clustat(8) +clustat(8), clushutdown(8) diff --git a/rgmanager/rgmanager/event-script.txt b/rgmanager/rgmanager/event-script.txt deleted file mode 100644 index 00a8b4c..0000000 --- a/rgmanager/rgmanager/event-script.txt +++ /dev/null @@ -1,311 +0,0 @@ -TODO: -* Return correct error codes to clusvcadm (currently it always returns - "Unknown") -* Write glue for 'migrate' operations and migrate-enabled services - -Basic configuration specification: - - - - - - - - - (note, all service ops and such deal with node ID, not - with node names) - - - - - - service_owner="3"/> - - - service_owner="3"/> - - - - ... - - -General globals available from all scripts: - - node_self - local node ID - event_type - event class, either: - EVENT_NONE - unspecified / unknown - EVENT_NODE - node transition - EVENT_SERVICE - service transition - EVENT_USER - a user-generated request - EVENT_CONFIG - [NOT CONFIGURABLE] - -Node event globals (i.e. when event_type == EVENT_NODE): - - node_id - node ID which is transitioning - node_name - name of node which is transitioning - node_state - new node state (NODE_ONLINE or NODE_OFFLINE, or if you prefer, - 1 or 0, respectively) - node_clean - 0 if the node has not been fenced, 1 if the node has been - fenced - -Service event globals (i.e. when event_type == EVENT_SERVICE): - - service_name - Name of service which transitioned - service_state - new state of service - service_owner - new owner of service (or <0 if service is no longer - running) - service_last_owner - Last owner of service if known. Used for when - service_state = "recovering" generally, in order to - apply restart/relocate/disable policy. - -User event globals (i.e. when event_type == EVENT_USER): - - service_name - service to perform request upon - user_request - request to perform (USER_ENABLE, USER_DISABLE, - USER_STOP, USER_RELOCATE, [TODO] USER_MIGRATE) - user_target - target node ID if applicable - - -Scripting functions - Informational: - - node_list = nodes_online(); - - Returns a list of all online nodes. - - service_list = service_list(); - - Returns a list of all configured services. - - (restarts, last_owner, owner, state) = service_status(service_name); - - Returns the state, owner, last_owner, and restarts. Note that - all return values are optional, but are right-justified per S-Lang - specification. This means if you only want the 'state', you can use: - - (state) = service_status(service_name); - - However, if you need the restart count, you must provide all four - return values as above. - - (nofailback, restricted, ordered, node_list) = - service_domain_info(service_name); - - Returns the failover domain specification, if it exists, for the - specified service name. The node list returned is an ordered list - according to priority levels. In the case of unordered domains, - the ordering of the returned list is pseudo-random. - -Scripting functions - Operational: - - err = service_start(service_name, node_list, [avoid_list]); - - Start a non-running, (but runnable, i.e. not failed) - service on the first node in node_list. Failing that, start it on - the second node in node_list and so forth. One may also specify - an avoid list, but it's better to just use the subtract() function - below. If the start is successful, the node ID running the service - is returned. If the start is unsuccessful, a value < 0 is returned. - - err = service_stop(service_name, [0 = stop, 1 = disable]); - - Stop a running service. The second parameter is optional, and if - non-zero is specified, the service will enter the disabled state. - - ... stuff that's not done but needs to be: - - err = service_relocate(service_name, node_list); - - Move a running service to the specified node_list in order of - preference. In the case of VMs, this is actually a migrate-or- - relocate operation. - -Utility functions - Node list manipulation - - node_list = union(left_node_list, right_node_list); - - Calculates the union between the two node list, removing duplicates - and preserving ordering according to left_node_list. Any added - values from right_node_list will appear in their order, but - after left_node_list in the returned list. - - node_list = intersection(left_node_list, right_node_list); - - Calculates the intersection (items in both lists) between the two - node lists, removing duplicates and preserving ordering according - to left_node_list. Any added values from right_node_list will - appear in their order, but after left_node_list in the returned list. - - node_list = delta(left_node_list, right_node_list); - - Calculates the delta (items not in both lists) between the two - node lists, removing duplicates and preserving ordering according - to left_node_list. Any added values from right_node_list will - appear in their order, but after left_node_list in the returned list. - - node_list = subtract(left_node_list, right_node_list); - - Removes any duplicates as well as items specified in right_node_list - from left_node_list. Example: - - all_nodes = nodes_online(); - allowed_nodes = subtract(nodes_online, node_to_avoid); - - node_list = shuffle(node_list_old); - - Rearranges the contents of node_list_old randomly and returns a - new node list. - -Utility functions - Logging: - - debug(item1, item2, ...); LOG_DEBUG level - info(...); LOG_INFO level - notice(...); LOG_NOTICE level - warning(...); LOG_WARNING level - err(...); LOG_ERR level - crit(...); LOG_CRIT level - alert(...); LOG_ALERT level - emerg(...); LOG_EMERG level - - items - These can be strings, integer lists, or integers. Logging - string lists is not supported. - - level - the level is consistent with syslog(8) - - stop_processing(); - - Calling this function will prevent further event scripts from being - executed on a particular event. Call this script if, for example, - you do not wish for the default event handler to process the event. - - Note: This does NOT terminate the caller script; that is, the - script being executed will run to completion. - -Event scripts are written in a language called S-Lang; documentation specifics -about the language are available at http://www.s-lang.org - -Example script (creating a follows-but-avoid-after-start behavior): -% -% If the main queue server and replication queue server are on the same -% node, relocate the replication server somewhere else if possible. -% -define my_sap_event_trigger() -{ - variable state, owner_rep, owner_main; - variable nodes, allowed; - - % - % If this was a service event, don't execute the default event - % script trigger after this script completes. - % - if (event_type == EVENT_SERVICE) { - stop_processing(); - } - - (owner_main, state) = service_status("service:main_queue"); - (owner_rep, state) = service_status("service:replication_server"); - - if ((event_type == EVENT_NODE) and (owner_main == node_id) and - (node_state == NODE_OFFLINE) and (owner_rep >= 0)) { - % - % uh oh, the owner of the main server died. Restart it - % on the node running the replication server - % - notice("Starting Main Queue Server on node ", owner_rep); - ()=service_start("service:main_queue", owner_rep); - return; - } - - % - % S-Lang doesn't short-circuit prior to 2.1.0 - % - if ((owner_main >= 0) and - ((owner_main == owner_rep) or (owner_rep < 0))) { - - % - % Get all online nodes - % - nodes = nodes_online(); - - % - % Drop out the owner of the main server - % - allowed = subtract(nodes, owner_main); - if ((owner_rep >= 0) and (length(allowed) == 0)) { - % - % Only one node is online and the rep server is - % already running. Don't do anything else. - % - return; - } - - if ((length(allowed) == 0) and (owner_rep < 0)) { - % - % Only node online is the owner ... go ahead - % and start it, even though it doesn't increase - % availability to do so. - % - allowed = owner_main; - } - - % - % Move the replication server off the node that is - % running the main server if a node's available. - % - if (owner_rep >= 0) { - ()=service_stop("service:replication_server"); - } - ()=service_start("service:replication_server", allowed); - } - - return; -} - -my_sap_event_trigger(); - - -Relevant section from cluster.conf: - - - - - - - - - - - - - - - - - - - - - diff --git a/rgmanager/src/clulib/rg_strings.c b/rgmanager/src/clulib/rg_strings.c index fb7598f..4728789 100644 --- a/rgmanager/src/clulib/rg_strings.c +++ b/rgmanager/src/clulib/rg_strings.c @@ -1,179 +1,35 @@ -/* - Copyright Red Hat, Inc. 2004-2006 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -#include -#include - -struct string_val { - int val; - char *str; -}; - - -const struct string_val rg_error_strings[] = { - { RG_EEXCL, "Service not runnable: cannot run exclusive" }, - { RG_EDOMAIN, "Service not runnable: restricted failover domain offline" }, - { RG_ESCRIPT, "S/Lang Script Error" }, - { RG_EFENCE, "Fencing operation pending; try again later" }, - { RG_ENODE, "Target node dead / nonexistent" }, - { RG_ERUN, "Service is already running" }, - { RG_EQUORUM, "Operation requires quorum" }, - { RG_EINVAL, "Invalid operation for resource" }, - { RG_EDEPEND, "Operation violates dependency rule" }, - { RG_EAGAIN, "Temporary failure; try again" }, - { RG_EDEADLCK, "Operation would cause a deadlock" }, - { RG_ENOSERVICE,"Service does not exist" }, - { RG_EFORWARD, "Service not mastered locally" }, - { RG_EABORT, "Aborted; service failed" }, - { RG_EFAIL, "Failure" }, - { RG_ESUCCESS, "Success" }, - { RG_YES, "Yes" }, - { RG_NO, "No" }, - { 0, NULL } -}; - - -const struct string_val rg_req_strings[] = { - {RG_SUCCESS, "success" }, - {RG_FAIL, "fail"}, - {RG_START, "start"}, - {RG_STOP, "stop"}, - {RG_STATUS, "status"}, - {RG_DISABLE, "disable"}, - {RG_STOP_RECOVER, "stop (recovery)"}, - {RG_START_RECOVER, "start (recovery)"}, - {RG_RESTART, "restart"}, - {RG_EXITING, "exiting"}, - {RG_INIT, "initialize"}, - {RG_ENABLE, "enable"}, - {RG_STATUS_NODE, "status inquiry"}, - {RG_RELOCATE, "relocate"}, - {RG_CONDSTOP, "conditional stop"}, - {RG_CONDSTART, "conditional start"}, - {RG_START_REMOTE,"remote start"}, - {RG_STOP_USER, "user stop"}, - {RG_STOP_EXITING, "stop (shutdown)"}, - {RG_LOCK, "locking"}, - {RG_UNLOCK, "unlocking"}, - {RG_QUERY_LOCK, "lock status inquiry"}, - {RG_MIGRATE, "migrate"}, - {RG_STATUS_INQUIRY, "out of band service status inquiry"}, - {RG_NONE, "none"}, - {0, NULL} -}; - - -const struct string_val rg_state_strings[] = { - {RG_STATE_STOPPED, "stopped"}, - {RG_STATE_STARTING, "starting"}, - {RG_STATE_STARTED, "started"}, - {RG_STATE_STOPPING, "stopping"}, - {RG_STATE_FAILED, "failed"}, - {RG_STATE_UNINITIALIZED, "uninitialized"}, - {RG_STATE_CHECK, "checking"}, - {RG_STATE_ERROR, "recoverable"}, - {RG_STATE_RECOVER, "recovering"}, - {RG_STATE_DISABLED, "disabled"}, - {RG_STATE_MIGRATE, "migrating"}, - {0, NULL} +const char *rg_state_strings[] = { + "stopped", + "starting", + "started", + "stopping", + "failed", + "uninitialized", + "checking", + "recoverable", + "recovering", + "disabled", + "" }; - -const struct string_val agent_ops[] = { - {RS_START, "start"}, - {RS_STOP, "stop"}, - {RS_STATUS, "status"}, - {RS_RESINFO, "resinfo"}, - {RS_RESTART, "restart"}, - {RS_RELOAD, "reload"}, - {RS_CONDRESTART, "condrestart"}, /* Unused */ - {RS_RECOVER, "recover"}, - {RS_CONDSTART, "condstart"}, - {RS_CONDSTOP, "condstop"}, - {RS_MONITOR, "monitor"}, - {RS_META_DATA, "meta-data"}, /* printenv */ - {RS_VALIDATE, "validate-all"}, - {RS_MIGRATE, "migrate"}, - {RS_RECONFIG, "reconfig"}, - {0 , NULL} +const char *rg_req_strings[] = { + "success", + "fail", + "start", + "stop", + "status", + "disable", + "stop (recovery)", + "start (recovery)", + "restart", + "exiting", + "initialize", + "enable", + "status inquiry", + "relocate", + "conditional stop", + "conditional start", + "remote start", + "user stop", + "" }; - - -static inline const char * -rg_search_table(const struct string_val *table, int val) -{ - int x; - - for (x = 0; table[x].str != NULL; x++) { - if (table[x].val == val) { - return table[x].str; - } - } - - return "Unknown"; -} - - -static inline int -rg_search_table_by_str(const struct string_val *table, const char *val) -{ - int x; - - for (x = 0; table[x].str != NULL; x++) { - if (!strcasecmp(table[x].str, val)) - return table[x].val; - } - - return -1; -} - - - -const char * -rg_strerror(int val) -{ - return rg_search_table(rg_error_strings, val); -} - -const char * -rg_state_str(int val) -{ - return rg_search_table(rg_state_strings, val); -} - - -int -rg_state_str_to_id(const char *val) -{ - return rg_search_table_by_str(rg_state_strings, val); -} - - - -const char * -rg_req_str(int val) -{ - return rg_search_table(rg_req_strings, val); -} - - -const char * -agent_op_str(int val) -{ - return rg_search_table(agent_ops, val); -} diff --git a/rgmanager/src/clulib/sets.c b/rgmanager/src/clulib/sets.c deleted file mode 100644 index f734064..0000000 --- a/rgmanager/src/clulib/sets.c +++ /dev/null @@ -1,370 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -/** - @file sets.c - Order-preserving set functions (union / intersection / delta) - (designed for integer types; a la int, uint64_t, etc...) - @author Lon Hohberger - */ -#include -#include -#include -#include -#include -#include - - -/** - Add a value to a set. This function disregards an add if the value is already - in the set. Note that the maximum length of set s must be preallocated; this - function doesn't do error or bounds checking. - - @param s Set to modify - @param curlen Current length (modified if added) - @param val Value to add - @return 0 if not added, 1 if added - */ -int -s_add(set_type_t *s, int *curlen, set_type_t val) -{ - int idx=0; - - for (; idx < *curlen; idx++) - if (s[idx] == val) - return 0; - s[*curlen] = val; - ++(*curlen); - return 1; -} - - -/** - Union-set function. Allocates and returns a new set which is the union of - the two given sets 'left' and 'right'. Also returns the new set length. - - @param left Left set - order is preserved on this set; that is, - this is the set where the caller cares about ordering. - @param ll Length of left set. - @param right Right set - order is not preserved on this set during - the union operation - @param rl Length of right set - @param ret Return set. Should * not * be preallocated. - @param retl Return set length. Should be ready to accept 1 integer - upon calling this function - @return 0 on success, -1 on error - */ -int -s_union(set_type_t *left, int ll, set_type_t *right, int rl, - set_type_t **ret, int *retl) -{ - int l, r, cnt = 0, total; - - total = ll + rl; /* Union will never exceed both sets */ - - *ret = malloc(sizeof(set_type_t)*total); - if (!*ret) { - return -1; - } - memset((void *)(*ret), 0, sizeof(set_type_t)*total); - - cnt = 0; - - /* Add all the ones on the left */ - for (l = 0; l < ll; l++) - s_add(*ret, &cnt, left[l]); - - /* Add the ones on the left */ - for (r = 0; r < rl; r++) - s_add(*ret, &cnt, right[r]); - - *retl = cnt; - - return 0; -} - - -/** - Intersection-set function. Allocates and returns a new set which is the - intersection of the two given sets 'left' and 'right'. Also returns the new - set length. - - @param left Left set - order is preserved on this set; that is, - this is the set where the caller cares about ordering. - @param ll Length of left set. - @param right Right set - order is not preserved on this set during - the union operation - @param rl Length of right set - @param ret Return set. Should * not * be preallocated. - @param retl Return set length. Should be ready to accept 1 integer - upon calling this function - @return 0 on success, -1 on error - */ -int -s_intersection(set_type_t *left, int ll, set_type_t *right, int rl, - set_type_t **ret, int *retl) -{ - int l, r, cnt = 0, total; - - total = ll; /* Intersection will never exceed one of the two set - sizes */ - - *ret = malloc(sizeof(set_type_t)*total); - if (!*ret) { - return -1; - } - memset((void *)(*ret), 0, sizeof(set_type_t)*total); - - cnt = 0; - /* Find duplicates */ - for (l = 0; l < ll; l++) { - for (r = 0; r < rl; r++) { - if (left[l] != right[r]) - continue; - if (s_add(*ret, &cnt, right[r])) - break; - } - } - - *retl = cnt; - return 0; -} - - -/** - Delta-set function. Allocates and returns a new set which is the delta (i.e. - numbers not in both sets) of the two given sets 'left' and 'right'. Also - returns the new set length. - - @param left Left set - order is preserved on this set; that is, - this is the set where the caller cares about ordering. - @param ll Length of left set. - @param right Right set - order is not preserved on this set during - the union operation - @param rl Length of right set - @param ret Return set. Should * not * be preallocated. - @param retl Return set length. Should be ready to accept 1 integer - upon calling this function - @return 0 on success, -1 on error - */ -int -s_delta(set_type_t *left, int ll, set_type_t *right, int rl, - set_type_t **ret, int *retl) -{ - int l, r, cnt = 0, total, found; - - total = ll + rl; /* Union will never exceed both sets */ - - *ret = malloc(sizeof(set_type_t)*total); - if (!*ret) { - return -1; - } - memset((void *)(*ret), 0, sizeof(set_type_t)*total); - - cnt = 0; - - /* not efficient, but it works */ - /* Add all the ones on the left */ - for (l = 0; l < ll; l++) { - found = 0; - for (r = 0; r < rl; r++) { - if (right[r] == left[l]) { - found = 1; - break; - } - } - - if (found) - continue; - s_add(*ret, &cnt, left[l]); - } - - - /* Add all the ones on the right*/ - for (r = 0; r < rl; r++) { - found = 0; - for (l = 0; l < ll; l++) { - if (right[r] == left[l]) { - found = 1; - break; - } - } - - if (found) - continue; - s_add(*ret, &cnt, right[r]); - } - - *retl = cnt; - - return 0; -} - - -/** - Subtract-set function. Allocates and returns a new set which is the - subtraction of the right set from the left set. - Also returns the new set length. - - @param left Left set - order is preserved on this set; that is, - this is the set where the caller cares about ordering. - @param ll Length of left set. - @param right Right set - order is not preserved on this set during - the union operation - @param rl Length of right set - @param ret Return set. Should * not * be preallocated. - @param retl Return set length. Should be ready to accept 1 integer - upon calling this function - @return 0 on success, -1 on error - */ -int -s_subtract(set_type_t *left, int ll, set_type_t *right, int rl, - set_type_t **ret, int *retl) -{ - int l, r, cnt = 0, total, found; - - total = ll; /* Union will never exceed left set length*/ - - *ret = malloc(sizeof(set_type_t)*total); - if (!*ret) { - return -1; - } - memset((void *)(*ret), 0, sizeof(set_type_t)*total); - - cnt = 0; - - /* not efficient, but it works */ - for (l = 0; l < ll; l++) { - found = 0; - for (r = 0; r < rl; r++) { - if (right[r] == left[l]) { - found = 1; - break; - } - } - - if (found) - continue; - s_add(*ret, &cnt, left[l]); - } - - *retl = cnt; - - return 0; -} - - -/** - Shuffle-set function. Weakly randomizes ordering of a set in-place. - - @param set Set to randomize - @param sl Length of set - @return 0 - */ -int -s_shuffle(set_type_t *set, int sl) -{ - int x, newidx; - unsigned r_state = 0; - set_type_t t; - struct timeval tv; - - gettimeofday(&tv, NULL); - r_state = (int)(tv.tv_usec); - - for (x = 0; x < sl; x++) { - newidx = (rand_r(&r_state) % sl); - if (newidx == x) - continue; - t = set[x]; - set[x] = set[newidx]; - set[newidx] = t; - } - - return 0; -} - - -#ifdef STANDALONE -/* Testbed */ -/* - gcc -o sets sets.c -DSTANDALONE -ggdb -I../../include \ - -Wall -Werror -Wstrict-prototypes -Wextra - */ -int -main(int __attribute__ ((unused)) argc, char __attribute__ ((unused)) **argv) -{ - set_type_t a[] = { 1, 2, 3, 3, 3, 2, 2, 3 }; - set_type_t b[] = { 2, 3, 4 }; - set_type_t *i; - int ilen = 0, x; - - s_union(a, 8, b, 3, &i, &ilen); - - /* Should return length of 4 - { 1 2 3 4 } */ - printf("set_union [%d] = ", ilen); - for ( x = 0; x < ilen; x++) { - printf("%d ", (int)i[x]); - } - printf("\n"); - - s_shuffle(i, ilen); - printf("shuffled [%d] = ", ilen); - for ( x = 0; x < ilen; x++) { - printf("%d ", (int)i[x]); - } - printf("\n"); - - - free(i); - - /* Should return length of 2 - { 2 3 } */ - s_intersection(a, 8, b, 3, &i, &ilen); - - printf("set_intersection [%d] = ", ilen); - for ( x = 0; x < ilen; x++) { - printf("%d ", (int)i[x]); - } - printf("\n"); - - free(i); - - /* Should return length of 2 - { 1 4 } */ - s_delta(a, 8, b, 3, &i, &ilen); - - printf("set_delta [%d] = ", ilen); - for ( x = 0; x < ilen; x++) { - printf("%d ", (int)i[x]); - } - printf("\n"); - - free(i); - - /* Should return length of 1 - { 1 } */ - s_subtract(a, 8, b, 3, &i, &ilen); - - printf("set_subtract [%d] = ", ilen); - for ( x = 0; x < ilen; x++) { - printf("%d ", (int)i[x]); - } - printf("\n"); - - free(i); - - - return 0; -} -#endif diff --git a/rgmanager/src/clulib/signals.c b/rgmanager/src/clulib/signals.c index fa9f4a6..1d49ee5 100644 --- a/rgmanager/src/clulib/signals.c +++ b/rgmanager/src/clulib/signals.c @@ -1,21 +1,3 @@ -/* - Copyright Red Hat, Inc. 2003-2006 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ #include #include #include diff --git a/rgmanager/src/clulib/tmgr.c b/rgmanager/src/clulib/tmgr.c deleted file mode 100644 index 2565f26..0000000 --- a/rgmanager/src/clulib/tmgr.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - Copyright Crosswalk 2006-2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -#ifdef WRAP_THREADS -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef struct _thr { - list_head(); - void *(*fn)(void *arg); - char **name; - pthread_t th; -} mthread_t; - -static mthread_t *_tlist = NULL; -static int _tcount = 0; -static pthread_rwlock_t _tlock = PTHREAD_RWLOCK_INITIALIZER; - -void -dump_thread_states(FILE *fp) -{ - int x; - mthread_t *curr; - fprintf(fp, "Thread Information\n"); - pthread_rwlock_rdlock(&_tlock); - list_for(&_tlist, curr, x) { - fprintf(fp, " Thread #%d id: %d function: %s\n", - x, (unsigned)curr->th, curr->name[0]); - } - pthread_rwlock_unlock(&_tlock); - fprintf(fp, "\n\n"); -} - - -int __real_pthread_create(pthread_t *, const pthread_attr_t *, - void *(*)(void*), void *); -int -__wrap_pthread_create(pthread_t *th, const pthread_attr_t *attr, - void *(*start_routine)(void*), - void *arg) -{ - void *fn = start_routine; - mthread_t *new; - int ret; - - new = malloc(sizeof (*new)); - - ret = __real_pthread_create(th, attr, start_routine, arg); - if (ret) { - if (new) - free(new); - return ret; - } - - if (new) { - new->th = *th; - new->fn = start_routine; - new->name = backtrace_symbols(&fn, 1); - pthread_rwlock_wrlock(&_tlock); - list_insert(&_tlist, new); - ++_tcount; - pthread_rwlock_unlock(&_tlock); - } - - return ret; -} - - -void __real_pthread_exit(void *); -void -__wrap_pthread_exit(void *exitval) -{ - mthread_t *old; - int ret = 0, found = 0; - pthread_t me = pthread_self(); - - pthread_rwlock_rdlock(&_tlock); - list_for(&_tlist, old, ret) { - if (old->th == me) { - found = 1; - break; - } - } - if (!found) - old = NULL; - pthread_rwlock_unlock(&_tlock); - - if (!old) - __real_pthread_exit(exitval); - - pthread_rwlock_wrlock(&_tlock); - list_remove(&_tlist, old); - --_tcount; - pthread_rwlock_unlock(&_tlock); - - if (old->name) - free(old->name); - free(old); - __real_pthread_exit(exitval); -} -#endif diff --git a/rgmanager/src/daemons/event_config.c b/rgmanager/src/daemons/event_config.c deleted file mode 100644 index c52e8e1..0000000 --- a/rgmanager/src/daemons/event_config.c +++ /dev/null @@ -1,541 +0,0 @@ -/** - Copyright Red Hat, Inc. 2002-2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -/** @file - * CCS event parsing, based on failover domain parsing - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define CONFIG_NODE_ID_TO_NAME \ - "/cluster/clusternodes/clusternode[@nodeid=\"%d\"]/@name" -#define CONFIG_NODE_NAME_TO_ID \ - "/cluster/clusternodes/clusternode[@name=\"%s\"]/@nodeid" - -void deconstruct_events(event_table_t **); -void print_event(event_t *ev); - -//#define DEBUG - -#ifdef DEBUG -#define ENTER() clulog(LOG_DEBUG, "ENTER: %s\n", __FUNCTION__) -#define RETURN(val) {\ - clulog(LOG_DEBUG, "RETURN: %s line=%d value=%d\n", __FUNCTION__, \ - __LINE__, (val));\ - return(val);\ -} -#else -#define ENTER() -#define RETURN(val) return(val) -#endif - -#ifdef NO_CCS -#define ccs_get(fd, query, ret) conf_get(query, ret) -#endif - -/* - - - slang_script_stuff(); - start_service(); - - - */ -int -event_match(event_t *pattern, event_t *actual) -{ - if (pattern->ev_type != EVENT_NONE && - actual->ev_type != pattern->ev_type) - return 0; - - /* If there's no event class specified, the rest is - irrelevant */ - if (pattern->ev_type == EVENT_NONE) - return 1; - - switch(pattern->ev_type) { - case EVENT_NODE: - if (pattern->ev.node.ne_nodeid >= 0 && - actual->ev.node.ne_nodeid != - pattern->ev.node.ne_nodeid) { - return 0; - } - if (pattern->ev.node.ne_local >= 0 && - actual->ev.node.ne_local != - pattern->ev.node.ne_local) { - return 0; - } - if (pattern->ev.node.ne_state >= 0 && - actual->ev.node.ne_state != - pattern->ev.node.ne_state) { - return 0; - } - if (pattern->ev.node.ne_clean >= 0 && - actual->ev.node.ne_clean != - pattern->ev.node.ne_clean) { - return 0; - } - return 1; /* All specified params match */ - case EVENT_RG: - if (pattern->ev.group.rg_name[0] && - strcasecmp(actual->ev.group.rg_name, - pattern->ev.group.rg_name)) { - return 0; - } - if (pattern->ev.group.rg_state != (uint32_t)-1 && - actual->ev.group.rg_state != - pattern->ev.group.rg_state) { - return 0; - } - if (pattern->ev.group.rg_owner >= 0 && - actual->ev.group.rg_owner != - pattern->ev.group.rg_owner) { - return 0; - } - return 1; - case EVENT_CONFIG: - if (pattern->ev.config.cfg_version >= 0 && - actual->ev.config.cfg_version != - pattern->ev.config.cfg_version) { - return 0; - } - if (pattern->ev.config.cfg_oldversion >= 0 && - actual->ev.config.cfg_oldversion != - pattern->ev.config.cfg_oldversion) { - return 0; - } - return 1; - case EVENT_USER: - if (pattern->ev.user.u_name[0] && - strcasecmp(actual->ev.user.u_name, - pattern->ev.user.u_name)) { - return 0; - } - if (pattern->ev.user.u_request != 0 && - actual->ev.user.u_request != - pattern->ev.user.u_request) { - return 0; - } - if (pattern->ev.user.u_target != 0 && - actual->ev.user.u_target != - pattern->ev.user.u_target) { - return 0; - } - return 1; - default: - break; - } - - return 0; -} - - -char * -ccs_node_id_to_name(int ccsfd, int nodeid) -{ - char xpath[256], *ret = 0; - - snprintf(xpath, sizeof(xpath), CONFIG_NODE_ID_TO_NAME, - nodeid); - if (ccs_get(ccsfd, xpath, &ret) == 0) - return ret; - return NULL; -} - - -int -ccs_node_name_to_id(int ccsfd, char *name) -{ - char xpath[256], *ret = 0; - int rv = 0; - - snprintf(xpath, sizeof(xpath), CONFIG_NODE_NAME_TO_ID, - name); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - rv = atoi(ret); - free(ret); - return rv; - } - return 0; -} - - -static void -deconstruct_event(event_t *ev) -{ - if (ev->ev_script) - free(ev->ev_script); - if (ev->ev_name) - free(ev->ev_name); - free(ev); -} - - -static int -get_node_event(int ccsfd, char *base, event_t *ev) -{ - char xpath[256], *ret = NULL; - - /* Clear out the possibilitiies */ - ev->ev.node.ne_nodeid = -1; - ev->ev.node.ne_local = -1; - ev->ev.node.ne_state = -1; - ev->ev.node.ne_clean = -1; - - snprintf(xpath, sizeof(xpath), "%s/@node_id", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev.node.ne_nodeid = atoi(ret); - free(ret); - if (ev->ev.node.ne_nodeid <= 0) - return -1; - } else { - /* See if there's a node name */ - snprintf(xpath, sizeof(xpath), "%s/@node", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev.node.ne_nodeid = - ccs_node_name_to_id(ccsfd, ret); - free(ret); - if (ev->ev.node.ne_nodeid <= 0) - return -1; - } - } - - snprintf(xpath, sizeof(xpath), "%s/@node_state", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - if (!strcasecmp(ret, "up")) { - ev->ev.node.ne_state = 1; - } else if (!strcasecmp(ret, "down")) { - ev->ev.node.ne_state = 0; - } else { - ev->ev.node.ne_state = !!atoi(ret); - } - free(ret); - } - - snprintf(xpath, sizeof(xpath), "%s/@node_clean", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev.node.ne_clean = !!atoi(ret); - free(ret); - } - - snprintf(xpath, sizeof(xpath), "%s/@node_local", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev.node.ne_local = !!atoi(ret); - free(ret); - } - - return 0; -} - - -static int -get_rg_event(int ccsfd, char *base, event_t *ev) -{ - char xpath[256], *ret = NULL; - - /* Clear out the possibilitiies */ - ev->ev.group.rg_name[0] = 0; - ev->ev.group.rg_state = (uint32_t)-1; - ev->ev.group.rg_owner = -1; - - snprintf(xpath, sizeof(xpath), "%s/@service", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - strncpy(ev->ev.group.rg_name, ret, - sizeof(ev->ev.group.rg_name)); - free(ret); - if (!strlen(ev->ev.group.rg_name)) { - return -1; - } - } - - snprintf(xpath, sizeof(xpath), "%s/@service_state", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - if (!isdigit(ret[0])) { - ev->ev.group.rg_state = - rg_state_str_to_id(ret); - } else { - ev->ev.group.rg_state = atoi(ret); - } - free(ret); - } - - snprintf(xpath, sizeof(xpath), "%s/@service_owner", base); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - if (!isdigit(ret[0])) { - ev->ev.group.rg_owner = - ccs_node_name_to_id(ccsfd, ret); - } else { - ev->ev.group.rg_owner = !!atoi(ret); - } - free(ret); - } - - return 0; -} - - -static int -get_config_event(int __attribute__((unused)) ccsfd, - char __attribute__((unused)) *base, - event_t __attribute__((unused)) *ev) -{ - errno = ENOSYS; - return -1; -} - - -static event_t * -get_event(int ccsfd, char *base, int idx, int *_done) -{ - event_t *ev; - char xpath[256]; - char *ret = NULL; - - *_done = 0; - snprintf(xpath, sizeof(xpath), "%s/event[%d]/@name", - base, idx); - if (ccs_get(ccsfd, xpath, &ret) != 0) { - *_done = 1; - return NULL; - } - - ev = malloc(sizeof(*ev)); - if (!ev) - return NULL; - memset(ev, 0, sizeof(*ev)); - ev->ev_name = ret; - - /* Get the script file / inline from config */ - ret = NULL; - snprintf(xpath, sizeof(xpath), "%s/event[%d]/@file", - base, idx); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev_script_file = ret; - } else { - snprintf(xpath, sizeof(xpath), "%s/event[%d]", - base, idx); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev_script = ret; - } else { - goto out_fail; - } - } - - /* Get the priority ordering (must be nonzero) */ - ev->ev_prio = 99; - ret = NULL; - snprintf(xpath, sizeof(xpath), "%s/event[%d]/@priority", - base, idx); - if (ccs_get(ccsfd, xpath, &ret) == 0) { - ev->ev_prio = atoi(ret); - if (ev->ev_prio <= 0 || ev->ev_prio > EVENT_PRIO_COUNT) { - clulog(LOG_ERR, - "event %s: priority %s invalid\n", - ev->ev_name, ret); - goto out_fail; - } - free(ret); - } - - /* Get the event class */ - snprintf(xpath, sizeof(xpath), "%s/event[%d]/@class", - base, idx); - ret = NULL; - if (ccs_get(ccsfd, xpath, &ret) == 0) { - snprintf(xpath, sizeof(xpath), "%s/event[%d]", - base, idx); - if (!strcasecmp(ret, "node")) { - ev->ev_type = EVENT_NODE; - if (get_node_event(ccsfd, xpath, ev) < 0) - goto out_fail; - } else if (!strcasecmp(ret, "service") || - !strcasecmp(ret, "resource") || - !strcasecmp(ret, "rg") ) { - ev->ev_type = EVENT_RG; - if (get_rg_event(ccsfd, xpath, ev) < 0) - goto out_fail; - } else if (!strcasecmp(ret, "config") || - !strcasecmp(ret, "reconfig")) { - ev->ev_type = EVENT_CONFIG; - if (get_config_event(ccsfd, xpath, ev) < 0) - goto out_fail; - } else { - clulog(LOG_ERR, - "event %s: class %s unrecognized\n", - ev->ev_name, ret); - goto out_fail; - } - - free(ret); - ret = NULL; - } - - return ev; -out_fail: - if (ret) - free(ret); - deconstruct_event(ev); - return NULL; -} - - -static event_t * -get_default_event(void) -{ - event_t *ev; - char xpath[1024]; - - ev = malloc(sizeof(*ev)); - if (!ev) - return NULL; - memset(ev, 0, sizeof(*ev)); - ev->ev_name = strdup("Default"); - - /* Get the script file / inline from config */ - snprintf(xpath, sizeof(xpath), "%s/default_event_script.sl", - RESOURCE_ROOTDIR); - - ev->ev_prio = 100; - ev->ev_type = EVENT_NONE; - ev->ev_script_file = strdup(xpath); - if (!ev->ev_script_file || ! ev->ev_name) { - deconstruct_event(ev); - return NULL; - } - - return ev; -} - - -/** - * similar API to failover domain - */ -int -construct_events(int ccsfd, event_table_t **events) -{ - char xpath[256]; - event_t *ev; - int x = 1, done = 0; - - /* Allocate the event list table */ - *events = malloc(sizeof(event_table_t) + - sizeof(event_t) * (EVENT_PRIO_COUNT+1)); - if (!*events) - return -1; - memset(*events, 0, sizeof(event_table_t) + - sizeof(event_t) * (EVENT_PRIO_COUNT+1)); - (*events)->max_prio = EVENT_PRIO_COUNT; - - snprintf(xpath, sizeof(xpath), - RESOURCE_TREE_ROOT "/events"); - - do { - ev = get_event(ccsfd, xpath, x++, &done); - if (ev) - list_insert(&((*events)->entries[ev->ev_prio]), ev); - } while (!done); - - ev = get_default_event(); - if (ev) - list_insert(&((*events)->entries[ev->ev_prio]), ev); - - return 0; -} - - -void -print_event(event_t *ev) -{ - printf(" Name: %s\n", ev->ev_name); - - switch(ev->ev_type) { - case EVENT_NODE: - printf(" Node %d State %d\n", ev->ev.node.ne_nodeid, - ev->ev.node.ne_state); - break; - case EVENT_RG: - printf(" RG %s State %s\n", ev->ev.group.rg_name, - rg_state_str(ev->ev.group.rg_state)); - break; - case EVENT_CONFIG: - printf(" Config change - unsupported\n"); - break; - default: - printf(" (Any event)\n"); - break; - } - - if (ev->ev_script) { - printf(" Inline script.\n"); - } else { - printf(" File: %s\n", ev->ev_script_file); - } -} - - -void -print_events(event_table_t *events) -{ - int x, y; - event_t *ev; - - for (x = 0; x <= events->max_prio; x++) { - if (!events->entries[x]) - continue; - printf("Event Priority Level %d:\n", x); - list_for(&(events->entries[x]), ev, y) { - print_event(ev); - } - } -} - - -void -deconstruct_events(event_table_t **eventsp) -{ - int x; - event_table_t *events = *eventsp; - event_t *ev = NULL; - - if (!events) - return; - - for (x = 0; x <= events->max_prio; x++) { - while ((ev = (events->entries[x]))) { - list_remove(&(events->entries[x]), ev); - deconstruct_event(ev); - } - } - - free(events); - *eventsp = NULL; -} - - diff --git a/rgmanager/src/daemons/fo_domain.c b/rgmanager/src/daemons/fo_domain.c index a434fe0..5dedbd5 100644 --- a/rgmanager/src/daemons/fo_domain.c +++ b/rgmanager/src/daemons/fo_domain.c @@ -27,14 +27,11 @@ #include #include #include -#include #include #include #include #include #include -#include -#include //#define DEBUG @@ -97,23 +94,6 @@ get_node(int ccsfd, char *base, int idx, fod_t *domain) fodn->fdn_name = ret; fodn->fdn_prio = 0; - snprintf(xpath, sizeof(xpath), - "/cluster/clusternodes/clusternode[@name=\"%s\"]/@nodeid", - ret); - if (ccs_get(ccsfd, xpath, &ret) != 0) { - clulog(LOG_WARNING, "Node %s has no nodeid attribute\n", - fodn->fdn_name); - fodn->fdn_nodeid = -1; - } else { - /* 64-bit-ism on rhel4? */ - fodn->fdn_nodeid = atoi(ret); - } - - /* Don't even bother getting priority if we're not ordered (it's set - to 0 above */ - if (!(domain->fd_flags & FOD_ORDERED)) - return fodn; - snprintf(xpath, sizeof(xpath), "%s/failoverdomainnode[%d]/@priority", base, idx); if (ccs_get(ccsfd, xpath, &ret) != 0) @@ -246,11 +226,6 @@ print_domains(fod_t **domains) { fod_t *fod; fod_node_t *fodn = NULL; - /* - int x; - int *node_set = NULL; - int node_set_len = 0; - */ list_do(domains, fod) { printf("Failover domain: %s\n", fod->fd_name); @@ -268,21 +243,9 @@ print_domains(fod_t **domains) } list_do(&fod->fd_nodes, fodn) { - printf(" Node %s (id %d, priority %d)\n", - fodn->fdn_name, fodn->fdn_nodeid, - fodn->fdn_prio); + printf(" Node %s (priority %d)\n", + fodn->fdn_name, fodn->fdn_prio); } while (!list_done(&fod->fd_nodes, fodn)); - - /* - node_domain_set(fod, &node_set, &node_set_len); - printf(" Failover Order = {"); - for (x = 0; x < node_set_len; x++) { - printf(" %d ", node_set[x]); - } - free(node_set); - printf("}\n"); - */ - } while (!list_done(domains, fod)); } @@ -302,7 +265,7 @@ int node_in_domain(char *nodename, fod_t *domain, cluster_member_list_t *membership) { - int online = 0, member_match = 0, preferred = 100, myprio = -1; + int member_online = 0, member_match = 0, preferred = 100, myprio = -1; fod_node_t *fodn; list_do(&domain->fd_nodes, fodn) { @@ -319,7 +282,7 @@ node_in_domain(char *nodename, fod_t *domain, * If we get here, we know: * A member of the domain is online somewhere */ - online = 1; + member_online = 1; if (!strcmp(nodename, fodn->fdn_name)) { /* * If we get here, we know: @@ -333,7 +296,7 @@ node_in_domain(char *nodename, fod_t *domain, preferred = fodn->fdn_prio; } while (!list_done(&domain->fd_nodes, fodn)); - if (!online) + if (!member_online) return 0; if (!member_match) @@ -348,70 +311,6 @@ node_in_domain(char *nodename, fod_t *domain, } -int -node_domain_set(fod_t *domain, uint64_t **ret, int *retlen) -{ - int x, i, j; - int *tmpset; - int ts_count; - - fod_node_t *fodn; - - /* Count domain length */ - list_for(&domain->fd_nodes, fodn, x) { } - - *retlen = 0; - *ret = malloc(sizeof(int) * x); - if (!(*ret)) - return -1; - tmpset = malloc(sizeof(int) * x); - if (!(*tmpset)) - return -1; - - if (domain->fd_flags & FOD_ORDERED) { - for (i = 1; i <= 100; i++) { - - ts_count = 0; - list_for(&domain->fd_nodes, fodn, x) { - if (fodn->fdn_prio == i) { - s_add(tmpset, &ts_count, - fodn->fdn_nodeid); - } - } - - if (!ts_count) - continue; - - /* Shuffle stuff at this prio level */ - if (ts_count > 1) - s_shuffle(tmpset, ts_count); - for (j = 0; j < ts_count; j++) - s_add(*ret, retlen, tmpset[j]); - } - } - - /* Add unprioritized nodes */ - ts_count = 0; - list_for(&domain->fd_nodes, fodn, x) { - if (!fodn->fdn_prio) { - s_add(tmpset, &ts_count, - fodn->fdn_nodeid); - } - } - - if (!ts_count) - return 0; - - /* Shuffle stuff at this prio level */ - if (ts_count > 1) - s_shuffle(tmpset, ts_count); - for (j = 0; j < ts_count; j++) - s_add(*ret, retlen, tmpset[j]); - - return 0; -} - - /** * See if a given nodeid should start a specified service svcid. * @@ -512,7 +411,7 @@ node_should_start(uint64_t nodeid, cluster_member_list_t *membership, RETURN(FOD_BEST); } - if (get_rg_state(rg_name, &svc_state) == RG_EFAIL) { + if (get_rg_state(rg_name, &svc_state) == FAIL) { /* * Couldn't get the service state, thats odd */ diff --git a/rgmanager/src/daemons/groups.c b/rgmanager/src/daemons/groups.c index 45dc912..ebd37dc 100644 --- a/rgmanager/src/daemons/groups.c +++ b/rgmanager/src/daemons/groups.c @@ -1,5 +1,5 @@ /* - Copyright Red Hat, Inc. 2002-2006 + Copyright Red Hat, Inc. 2002-2003 Copyright Mission Critical Linux, Inc. 2000 This program is free software; you can redistribute it and/or modify it @@ -19,27 +19,21 @@ */ //#define DEBUG #include +#include +#include #include -#include #include #include #include #include #include -#include #include #include #include -#include -/* Use address field in this because we never use it internally, - and there is no extra space in the cman_node_t type. - */ +#define cm_svccount cm_pad[0] /* Theses are uint8_t size */ +#define cm_svcexcl cm_pad[1] -#define cn_svccount cm_pad[0] /* Theses are uint8_t size */ -#define cn_svcexcl cm_pad[1] - -extern event_table_t *master_event_table; static int config_version = 0; static resource_t *_resources = NULL; @@ -47,17 +41,9 @@ static resource_rule_t *_rules = NULL; static resource_node_t *_tree = NULL; static fod_t *_domains = NULL; -#ifdef WRAP_LOCKS -pthread_mutex_t config_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; -pthread_mutex_t status_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; -#else pthread_mutex_t config_mutex = PTHREAD_MUTEX_INITIALIZER; -pthread_mutex_t status_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif pthread_rwlock_t resource_lock = PTHREAD_RWLOCK_INITIALIZER; - -void res_build_name(char *, size_t, resource_t *); -int group_migratory(char *groupname, int lock); +pthread_mutex_t status_mutex = PTHREAD_MUTEX_INITIALIZER; struct status_arg { @@ -86,41 +72,14 @@ node_should_start_safe(uint64_t nodeid, cluster_member_list_t *membership, int -node_domain_set_safe(char *domainname, uint64_t **ret, int *retlen, int *flags) -{ - fod_t *fod; - int rv = -1, found = 0, x = 0; - - pthread_rwlock_rdlock(&resource_lock); - - list_for(&_domains, fod, x) { - if (!strcasecmp(fod->fd_name, domainname)) { - found = 1; - break; - } - } // while (!list_done(&_domains, fod)); - - if (found) { - rv = node_domain_set(fod, ret, retlen); - *flags = fod->fd_flags; - } - - pthread_rwlock_unlock(&resource_lock); - - return rv; -} - - -int count_resource_groups(cluster_member_list_t *ml) { resource_t *res; - resource_node_t *node; - char rgname[64], *val; + char *rgname, *val; int x; rg_state_t st; void *lockp; - cluster_member_list_t *mp; + cluster_member_t *mp; for (x = 0; x < ml->cml_count; x++) { ml->cml_members[x].cm_svccount = 0; @@ -129,11 +88,11 @@ count_resource_groups(cluster_member_list_t *ml) pthread_rwlock_rdlock(&resource_lock); - list_do(&_tree, node) { - - res = node->rn_resource; + list_do(&_resources, res) { + if (res->r_rule->rr_root == 0) + continue; - res_build_name(rgname, sizeof(rgname), res); + rgname = res->r_attrs[0].ra_value; if (rg_lock(rgname, &lockp) < 0) { clulog(LOG_ERR, "#XX: Unable to obtain cluster " @@ -167,9 +126,10 @@ count_resource_groups(cluster_member_list_t *ml) ++mp->cm_svcexcl; } - } while (!list_done(&_tree, node)); + } while (!list_done(&_resources, res)); pthread_rwlock_unlock(&resource_lock); + return 0; } @@ -208,35 +168,12 @@ is_exclusive(char *svcName) } -resource_node_t * -node_by_ref(resource_node_t **tree, char *name) -{ - resource_t *res; - resource_node_t *node, *ret = NULL; - char rgname[64]; - int x; - - list_for(tree, node, x) { - - res = node->rn_resource; - res_build_name(rgname, sizeof(rgname), res); - - if (!strcasecmp(name, rgname)) { - ret = node; - break; - } - } - - return ret; -} - - +int get_rg_state_local(char *, rg_state_t *); int count_resource_groups_local(cluster_member_t *mp) { resource_t *res; - resource_node_t *node; - char rgname[64]; + char *rgname, *val; rg_state_t st; mp->cm_svccount = 0; @@ -244,18 +181,20 @@ count_resource_groups_local(cluster_member_t *mp) pthread_rwlock_rdlock(&resource_lock); - list_do(&_tree, node) { + list_do(&_resources, res) { - res = node->rn_resource; + if (res->r_rule->rr_root == 0) + continue; - res_build_name(rgname, sizeof(rgname), res); + rgname = res->r_attrs[0].ra_value; if (get_rg_state_local(rgname, &st) < 0) { continue; } if (st.rs_state != RG_STATE_STARTED && - st.rs_state != RG_STATE_STARTING) + st.rs_state != RG_STATE_STARTING && + st.rs_state != RG_STATE_STOPPING) continue; if (mp->cm_id != st.rs_owner) @@ -263,12 +202,13 @@ count_resource_groups_local(cluster_member_t *mp) ++mp->cm_svccount; - if (is_exclusive_res(res)) + if (is_exclusive_res(res)) ++mp->cm_svcexcl; - } while (!list_done(&_tree, node)); + } while (!list_done(&_resources, res)); pthread_rwlock_unlock(&resource_lock); + return 0; } @@ -285,7 +225,6 @@ have_exclusive_resources(void) pthread_rwlock_unlock(&resource_lock); return 1; } - } while (!list_done(&_resources, res)); pthread_rwlock_unlock(&resource_lock); @@ -298,8 +237,9 @@ int check_exclusive_resources(cluster_member_list_t *membership, char *svcName) { cluster_member_t *mp; - int exclusive, count, excl; + int exclusive, count; resource_t *res; + char *val; mp = memb_id_to_p(membership, my_id()); assert(mp); @@ -310,13 +250,14 @@ check_exclusive_resources(cluster_member_list_t *membership, char *svcName) res = find_root_by_ref(&_resources, svcName); if (!res) { pthread_rwlock_unlock(&resource_lock); - return RG_ENOSERVICE; + return FAIL; } - - excl = is_exclusive_res(res); + val = res_attr_value(res, "exclusive"); pthread_rwlock_unlock(&resource_lock); - if (exclusive || (count && excl)) - return RG_YES; + if (exclusive || (count && val && + (!strcmp(val, "yes") || (atoi(val)>0)))) { + return 1; + } return 0; } @@ -402,42 +343,6 @@ best_target_node(cluster_member_list_t *allowed, uint64_t owner, } -int -check_depend(resource_t *res) -{ - char *val; - rg_state_t rs; - - val = res_attr_value(res, "depend"); - if (!val) - /* No dependency */ - return -1; - - if (get_rg_state_local(val, &rs) == 0) - return (rs.rs_state == RG_STATE_STARTED); - - return 1; -} - - -int -check_depend_safe(char *rg_name) -{ - resource_t *res; - int ret; - - pthread_rwlock_rdlock(&resource_lock); - res = find_root_by_ref(&_resources, rg_name); - if (!res) - return -1; - - ret = check_depend(res); - pthread_rwlock_unlock(&resource_lock); - - return ret; -} - - /** Start or failback a resource group: if it's not running, start it. If it is running and we're a better member to run it, then ask for @@ -448,9 +353,9 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus, cluster_member_list_t *membership) { char *val; - cman_node_t *mp; + cluster_member_t *mp; int autostart, exclusive; - struct dlm_lksb lockp; + void *lockp; mp = memb_id_to_p(membership, my_id()); assert(mp); @@ -509,14 +414,6 @@ consider_start(resource_node_t *node, char *svcName, rg_state_t *svcStatus, } } - /* See if service this one depends on is running. If not, - don't start it */ - if (check_depend(node->rn_resource) == 0) { - clulog(LOG_DEBUG, - "Skipping RG %s: Dependency missing\n", svcName); - return; - } - val = res_attr_value(node->rn_resource, "exclusive"); exclusive = val && ((!strcmp(val, "yes") || (atoi(val)>0))); @@ -553,14 +450,13 @@ void consider_relocate(char *svcName, rg_state_t *svcStatus, uint64_t nodeid, cluster_member_list_t *membership) { - int a, b, req = RG_RELOCATE; + int a, b; /* Service must be running locally in order to consider for a relocate */ - if ((svcStatus->rs_state != RG_STATE_STARTING && - svcStatus->rs_state != RG_STATE_STARTED) || + if (svcStatus->rs_state != RG_STATE_STARTED || svcStatus->rs_owner != my_id()) return; @@ -580,73 +476,14 @@ consider_relocate(char *svcName, rg_state_t *svcStatus, uint64_t nodeid, if (a <= b) return; - if (0) { /* Migrate not supported on RHEL4 */ - req = RG_MIGRATE; - } - - clulog(LOG_NOTICE, "%s %s to better node %s\n", - req==RG_MIGRATE ? "Migrating":"Relocating", + clulog(LOG_DEBUG, "Relocating group %s to better node %s\n", svcName, memb_id_to_name(membership, nodeid)); - rt_enqueue_request(svcName, req, NULL, 0, nodeid, 0, 0); -} - - -char ** -get_service_names(int *len) -{ - resource_node_t *node = NULL; - int nservices, ncopied = 0, x; - char **ret = NULL; - char rg_name[64]; - - pthread_rwlock_rdlock(&resource_lock); - - nservices = 0; - list_do(&_tree, node) { - ++nservices; - } while (!list_done(&_tree, node)); - - ret = malloc(sizeof(char *) * (nservices + 1)); - if (!ret) - goto out_fail; - - memset(ret, 0, sizeof(char *) * (nservices + 1)); - nservices = 0; - list_for(&_tree, node, nservices) { - res_build_name(rg_name, sizeof(rg_name), - node->rn_resource); - - if (!strlen(rg_name)) - continue; - - ret[ncopied] = strdup(rg_name); - if (ret[ncopied]) { - ncopied++; - } else { - goto out_fail; - } - } - - if (len) - *len = ncopied; - pthread_rwlock_unlock(&resource_lock); - return ret; - -out_fail: - pthread_rwlock_unlock(&resource_lock); - for (x = 0; x < ncopied; x++) - free(ret[x]); - if (ret) - free(ret); - return NULL; + rt_enqueue_request(svcName, RG_RELOCATE, -1, 0, nodeid, 0, 0); } - - - /** * Called to decide what services to start locally during a node_event. * Originally a part of node_event, it is now its own function to cut down @@ -1303,13 +1140,6 @@ check_config_update(void) } -void -dump_config_version(FILE *fp) -{ - fprintf(fp, "Cluster configuration version %d\n\n", config_version); -} - - /** Initialize resource groups. This reads all the resource groups from CCS, builds the tree, etc. Ideally, we'll have a similar function @@ -1319,14 +1149,12 @@ dump_config_version(FILE *fp) int init_resource_groups(int reconfigure) { - int fd, x, y, cnt; + int fd, x; - event_table_t *evt = NULL; resource_t *reslist = NULL, *res; resource_rule_t *rulelist = NULL, *rule; resource_node_t *tree = NULL; fod_t *domains = NULL, *fod; - event_t *evp; char *val; if (reconfigure) @@ -1350,11 +1178,10 @@ init_resource_groups(int reconfigure) pthread_mutex_lock(&config_mutex); config_version = atoi(val); pthread_mutex_unlock(&config_mutex); - free(val); } - + if (ccs_get(fd, "/cluster/rm/@statusmax", &val) == 0) { - if (strlen(val)) + if (strlen(val)) rg_set_statusmax(atoi(val)); free(val); } @@ -1387,24 +1214,6 @@ init_resource_groups(int reconfigure) x = 0; list_do(&domains, fod) { ++x; } while (!list_done(&domains, fod)); clulog(LOG_DEBUG, "%d domains defined\n", x); - construct_events(fd, &evt); - cnt = 0; - if (evt) { - for (x=0; x <= evt->max_prio; x++) { - if (!evt->entries[x]) - continue; - - y = 0; - - list_do(&evt->entries[x], evp) { - ++y; - } while (!list_done(&evt->entries[x], evp)); - - cnt += y; - } - } - clulog(LOG_DEBUG, "%d events defined\n", x); - /* Reconfiguration done */ ccs_unlock(fd); @@ -1433,9 +1242,6 @@ init_resource_groups(int reconfigure) if (_domains) deconstruct_domains(&_domains); _domains = domains; - if (master_event_table) - deconstruct_events(&master_event_table); - master_event_table = evt; pthread_rwlock_unlock(&resource_lock); if (reconfigure) { @@ -1476,94 +1282,6 @@ get_recovery_policy(char *rg_name, char *buf, size_t buflen) } -int -get_service_property(char *rg_name, char *prop, char *buf, size_t buflen) -{ - int ret = 0; - resource_t *res; - char *val; - - memset(buf, 0, buflen); - -#if 0 - if (!strcmp(prop, "domain")) { - /* not needed */ - strncpy(buf, "", buflen); - } else if (!strcmp(prop, "autostart")) { - strncpy(buf, "1", buflen); - } else if (!strcmp(prop, "hardrecovery")) { - strncpy(buf, "0", buflen); - } else if (!strcmp(prop, "exclusive")) { - strncpy(buf, "0", buflen); - } else if (!strcmp(prop, "nfslock")) { - strncpy(buf, "0", buflen); - } else if (!strcmp(prop, "recovery")) { - strncpy(buf, "restart", buflen); - } else if (!strcmp(prop, "depend")) { - /* not needed */ - strncpy(buf, "", buflen); - } else { - /* not found / no defaults */ - ret = -1; - } -#endif - - pthread_rwlock_rdlock(&resource_lock); - res = find_root_by_ref(&_resources, rg_name); - if (res) { - val = res_attr_value(res, prop); - if (val) { - ret = 0; - strncpy(buf, val, buflen); - } - } - pthread_rwlock_unlock(&resource_lock); - -#if 0 - if (ret == 0) - printf("%s(%s, %s) = %s\n", __FUNCTION__, rg_name, prop, buf); - else - printf("%s(%s, %s) = NOT FOUND\n", __FUNCTION__, rg_name, prop); -#endif - - return ret; -} - - -int -add_restart(char *rg_name) -{ - resource_node_t *node; - int ret = 1; - - pthread_rwlock_rdlock(&resource_lock); - node = node_by_ref(&_tree, rg_name); - if (node) { - ret = restart_add(node->rn_restart_counter); - } - pthread_rwlock_unlock(&resource_lock); - - return ret; -} - - -int -check_restart(char *rg_name) -{ - resource_node_t *node; - int ret = 0; - - pthread_rwlock_rdlock(&resource_lock); - node = node_by_ref(&_tree, rg_name); - if (node) { - ret = restart_threshold_exceeded(node->rn_restart_counter); - } - pthread_rwlock_unlock(&resource_lock); - - return ret; -} - - void kill_resource_groups(void) { diff --git a/rgmanager/src/daemons/main.c b/rgmanager/src/daemons/main.c index 2b52f23..1f0db93 100644 --- a/rgmanager/src/daemons/main.c +++ b/rgmanager/src/daemons/main.c @@ -586,7 +586,7 @@ event_loop(int clusterfd) return 0; /* No new messages. Drop in the status check requests. */ - if (n == 0 && rg_quorate()) { + if (n == 0) { do_status_checks(); return 0; } diff --git a/rgmanager/src/daemons/reslist.c b/rgmanager/src/daemons/reslist.c index 745d88a..dbf685a 100644 --- a/rgmanager/src/daemons/reslist.c +++ b/rgmanager/src/daemons/reslist.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -26,7 +27,6 @@ #include #include #include -#include #include #include #ifndef NO_CCS @@ -37,13 +37,6 @@ char *attr_value(resource_node_t *node, char *attrname); char *rg_attr_value(resource_node_t *node, char *attrname); -void -res_build_name(char *buf, size_t buflen, resource_t *res) -{ - snprintf(buf, buflen, "%s:%s", res->r_rule->rr_type, - res->r_attrs[0].ra_value); -} - /** Find and determine an attribute's value. @@ -177,29 +170,18 @@ primary_attr_value(resource_t *res) /** Compare two resources. - @param left Left resource - @param right Right resource - @return -1 on different resource, 0 if the same, 1 if different, - 2 if different, but only safe resources are different - */ int rescmp(resource_t *left, resource_t *right) { - int x, y = 0, found = 0, ret = 0; - + int x, y = 0, found; /* Completely different resource class... */ if (strcmp(left->r_rule->rr_type, right->r_rule->rr_type)) { + //printf("Er, wildly different resource type! "); return -1; } - /* - printf("Comparing %s:%s to %s:%s\n", - left->r_rule->rr_type, left->r_attrs[0].ra_value, - right->r_rule->rr_type, right->r_attrs[0].ra_value) - */ - for (x = 0; left->r_attrs && left->r_attrs[x].ra_name; x++) { found = 0; @@ -215,52 +197,35 @@ rescmp(resource_t *left, resource_t *right) left->r_attrs[x].ra_flags) { /* Flags are different. Change in resource agents? */ - /* - printf("* flags differ %08x vs %08x\n", - left->r_attrs[x].ra_flags, - right->r_attrs[y].ra_flags); - */ + //printf("flags differ "); return 1; } if (strcmp(right->r_attrs[y].ra_value, left->r_attrs[x].ra_value)) { /* Different attribute value. */ - /* - printf("* different value for attr '%s':" - " '%s' vs '%s'", - right->r_attrs[y].ra_name, - left->r_attrs[x].ra_value, - right->r_attrs[y].ra_value); - */ - if (left->r_attrs[x].ra_flags & RA_RECONFIG) { - /* printf(" [SAFE]\n"); */ - ret = 2; - } else { - /* printf("\n"); */ - return 1; - } + //printf("different value for attr '%s' ", + //right->r_attrs[y].ra_name); + return 1; } } /* Attribute missing -> different attribute value. */ if (!found) { - /* - printf("* Attribute '%s' deleted\n", - left->r_attrs[x].ra_name); - */ + //printf("Attribute %s deleted ", + //left->r_attrs[x].ra_name); return 1; } } /* Different attribute count */ if (x != y) { - /* printf("* Attribute count differ (attributes added!) "); */ + //printf("Attribute count differ (attributes added!) "); return 1; } /* All the same */ - return ret; + return 0; } @@ -315,24 +280,11 @@ resource_t * find_root_by_ref(resource_t **reslist, char *ref) { resource_t *curr; - char ref_buf[128]; - char *type; - char *name = ref; int x; - snprintf(ref_buf, sizeof(ref_buf), "%s", ref); - - type = ref_buf; - if ((name = strchr(ref_buf, ':'))) { - *name = 0; - name++; - } else { - /* Default type */ - type = "service"; - name = ref; - } - list_do(reslist, curr) { + if (curr->r_rule->rr_root == 0) + continue; /* This should be one operation - the primary attr @@ -340,18 +292,15 @@ find_root_by_ref(resource_t **reslist, char *ref) */ for (x = 0; curr->r_attrs && curr->r_attrs[x].ra_name; x++) { - if (strcmp(type, curr->r_rule->rr_type)) - continue; if (!(curr->r_attrs[x].ra_flags & RA_PRIMARY)) continue; - if (strcmp(name, curr->r_attrs[x].ra_value)) + if (strcmp(ref, curr->r_attrs[x].ra_value)) continue; return curr; } } while (!list_done(reslist, curr)); - return NULL; } @@ -472,14 +421,14 @@ xpath_get_one(xmlDocPtr doc, xmlXPathContextPtr ctx, char *query) if (((node->type == XML_ATTRIBUTE_NODE) && strstr(query, "@*")) || ((node->type == XML_ELEMENT_NODE) && strstr(query, "child::*"))){ if (node->children && node->children->content) - size = strlen((char *)node->children->content)+ - strlen((char *)node->name)+2; + size = strlen(node->children->content)+ + strlen(node->name)+2; else - size = strlen((char *)node->name)+2; + size = strlen(node->name)+2; nnv = 1; } else { if (node->children && node->children->content) { - size = strlen((char *)node->children->content)+1; + size = strlen(node->children->content)+1; } else { goto out; } @@ -575,8 +524,6 @@ print_resource(resource_t *res) printf(" [NEEDSTOP]"); if (res->r_flags & RF_COMMON) printf(" [COMMON]"); - if (res->r_flags & RF_RECONFIG) - printf(" [RECONFIG]"); printf("\n"); if (res->r_rule->rr_maxrefs) @@ -612,8 +559,6 @@ print_resource(resource_t *res) printf(" unique"); if (res->r_attrs[x].ra_flags & RA_REQUIRED) printf(" required"); - if (res->r_attrs[x].ra_flags & RA_RECONFIG) - printf(" reconfig"); if (res->r_attrs[x].ra_flags & RA_INHERIT) printf(" inherit(\"%s\")", res->r_attrs[x].ra_value); printf(" ]\n"); @@ -872,7 +817,6 @@ load_resources(int ccsfd, resource_t **reslist, resource_rule_t **rulelist) "Error storing %s resource\n", newres->r_rule->rr_type); #endif - destroy_resource(newres); } diff --git a/rgmanager/src/daemons/resrules.c b/rgmanager/src/daemons/resrules.c index b8317d4..282eb5a 100644 --- a/rgmanager/src/daemons/resrules.c +++ b/rgmanager/src/daemons/resrules.c @@ -19,16 +19,14 @@ #include #include #include +#include #include #include #include -#include #include #include #include #include -#include -#include #include #include #include @@ -601,17 +599,6 @@ print_resource_rule(resource_rule_t *rr) printf("Max instances: %d\n", rr->rr_maxrefs); if (rr->rr_agent) printf("Agent: %s\n", basename(rr->rr_agent)); - - printf("Flags: "); - if (rr->rr_flags) { - if (rr->rr_flags & RF_INIT) - printf("init_on_add "); - if (rr->rr_flags & RF_DESTROY) - printf("destroy_on_delete "); - } else { - printf("(none)"); - } - printf("\n"); printf("Attributes:\n"); if (!rr->rr_attrs) { @@ -627,25 +614,18 @@ print_resource_rule(resource_rule_t *rr) continue; } - if (rr->rr_attrs[x].ra_flags) { - printf(" ["); - if (rr->rr_attrs[x].ra_flags & RA_PRIMARY) - printf(" primary"); - if (rr->rr_attrs[x].ra_flags & RA_UNIQUE) - printf(" unique"); - if (rr->rr_attrs[x].ra_flags & RA_REQUIRED) - printf(" required"); - if (rr->rr_attrs[x].ra_flags & RA_INHERIT) - printf(" inherit"); - if (rr->rr_attrs[x].ra_flags & RA_RECONFIG) - printf(" reconfig"); - printf(" ]"); - } - - if (rr->rr_attrs[x].ra_value) - printf(" default=\"%s\"\n", rr->rr_attrs[x].ra_value); - else - printf("\n"); + printf(" ["); + if (rr->rr_attrs[x].ra_flags & RA_PRIMARY) + printf(" primary"); + if (rr->rr_attrs[x].ra_flags & RA_UNIQUE) + printf(" unique"); + if (rr->rr_attrs[x].ra_flags & RA_REQUIRED) + printf(" required"); + if (rr->rr_attrs[x].ra_flags & RA_INHERIT) + printf(" inherit"); + else if (rr->rr_attrs[x].ra_value) + printf(" default=\"%s\"", rr->rr_attrs[x].ra_value); + printf(" ]\n"); } actions: @@ -781,18 +761,6 @@ _get_rule_attrs(xmlDocPtr doc, xmlXPathContextPtr ctx, char *base, } /* - See if this can be reconfigured on the fly without a - stop/start - */ - snprintf(xpath, sizeof(xpath), "%s/parameter[%d]/@reconfig", - base, x); - if ((ret = xpath_get_one(doc,ctx,xpath))) { - if ((atoi(ret) != 0) || (ret[0] == 'y')) - flags |= RA_RECONFIG; - free(ret); - } - - /* See if this is supposed to be inherited */ snprintf(xpath, sizeof(xpath), "%s/parameter[%d]/@inherit", @@ -923,10 +891,6 @@ read_pipe(int fd, char **file, size_t *length) n = read(fd, buf, sizeof(buf)); if (n < 0) { - - if (errno == EINTR) - continue; - if (*file) free(*file); return -1; @@ -935,7 +899,7 @@ read_pipe(int fd, char **file, size_t *length) if (n == 0 && (!*length)) return 0; - if (n == 0) { + if (n != sizeof(buf)) { done = 1; } @@ -1060,7 +1024,6 @@ load_resource_rulefile(char *filename, resource_rule_t **rules) break; memset(rr,0,sizeof(*rr)); - rr->rr_flags = RF_INIT | RF_DESTROY; rr->rr_type = type; snprintf(base, sizeof(base), "/resource-agent[%d]", ruleid); @@ -1072,13 +1035,12 @@ load_resource_rulefile(char *filename, resource_rule_t **rules) snprintf(base, sizeof(base), "/resource-agent[%d]/special[@tag=\"rgmanager\"]", ruleid); + _get_root(doc, ctx, base, rr); _get_maxparents(doc, ctx, base, rr); - _get_rule_flag(doc, ctx, base, rr, "init_on_add", RF_INIT); - _get_rule_flag(doc, ctx, base, rr, "destroy_on_delete", RF_DESTROY); rr->rr_agent = strdup(filename); /* - Second, add the children fields + Second, add the allowable-children fields */ _get_childtypes(doc, ctx, base, rr); @@ -1133,9 +1095,8 @@ load_resource_rules(const char *rpath, resource_rule_t **rules) { DIR *dir; struct dirent *de; - char *fn, *dot; + char *fn;//, *dot; char path[2048]; - struct stat st_buf; dir = opendir(rpath); if (!dir) @@ -1148,40 +1109,14 @@ load_resource_rules(const char *rpath, resource_rule_t **rules) if (!fn) continue; - /* Ignore files with common backup extension */ if ((fn != NULL) && (strlen(fn) > 0) && (fn[strlen(fn)-1] == '~')) continue; - /* Ignore hidden files */ - if (*fn == '.') - continue; - - dot = strrchr(fn, '.'); - if (dot) { - /* Ignore RPM installed save files, patches, - diffs, etc. */ - if (!strncasecmp(dot, ".rpm", 4)) { - fprintf(stderr, "Warning: " - "Ignoring %s/%s: Bad extension %s\n", - rpath, de->d_name, dot); - continue; - } - } - snprintf(path, sizeof(path), "%s/%s", rpath, de->d_name); - if (stat(path, &st_buf) < 0) - continue; - - if (S_ISDIR(st_buf.st_mode)) - continue; - - if (st_buf.st_mode & (S_IXUSR|S_IXOTH|S_IXGRP)) { - //printf("Loading resource rule from %s\n", path); - load_resource_rulefile(path, rules); - } + load_resource_rulefile(path, rules); } xmlCleanupParser(); diff --git a/rgmanager/src/daemons/restart_counter.c b/rgmanager/src/daemons/restart_counter.c deleted file mode 100644 index c889c6d..0000000 --- a/rgmanager/src/daemons/restart_counter.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -/* Time-based restart counters for rgmanager */ - -#include -#include -#include -#include -#include -#include -#include -#include - - - -#define RESTART_INFO_MAGIC 0x184820ab - -typedef struct { - list_head(); - time_t restart_time; -} restart_item_t; - -typedef struct { - int magic; - time_t expire_timeout; - int max_restarts; - int restart_count; - restart_item_t *restart_nodes; -} restart_info_t; - - -#define VALIDATE(arg, ret) \ -do { \ - if (!arg) {\ - errno = EINVAL; \ - return ret; \ - } \ - if (((restart_info_t *)arg)->magic != RESTART_INFO_MAGIC) {\ - errno = EINVAL; \ - return ret; \ - } \ -} while(0) - - -/* Remove expired restarts */ -static int -restart_timer_purge(restart_counter_t arg, time_t now) -{ - restart_info_t *restarts = (restart_info_t *)arg; - restart_item_t *i; - int x, done = 0; - - VALIDATE(arg, -1); - - /* No timeout */ - if (restarts->expire_timeout == 0) - return 0; - - do { - done = 1; - list_for(&restarts->restart_nodes, i, x) { - if ((now - i->restart_time) >= - restarts->expire_timeout) { - restarts->restart_count--; - list_remove(&restarts->restart_nodes, i); - done = 0; - break; - } - } - } while(!done); - - return 0; -} - - -int -restart_count(restart_counter_t arg) -{ - restart_info_t *restarts = (restart_info_t *)arg; - time_t now; - - VALIDATE(arg, -1); - now = time(NULL); - restart_timer_purge(arg, now); - return restarts->restart_count; -} - - -int -restart_threshold_exceeded(restart_counter_t arg) -{ - restart_info_t *restarts = (restart_info_t *)arg; - time_t now; - - VALIDATE(arg, -1); - now = time(NULL); - restart_timer_purge(arg, now); - if (restarts->restart_count >= restarts->max_restarts) - return 1; - return 0; -} - - -/* Add a restart entry to the list. Returns 1 if restart - count is exceeded */ -int -restart_add(restart_counter_t arg) -{ - restart_info_t *restarts = (restart_info_t *)arg; - restart_item_t *i; - time_t t; - - if (!arg) - /* No max restarts / threshold = always - ok to restart! */ - return 0; - - VALIDATE(arg, -1); - - i = malloc(sizeof(*i)); - if (!i) { - return -1; - } - - t = time(NULL); - i->restart_time = t; - - list_insert(&restarts->restart_nodes, i); - restarts->restart_count++; - - /* Check and remove old entries */ - restart_timer_purge(restarts, t); - - if (restarts->restart_count >= restarts->max_restarts) - return 1; - - return 0; -} - - -int -restart_clear(restart_counter_t arg) -{ - restart_info_t *restarts = (restart_info_t *)arg; - restart_item_t *i; - - VALIDATE(arg, -1); - while ((i = restarts->restart_nodes)) { - list_remove(&restarts->restart_nodes, i); - free(i); - } - - restarts->restart_count = 0; - - return 0; -} - - -restart_counter_t -restart_init(time_t expire_timeout, int max_restarts) -{ - restart_info_t *info; - - if (max_restarts < 0) { - errno = EINVAL; - return NULL; - } - - info = malloc(sizeof(*info)); - if (info == NULL) - return NULL; - - info->magic = RESTART_INFO_MAGIC; - info->expire_timeout = expire_timeout; - info->max_restarts = max_restarts; - info->restart_count = 0; - info->restart_nodes = NULL; - - return (void *)info; -} - - -int -restart_cleanup(restart_counter_t arg) -{ - VALIDATE(arg, -1); - restart_clear(arg); - free(arg); - return 0; -} diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c index fc9cde1..95b2450 100644 --- a/rgmanager/src/daemons/restree.c +++ b/rgmanager/src/daemons/restree.c @@ -1,5 +1,5 @@ /* - Copyright Red Hat, Inc. 2004-2006 + Copyright Red Hat, Inc. 2004 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -40,15 +39,12 @@ void malloc_zap_mutex(void); #endif + /* XXX from resrules.c */ int store_childtype(resource_child_t **childp, char *name, int start, int stop, int forbid, int flags); int _res_op(resource_node_t **tree, resource_t *first, char *type, void * __attribute__((unused))ret, int op); -static inline int -_res_op_internal(resource_node_t **tree, resource_t *first, - char *type, void *__attribute__((unused))ret, int realop, - resource_node_t *node); void print_env(char **env); static inline int _res_op_internal(resource_node_t **tree, resource_t *first, char *type, void *__attribute__((unused))ret, int realop, @@ -67,6 +63,22 @@ void * act_dup(resource_act_t *acts); time_t get_time(char *action, int depth, resource_node_t *node); +const char *res_ops[] = { + "start", + "stop", + "status", + "resinfo", + "restart", + "reload", + "condrestart", /* Unused */ + "recover", + "condstart", + "condstop", + "monitor", + "meta-data", /* printenv */ + "validate-all" +}; + const char *ocf_errors[] = { "success", // 0 @@ -98,13 +110,14 @@ _no_op_mode(int arg) const char * ocf_strerror(int ret) { - if (ret >= 0 && ret < OCF_RA_MAX) + if (ret < OCF_RA_MAX) return ocf_errors[ret]; return "unspecified"; } + /** Destroys an environment variable array. @@ -130,7 +143,7 @@ kill_env(char **env) @see build_env */ static void -add_ocf_stuff(resource_t *res, char **env, int depth, int refcnt) +add_ocf_stuff(resource_t *res, char **env, int depth) { char ver[10]; char *minor, *val; @@ -214,17 +227,6 @@ add_ocf_stuff(resource_t *res, char **env, int depth, int refcnt) return; snprintf(val, n, "%s=%s", OCF_CHECK_LEVEL_STR, ver); *env = val; env++; - - /* - Store the resource local refcnt (0 for now) - */ - snprintf(ver, sizeof(ver), "%d", refcnt); - n = strlen(OCF_REFCNT_STR) + strlen(ver) + 2; - val = malloc(n); - if (!val) - return; - snprintf(val, n, "%s=%s", OCF_REFCNT_STR, ver); - *env = val; env++; } @@ -232,13 +234,14 @@ add_ocf_stuff(resource_t *res, char **env, int depth, int refcnt) Allocate and fill an environment variable array. @param node Node in resource tree to use for parameters + @param op Operation (start/stop/status/monitor/etc.) @param depth Depth (status/monitor/etc.) @return Newly allocated environment array or NULL if one could not be formed. @see kill_env res_exec add_ocf_stuff */ static char ** -build_env(resource_node_t *node, int depth, int refcnt) +build_env(resource_node_t *node, int op, int depth) { resource_t *res = node->rn_resource; char **env; @@ -246,7 +249,7 @@ build_env(resource_node_t *node, int depth, int refcnt) int x, attrs, n; for (attrs = 0; res->r_attrs && res->r_attrs[attrs].ra_name; attrs++); - attrs += 8; /* + attrs += 7; /* Leave space for: OCF_RA_VERSION_MAJOR OCF_RA_VERSION_MINOR @@ -254,7 +257,6 @@ build_env(resource_node_t *node, int depth, int refcnt) OCF_RESOURCE_INSTANCE OCF_RESOURCE_TYPE OCF_CHECK_LEVEL - OCF_RESKEY_RGMANAGER_meta_refcnt (null terminator) */ @@ -294,7 +296,7 @@ build_env(resource_node_t *node, int depth, int refcnt) ++attrs; } - add_ocf_stuff(res, &env[attrs], depth, refcnt); + add_ocf_stuff(res, &env[attrs], depth); return env; } @@ -344,35 +346,46 @@ restore_signals(void) @see build_env */ int -res_exec(resource_node_t *node, int op, const char *arg, int depth) +res_exec(resource_node_t *node, int op, int depth) { int childpid, pid; int ret = 0; char **env = NULL; resource_t *res = node->rn_resource; - const char *op_str = agent_op_str(op); char fullpath[2048]; - if (!res->r_rule->rr_agent) + if (!res->r_rule->rr_agent) { + clulog(LOG_DEBUG, + "%s on %s \"%s\" no rr_agent\n", + res_ops[op], res->r_rule->rr_type, + res->r_attrs->ra_value); return 0; + } #ifdef DEBUG - env = build_env(node, depth, node->rn_resource->r_incarnations); - if (!env) + env = build_env(node, op); + if (!env) { + clulog(LOG_DEBUG, + "%s on %s \"%s\" build_env failed %d\n", + res_ops[op], res->r_rule->rr_type, + res->r_attrs->ra_value, errno); return -errno; + } #endif #ifdef NO_CCS if (_no_op_mode_) { - printf("[%s] %s:%s\n", op_str, res->r_rule->rr_type, - res->r_attrs->ra_value); + printf("[%s] %s:%s\n", res_ops[op], + res->r_rule->rr_type, res->r_attrs->ra_value); return 0; } #endif childpid = fork(); - if (childpid < 0) + if (childpid < 0) { + clulog(LOG_ERR, "%s: fork failed (%d)!\n", __func__, errno); return -errno; + } if (!childpid) { /* Child */ @@ -381,16 +394,21 @@ res_exec(resource_node_t *node, int op, const char *arg, int depth) #endif #if 0 printf("Exec of script %s, action %s type %s\n", - res->r_rule->rr_agent, agent_op_str(op), + res->r_rule->rr_agent, res_ops[op], res->r_rule->rr_type); #endif #ifndef DEBUG - env = build_env(node, depth, node->rn_resource->r_incarnations); + env = build_env(node, op, depth); #endif - if (!env) + if (!env) { + clulog(LOG_DEBUG, + "%s on %s \"%s\" build_env failed (ENOMEM)\n", + res_ops[op], res->r_rule->rr_type, + res->r_attrs->ra_value); exit(-ENOMEM); + } if (res->r_rule->rr_agent[0] != '/') snprintf(fullpath, sizeof(fullpath), "%s/%s", @@ -401,10 +419,7 @@ res_exec(resource_node_t *node, int op, const char *arg, int depth) restore_signals(); - if (arg) - execle(fullpath, fullpath, op_str, arg, NULL, env); - else - execle(fullpath, fullpath, op_str, NULL, env); + execle(fullpath, fullpath, res_ops[op], NULL, env); } #ifdef DEBUG @@ -421,16 +436,16 @@ res_exec(resource_node_t *node, int op, const char *arg, int depth) ret = WEXITSTATUS(ret); -#ifndef NO_CCS - if ((op == RS_STATUS && - node->rn_state == RES_STARTED && ret) || - (op != RS_STATUS && ret)) { -#else if (ret) { -#endif clulog(LOG_NOTICE, - "%s on %s \"%s\" returned %d (%s)\n", - op_str, res->r_rule->rr_type, + "%s on %s:%s returned %d (%s)\n", + res_ops[op], res->r_rule->rr_type, + res->r_attrs->ra_value, ret, + ocf_strerror(ret)); + } else { + clulog(LOG_DEBUG, + "%s on %s:%s returned %d (%s)\n", + res_ops[op], res->r_rule->rr_type, res->r_attrs->ra_value, ret, ocf_strerror(ret)); } @@ -441,40 +456,12 @@ res_exec(resource_node_t *node, int op, const char *arg, int depth) if (!WIFSIGNALED(ret)) assert(0); - return -EFAULT; -} - - -static inline void -assign_restart_policy(resource_t *curres, resource_node_t *parent, - resource_node_t *node) -{ - char *val; - int max_restarts = 0; - time_t restart_expire_time = 0; - - node->rn_restart_counter = NULL; - - if (!curres || !node) - return; - if (parent) /* Non-parents don't get one for now */ - return; - - val = res_attr_value(curres, "max_restarts"); - if (!val) - return; - max_restarts = atoi(val); - if (max_restarts <= 0) - return; - val = res_attr_value(curres, "restart_expire_time"); - if (val) { - restart_expire_time = (time_t)expand_time(val); - if (!restart_expire_time) - return; - } + clulog(LOG_ERR, + "%s on %s:%s caught signal %d\n", + res_ops[op], res->r_rule->rr_type, + res->r_attrs->ra_value, WTERMSIG(ret)); - node->rn_restart_counter = restart_init(restart_expire_time, - max_restarts); + return -EFAULT; } @@ -558,21 +545,7 @@ do_load_resource(int ccsfd, char *base, node->rn_parent = parent; node->rn_resource = curres; node->rn_state = RES_STOPPED; - node->rn_flags = 0; node->rn_actions = (resource_act_t *)act_dup(curres->r_actions); - assign_restart_policy(curres, parent, node); - - snprintf(tok, sizeof(tok), "%s/@__independent_subtree", base); -#ifndef NO_CCS - if (ccs_get(ccsfd, tok, &ref) == 0) { -#else - if (conf_get(tok, &ref) == 0) { -#endif - if (atoi(ref) > 0 || strcasecmp(ref, "yes") == 0) - node->rn_flags |= RF_INDEPENDENT; - free(ref); - } - curres->r_refs++; *newnode = node; @@ -712,10 +685,8 @@ build_tree(int ccsfd, resource_node_t **tree, } } /* No resource rule matching the child? Press on... */ - if (!flags) { - free(ref); + if (!flags) continue; - } flags = 0; /* Don't descend on anything we should have already picked @@ -735,9 +706,12 @@ build_tree(int ccsfd, resource_node_t **tree, break; } - free(ref); - if (flags == 2) + if (flags == 2) { + free(ref); continue; + } + + free(ref); x = 1; switch(do_load_resource(ccsfd, tok, childrule, tree, @@ -784,13 +758,21 @@ build_resource_tree(int ccsfd, resource_node_t **tree, resource_rule_t **rulelist, resource_t **reslist) { + resource_rule_t *curr; resource_node_t *root = NULL; char tok[512]; snprintf(tok, sizeof(tok), "%s", RESOURCE_TREE_ROOT); /* Find and build the list of root nodes */ - build_tree(ccsfd, &root, NULL, NULL/*curr*/, rulelist, reslist, tok); + list_do(rulelist, curr) { + + if (!curr->rr_root) + continue; + + build_tree(ccsfd, &root, NULL, NULL/*curr*/, rulelist, reslist, tok); + + } while (!list_done(rulelist, curr)); if (root) *tree = root; @@ -815,11 +797,6 @@ destroy_resource_tree(resource_node_t **tree) destroy_resource_tree(&(*tree)->rn_child); list_remove(tree, node); - - if (node->rn_restart_counter) { - restart_cleanup(node->rn_restart_counter); - } - if(node->rn_actions){ free(node->rn_actions); } @@ -847,8 +824,6 @@ _print_resource_tree(resource_node_t **tree, int level) printf("NEEDSTART "); if (node->rn_flags & RF_COMMON) printf("COMMON "); - if (node->rn_flags & RF_INDEPENDENT) - printf("INDEPENDENT "); printf("]"); } printf(" {\n"); @@ -904,17 +879,16 @@ _do_child_levels(resource_node_t **tree, resource_t *first, void *ret, #if 0 printf("%s children of %s type %s (level %d)\n", - agent_op_str(op), + res_ops[op], node->rn_resource->r_rule->rr_type, rule->rr_childtypes[x].rc_name, l); #endif /* Do op on all children at our level */ - rv |= _res_op(&node->rn_child, first, + rv += _res_op(&node->rn_child, first, rule->rr_childtypes[x].rc_name, ret, op); - - if (rv & SFL_FAILURE && op != RS_STOP) + if (rv != 0 && op != RS_STOP) return rv; } @@ -926,6 +900,46 @@ _do_child_levels(resource_node_t **tree, resource_t *first, void *ret, } +#if 0 +static inline int +_do_child_default_level(resource_node_t **tree, resource_t *first, + void *ret, int op) +{ + resource_node_t *node = *tree; + resource_t *res = node->rn_resource; + resource_rule_t *rule = res->r_rule; + int x, rv = 0, lev; + + for (x = 0; rule->rr_childtypes && + rule->rr_childtypes[x].rc_name; x++) { + + if(op == RS_STOP) + lev = rule->rr_childtypes[x].rc_stoplevel; + else + lev = rule->rr_childtypes[x].rc_startlevel; + + if (lev) + continue; + + /* + printf("%s children of %s type %s (default level)\n", + res_ops[op], + node->rn_resource->r_rule->rr_type, + rule->rr_childtypes[x].rc_name); + */ + + rv = _res_op(&node->rn_child, first, + rule->rr_childtypes[x].rc_name, + ret, op); + if (rv != 0) + return rv; + } + + return 0; +} +#endif + + static inline int _xx_child_internal(resource_node_t *node, resource_t *first, resource_node_t *child, void *ret, int op) @@ -959,14 +973,13 @@ _do_child_default_level(resource_node_t **tree, resource_t *first, if (op == RS_START || op == RS_STATUS) { list_for(&node->rn_child, child, y) { - rv |= _xx_child_internal(node, first, child, ret, op); - - if (rv & SFL_FAILURE) + rv = _xx_child_internal(node, first, child, ret, op); + if (rv) return rv; } } else { list_for_rev(&node->rn_child, child, y) { - rv |= _xx_child_internal(node, first, child, ret, op); + rv += _xx_child_internal(node, first, child, ret, op); } } @@ -1006,36 +1019,23 @@ _res_op_by_level(resource_node_t **tree, resource_t *first, void *ret, return _res_op(&node->rn_child, first, NULL, ret, op); if (op == RS_START || op == RS_STATUS) { - rv |= _do_child_levels(tree, first, ret, op); - if (rv & SFL_FAILURE) + rv = _do_child_levels(tree, first, ret, op); + if (rv != 0) return rv; /* Start default level after specified ones */ - rv |= _do_child_default_level(tree, first, ret, op); + rv = _do_child_default_level(tree, first, ret, op); } /* stop */ else { - rv |= _do_child_default_level(tree, first, ret, op); - rv |= _do_child_levels(tree, first, ret, op); - } - - return rv; -} - - -void -mark_nodes(resource_node_t *node, int state, int flags) -{ - int x; - resource_node_t *child; + rv = _do_child_default_level(tree, first, ret, op); + if (rv != 0) + return rv; - list_for(&node->rn_child, child, x) { - if (child->rn_child) - mark_nodes(child->rn_child, state, flags); + rv = _do_child_levels(tree, first, ret, op); } - node->rn_state = state; - node->rn_flags |= (RF_NEEDSTART | RF_NEEDSTOP); + return rv; } @@ -1075,8 +1075,7 @@ do_status(resource_node_t *node) /* Ok, it's a 'status' action. See if enough time has elapsed for a given type of status action */ - if (delta < node->rn_actions[x].ra_interval || - !node->rn_actions[x].ra_interval) + if (delta < node->rn_actions[x].ra_interval) continue; if (idx == -1 || @@ -1091,22 +1090,29 @@ do_status(resource_node_t *node) return 0; } - node->rn_actions[idx].ra_last = now; - x = res_exec(node, RS_STATUS, NULL, node->rn_actions[idx].ra_depth); + x = res_exec(node, RS_STATUS, node->rn_actions[idx].ra_depth); node->rn_last_status = x; node->rn_last_depth = node->rn_actions[idx].ra_depth; node->rn_checked = 1; - if (x == 0) + /* Clear check levels below ours. */ + for (x=0; node->rn_actions[x].ra_name; x++) { + if (strcmp(node->rn_actions[x].ra_name, "status")) + continue; + if (node->rn_actions[x].ra_depth <= node->rn_last_depth) + node->rn_actions[x].ra_last = now; + } + + if (node->rn_last_status == 0) return 0; if (!has_recover) - return x; + return node->rn_last_status; /* Strange/failed status. Try to recover inline. */ - if ((x = res_exec(node, RS_RECOVER, NULL, 0)) == 0) + if ((x = res_exec(node, RS_RECOVER, 0)) == 0) return 0; return x; @@ -1156,9 +1162,8 @@ clear_checks(resource_node_t *node) { time_t now; int x = 0; - resource_t *res = node->rn_resource; - now = res->r_started; + now = time(NULL); for (; node->rn_actions[x].ra_name; x++) { @@ -1192,12 +1197,136 @@ clear_checks(resource_node_t *node) in the subtree). @see _res_op_by_level res_exec */ +#if 0 +int +_res_op(resource_node_t **tree, resource_t *first, + char *type, void * __attribute__((unused))ret, int realop) +{ + int rv, me; + resource_node_t *node; + int op; + + list_do(tree, node) { + + /* Restore default operation. */ + op = realop; + + /* If we're starting by type, do that funky thing. */ + if (type && strlen(type) && + strcmp(node->rn_resource->r_rule->rr_type, type)) + continue; + + /* If the resource is found, all nodes in the subtree must + have the operation performed as well. */ + me = !first || (node->rn_resource == first); + + /* + printf("begin %s: %s %s [0x%x]\n", res_ops[op], + node->rn_resource->r_rule->rr_type, + primary_attr_value(node->rn_resource), + node->rn_flags); + */ + + if (me) { + /* + If we've been marked as a node which + needs to be started or stopped, clear + that flag and start/stop this resource + and all resource babies. + + Otherwise, don't do anything; look for + children with RF_NEEDSTART and + RF_NEEDSTOP flags. + + CONDSTART and CONDSTOP are no-ops if + the appropriate flag is not set. + */ + if ((op == RS_CONDSTART) && + (node->rn_flags & RF_NEEDSTART)) { + /* + printf("Node %s:%s - CONDSTART\n", + node->rn_resource->r_rule->rr_type, + primary_attr_value(node->rn_resource)); + */ + op = RS_START; + } + + if ((op == RS_CONDSTOP) && + (node->rn_flags & RF_NEEDSTOP)) { + /* + printf("Node %s:%s - CONDSTOP\n", + node->rn_resource->r_rule->rr_type, + primary_attr_value(node->rn_resource)); + */ + op = RS_STOP; + } + } + + /* Start starts before children */ + if (me && (op == RS_START)) { + node->rn_flags &= ~RF_NEEDSTART; + + rv = res_exec(node, op, 0); + if (rv != 0) { + node->rn_state = RES_FAILED; + return rv; + } + + set_time("start", 0, node); + clear_checks(node); + + if (node->rn_state != RES_STARTED) { + ++node->rn_resource->r_incarnations; + node->rn_state = RES_STARTED; + } + } + + if (node->rn_child) { + rv = _res_op_by_level(&node, me?NULL:first, ret, op); + if (rv != 0) + return rv; + } + + /* Stop/status/etc stops after children have stopped */ + if (me && (op == RS_STOP)) { + node->rn_flags &= ~RF_NEEDSTOP; + rv = res_exec(node, op, 0); + + if (rv != 0) { + node->rn_state = RES_FAILED; + return rv; + } + + if (node->rn_state != RES_STOPPED) { + --node->rn_resource->r_incarnations; + node->rn_state = RES_STOPPED; + } + + } else if (me && (op == RS_STATUS)) { + + rv = do_status(node); + if (rv != 0) + return rv; + } + + /* + printf("end %s: %s %s\n", res_ops[op], + node->rn_resource->r_rule->rr_type, + primary_attr_value(node->rn_resource)); + */ + } while (!list_done(tree, node)); + + return 0; +} +#endif + + static inline int _res_op_internal(resource_node_t **tree, resource_t *first, char *type, void *__attribute__((unused))ret, int realop, resource_node_t *node) { - int rv = 0, me, op; + int rv, me, op; /* Restore default operation. */ op = realop; @@ -1249,18 +1378,12 @@ _res_op_internal(resource_node_t **tree, resource_t *first, /* Start starts before children */ if (me && (op == RS_START)) { + node->rn_flags &= ~RF_NEEDSTART; - if (node->rn_flags & RF_RECONFIG && - realop == RS_CONDSTART) { - rv = res_exec(node, RS_RECONFIG, NULL, 0); - op = realop; /* reset to CONDSTART */ - } else { - rv = res_exec(node, op, NULL, 0); - } - node->rn_flags &= ~(RF_NEEDSTART | RF_RECONFIG); + rv = res_exec(node, op, 0); if (rv != 0) { node->rn_state = RES_FAILED; - return SFL_FAILURE; + return rv; } set_time("start", 0, node); @@ -1273,53 +1396,24 @@ _res_op_internal(resource_node_t **tree, resource_t *first, } else if (me && (op == RS_STATUS)) { /* Check status before children*/ rv = do_status(node); - if (rv != 0) { - /* - If this node's status has failed, all of its - dependent children are failed, whether or not this - node is independent or not. - */ - mark_nodes(node, RES_FAILED, - RF_NEEDSTART | RF_NEEDSTOP); - - /* If we're an independent subtree, return a flag - stating that this section is recoverable apart - from siblings in the resource tree. All child - resources of this node must be restarted, - but siblings of this node are not affected. */ - if (node->rn_flags & RF_INDEPENDENT) - return SFL_RECOVERABLE; - - return SFL_FAILURE; - } - + if (rv != 0) + return rv; } - if (node->rn_child) { - rv |= _res_op_by_level(&node, me?NULL:first, ret, op); - - /* If one or more child resources are failed and at least one - of them is not an independent subtree then let's check if - if we are an independent subtree. If so, mark ourself - and all our children as failed and return a flag stating - that this section is recoverable apart from siblings in - the resource tree. */ - if (op == RS_STATUS && (rv & SFL_FAILURE) && - (node->rn_flags & RF_INDEPENDENT)) { - mark_nodes(node, RES_FAILED, - RF_NEEDSTART | RF_NEEDSTOP); - rv = SFL_RECOVERABLE; - } + if (node->rn_child) { + rv = _res_op_by_level(&node, me?NULL:first, ret, op); + if (rv != 0) + return rv; } - + /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { node->rn_flags &= ~RF_NEEDSTOP; - rv = res_exec(node, op, NULL, 0); + rv = res_exec(node, op, 0); if (rv != 0) { node->rn_state = RES_FAILED; - return SFL_FAILURE; + return rv; } if (node->rn_state != RES_STOPPED) { @@ -1332,7 +1426,7 @@ _res_op_internal(resource_node_t **tree, resource_t *first, //node->rn_resource->r_rule->rr_type, //primary_attr_value(node->rn_resource)); - return rv; + return 0; } @@ -1358,31 +1452,24 @@ _res_op(resource_node_t **tree, resource_t *first, char *type, void * __attribute__((unused))ret, int realop) { resource_node_t *node; - int count = 0, rv = 0; + int count = 0, rv; if (realop == RS_STOP) { list_for_rev(tree, node, count) { - rv |= _res_op_internal(tree, first, type, ret, realop, - node); + rv = _res_op_internal(tree, first, type, ret, realop, + node); + if (rv != 0) + return rv; } } else { list_for(tree, node, count) { - rv |= _res_op_internal(tree, first, type, ret, realop, - node); - - /* If we hit a problem during a 'status' op in an - independent subtree, rv will have the - SFL_RECOVERABLE bit set, but not SFL_FAILURE. - If we ever hit SFL_FAILURE during a status - operation, we're *DONE* - even if the subtree - is flagged w/ indy-subtree */ - - if (rv & SFL_FAILURE) + rv = _res_op_internal(tree, first, type, ret, realop, + node); + if (rv != 0) return rv; } } - - return rv; + return 0; } /** @@ -1477,7 +1564,6 @@ int resource_delta(resource_t **leftres, resource_t **rightres) { resource_t *lc, *rc; - int ret; list_do(leftres, lc) { rc = find_resource_by_ref(rightres, lc->r_rule->rr_type, @@ -1490,25 +1576,10 @@ resource_delta(resource_t **leftres, resource_t **rightres) } /* Ok, see if the resource is the same */ - ret = rescmp(lc, rc); - if (ret == 0) { - rc->r_flags |= RF_COMMON; - continue; - } - - if (ret == 2) { - /* return of 2 from rescmp means - the two resources differ only - by reconfigurable bits */ - /* Do nothing on condstop phase; - do a "reconfig" instead of - "start" on conststart phase */ + if (rescmp(lc, rc) == 0) { rc->r_flags |= RF_COMMON; - rc->r_flags |= RF_NEEDSTART; - rc->r_flags |= RF_RECONFIG; continue; } - rc->r_flags |= RF_COMMON; /* Resource has changed. Flag it. */ @@ -1570,17 +1641,12 @@ resource_tree_delta(resource_node_t **ltree, resource_node_t **rtree) or is new), then we don't really care about its children. */ - if (rn->rn_resource->r_flags & RF_NEEDSTART) { rn->rn_flags |= RF_NEEDSTART; - if ((rn->rn_resource->r_flags & RF_RECONFIG) == 0) - continue; + continue; } - if (rc == 0 || rc == 2) { - if (rc == 2) - rn->rn_flags |= RF_NEEDSTART | RF_RECONFIG; - + if (rc == 0) { /* Ok, same resource. Recurse. */ ln->rn_flags |= RF_COMMON; rn->rn_flags |= RF_COMMON; diff --git a/rgmanager/src/daemons/rg_event.c b/rgmanager/src/daemons/rg_event.c deleted file mode 100644 index f614668..0000000 --- a/rgmanager/src/daemons/rg_event.c +++ /dev/null @@ -1,573 +0,0 @@ -/* - Copyright Red Hat, Inc. 2006-2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/** - * resource group event queue. - */ -static event_t *event_queue = NULL; -#ifdef WRAP_LOCKS -static pthread_mutex_t event_queue_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; -static pthread_mutex_t mi_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; -#else -static pthread_mutex_t event_queue_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t mi_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif -static pthread_t event_thread = 0; -static int transition_throttling = 5; -static int central_events = 0; - -extern int running; -extern int shutdown_pending; -static int _master = 0; -static struct dlm_lksb _master_lock; -static int _xid = 0; -static event_master_t *mi = NULL; - -void hard_exit(void); -int init_resource_groups(int); -void flag_shutdown(int sig); -void flag_reconfigure(int sig); - -event_table_t *master_event_table = NULL; - - -void -set_transition_throttling(int nsecs) -{ - if (nsecs < 0) - nsecs = 0; - transition_throttling = nsecs; -} - - -void -set_central_events(int flag) -{ - central_events = flag; -} - - -int -central_events_enabled(void) -{ - return central_events; -} - - -/** - Called to handle the transition of a cluster member from up->down or - down->up. This handles initializing services (in the local node-up case), - exiting due to loss of quorum (local node-down), and service fail-over - (remote node down). This is the distributed node event processor; - for the local-only node event processor, see slang_event.c - - @param nodeID ID of the member which has come up/gone down. - @param nodeStatus New state of the member in question. - @see eval_groups - */ -void -node_event(int local, int nodeID, int nodeStatus, int clean) -{ - if (!running) - return; - - if (local) { - - /* Local Node Event */ - if (nodeStatus == 0) { - clulog(LOG_ERR, "Exiting uncleanly\n"); - hard_exit(); - } - - if (!rg_initialized()) { - if (init_resource_groups(0) != 0) { - clulog(LOG_ERR, - "#36: Cannot initialize services\n"); - hard_exit(); - } - } - - if (shutdown_pending) { - clulog(LOG_NOTICE, "Processing delayed exit signal\n"); - running = 0; - return; - } - setup_signal(SIGINT, flag_shutdown); - setup_signal(SIGTERM, flag_shutdown); - setup_signal(SIGHUP, flag_reconfigure); - - eval_groups(1, nodeID, 1); - return; - } - - /* - * Nothing to do for events from other nodes if we are not ready. - */ - if (!rg_initialized()) { - clulog(LOG_DEBUG, "Services not initialized.\n"); - return; - } - - eval_groups(0, nodeID, nodeStatus); -} - - -/** - Query CCS to see whether a node has fencing enabled or not in - the configuration. This does not check to see if it's in the - fence domain. - */ -int -node_has_fencing(int nodeid) -{ - int ccs_desc; - char *val = NULL; - char buf[1024]; - int ret = 1; - - ccs_desc = ccs_connect(); - if (ccs_desc < 0) { - clulog(LOG_ERR, "Unable to connect to ccsd; cannot handle" - " node event!\n"); - /* Assume node has fencing */ - return 1; - } - - snprintf(buf, sizeof(buf), - "/cluster/clusternodes/clusternode[@nodeid=\"%d\"]" - "/fence/method/device/@name", nodeid); - - if (ccs_get(ccs_desc, buf, &val) != 0) - ret = 0; - if (val) - free(val); - ccs_disconnect(ccs_desc); - return ret; -} - - -/** - Quick query to cman to see if a node has been fenced. - */ -int -node_fenced(int nodeid) -{ - cman_handle_t ch; - int fenced = 0; - uint64_t fence_time; - - ch = cman_init(NULL); - if (cman_get_fenceinfo(ch, nodeid, &fence_time, &fenced, NULL) < 0) - fenced = 0; - - cman_finish(ch); - - return fenced; -} - - -/** - Callback from view-formation when a commit occurs for the Transition- - Master key. - */ -int32_t -master_event_callback(char *key, uint64_t viewno, - void *data, uint32_t datalen) -{ - event_master_t *m; - - m = data; - if (datalen != (uint32_t)sizeof(*m)) { - clulog(LOG_ERR, "%s: wrong size\n", __FUNCTION__); - return 1; - } - - swab_event_master_t(m); - if (m->m_magic != EVENT_MASTER_MAGIC) { - clulog(LOG_ERR, "%s: wrong size\n", __FUNCTION__); - return 1; - } - - if (m->m_nodeid == my_id()) - clulog(LOG_DEBUG, "Master Commit: I am master\n"); - else - clulog(LOG_DEBUG, "Master Commit: %d is master\n", m->m_nodeid); - - pthread_mutex_lock(&mi_mutex); - if (mi) - free(mi); - mi = m; - pthread_mutex_unlock(&mi_mutex); - - return 0; -} - - -/** - Read the Transition-Master key from vf if it exists. If it doesn't, - attempt to become the transition-master. - */ -static int -find_master(void) -{ - event_master_t *masterinfo = NULL; - void *data; - uint32_t sz; - cluster_member_list_t *m; - uint64_t vn; - int master_id = -1; - - m = member_list(); - if (vf_read(m, "Transition-Master", &vn, - (void **)(&data), &sz) < 0) { - clulog(LOG_ERR, "Unable to discover master" - " status\n"); - masterinfo = NULL; - } else { - masterinfo = (event_master_t *)data; - } - free_member_list(m); - - if (masterinfo && (sz >= sizeof(*masterinfo))) { - swab_event_master_t(masterinfo); - if (masterinfo->m_magic == EVENT_MASTER_MAGIC) { - clulog(LOG_DEBUG, "Master Locate: %d is master\n", - masterinfo->m_nodeid); - pthread_mutex_lock(&mi_mutex); - if (mi) - free(mi); - mi = masterinfo; - pthread_mutex_unlock(&mi_mutex); - master_id = masterinfo->m_nodeid; - } - } - - return master_id; -} - - -/** - Return a copy of the cached event_master_t structure to the - caller. - */ -int -event_master_info_cached(event_master_t *mi_out) -{ - if (!central_events || !mi_out) { - errno = -EINVAL; - return -1; - } - - pthread_mutex_lock(&mi_mutex); - if (!mi) { - pthread_mutex_unlock(&mi_mutex); - errno = -ENOENT; - return -1; - } - - memcpy(mi_out, mi, sizeof(*mi)); - pthread_mutex_unlock(&mi_mutex); - return 0; -} - - -/** - Return the node ID of the master. If none exists, become - the master and return our own node ID. - */ -int -event_master(void) -{ - cluster_member_list_t *m = NULL; - event_master_t masterinfo; - int master_id = -1; - - /* We hold this forever. */ - if (_master) - return my_id(); - - m = member_list(); - pthread_mutex_lock(&mi_mutex); - - if (mi) { - master_id = mi->m_nodeid; - pthread_mutex_unlock(&mi_mutex); - if (memb_online(m, master_id)) { - //clulog(LOG_DEBUG, "%d is master\n", mi->m_nodeid); - goto out; - } - } - - pthread_mutex_unlock(&mi_mutex); - - memset(&_master_lock, 0, sizeof(_master_lock)); - if (clu_lock(LKM_EXMODE, &_master_lock, LKF_NOQUEUE, - "Transition-Master") < 0) { - /* not us, find out who is master */ - master_id = find_master(); - goto out; - } - - if (_master_lock.sb_status != 0) { - master_id = -1; - goto out; - } - - _master = 1; - - memset(&masterinfo, 0, sizeof(masterinfo)); - masterinfo.m_magic = EVENT_MASTER_MAGIC; - masterinfo.m_nodeid = my_id(); - masterinfo.m_master_time = (uint64_t)time(NULL); - swab_event_master_t(&masterinfo); - - if (vf_write(m, VFF_IGN_CONN_ERRORS | VFF_RETRY, - "Transition-Master", &masterinfo, - sizeof(masterinfo)) < 0) { - clulog(LOG_ERR, "Unable to advertise master" - " status to all nodes\n"); - } - - master_id = my_id(); -out: - free_member_list(m); - return master_id; -} - - - -void group_event(char *name, uint32_t state, int owner); - -/** - Event handling function. This only stays around as long as - events are on the queue. - */ -void * -_event_thread_f(void *arg) -{ - event_t *ev; - int notice = 0, count = 0; - - while (1) { - pthread_mutex_lock(&event_queue_mutex); - ev = event_queue; - if (ev) - list_remove(&event_queue, ev); - else - break; /* We're outta here */ - - ++count; - /* Event thread usually doesn't hang around. When it's - spawned, sleep for this many seconds in order to let - some events queue up */ - if ((count==1) && transition_throttling && !central_events) - sleep(transition_throttling); - - pthread_mutex_unlock(&event_queue_mutex); - - if (ev->ev_type == EVENT_CONFIG) { - /* - clulog(LOG_NOTICE, "Config Event: %d -> %d\n", - ev->ev.config.cfg_oldversion, - ev->ev.config.cfg_version); - */ - init_resource_groups(1); - free(ev); - continue; - } - - if (central_events) { - /* If the master node died or there isn't - one yet, take the master lock. */ - if (event_master() == my_id()) { - slang_process_event(master_event_table, - ev); - } - free(ev); - continue; - /* ALL OF THE CODE BELOW IS DISABLED - when using central_events */ - } - - if (ev->ev_type == EVENT_RG) { - /* - clulog(LOG_NOTICE, "RG Event: %s %s %d\n", - ev->ev.group.rg_name, - rg_state_str(ev->ev.group.rg_state), - ev->ev.group.rg_owner); - */ - group_event(ev->ev.group.rg_name, - ev->ev.group.rg_state, - ev->ev.group.rg_owner); - } else if (ev->ev_type == EVENT_NODE) { - /* - clulog(LOG_NOTICE, "Node Event: %s %d %s %s\n", - ev->ev.node.ne_local?"Local":"Remote", - ev->ev.node.ne_nodeid, - ev->ev.node.ne_state?"UP":"DOWN", - ev->ev.node.ne_clean?"Clean":"Dirty") - */ - - if (ev->ev.node.ne_state == 0 && - !ev->ev.node.ne_clean && - node_has_fencing(ev->ev.node.ne_nodeid)) { - notice = 0; - while (!node_fenced(ev->ev.node.ne_nodeid)) { - if (!notice) { - notice = 1; - clulog(LOG_INFO, "Waiting for " - "node #%d to be fenced\n", - ev->ev.node.ne_nodeid); - } - sleep(2); - } - - if (notice) - clulog(LOG_INFO, "Node #%d fenced; " - "continuing\n", - ev->ev.node.ne_nodeid); - } - - node_event(ev->ev.node.ne_local, - ev->ev.node.ne_nodeid, - ev->ev.node.ne_state, - ev->ev.node.ne_clean); - } - - free(ev); - } - - if (!central_events || _master) { - clulog(LOG_DEBUG, "%d events processed\n", count); - } - /* Mutex held */ - event_thread = 0; - pthread_mutex_unlock(&event_queue_mutex); - pthread_exit(NULL); -} - - -static void -insert_event(event_t *ev) -{ - pthread_attr_t attrs; - pthread_mutex_lock (&event_queue_mutex); - ev->ev_transaction = ++_xid; - list_insert(&event_queue, ev); - if (event_thread == 0) { - pthread_attr_init(&attrs); - pthread_attr_setinheritsched(&attrs, PTHREAD_INHERIT_SCHED); - pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); - pthread_attr_setstacksize(&attrs, 262144); - - pthread_create(&event_thread, &attrs, _event_thread_f, NULL); - pthread_attr_destroy(&attrs); - } - pthread_mutex_unlock (&event_queue_mutex); -} - - -static event_t * -new_event(void) -{ - event_t *ev; - - while (1) { - ev = malloc(sizeof(*ev)); - if (ev) { - break; - } - sleep(1); - } - memset(ev,0,sizeof(*ev)); - ev->ev_type = EVENT_NONE; - - return ev; -} - - -void -rg_event_q(char *name, uint32_t state, int owner, int last) -{ - event_t *ev = new_event(); - - ev->ev_type = EVENT_RG; - - strncpy(ev->ev.group.rg_name, name, 128); - ev->ev.group.rg_state = state; - ev->ev.group.rg_owner = owner; - ev->ev.group.rg_last_owner = last; - - insert_event(ev); -} - - -void -node_event_q(int local, int nodeID, int state, int clean) -{ - event_t *ev = new_event(); - - ev->ev_type = EVENT_NODE; - ev->ev.node.ne_state = state; - ev->ev.node.ne_local = local; - ev->ev.node.ne_nodeid = nodeID; - ev->ev.node.ne_clean = clean; - insert_event(ev); -} - - -void -config_event_q(int old_version, int new_version) -{ - event_t *ev = new_event(); - - ev->ev_type = EVENT_CONFIG; - ev->ev.config.cfg_version = new_version; - ev->ev.config.cfg_oldversion = old_version; - insert_event(ev); -} - -void -user_event_q(char *svc, int request, - int arg1, int arg2, int target, msgctx_t *ctx) -{ - event_t *ev = new_event(); - - ev->ev_type = EVENT_USER; - strncpy(ev->ev.user.u_name, svc, sizeof(ev->ev.user.u_name)); - ev->ev.user.u_request = request; - ev->ev.user.u_arg1 = arg1; - ev->ev.user.u_arg2 = arg2; - ev->ev.user.u_target = target; - ev->ev.user.u_ctx = ctx; - insert_event(ev); -} - diff --git a/rgmanager/src/daemons/service_op.c b/rgmanager/src/daemons/service_op.c deleted file mode 100644 index 6ee636a..0000000 --- a/rgmanager/src/daemons/service_op.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/* - * Send a message to the target node to start the service. - */ -int svc_start_remote(char *svcName, int request, uint32_t target); -void svc_report_failure(char *); -int get_service_state_internal(char *svcName, rg_state_t *svcStatus); - - -/** - * - */ -int -service_op_start(char *svcName, - int *target_list, - int target_list_len, - int *new_owner) -{ - int target; - int ret, x; - int excl = 0, dep = 0, fail = 0; - rg_state_t svcStatus; - - if (get_service_state_internal(svcName, &svcStatus) < 0) { - return RG_EFAIL; - } - - if (svcStatus.rs_state == RG_STATE_FAILED || - svcStatus.rs_state == RG_STATE_UNINITIALIZED) - return RG_EINVAL; - - for (x = 0; x < target_list_len; x++) { - - target = target_list[x]; - ret = svc_start_remote(svcName, RG_START_REMOTE, - target); - switch (ret) { - case RG_ERUN: - /* Someone stole the service while we were - trying to start it */ - get_rg_state_local(svcName, &svcStatus); - if (new_owner) - *new_owner = svcStatus.rs_owner; - return 0; - case RG_EEXCL: - ++excl; - continue; - case RG_EDEPEND: - ++dep; - continue; - case RG_EFAIL: - ++fail; - continue; - case RG_EABORT: - svc_report_failure(svcName); - return RG_EFAIL; - default: - /* deliberate fallthrough */ - clulog(LOG_ERR, - "#61: Invalid reply from member %d during" - " start operation!\n", target); - case RG_NO: - /* state uncertain */ - clulog(LOG_CRIT, "State Uncertain: svc:%s " - "nid:%d req:%s ret:%d\n", svcName, - target, rg_req_str(RG_START_REMOTE), ret); - return 0; - case 0: - if (new_owner) - *new_owner = target; - clulog(LOG_NOTICE, "Service %s is now running " - "on member %d\n", svcName, (int)target); - return 0; - } - } - - ret = RG_EFAIL; - if (excl == target_list_len) - ret = RG_EEXCL; - else if (dep == target_list_len) - ret = RG_EDEPEND; - - clulog(LOG_INFO, "Start failed; node reports: %d failures, " - "%d exclusive, %d dependency errors\n", fail, excl, dep); - return ret; -} - - -int -service_op_stop(char *svcName, int do_disable, int event_type) -{ - SmMessageSt msg; - int msg_ret; - msgctx_t ctx; - rg_state_t svcStatus; - int msgtarget = my_id(); - - /* Build the message header */ - msg.sm_hdr.gh_magic = GENERIC_HDR_MAGIC; - msg.sm_hdr.gh_command = RG_ACTION_REQUEST; - msg.sm_hdr.gh_arg1 = RG_ACTION_MASTER; - msg.sm_hdr.gh_length = sizeof (SmMessageSt); - - msg.sm_data.d_action = ((!do_disable) ? RG_STOP:RG_DISABLE); - - if (msg.sm_data.d_action == RG_STOP && event_type == EVENT_USER) - msg.sm_data.d_action = RG_STOP_USER; - - strncpy(msg.sm_data.d_svcName, svcName, - sizeof(msg.sm_data.d_svcName)); - msg.sm_data.d_ret = 0; - msg.sm_data.d_svcOwner = 0; - - /* Open a connection to the local node - it will decide what to - do in this case. XXX inefficient; should queue requests - locally and immediately forward requests otherwise */ - - if (get_service_state_internal(svcName, &svcStatus) < 0) - return RG_EFAIL; - if (svcStatus.rs_owner > 0) - msgtarget = svcStatus.rs_owner; - - if (msg_open(MSG_CLUSTER, msgtarget, RG_PORT, &ctx, 2)< 0) { - clulog(LOG_ERR, - "#58: Failed opening connection to member #%d\n", - my_id()); - return -1; - } - - /* Encode */ - swab_SmMessageSt(&msg); - - /* Send stop message to the other node */ - if (msg_send(&ctx, &msg, sizeof (SmMessageSt)) < - (int)sizeof (SmMessageSt)) { - clulog(LOG_ERR, "Failed to send complete message\n"); - msg_close(&ctx); - return -1; - } - - /* Check the response */ - do { - msg_ret = msg_receive(&ctx, &msg, - sizeof (SmMessageSt), 10); - if ((msg_ret == -1 && errno != ETIMEDOUT) || - (msg_ret > 0)) { - break; - } - } while(1); - - if (msg_ret != sizeof (SmMessageSt)) { - clulog(LOG_WARNING, "Strange response size: %d vs %d\n", - msg_ret, (int)sizeof(SmMessageSt)); - return 0; /* XXX really UNKNOWN */ - } - - /* Got a valid response from other node. */ - msg_close(&ctx); - - /* Decode */ - swab_SmMessageSt(&msg); - - return msg.sm_data.d_ret; -} - - -/* - TODO - service_op_migrate() - */ - diff --git a/rgmanager/src/daemons/slang_event.c b/rgmanager/src/daemons/slang_event.c deleted file mode 100644 index 92284b5..0000000 --- a/rgmanager/src/daemons/slang_event.c +++ /dev/null @@ -1,1264 +0,0 @@ -/* - Copyright Red Hat, Inc. 2007 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License version 2 as published - by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -/** - @file S/Lang event handling & intrinsic functions + vars - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -static int __sl_initialized = 0; - -static char **_service_list = NULL; -static int _service_list_len = 0; - -char **get_service_names(int *len); /* from groups.c */ -int get_service_property(char *rg_name, char *prop, char *buf, size_t buflen); -void push_int_array(int *stuff, int len); - - -/* ================================================================ - * Node states - * ================================================================ */ -static const int - _ns_online = 1, - _ns_offline = 0; - -/* ================================================================ - * Event information - * ================================================================ */ -static const int - _ev_none = EVENT_NONE, - _ev_node = EVENT_NODE, - _ev_service = EVENT_RG, - _ev_config = EVENT_CONFIG, - _ev_user = EVENT_USER; - -static const int - _rg_fail = RG_EFAIL, - _rg_success = RG_ESUCCESS, - _rg_edomain = RG_EDOMAIN, - _rg_edepend = RG_EDEPEND, - _rg_eabort = RG_EABORT, - _rg_einval = RG_EINVAL, - _rg_erun = RG_ERUN; - -static int - _stop_processing = 0, - _my_node_id = 0, - _node_state = 0, - _node_id = 0, - _node_clean = 0, - _service_owner = 0, - _service_last_owner = 0, - _service_restarts_exceeded = 0, - _user_request = 0, - _user_arg1 = 0, - _user_arg2 = 0, - _user_return = 0, - _rg_err = 0, - _event_type = 0; - -static char - *_node_name = NULL, - *_service_name = NULL, - *_service_state = NULL, - *_rg_err_str = "No Error"; - -static int - _user_enable = RG_ENABLE, - _user_disable = RG_DISABLE, - _user_stop = RG_STOP_USER, /* From clusvcadm */ - _user_relo = RG_RELOCATE, - _user_restart = RG_RESTART, - _user_migrate = RG_MIGRATE; - - -SLang_Intrin_Var_Type rgmanager_vars[] = -{ - /* Log levels (constants) */ - - /* Node state information */ - MAKE_VARIABLE("NODE_ONLINE", &_ns_online, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("NODE_OFFLINE", &_ns_offline, SLANG_INT_TYPE, 1), - - /* Node event information */ - MAKE_VARIABLE("node_self", &_my_node_id, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("node_state", &_node_state, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("node_id", &_node_id, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("node_name", &_node_name, SLANG_STRING_TYPE,1), - MAKE_VARIABLE("node_clean", &_node_clean, SLANG_INT_TYPE, 1), - - /* Service event information */ - MAKE_VARIABLE("service_name", &_service_name, SLANG_STRING_TYPE,1), - MAKE_VARIABLE("service_state", &_service_state,SLANG_STRING_TYPE,1), - MAKE_VARIABLE("service_owner", &_service_owner,SLANG_INT_TYPE, 1), - MAKE_VARIABLE("service_last_owner", &_service_last_owner, - SLANG_INT_TYPE, 1), - MAKE_VARIABLE("service_restarts_exceeded", &_service_restarts_exceeded, - SLANG_INT_TYPE, 1), - - /* User event information */ - MAKE_VARIABLE("user_request", &_user_request, SLANG_INT_TYPE,1), - MAKE_VARIABLE("user_arg1", &_user_arg1, SLANG_INT_TYPE,1), - MAKE_VARIABLE("user_arg2", &_user_arg2, SLANG_INT_TYPE,1), - MAKE_VARIABLE("user_service", &_service_name, SLANG_STRING_TYPE,1), - MAKE_VARIABLE("user_target", &_service_owner,SLANG_INT_TYPE, 1), - /* Return code to user requests; i.e. clusvcadm */ - MAKE_VARIABLE("user_return", &_user_return, SLANG_INT_TYPE, 0), - - /* General event information */ - MAKE_VARIABLE("event_type", &_event_type, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("EVENT_NONE", &_ev_none, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("EVENT_NODE", &_ev_node, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("EVENT_CONFIG", &_ev_config, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("EVENT_SERVICE", &_ev_service, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("EVENT_USER", &_ev_user, SLANG_INT_TYPE, 1), - - /* User request constants */ - MAKE_VARIABLE("USER_ENABLE", &_user_enable, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("USER_DISABLE", &_user_disable, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("USER_STOP", &_user_stop, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("USER_RELOCATE", &_user_relo, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("USER_RESTART", &_user_restart, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("USER_MIGRATE", &_user_migrate, SLANG_INT_TYPE, 1), - - /* Errors */ - MAKE_VARIABLE("rg_error", &_rg_err, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("rg_error_string",&_rg_err_str, SLANG_STRING_TYPE,1), - - /* From constants.c */ - MAKE_VARIABLE("FAIL", &_rg_fail, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("SUCCESS", &_rg_success, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("ERR_ABORT", &_rg_eabort, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("ERR_INVALID", &_rg_einval, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("ERR_DEPEND", &_rg_edepend, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("ERR_DOMAIN", &_rg_edomain, SLANG_INT_TYPE, 1), - MAKE_VARIABLE("ERR_RUNNING", &_rg_erun, SLANG_INT_TYPE, 1), - - SLANG_END_INTRIN_VAR_TABLE -}; - - -#define rg_error(errortype) \ -do { \ - _rg_err = errortype; \ - _rg_err_str = ##errortype; \ -} while(0) - - -int -get_service_state_internal(char *svcName, rg_state_t *svcStatus) -{ - struct dlm_lksb lock; - char buf[32]; - - get_rg_state_local(svcName, svcStatus); - if (svcStatus->rs_state == RG_STATE_UNINITIALIZED) { - if (rg_lock(svcName, &lock) < 0) { - errno = ENOLCK; - return -1; - } - - if (get_rg_state(svcName, svcStatus) < 0) { - errno = ENOENT; - rg_unlock(&lock); - return -1; - } - - /* We got a copy from another node - don't flip the state */ - if (svcStatus->rs_transition) { - rg_unlock(&lock); - return 0; - } - - /* Finish initializing the service state */ - svcStatus->rs_transition = (uint64_t)time(NULL); - - if (get_service_property(svcName, "autostart", - buf, sizeof(buf)) == 0) { - if (buf[0] == '0' || !strcasecmp(buf, "no")) { - svcStatus->rs_state = RG_STATE_DISABLED; - } else { - svcStatus->rs_state = RG_STATE_STOPPED; - } - } - - set_rg_state(svcName, svcStatus); - - rg_unlock(&lock); - } - - return 0; -} - - -/* - (restarts, last_owner, owner, state) = get_service_status(servicename) - */ -void -sl_service_status(char *svcName) -{ - rg_state_t svcStatus; - int restarts_exceeded = 0; - char *state_str; - - if (get_service_state_internal(svcName, &svcStatus) < 0) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to get status for %s", - __FUNCTION__, - svcName); - return; - } - - restarts_exceeded = check_restart(svcName); - if (SLang_push_integer(restarts_exceeded) < 0) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to push restarts_exceeded %s", - __FUNCTION__, - svcName); - return; - } - - if (SLang_push_integer(svcStatus.rs_restarts) < 0) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to push restarts for %s", - __FUNCTION__, - svcName); - return; - } - - if (SLang_push_integer(svcStatus.rs_last_owner) < 0) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to push last owner of %s", - __FUNCTION__, - svcName); - return; - } - - switch(svcStatus.rs_state) { - case RG_STATE_DISABLED: - case RG_STATE_STOPPED: - case RG_STATE_FAILED: - case RG_STATE_RECOVER: - case RG_STATE_ERROR: - /* There is no owner for these states. Ever. */ - svcStatus.rs_owner = -1; - } - - if (SLang_push_integer(svcStatus.rs_owner) < 0) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to push owner of %s", - __FUNCTION__, - svcName); - return; - } - - state_str = strdup(rg_state_str(svcStatus.rs_state)); - if (!state_str) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to duplicate state of %s", - __FUNCTION__, - svcName); - return; - } - - if (SLang_push_malloced_string(state_str) < 0) { - SLang_verror(SL_RunTime_Error, - "%s: Failed to push state of %s", - __FUNCTION__, - svcName); - free(state_str); - } -} - - -/** - (nofailback, restricted, ordered, nodelist) = service_domain_info(svcName); - */ -void -sl_domain_info(char *svcName) -{ - int *nodelist = NULL, listlen; - char buf[64]; - int flags = 0; - - if (get_service_property(svcName, "domain", buf, sizeof(buf)) < 0) { - /* no nodes */ - SLang_push_integer(0); - - /* no domain? */ -/* - str = strdup("none"); - if (SLang_push_malloced_string(str) < 0) { - free(state_str); - return; - } -*/ - - /* not ordered */ - SLang_push_integer(0); - /* not restricted */ - SLang_push_integer(0); - /* nofailback not set */ - SLang_push_integer(0); - } - - if (node_domain_set_safe(buf, &nodelist, &listlen, &flags) < 0) { - SLang_push_integer(0); - SLang_push_integer(0); - SLang_push_integer(0); - SLang_push_integer(0); - return; - } - - SLang_push_integer(!!(flags & FOD_NOFAILBACK)); - SLang_push_integer(!!(flags & FOD_RESTRICTED)); - SLang_push_integer(!!(flags & FOD_ORDERED)); - - push_int_array(nodelist, listlen); - free(nodelist); - -/* - str = strdup(buf); - if (SLang_push_malloced_string(str) < 0) { - free(state_str); - return; - } -*/ -} - - -static int -get_int_array(int **nodelist, int *len) -{ - SLang_Array_Type *a = NULL; - SLindex_Type i; - int *nodes = NULL, t, ret = -1; - - if (!nodelist || !len) - return -1; - - t = SLang_peek_at_stack(); - if (t == SLANG_INT_TYPE) { - - nodes = malloc(sizeof(int) * 1); - if (!nodes) - goto out; - if (SLang_pop_integer(&nodes[0]) < 0) - goto out; - - *len = 1; - ret = 0; - - } else if (t == SLANG_ARRAY_TYPE) { - if (SLang_pop_array_of_type(&a, SLANG_INT_TYPE) < 0) - goto out; - if (a->num_dims > 1) - goto out; - if (a->dims[0] < 0) - goto out; - nodes = malloc(sizeof(int) * a->dims[0]); - if (!nodes) - goto out; - for (i = 0; i < a->dims[0]; i++) - SLang_get_array_element(a, &i, &nodes[i]); - - *len = a->dims[0]; - ret = 0; - } - -out: - if (a) - SLang_free_array(a); - if (ret == 0) { - *nodelist = nodes; - } else { - if (nodes) - free(nodes); - } - - return ret; -} - - -/** - get_service_property(service_name, property) - */ -char * -sl_service_property(char *svcName, char *prop) -{ - char buf[96]; - - if (get_service_property(svcName, prop, buf, sizeof(buf)) < 0) - return NULL; - - /* does this work or do I have to push a malloce'd string? */ - return strdup(buf); -} - - -/** - usage: - - stop_service(name, disable_flag); - */ -int -sl_stop_service(void) -{ - char *svcname = NULL; - int nargs, t, ret = -1; - int do_disable = 0; - - nargs = SLang_Num_Function_Args; - - /* Takes one or two args */ - if (nargs <= 0 || nargs > 2) { - SLang_verror(SL_Syntax_Error, - "%s: Wrong # of args (%d), must be 1 or 2\n", - __FUNCTION__, - nargs); - return -1; - } - - if (nargs == 2) { - t = SLang_peek_at_stack(); - if (t != SLANG_INT_TYPE) { - SLang_verror(SL_Syntax_Error, - "%s: expected type %d got %d\n", - __FUNCTION__, SLANG_INT_TYPE, t); - goto out; - } - - if (SLang_pop_integer(&do_disable) < 0) { - SLang_verror(SL_Syntax_Error, - "%s: Failed to pop integer from stack!\n", - __FUNCTION__); - goto out; - } - - --nargs; - } - - if (nargs == 1) { - t = SLang_peek_at_stack(); - if (t != SLANG_STRING_TYPE) { - SLang_verror(SL_Syntax_Error, - "%s: expected type %d got %d\n", - __FUNCTION__, - SLANG_STRING_TYPE, t); - goto out; - } - - if (SLpop_string(&svcname) < 0) { - SLang_verror(SL_Syntax_Error, - "%s: Failed to pop string from stack!\n", - __FUNCTION__); - goto out; - } - } - - /* TODO: Meat of function goes here */ - ret = service_op_stop(svcname, do_disable, _event_type); -out: - if (svcname) - free(svcname); - _user_return = ret; - return ret; -} - - -/** - usage: - - start_service(name, ordered_node_list_allowed, - node_list_illegal) - */ -int -sl_start_service(void) -{ - char *svcname = NULL; - int *pref_list = NULL, pref_list_len = 0; - int *illegal_list = NULL, illegal_list_len = 0; - int nargs, t, newowner = 0, ret = -1; - - nargs = SLang_Num_Function_Args; - - /* Takes one, two, or three */ - if (nargs <= 0 || nargs > 3) { - SLang_verror(SL_Syntax_Error, - "%s: Wrong # of args (%d), must be 1 or 2\n", - __FUNCTION__, nargs); - return -1; - } - - if (nargs == 3) { - if (get_int_array(&illegal_list, &illegal_list_len) < 0) - goto out; - --nargs; - } - - if (nargs == 2) { - if (get_int_array(&pref_list, &pref_list_len) < 0) - goto out; - --nargs; - } - - if (nargs == 1) { - /* Just get the service name */ - t = SLang_peek_at_stack(); - if (t != SLANG_STRING_TYPE) { - SLang_verror(SL_Syntax_Error, - "%s: expected type %d got %d\n", - __FUNCTION__, - SLANG_STRING_TYPE, t); - goto out; - } - - if (SLpop_string(&svcname) < 0) - goto out; - } - - /* TODO: Meat of function goes here */ - ret = service_op_start(svcname, pref_list, - pref_list_len, &newowner); - - if (ret == 0 && newowner > 0) - ret = newowner; -out: - if (svcname) - free(svcname); - if (illegal_list) - free(illegal_list); - if (pref_list) - free(pref_list); - _user_return = ret; - return ret; -} - - -/* Take an array of integers given its length and - push it on to the S/Lang stack */ -void -push_int_array(int *stuff, int len) -{ - SLindex_Type arrlen, x; - SLang_Array_Type *arr; - int i; - - arrlen = len; - arr = SLang_create_array(SLANG_INT_TYPE, 0, NULL, &arrlen, 1); - if (!arr) - return; - - x = 0; - for (x = 0; x < len; x++) { - i = stuff[x]; - SLang_set_array_element(arr, &x, &i); - } - SLang_push_array(arr, 1); -} - - -/* - Returns an array of rgmanager-visible nodes online. How cool is that? - */ -void -sl_nodes_online(void) -{ - int i, *nodes, nodecount = 0; - - cluster_member_list_t *membership = member_list(); - if (!membership) - return; - nodes = malloc(sizeof(int) * membership->cml_count); - if (!nodes) - return; - - nodecount = 0; - for (i = 0; i < membership->cml_count; i++) { - if (membership->cml_members[i].cn_member && - membership->cml_members[i].cn_nodeid != 0) { - nodes[nodecount] = membership->cml_members[i].cn_nodeid; - ++nodecount; - } - } - free_member_list(membership); - push_int_array(nodes, nodecount); - free(nodes); -} - - -/* - Returns an array of rgmanager-defined services, in type:name format - We allocate/kill this list *once* per event to ensure we don't leak - memory - */ -void -sl_service_list(void) -{ - SLindex_Type svccount = _service_list_len, x = 0; - SLang_Array_Type *svcarray; - - svcarray = SLang_create_array(SLANG_STRING_TYPE, 0, NULL, &svccount, 1); - if (!svcarray) - return; - - for (; x < _service_list_len; x++) - SLang_set_array_element(svcarray, &x, &_service_list[x]); - - SLang_push_array(svcarray, 1); -} - - -/* s_union hook (see sets.c) */ -void -sl_union(void) -{ - int *arr1 = NULL, a1len = 0; - int *arr2 = NULL, a2len = 0; - int *ret = NULL, retlen = 0; - int nargs = SLang_Num_Function_Args; - - if (nargs != 2) - return; - - /* Remember: args on the stack are reversed */ - get_int_array(&arr2, &a2len); - get_int_array(&arr1, &a1len); - s_union(arr1, a1len, arr2, a2len, &ret, &retlen); - push_int_array(ret, retlen); - if (arr1) - free(arr1); - if (arr2) - free(arr2); - if (ret) - free(ret); - return; -} - - -/* s_intersection hook (see sets.c) */ -void -sl_intersection(void) -{ - int *arr1 = NULL, a1len = 0; - int *arr2 = NULL, a2len = 0; - int *ret = NULL, retlen = 0; - int nargs = SLang_Num_Function_Args; - - if (nargs != 2) - return; - - /* Remember: args on the stack are reversed */ - get_int_array(&arr2, &a2len); - get_int_array(&arr1, &a1len); - s_intersection(arr1, a1len, arr2, a2len, &ret, &retlen); - push_int_array(ret, retlen); - if (arr1) - free(arr1); - if (arr2) - free(arr2); - if (ret) - free(ret); - return; -} - - -/* s_delta hook (see sets.c) */ -void -sl_delta(void) -{ - int *arr1 = NULL, a1len = 0; - int *arr2 = NULL, a2len = 0; - int *ret = NULL, retlen = 0; - int nargs = SLang_Num_Function_Args; - - if (nargs != 2) - return; - - /* Remember: args on the stack are reversed */ - get_int_array(&arr2, &a2len); - get_int_array(&arr1, &a1len); - s_delta(arr1, a1len, arr2, a2len, &ret, &retlen); - push_int_array(ret, retlen); - if (arr1) - free(arr1); - if (arr2) - free(arr2); - if (ret) - free(ret); - return; -} - - -/* s_subtract hook (see sets.c) */ -void -sl_subtract(void) -{ - int *arr1 = NULL, a1len = 0; - int *arr2 = NULL, a2len = 0; - int *ret = NULL, retlen = 0; - int nargs = SLang_Num_Function_Args; - - if (nargs != 2) - return; - - /* Remember: args on the stack are reversed */ - get_int_array(&arr2, &a2len); - get_int_array(&arr1, &a1len); - s_subtract(arr1, a1len, arr2, a2len, &ret, &retlen); - push_int_array(ret, retlen); - if (arr1) - free(arr1); - if (arr2) - free(arr2); - if (ret) - free(ret); - return; -} - - -/* Shuffle array (see sets.c) */ -void -sl_shuffle(void) -{ - int *arr1 = NULL, a1len = 0; - int nargs = SLang_Num_Function_Args; - - if (nargs != 1) - return; - - /* Remember: args on the stack are reversed */ - get_int_array(&arr1, &a1len); - s_shuffle(arr1, a1len); - push_int_array(arr1, a1len); - if (arr1) - free(arr1); - return; -} - - -/* Converts an int array to a string so we can log it in one shot */ -static int -array_to_string(char *buf, int buflen, int *array, int arraylen) -{ - char intbuf[16]; - int x, len, remain = buflen; - - memset(intbuf, 0, sizeof(intbuf)); - memset(buf, 0, buflen); - len = snprintf(buf, buflen - 1, "[ "); - if (len == buflen) - return -1; - - remain -= len; - for (x = 0; x < arraylen; x++) { - len = snprintf(intbuf, sizeof(intbuf) - 1, "%d ", array[x]); - remain -= len; - if (remain > 0) { - strncat(buf, intbuf, len); - } else { - return -1; - } - } - - len = snprintf(intbuf, sizeof(intbuf) - 1 , "]"); - remain -= len; - if (remain > 0) { - strncat(buf, intbuf, len); - } else { - return -1; - } - return (buflen - remain); -} - - -/** - Start at the end of the arg list and work backwards, prepending a string. - This does not support standard clulog / printf formattting; rather, we - just allow integers / strings to be mixed on the stack, figure out the - type, convert it to the right type, and prepend it on to our log message - - The last must be a log level, as specified above: - LOG_DEBUG - ... - LOG_EMERG - - This matches up with clulog / syslog mappings in the var table; the above - are constants in the S/Lang interpreter. Any number of arguments may - be provided. Examples are: - - log(LOG_INFO, "String", 1, "string2"); - - Result: String1string2 - - log(LOG_INFO, "String ", 1, " string2"); - - Result: String 1 string2 - - */ -void -sl_clulog(int level) -{ - int t, nargs, len; - //int level; - int s_intval; - char *s_strval; - int *nodes = 0, nlen = 0; - char logbuf[512]; - char tmp[256]; - int need_free; - int remain = sizeof(logbuf)-2; - - nargs = SLang_Num_Function_Args; - if (nargs < 1) - return; - - memset(logbuf, 0, sizeof(logbuf)); - memset(tmp, 0, sizeof(tmp)); - logbuf[sizeof(logbuf)-1] = 0; - logbuf[sizeof(logbuf)-2] = '\n'; - - while (nargs && (t = SLang_peek_at_stack()) >= 0 && remain) { - switch(t) { - case SLANG_ARRAY_TYPE: - if (get_int_array(&nodes, &nlen) < 0) - return; - len = array_to_string(tmp, sizeof(tmp), - nodes, nlen); - if (len < 0) { - free(nodes); - return; - } - free(nodes); - break; - case SLANG_INT_TYPE: - if (SLang_pop_integer(&s_intval) < 0) - return; - len=snprintf(tmp, sizeof(tmp) - 1, "%d", s_intval); - break; - case SLANG_STRING_TYPE: - need_free = 0; - if (SLpop_string(&s_strval) < 0) - return; - len=snprintf(tmp, sizeof(tmp) - 1, "%s", s_strval); - SLfree(s_strval); - break; - default: - need_free = 0; - len=snprintf(tmp, sizeof(tmp) - 1, - "{UnknownType %d}", t); - break; - } - - --nargs; - - if (len > remain) - return; - remain -= len; - - memcpy(&logbuf[remain], tmp, len); - } - -#if 0 - printf("<%d> %s\n", level, &logbuf[remain]); -#endif - clulog(level, &logbuf[remain]); - return; -} - - -/* Logging functions */ -void -sl_log_debug(void) -{ - sl_clulog(LOG_DEBUG); -} - - -void -sl_log_info(void) -{ - sl_clulog(LOG_INFO); -} - - -void -sl_log_notice(void) -{ - sl_clulog(LOG_NOTICE); -} - - -void -sl_log_warning(void) -{ - sl_clulog(LOG_WARNING); -} - - -void -sl_log_err(void) -{ - sl_clulog(LOG_ERR); -} - - -void -sl_log_crit(void) -{ - sl_clulog(LOG_CRIT); -} - - -void -sl_log_alert(void) -{ - sl_clulog(LOG_ALERT); -} - - -void -sl_log_emerg(void) -{ - sl_clulog(LOG_EMERG); -} - - -void -sl_die(void) -{ - _stop_processing = 1; - return; -} - - -SLang_Intrin_Fun_Type rgmanager_slang[] = -{ - MAKE_INTRINSIC_0("nodes_online", sl_nodes_online, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("service_list", sl_service_list, SLANG_VOID_TYPE), - - MAKE_INTRINSIC_SS("service_property", sl_service_property, - SLANG_STRING_TYPE), - MAKE_INTRINSIC_S("service_domain_info", sl_domain_info, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("service_stop", sl_stop_service, SLANG_INT_TYPE), - MAKE_INTRINSIC_0("service_start", sl_start_service, SLANG_INT_TYPE), - MAKE_INTRINSIC_S("service_status", sl_service_status, - SLANG_VOID_TYPE), - - /* Node list manipulation */ - MAKE_INTRINSIC_0("union", sl_union, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("intersection", sl_intersection, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("delta", sl_delta, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("subtract", sl_subtract, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("shuffle", sl_shuffle, SLANG_VOID_TYPE), - - /* Logging */ - MAKE_INTRINSIC_0("debug", sl_log_debug, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("info", sl_log_info, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("notice", sl_log_notice, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("warning", sl_log_warning, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("err", sl_log_err, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("crit", sl_log_crit, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("alert", sl_log_alert, SLANG_VOID_TYPE), - MAKE_INTRINSIC_0("emerg", sl_log_emerg, SLANG_VOID_TYPE), - - MAKE_INTRINSIC_0("stop_processing", sl_die, SLANG_VOID_TYPE), - - SLANG_END_INTRIN_FUN_TABLE -}; - - -/* Hook for when we generate a script error */ -void -rgmanager_slang_error_hook(char *errstr) -{ - /* Don't just send errstr, because it might contain - "%s" for example which would result in a crash! - plus, we like the newline :) */ - clulog(LOG_ERR, "[S/Lang] %s\n", errstr); -} - - - -/* ================================================================ - * S/Lang initialization - * ================================================================ */ -int -do_init_slang(void) -{ - SLang_init_slang(); - SLang_init_slfile(); - - if (SLadd_intrin_fun_table(rgmanager_slang, NULL) < 0) - return 1; - if (SLadd_intrin_var_table (rgmanager_vars, NULL) < 0) - return 1; - - /* TODO: Make rgmanager S/Lang conformant. Though, it - might be a poor idea to provide access to all the - S/Lang libs */ - SLpath_set_load_path(RESOURCE_ROOTDIR); - - _my_node_id = my_id(); - __sl_initialized = 1; - - SLang_Error_Hook = rgmanager_slang_error_hook; - - return 0; -} - - -/* - Execute a script / file and return the result to the caller - Log an error if we receive one. - */ -int -do_slang_run(const char *file, const char *script) -{ - int ret = 0; - - if (file) - ret = SLang_load_file((char *)file); - else - ret = SLang_load_string((char *)script); - - if (ret < 0) { - clulog(LOG_ERR, "[S/Lang] Script Execution Failure\n"); - SLang_restart(1); - } - - return ret; -} - - -int -S_node_event(const char *file, const char *script, int nodeid, - int state, int clean) -{ - int ret; - cluster_member_list_t *membership = member_list(); - - _node_name = strdup(memb_id_to_name(membership, nodeid)); - _node_state = state; - _node_clean = clean; - _node_id = nodeid; - free_member_list(membership); - - ret = do_slang_run(file, script); - - _node_state = 0; - _node_clean = 0; - _node_id = 0; - if (_node_name) - free(_node_name); - _node_name = NULL; - - return ret; -} - - -int -S_service_event(const char *file, const char *script, char *name, - int state, int owner, int last_owner) -{ - int ret; - - _service_name = name; - _service_state = (char *)rg_state_str(state); - _service_owner = owner; - _service_last_owner = last_owner; - _service_restarts_exceeded = check_restart(name); - - switch(state) { - case RG_STATE_DISABLED: - case RG_STATE_STOPPED: - case RG_STATE_FAILED: - case RG_STATE_RECOVER: - case RG_STATE_ERROR: - /* There is no owner for these states. Ever. */ - _service_owner = -1; - } - - ret = do_slang_run(file, script); - - _service_name = NULL; - _service_state = 0; - _service_owner = 0; - _service_last_owner = 0; - _service_restarts_exceeded = 0; - - return ret; -} - - -int -S_user_event(const char *file, const char *script, char *name, - int request, int arg1, int arg2, int target, msgctx_t *ctx) -{ - int ret = RG_SUCCESS; - - _service_name = name; - _service_owner = target; - _user_request = request; - _user_arg1 = arg1; - _user_arg2 = arg2; - _user_return = 0; - - ret = do_slang_run(file, script); - if (ret < 0) { - _user_return = RG_ESCRIPT; - } - - _service_name = NULL; - _service_owner = 0; - _user_request = 0; - _user_arg1 = 0; - _user_arg2 = 0; - - /* XXX Send response code to caller - that 0 should be the - new service owner, if there is one */ - if (ctx) { - if (_user_return > 0) { - /* sl_start_service() squashes return code and - node ID into one value. <0 = error, >0 = - success, return-value == node id running - service */ - send_ret(ctx, name, 0, request, _user_return); - } else { - /* return value < 0 ... pass directly back; - don't transpose */ - send_ret(ctx, name, _user_return, request, 0); - } - msg_close(ctx); - msg_free_ctx(ctx); - } - _user_return = 0; - return ret; -} - - -int -slang_do_script(event_t *pattern, event_t *ev) -{ - _event_type = ev->ev_type; - int ret = 0; - - switch(ev->ev_type) { - case EVENT_NODE: - ret = S_node_event( - pattern->ev_script_file, - pattern->ev_script, - ev->ev.node.ne_nodeid, - ev->ev.node.ne_state, - ev->ev.node.ne_clean); - break; - case EVENT_RG: - ret = S_service_event( - pattern->ev_script_file, - pattern->ev_script, - ev->ev.group.rg_name, - ev->ev.group.rg_state, - ev->ev.group.rg_owner, - ev->ev.group.rg_last_owner); - break; - case EVENT_USER: - ret = S_user_event( - pattern->ev_script_file, - pattern->ev_script, - ev->ev.user.u_name, - ev->ev.user.u_request, - ev->ev.user.u_arg1, - ev->ev.user.u_arg2, - ev->ev.user.u_target, - ev->ev.user.u_ctx); - break; - default: - break; - } - - _event_type = EVENT_NONE; - return ret; -} - - - -/** - Process an event given our event table and the event that - occurred. Note that the caller is responsible for freeing the - event - do not free (ev) ... - */ -int -slang_process_event(event_table_t *event_table, event_t *ev) -{ - int x, y; - event_t *pattern; - - if (!__sl_initialized) - do_init_slang(); - - /* Get the service list once before processing events */ - if (!_service_list || !_service_list_len) - _service_list = get_service_names(&_service_list_len); - - _stop_processing = 0; - for (x = 1; x <= event_table->max_prio; x++) { - list_for(&event_table->entries[x], pattern, y) { - if (event_match(pattern, ev)) - slang_do_script(pattern, ev); - if (_stop_processing) - goto out; - } - } - - /* Default level = 0 */ - list_for(&event_table->entries[0], pattern, y) { - if (event_match(pattern, ev)) - slang_do_script(pattern, ev); - if (_stop_processing) - goto out; - } - -out: - /* Free the service list */ - if (_service_list) { - for(x = 0; x < _service_list_len; x++) { - free(_service_list[x]); - } - free(_service_list); - _service_list = NULL; - _service_list_len = 0; - } - - return 0; -} diff --git a/rgmanager/src/daemons/test.c b/rgmanager/src/daemons/test.c index 55dc63d..fa77edd 100644 --- a/rgmanager/src/daemons/test.c +++ b/rgmanager/src/daemons/test.c @@ -1,21 +1,3 @@ -/* - Copyright Red Hat, Inc. 2004-2006 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ #include #include #include @@ -84,22 +66,20 @@ test_func(int argc, char **argv) fod_t *domains = NULL; resource_rule_t *rulelist = NULL, *currule; resource_t *reslist = NULL, *curres; - resource_node_t *tree = NULL, *tmp, *rn = NULL; + resource_node_t *tree = NULL; int ccsfd, ret = 0, rules = 0; - event_table_t *events = NULL; fprintf(stderr,"Running in test mode.\n"); conf_setconfig(argv[1]); ccsfd = ccs_lock(); - if (ccsfd < 0) { + if (ccsfd == FAIL) { printf("Error parsing %s\n", argv[1]); goto out; } load_resource_rules(agentpath, &rulelist); construct_domains(ccsfd, &domains); - construct_events(ccsfd, &events); load_resources(ccsfd, &reslist, &rulelist); build_resource_tree(ccsfd, &tree, &rulelist, &reslist); @@ -134,11 +114,6 @@ test_func(int argc, char **argv) printf("=== Failover Domains ===\n"); print_domains(&domains); } - - if (events) { - printf("=== Event Triggers ===\n"); - print_events(events); - } } ccs_unlock(ccsfd); @@ -153,13 +128,6 @@ test_func(int argc, char **argv) goto out; } - list_do(&tree, tmp) { - if (tmp->rn_resource == curres) { - rn = tmp; - break; - } - } while (!list_done(&tree, tmp)); - if (!strcmp(argv[1], "start")) { printf("Starting %s...\n", argv[3]); @@ -179,29 +147,12 @@ test_func(int argc, char **argv) } printf("Stop of %s complete\n", argv[3]); goto out; - } else if (!strcmp(argv[1], "migrate")) { - printf("Migrating %s to %s...\n", argv[3], argv[4]); - - #if 0 - if (!group_migratory(curres)) { - printf("No can do\n"); - ret = -1; - goto out; - } - #endif - - if (res_exec(rn, RS_MIGRATE, argv[4], 0)) { - ret = -1; - goto out; - } - printf("Migration of %s complete\n", argv[3]); - goto out; } else if (!strcmp(argv[1], "status")) { printf("Checking status of %s...\n", argv[3]); - ret = res_status(&tree, curres, NULL); - if (ret) { + if (res_status(&tree, curres, NULL)) { printf("Status check of %s failed\n", argv[3]); + ret = -1; goto out; } printf("Status of %s is good\n", argv[3]); @@ -209,7 +160,6 @@ test_func(int argc, char **argv) } out: - deconstruct_events(&events); deconstruct_domains(&domains); destroy_resource_tree(&tree); destroy_resources(&reslist); @@ -225,9 +175,7 @@ tree_delta_test(int argc, char **argv) resource_rule_t *rulelist = NULL, *currule, *rulelist2 = NULL; resource_t *reslist = NULL, *curres, *reslist2 = NULL; resource_node_t *tree = NULL, *tree2 = NULL; - resource_node_t *tn; - int ccsfd, ret = 0, need_init, need_kill; - char rg[64]; + int ccsfd, ret = 0; if (argc < 2) { printf("Operation requires two arguments\n"); @@ -286,57 +234,6 @@ tree_delta_test(int argc, char **argv) print_resource_tree(&tree); printf("=== New Resource Tree ===\n"); print_resource_tree(&tree2); - printf("=== Operations (down-phase) ===\n"); - list_do(&tree, tn) { - res_build_name(rg, sizeof(rg), tn->rn_resource); - /* Set state to uninitialized if we're killing a RG */ - need_init = 0; - - /* Set state to uninitialized if we're killing a RG */ - need_kill = 0; - if (tn->rn_resource->r_flags & RF_NEEDSTOP) { - need_kill = 1; - printf("[kill] "); - } - - if (!tn->rn_child && ((tn->rn_resource->r_rule->rr_flags & - RF_DESTROY) == 0) && group_migratory(&reslist, &tree, rg) && - need_kill == 1) { - /* Do something smart here: flip state? */ - printf("[no-op] %s was removed from the config, but I am not stopping it.\n", - rg); - continue; - } - - res_condstop(&tn, tn->rn_resource, NULL); - } while (!list_done(&tree, tn)); - printf("=== Operations (up-phase) ===\n"); - list_do(&tree2, tn) { - res_build_name(rg, sizeof(rg), tn->rn_resource); - /* New RG. We'll need to initialize it. */ - need_init = 0; - if (!(tn->rn_resource->r_flags & RF_RECONFIG) && - (tn->rn_resource->r_flags & RF_NEEDSTART)) - need_init = 1; - - if (need_init) { - printf("[init] "); - } - - if (!tn->rn_child && ((tn->rn_resource->r_rule->rr_flags & - RF_INIT) == 0) && group_migratory(&reslist2, &tree2, rg) && - need_init == 1) { - /* Do something smart here? */ - printf("[noop] %s was added, but I am not initializing it\n", rg); - continue; - } - - if (need_init) { - res_stop(&tn, tn->rn_resource, NULL); - } else { - res_condstart(&tn, tn->rn_resource, NULL); - } - } while (!list_done(&tree2, tn)); out: destroy_resource_tree(&tree2); @@ -392,7 +289,6 @@ main(int argc, char **argv) goto out; } else if (!strcmp(argv[1], "delta")) { shift(); - _no_op_mode(1); ret = tree_delta_test(argc, argv); goto out; } else { @@ -416,5 +312,5 @@ main(int argc, char **argv) out: xmlCleanupParser(); malloc_dump_table(); - return ret; + return 0; } diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile index c1f4a71..d543468 100644 --- a/rgmanager/src/resources/Makefile +++ b/rgmanager/src/resources/Makefile @@ -21,12 +21,11 @@ RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \ script.sh netfs.sh clusterfs.sh smb.sh \ apache.sh openldap.sh samba.sh mysql.sh \ postgres-8.sh tomcat-5.sh lvm.sh lvm_by_lv.sh lvm_by_vg.sh \ - SAPInstance SAPDatabase named.sh \ - oracledb.sh + SAPInstance SAPDatabase oracledb.sh METADATA=apache.metadata openldap.metadata samba.metadata \ mysql.metadata postgres-8.metadata tomcat-5.metadata \ - named.metadata lvm.metadata + lvm.metadata TARGETS=${RESOURCES} ocf-shellfuncs svclib_nfslock @@ -35,9 +34,6 @@ UTIL_TARGETS= \ utils/httpd-parse-config.pl utils/tomcat-parse-config.pl \ utils/member_util.sh -EVENT_TARGETS= \ - default_event_script.sl - all: install: all @@ -48,7 +44,6 @@ install: all install $(TARGETS) ${sharedir} install $(UTIL_TARGETS) ${sharedir}/utils install -m 644 $(METADATA) ${sharedir} - install -m 644 $(EVENT_TARGETS) ${sharedir} uninstall: ${UNINSTALL} ${UTIL_TARGETS} ${sharedir}/utils diff --git a/rgmanager/src/resources/clusterfs.sh b/rgmanager/src/resources/clusterfs.sh index 34a5590..0bf14f0 100755 --- a/rgmanager/src/resources/clusterfs.sh +++ b/rgmanager/src/resources/clusterfs.sh @@ -366,7 +366,7 @@ mountInUse () { typeset junk if [ $# -ne 2 ]; then - ocf_log err "Usage: mountInUse device mount_point". + logAndPrint $LOG_ERR "Usage: mountInUse device mount_point". return $FAIL fi @@ -444,14 +444,14 @@ isAlive() declare rw if [ $# -ne 1 ]; then - ocf_log err "Usage: isAlive mount_point" + logAndPrint $LOG_ERR "Usage: isAlive mount_point" return $FAIL fi mount_point=$1 test -d $mount_point if [ $? -ne 0 ]; then - ocf_log err "$mount_point is not a directory" + logAndPrint $LOG_ERR "$mount_point is not a directory" return $FAIL fi @@ -738,7 +738,7 @@ Cannot mount $dev on $mp, the device or mount point is already in use!" # # Mount the device # - ocf_log debug "mount $fstype_option $mount_options $dev $mp" + logAndPrint $LOG_DEBUG "mount $fstype_option $mount_options $dev $mp" mount $fstype_option $mount_options $dev $mp ret_val=$? if [ $ret_val -ne 0 ]; then @@ -761,7 +761,6 @@ stopFilesystem() { typeset -i try=1 typeset -i max_tries=3 # how many times to try umount typeset -i sleep_time=2 # time between each umount failure - typeset -i refs=0 typeset done="" typeset umount_failed="" typeset force_umount="" @@ -816,18 +815,6 @@ stop: Could not match $OCF_RESKEY_device with a real device" esac fi - # - # Check the rgmanager-supplied reference count if one exists. - # If the reference count is <= 1, we can safely proceed - # - if [ -n "$OCF_RESKEY_RGMANAGER_meta_refcnt" ]; then - refs=$OCF_RESKEY_RGMANAGER_meta_refcnt - if [ $refs -gt 1 ]; then - ((refs--)) - ocf_log debug "Not unmounting $OCF_RESOURCE_INSTANCE - still in use by $refs other service(s)" - return $OCF_SUCCESS - fi - fi # # Always do this hackery on clustered file systems. @@ -838,10 +825,10 @@ stop: Could not match $OCF_RESKEY_device with a real device" mkdir -p $mp/.clumanager/statd pkill -KILL -x lockd # Copy out the notify list; our - # IPs are already torn down - if notify_list_store $mp/.clumanager/statd; then - notify_list_broadcast $mp/.clumanager/statd - fi + # IPs are already torn down + if notify_list_store $mp/.clumanager/statd; then + notify_list_broadcast $mp/.clumanager/statd + fi fi # Always invalidate buffers on clusterfs resources @@ -870,7 +857,7 @@ stop: Could not match $OCF_RESKEY_device with a real device" sync; sync; sync ocf_log info "unmounting $dev ($mp)" - umount $mp + umount $dev if [ $? -eq 0 ]; then umount_failed= done=$YES @@ -920,20 +907,8 @@ stop: Could not match $OCF_RESKEY_device with a real device" case $1 in start) - declare tries=0 - declare rv - - while [ $tries -lt 3 ]; do - startFilesystem - rv=$? - if [ $rv -eq 0 ]; then - exit 0 - fi - - ((tries++)) - sleep 3 - done - exit $rv + startFilesystem + exit $? ;; stop) stopFilesystem @@ -941,12 +916,16 @@ stop) ;; status|monitor) isMounted ${OCF_RESKEY_device} ${OCF_RESKEY_mountpoint} - [ $? -ne $YES ] && exit $OCF_ERR_GENERIC + if [ $? -ne $YES ]; then + ocf_log err "fs:${OCF_RESKEY_name}: ${OCF_RESKEY_device} is not mounted on ${OCF_RESKEY_mountpoint}" + exit $OCF_ERR_GENERIC + fi isAlive ${OCF_RESKEY_mountpoint} - [ $? -ne $YES ] && exit $OCF_ERR_GENERIC - - exit 0 + [ $? -eq $YES ] && exit 0 + + ocf_log err "clusterfs:${OCF_RESKEY_name}: Mount point is not accessible!" + exit $OCF_ERR_GENERIC ;; restart) stopFilesystem diff --git a/rgmanager/src/resources/default_event_script.sl b/rgmanager/src/resources/default_event_script.sl deleted file mode 100644 index e961266..0000000 --- a/rgmanager/src/resources/default_event_script.sl +++ /dev/null @@ -1,314 +0,0 @@ -define node_in_set(node_list, node) -{ - variable x, len; - - len = length(node_list); - for (x = 0; x < len; x++) { - if (node_list[x] == node) - return 1; - } - - return 0; -} - -define move_or_start(service, node_list) -{ - variable len; - variable state, owner; - variable depends; - - depends = service_property(service, "depend"); - if (depends != "") { - (owner, state) = service_status(depends); - if (owner < 0) { - debug(service, " is not runnable; dependency not met"); - return ERR_DEPEND; - } - } - - (owner, state) = service_status(service); - debug("Evaluating ", service, " state=", state, " owner=", owner); - - len = length(node_list); - if (len == 0) { - debug(service, " is not runnable"); - return ERR_DOMAIN; - } - - if (((event_type != EVENT_USER) and (state == "disabled")) or (state == "failed")) { - % - % Commenting out this block will -not- allow you to - % recover failed services from event scripts. Sorry. - % All it will get you is a false log message about - % starting this service. - % - % You may enable disabled services, but I recommend - % against it. - % - debug(service, " is not runnable"); - return -1; - } - - if (node_list[0] == owner) { - debug(service, " is already running on best node"); - return ERR_RUNNING; - } - - if ((owner >= 0) and (node_in_set(node_list, owner) == 1)) { - notice("Moving ", service, " from ", owner, - " to ", node_list); - if (service_stop(service) < 0) { - return ERR_ABORT; - } - } else { - notice("Starting ", service, " on ", node_list); - } - - return service_start(service, node_list); -} - - -% -% Returns the set of online nodes in preferred/shuffled order which -% are allowed to run this service. Gives highest preference to current -% owner if nofailback is specified. -% -define allowed_nodes(service) -{ - variable anodes; - variable online; - variable nodes_domain; - variable ordered, restricted, nofailback; - variable state, owner; - variable depends; - - (nofailback, restricted, ordered, nodes_domain) = - service_domain_info(service); - - (owner, state) = service_status(service); - - anodes = nodes_online(); - - % Shuffle the array so we don't start all services on the same - % node. TODO - add RR, Least-services, placement policies... - online = shuffle(anodes); - - if (restricted == 1) { - anodes = intersection(nodes_domain, online); - } else { - % Ordered failover domains (nodes_domain) unioned with the - % online nodes basically just reorders the online node list - % according to failover domain priority rules. - anodes = union(intersection(nodes_domain, online), - online); - } - - if ((nofailback == 1) or (ordered == 0)) { - - if ((owner < 0) or (node_in_set(anodes, owner) == 0)) { - return anodes; - } - - % Because union takes left as priority, we can - % return the union of the current owner with the - % allowed node list. This means the service will - % remain on the same node it's currently on. - return union(owner, anodes); - } - - return anodes; -} - - -define default_node_event_handler() -{ - variable services = service_list(); - variable x; - variable nodes; - - % debug("Executing default node event handler"); - for (x = 0; x < length(services); x++) { - nodes = allowed_nodes(services[x]); - ()=move_or_start(services[x], nodes); - } -} - - -define default_service_event_handler() -{ - variable services = service_list(); - variable x; - variable depends; - variable depend_mode; - variable policy; - variable nodes; - variable tmp; - variable owner; - variable state; - - % debug("Executing default service event handler"); - - if (service_state == "recovering") { - - policy = service_property(service_name, "recovery"); - debug("Recovering", - " Service: ", service_name, - " Last owner: ", service_last_owner, - " Policy: ", policy, - " RTE: ", service_restarts_exceeded); - - if (policy == "disable") { - () = service_stop(service_name, 1); - return; - } - - nodes = allowed_nodes(service_name); - if (policy == "restart" and service_restarts_exceeded == 0) { - nodes = union(service_last_owner, nodes); - } else { - % relocate - tmp = subtract(nodes, service_last_owner); - if (length(tmp) == 0) { - () = service_stop(service_name,0); - return; - } - - nodes = union(tmp, service_last_owner); - } - - ()=move_or_start(service_name, nodes); - - return; - } - - for (x = 0; x < length(services); x++) { - if (service_name == services[x]) { - % don't do anything to ourself! - continue; - } - - % - % Simplistic dependency handling - % - depends = service_property(services[x], "depend"); - depend_mode = service_property(services[x], "depend_mode"); - - % No dependency; do nothing - if (depends != service_name) { - continue; - } - - (owner, state) = service_status(services[x]); - if ((service_state == "started") and (owner < 0) and - (state == "stopped")) { - info("Dependency met; starting ", services[x]); - nodes = allowed_nodes(services[x]); - ()=move_or_start(services[x], nodes); - } - - % service died - stop service(s) that depend on the dead - if ((service_owner < 0) and (owner >= 0) and - (depend_mode != "soft")) { - info("Dependency lost; stopping ", services[x]); - ()=service_stop(services[x]); - } - } -} - -define default_config_event_handler() -{ - % debug("Executing default config event handler"); -} - -define default_user_event_handler() -{ - variable ret; - variable nodes; - variable reordered; - variable x; - variable target = user_target; - variable found = 0; - variable owner, state; - - nodes = allowed_nodes(service_name); - (owner, state) = service_status(service_name); - - if (user_request == USER_RESTART) { - - if (owner >= 0) { - reordered = union(owner, nodes); - nodes = reordered; - } - - notice("Stopping ", service_name, " for relocate to ", nodes); - - found = service_stop(service_name); - if (found < 0) { - return ERR_ABORT; - } - - ret = move_or_start(service_name, nodes); - - } else if ((user_request == USER_RELOCATE) or - (user_request == USER_ENABLE)) { - - if (user_target > 0) { - for (x = 0; x < length(nodes); x++) { - % - % Put the preferred node at the front of the - % list for a user-relocate operation - % - if (nodes[x] == user_target) { - reordered = union(user_target, nodes); - nodes = reordered; - found = 1; - } - } - - if (found == 0) { - warning("User specified node ", user_target, - " is offline"); - } - } - - if ((owner >= 0) and (user_request == USER_RELOCATE)) { - if (service_stop(service_name) < 0) { - return ERR_ABORT; - } - - % - % The current owner shouldn't be the default - % for a relocate operation - % - reordered = subtract(nodes, owner); - nodes = union(reordered, owner); - } - - ret = move_or_start(service_name, nodes); - - } else if (user_request == USER_DISABLE) { - - ret = service_stop(service_name, 1); - - } else if (user_request == USER_STOP) { - - ret = service_stop(service_name); - - } - - % - % todo - migrate - % - - return ret; -} - -if (event_type == EVENT_NODE) - default_node_event_handler(); -if (event_type == EVENT_SERVICE) - default_service_event_handler(); -if (event_type == EVENT_CONFIG) - default_config_event_handler(); -if (event_type == EVENT_USER) - user_return=default_user_event_handler(); - diff --git a/rgmanager/src/resources/ocf-shellfuncs b/rgmanager/src/resources/ocf-shellfuncs index 98156c0..eb0147f 100755 --- a/rgmanager/src/resources/ocf-shellfuncs +++ b/rgmanager/src/resources/ocf-shellfuncs @@ -174,10 +174,6 @@ ocf_log() { esac pretty_echo $__OCF_PRIO "$__OCF_MSG" - - if [ -z "`which clulog 2> /dev/null`" ]; then - return 0 - fi clulog -p $__LOG_PID -n $__LOG_NAME \ -s $__OCF_PRIO_N "$__OCF_MSG" } diff --git a/rgmanager/src/resources/script.sh b/rgmanager/src/resources/script.sh index 0141c80..9a9455c 100755 --- a/rgmanager/src/resources/script.sh +++ b/rgmanager/src/resources/script.sh @@ -115,5 +115,5 @@ ${OCF_RESKEY_file} $1 declare -i rv=$? if [ $rv -ne 0 ]; then ocf_log err "script:$OCF_RESKEY_name: $1 of $OCF_RESKEY_file failed (returned $rv)" - exit $OCF_ERR_GENERIC + return $OCF_ERR_GENERIC fi diff --git a/rgmanager/src/resources/service.sh b/rgmanager/src/resources/service.sh index 339657d..da89301 100755 --- a/rgmanager/src/resources/service.sh +++ b/rgmanager/src/resources/service.sh @@ -1,26 +1,8 @@ #!/bin/bash # -# Copyright Red Hat, Inc. 2004-2006 -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2, or (at your option) any -# later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. If not, write to the -# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, -# MA 02139, USA. -# - -# -# Dummy OCF script for resource group +# Dummy OCF script for resource group; the OCF spec doesn't support abstract +# resources. ;( # # Grab nfs lock tricks if available @@ -56,7 +38,7 @@ meta_data() - + Fail over domains define lists of cluster members to try in the event that a resource group fails. @@ -67,7 +49,7 @@ meta_data() - + If set to yes, this resource group will automatically be started after the cluster forms a quorum. If set to no, this resource @@ -77,10 +59,10 @@ meta_data() Automatic start after quorum formation - + - + If set to yes, the last owner will reboot if this resource group fails to stop cleanly, thus allowing the resource @@ -92,10 +74,10 @@ meta_data() Reboot if stop phase fails - + - + If set, this resource group will only relocate to nodes which have no other resource groups running in the @@ -109,7 +91,7 @@ meta_data() Exclusive resource group - + @@ -125,10 +107,10 @@ meta_data() Enable NFS lock workarounds - + - + This currently has three possible options: "restart" tries to restart failed parts of this resource group locally before @@ -141,60 +123,8 @@ meta_data() Failure recovery policy - - - - - - Top-level service this depends on, in "service:name" format. - - - Service dependency; will not start without the specified - service running. - - - - - Dependency mode - - - Service dependency mode. - hard - This service is stopped/started if its dependency - is stopped/started - soft - This service only depends on the other service for - initial startip. If the other service stops, this - service is not stopped. - - - - - - - Maximum restarts for this service. - - - Maximum restarts for this service. - - - - - - - Restart expiration time - - - Restart expiration time. A restart is forgotten - after this time. When combined with the max_restarts - option, this lets administrators specify a threshold - for when to fail over services. If max_restarts - is exceeded in this given expiration time, the service - is relocated instead of restarted again. - - - - @@ -205,11 +135,10 @@ meta_data() - - + @@ -220,7 +149,7 @@ meta_data() - + @@ -237,7 +166,6 @@ EOT # case $1 in start) - [ -d "/var/run/cluster/rgmanager" ] && touch "/var/run/cluster/rgmanager/$OCF_RESOURCE_INSTANCE" # # XXX If this is set, we kill lockd. If there is no # child IP address, then clients will NOT get the reclaim @@ -252,7 +180,6 @@ case $1 in exit 0 ;; stop) - [ -d "/var/run/cluster/rgmanager" ] && rm -f "/var/run/cluster/rgmanager/$OCF_RESOURCE_INSTANCE" exit 0 ;; recover|restart) @@ -268,10 +195,7 @@ case $1 in meta_data exit 0 ;; - validate-all) - exit 0 - ;; - reconfig) + verify-all) exit 0 ;; *) diff --git a/rgmanager/src/resources/svclib_nfslock b/rgmanager/src/resources/svclib_nfslock index 2101e1e..de996b1 100644 --- a/rgmanager/src/resources/svclib_nfslock +++ b/rgmanager/src/resources/svclib_nfslock @@ -1,22 +1,5 @@ #!/bin/bash # -# Copyright Red Hat Inc., 2006 -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2, or (at your option) any -# later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; see the file COPYING. If not, write to the -# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, -# MA 02139, USA. -# # Do reclaim-broadcasts when we kill lockd during shutdown/startup # of a cluster service. # @@ -180,17 +163,6 @@ notify_list_broadcast() declare lockd_pid=$(pidof lockd) declare nl_dir=$1 - # First of all, send lockd a SIGKILL. We hope nfsd is running. - # If it is, this will cause lockd to reset the grace period for - # lock reclaiming. - if [ -n "$lockd_pid" ]; then - ocf_log info "Asking lockd to drop locks (pid $lockd_pid)" - kill -9 $lockd_pid - else - ocf_log warning "lockd not running; cannot notify clients" - return 1 - fi - while read dev family addr maskbits; do if [ "$family" != "inet" ]; then continue diff --git a/rgmanager/src/resources/utils/named-parse-config.pl b/rgmanager/src/resources/utils/named-parse-config.pl deleted file mode 100644 index 4ac39c3..0000000 --- a/rgmanager/src/resources/utils/named-parse-config.pl +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/perl -w - -## -## parse named.conf (from stdin) and add options from cluster.conf -## -## ./named-parse-config.pl "directory" "pid-file" "listen-on" -## -use strict; - -if ($#argv < 2) { - die ("Not enough arguments"); -} - -while (my $line = ) { - chomp($line); - $line =~ s/(.*?)\s*$/$1/; - if ($line =~ /^\s*options\s+\{/) { - print $line, "\n"; - print "\tdirectory \"$ARGV[0]\";\n"; - print "\tpid-file \"$ARGV[1]\";\n"; - print "\tlisten-on { $ARGV[2] };\n"; - } else { - print $line, "\n"; - } -} - diff --git a/rgmanager/src/resources/utils/ra-skelet.sh b/rgmanager/src/resources/utils/ra-skelet.sh index 5530ae6..67630e2 100644 --- a/rgmanager/src/resources/utils/ra-skelet.sh +++ b/rgmanager/src/resources/utils/ra-skelet.sh @@ -65,7 +65,7 @@ stop_generic() if [ ! -d "/proc/$pid" ]; then return 0; fi - + kill -TERM "$pid" if [ $? -ne 0 ]; then hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 20:21:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 20:21:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-12-ge50f432 Message-ID: <20080311202142.2181.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=e50f43228b1da237524eaea2bf0ae345c20c6104 The branch, STABLE2 has been updated via e50f43228b1da237524eaea2bf0ae345c20c6104 (commit) from ad6789072de8bc98e5ec439f2160f330be0f9730 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e50f43228b1da237524eaea2bf0ae345c20c6104 Author: Lon Hohberger Date: Tue Mar 11 10:44:19 2008 -0400 [rgmanager] Don't call quotaoff if quotas are not used ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/fs.sh | 51 ++++++++++++++++++++++++++++++---------- 1 files changed, 38 insertions(+), 13 deletions(-) diff --git a/rgmanager/src/resources/fs.sh b/rgmanager/src/resources/fs.sh index 10a167f..1de57d3 100755 --- a/rgmanager/src/resources/fs.sh +++ b/rgmanager/src/resources/fs.sh @@ -797,21 +797,14 @@ activeMonitor() { # -# Enable quotas on the mount point if the user requested them +# Decide which quota options are enabled and return a string +# which we can pass to quotaon # -enable_fs_quotas() +quota_opts() { - declare -i need_check=0 - declare -i rv declare quotaopts="" - declare mopt declare opts=$1 - declare mp=$2 - - if [ -z "`which quotaon`" ]; then - ocf_log err "quotaon not found in $PATH" - return $OCF_ERR_GENERIC - fi + declare mopt for mopt in `echo $opts | sed -e s/,/\ /g`; do case $mopt in @@ -830,6 +823,33 @@ enable_fs_quotas() esac done + echo $quotaopts + return 0 +} + + + +# +# Enable quotas on the mount point if the user requested them +# +enable_fs_quotas() +{ + declare -i need_check=0 + declare -i rv + declare quotaopts="" + declare mopt + declare opts=$1 + declare mp=$2 + + if [ -z "`which quotaon`" ]; then + ocf_log err "quotaon not found in $PATH" + return $OCF_ERR_GENERIC + fi + + quotaopts=$(quota_opts $opts) + + ocf_log info "quotaopts = $quotaopts" + [ -z "$quotaopts" ] && return 0 # Ok, create quota files if they don't exist @@ -1089,6 +1109,7 @@ stopFilesystem() { typeset force_umount="" typeset self_fence="" typeset fstype="" + typeset quotaopts="" # @@ -1154,11 +1175,15 @@ stop: Could not match $OCF_RESKEY_device with a real device" ;; $YES) sync; sync; sync - ocf_log info "unmounting $mp" + quotaopts=$(quota_opts $OCF_RESKEY_options) + if [ -n "$quotaopts" ]; then + ocf_log debug "Turning off quotas for $mp" + quotaoff -$quotaopts $mp &> /dev/null + fi activeMonitor stop || return $OCF_ERR_GENERIC - quotaoff -gu $mp &> /dev/null + ocf_log info "unmounting $mp" umount $mp if [ $? -eq 0 ]; then umount_failed= hooks/post-receive -- Cluster Project From lhh@sourceware.org Tue Mar 11 20:28:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Tue, 11 Mar 2008 20:28:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-13-g088cad7 Message-ID: <20080311202839.5686.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=088cad7ce9f46b501fcfd8475c71e0909a86d895 The branch, STABLE2 has been updated via 088cad7ce9f46b501fcfd8475c71e0909a86d895 (commit) from e50f43228b1da237524eaea2bf0ae345c20c6104 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 088cad7ce9f46b501fcfd8475c71e0909a86d895 Author: Lon Hohberger Date: Tue Mar 11 10:43:37 2008 -0400 [CMAN] Fix "Node X is undead" loop bug This was caused by an improper assignment to ps_incarnation after a node decides to evict another node. The fix is to simply make the internal (memory) assignments before calling qd_write_status() ----------------------------------------------------------------------- Summary of changes: cman/qdisk/main.c | 34 +++++++++++++++++----------------- 1 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index ca69624..8bd8c7d 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -252,23 +252,6 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) state_run(ni[x].ni_status.ps_state)) { /* - Write eviction notice if we're the master. - */ - if (ctx->qc_status == S_MASTER) { - clulog(LOG_NOTICE, - "Writing eviction notice for node %d\n", - ni[x].ni_status.ps_nodeid); - qd_write_status(ctx, ni[x].ni_status.ps_nodeid, - S_EVICT, NULL, NULL, NULL); - if (ctx->qc_flags & RF_ALLOW_KILL) { - clulog(LOG_DEBUG, "Telling CMAN to " - "kill the node\n"); - cman_kill_node(ctx->qc_ch, - ni[x].ni_status.ps_nodeid); - } - } - - /* Mark our internal views as dead if nodes miss too many heartbeats... This will cause a master transition if no live master exists. @@ -285,6 +268,23 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) ni[x].ni_evil_incarnation = ni[x].ni_status.ps_incarnation; + /* + Write eviction notice if we're the master. + */ + if (ctx->qc_status == S_MASTER) { + clulog(LOG_NOTICE, + "Writing eviction notice for node %d\n", + ni[x].ni_status.ps_nodeid); + qd_write_status(ctx, ni[x].ni_status.ps_nodeid, + S_EVICT, NULL, NULL, NULL); + if (ctx->qc_flags & RF_ALLOW_KILL) { + clulog(LOG_DEBUG, "Telling CMAN to " + "kill the node\n"); + cman_kill_node(ctx->qc_ch, + ni[x].ni_status.ps_nodeid); + } + } + /* Clear our master mask for the node after eviction */ if (mask) clear_bit(mask, (ni[x].ni_status.ps_nodeid-1), hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Wed Mar 12 15:13:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 12 Mar 2008 15:13:00 -0000 Subject: conga ./conga.spec.in.in luci/cluster/cluster_ ... Message-ID: <20080312151313.15367.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-12 15:13:13 Modified files: . : conga.spec.in.in luci/cluster : cluster_svc-macros resource-form-macros resource_form_handlers.js luci/site/luci/Extensions: LuciClusterActions.py LuciDB.py LuciValidation.py LuciZope.py ResourceHandler.py RicciQueries.py cluster_adapters.py conga_constants.py luci/site/luci/Extensions/ClusterModel: ModelBuilder.py Added files: luci/site/luci/Extensions/ClusterModel: OracleDB.py SybaseASE.py Log message: backport fixes from HEAD for bz304931 (Rich Sybase resource agent configuration support) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.70&r2=1.45.2.71 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.3&r2=1.3.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.9&r2=1.21.2.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.14&r2=1.20.2.15 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.8&r2=1.1.4.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.2&r2=1.6.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.6&r2=1.1.4.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.9&r2=1.1.4.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.120.2.42&r2=1.120.2.43 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.19.2.16&r2=1.19.2.17 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8 From ccaulfield@sourceware.org Thu Mar 13 16:41:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Thu, 13 Mar 2008 16:41:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-70-g5c00e23 Message-ID: <20080313164129.29470.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=5c00e231b21d2b8e0be1b4dd028122313e603597 The branch, master has been updated via 5c00e231b21d2b8e0be1b4dd028122313e603597 (commit) from 674aec455c8f4506c390532276d1392aa017f1b6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5c00e231b21d2b8e0be1b4dd028122313e603597 Author: Christine Caulfield Date: Thu Mar 13 16:39:38 2008 +0000 [DLM] Don't segfault if lvbptr is NULL Calling dlm_lock* with LKF_VALBLK and sb_lvbptr set to NULL could cause libdlm to segfault. Now it returns -1/EINVAL Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 28a3cc7..7464085 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -889,6 +889,11 @@ static int ls_lock(dlm_lshandle_t ls, return -1; } + if (flags & LKF_VALBLK && !lksb->sb_lvbptr) { + errno = EINVAL; + return -1; + } + if (kernel_version.version[0] == 5) return ls_lock_v5(ls, mode, lksb, flags, name, namelen, parent, astaddr, astarg, bastaddr); hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Thu Mar 13 16:44:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Thu, 13 Mar 2008 16:44:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-14-g31b6d55 Message-ID: <20080313164445.31307.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=31b6d55cadb4aa87a76d907dc2fa7696fda89379 The branch, STABLE2 has been updated via 31b6d55cadb4aa87a76d907dc2fa7696fda89379 (commit) from 088cad7ce9f46b501fcfd8475c71e0909a86d895 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 31b6d55cadb4aa87a76d907dc2fa7696fda89379 Author: Christine Caulfield Date: Thu Mar 13 16:44:00 2008 +0000 [DLM] Don't segfault if lvbptr is NULL Calling dlm_lock* with LKF_VALBLK and sb_lvbptr set to NULL could cause libdlm to segfault. Now it returns -1/EINVAL Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 28a3cc7..7464085 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -889,6 +889,11 @@ static int ls_lock(dlm_lshandle_t ls, return -1; } + if (flags & LKF_VALBLK && !lksb->sb_lvbptr) { + errno = EINVAL; + return -1; + } + if (kernel_version.version[0] == 5) return ls_lock_v5(ls, mode, lksb, flags, name, namelen, parent, astaddr, astarg, bastaddr); hooks/post-receive -- Cluster Project From teigland@sourceware.org Thu Mar 13 17:16:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 13 Mar 2008 17:16:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-71-g49a5ca7 Message-ID: <20080313171648.23955.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=49a5ca7296ad07833e647391380b7786b78a41df The branch, master has been updated via 49a5ca7296ad07833e647391380b7786b78a41df (commit) from 5c00e231b21d2b8e0be1b4dd028122313e603597 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 49a5ca7296ad07833e647391380b7786b78a41df Author: David Teigland Date: Thu Mar 13 12:14:22 2008 -0500 dlm_tool: print correct rq mode in lockdump The rq mode in a lockdump was incorrectly showing up as NL for granted locks instead of IV (invalid). Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/tool/main.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dlm/tool/main.c b/dlm/tool/main.c index 078cf26..330d795 100644 --- a/dlm/tool/main.c +++ b/dlm/tool/main.c @@ -26,6 +26,8 @@ #include "libdlm.h" #include "dlm_controld.h" +#define LKM_IVMODE -1 + #define OPTION_STRING "MhVvd:m:" #define OP_JOIN 1 @@ -367,14 +369,14 @@ void do_lockdump(char *name) continue; } - /* A hack because dlm-kernel doesn't set rqmode back to NL when + /* A hack because dlm-kernel doesn't set rqmode back to IV when a NOQUEUE convert fails, which means in a lockdump it looks like a granted lock is still converting since rqmode is not - NL. (does it make sense to include status in the output, + IV. (does it make sense to include status in the output, e.g. G,C,W?) */ if (status == DLM_LKSTS_GRANTED) - rqmode = LKM_NLMODE; + rqmode = LKM_IVMODE; printf("id %08x gr %s rq %s pid %u master %d \"%s\"\n", id, mode_str(grmode), mode_str(rqmode), hooks/post-receive -- Cluster Project From teigland@sourceware.org Thu Mar 13 17:19:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 13 Mar 2008 17:19:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-15-gba52942 Message-ID: <20080313171906.26017.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ba52942d40bc738eb991c82e8cfeab242cfa18f0 The branch, STABLE2 has been updated via ba52942d40bc738eb991c82e8cfeab242cfa18f0 (commit) from 31b6d55cadb4aa87a76d907dc2fa7696fda89379 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ba52942d40bc738eb991c82e8cfeab242cfa18f0 Author: David Teigland Date: Thu Mar 13 12:14:22 2008 -0500 dlm_tool: print correct rq mode in lockdump The rq mode in a lockdump was incorrectly showing up as NL for granted locks instead of IV (invalid). Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/tool/main.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dlm/tool/main.c b/dlm/tool/main.c index 078cf26..330d795 100644 --- a/dlm/tool/main.c +++ b/dlm/tool/main.c @@ -26,6 +26,8 @@ #include "libdlm.h" #include "dlm_controld.h" +#define LKM_IVMODE -1 + #define OPTION_STRING "MhVvd:m:" #define OP_JOIN 1 @@ -367,14 +369,14 @@ void do_lockdump(char *name) continue; } - /* A hack because dlm-kernel doesn't set rqmode back to NL when + /* A hack because dlm-kernel doesn't set rqmode back to IV when a NOQUEUE convert fails, which means in a lockdump it looks like a granted lock is still converting since rqmode is not - NL. (does it make sense to include status in the output, + IV. (does it make sense to include status in the output, e.g. G,C,W?) */ if (status == DLM_LKSTS_GRANTED) - rqmode = LKM_NLMODE; + rqmode = LKM_IVMODE; printf("id %08x gr %s rq %s pid %u master %d \"%s\"\n", id, mode_str(grmode), mode_str(rqmode), hooks/post-receive -- Cluster Project From rpeterso@sourceware.org Fri Mar 14 13:36:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Fri, 14 Mar 2008 13:36:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-8-g14e7029 Message-ID: <20080314133616.27589.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=14e702986f37607300cafdf68886daf15c10be38 The branch, RHEL5 has been updated via 14e702986f37607300cafdf68886daf15c10be38 (commit) from b70ad6fe5a5795a699ad208ab009a4c952e9078f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 14e702986f37607300cafdf68886daf15c10be38 Author: Bob Peterson Date: Wed Mar 12 10:36:23 2008 -0500 Resolves: bz 435917: GFS2: mkfs.gfs2 default lock protocol differs from man page ----------------------------------------------------------------------- Summary of changes: gfs2/man/mkfs.gfs2.8 | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gfs2/man/mkfs.gfs2.8 b/gfs2/man/mkfs.gfs2.8 index c68ff8d..b411467 100644 --- a/gfs2/man/mkfs.gfs2.8 +++ b/gfs2/man/mkfs.gfs2.8 @@ -48,10 +48,10 @@ the filesystem. .TP \fB-p\fP \fILockProtoName\fR LockProtoName is the name of the locking protocol to use. Acceptable -locking protocols are \fIlock_dlm\fR or if you are using GFS2 -as a local filesystem (\fB1 node only\fP), you can specify the +locking protocols are \fIlock_dlm\fR (for shared storage) or if you are +using GFS2 as a local filesystem (\fB1 node only\fP), you can specify the \fIlock_nolock\fR protocol. If this option is not specified, -\fIlock_nolock\fR protocol will be assumed. +\fIlock_dlm\fR protocol will be assumed. .TP \fB-q\fP Be quiet. Don't print anything. hooks/post-receive -- Cluster Project From teigland@sourceware.org Fri Mar 14 15:39:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Fri, 14 Mar 2008 15:39:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-72-g48f2090 Message-ID: <20080314153935.13515.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=48f20902219251eacf28ec99bc98a17bff192e71 The branch, master has been updated via 48f20902219251eacf28ec99bc98a17bff192e71 (commit) from 49a5ca7296ad07833e647391380b7786b78a41df (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 48f20902219251eacf28ec99bc98a17bff192e71 Author: David Teigland Date: Fri Mar 14 10:36:54 2008 -0500 libdlm: fix lvb copying When a program does a lock operation that reads an lvb, libdlm copies the lvb data from a bogus location instead of from the proper offset in the buffer it just read. The location of the lvb data is calculated wrongly due to a missing cast. Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 7464085..d182095 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -573,7 +573,7 @@ static int do_dlm_dispatch_v6(int fd) /* Copy lvb to user's buffer */ if (result->lvb_offset) memcpy(result->user_lksb->sb_lvbptr, - result + result->lvb_offset, DLM_LVB_LEN); + (char *)result + result->lvb_offset, DLM_LVB_LEN); result->user_lksb->sb_status = -result->user_lksb->sb_status; hooks/post-receive -- Cluster Project From teigland@sourceware.org Fri Mar 14 15:42:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Fri, 14 Mar 2008 15:42:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-16-g52bd5e9 Message-ID: <20080314154245.22124.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=52bd5e962e13261a22aa984eec98439b0a59f0bb The branch, STABLE2 has been updated via 52bd5e962e13261a22aa984eec98439b0a59f0bb (commit) from ba52942d40bc738eb991c82e8cfeab242cfa18f0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 52bd5e962e13261a22aa984eec98439b0a59f0bb Author: David Teigland Date: Fri Mar 14 10:36:54 2008 -0500 libdlm: fix lvb copying When a program does a lock operation that reads an lvb, libdlm copies the lvb data from a bogus location instead of from the proper offset in the buffer it just read. The location of the lvb data is calculated wrongly due to a missing cast. Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 7464085..d182095 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -573,7 +573,7 @@ static int do_dlm_dispatch_v6(int fd) /* Copy lvb to user's buffer */ if (result->lvb_offset) memcpy(result->user_lksb->sb_lvbptr, - result + result->lvb_offset, DLM_LVB_LEN); + (char *)result + result->lvb_offset, DLM_LVB_LEN); result->user_lksb->sb_status = -result->user_lksb->sb_status; hooks/post-receive -- Cluster Project From rpeterso@sourceware.org Fri Mar 14 16:31:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Fri, 14 Mar 2008 16:31:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-16-gc118d0c Message-ID: <20080314163140.1845.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c118d0ce03910523ebd6cd533a410283640caf37 The branch, RHEL4 has been updated via c118d0ce03910523ebd6cd533a410283640caf37 (commit) via a623bf5bbecedd41e592d584c790f68fd218b569 (commit) from b2fb1017061f86f02f3cd864e10b44e9fa347441 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c118d0ce03910523ebd6cd533a410283640caf37 Author: Bob Peterson Date: Fri Mar 14 11:17:46 2008 -0500 Resolves: bz 421761: 'gfs_tool lockdump' wrongly says 'unknown mountpoint' re HP cciss RAID array commit a623bf5bbecedd41e592d584c790f68fd218b569 Author: Bob Peterson Date: Fri Mar 14 11:09:09 2008 -0500 Resolves: bz 431945: GFS: gfs-kernel should use device major:minor ----------------------------------------------------------------------- Summary of changes: gfs-kernel/src/gfs/proc.c | 13 +++++++- gfs/gfs_tool/util.c | 64 +++++++-------------------------------------- 2 files changed, 21 insertions(+), 56 deletions(-) diff --git a/gfs-kernel/src/gfs/proc.c b/gfs-kernel/src/gfs/proc.c index b0edf1c..a79497b 100644 --- a/gfs-kernel/src/gfs/proc.c +++ b/gfs-kernel/src/gfs/proc.c @@ -27,6 +27,7 @@ #include "lm.h" #include "proc.h" #include "super.h" +#include "diaper.h" struct list_head gfs_fs_list; struct semaphore gfs_fs_lock; @@ -77,16 +78,21 @@ do_list(char *user_buf, size_t size) struct gfs_sbd *sdp = NULL; unsigned int x; char num[21]; + char device_id[32]; char *buf; int error = 0; + struct block_device *bdevice; down(&gfs_fs_lock); x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); + bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); + sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), + MINOR(bdevice->bd_dev)); x += sprintf(num, "%lu", (unsigned long)sdp) + - strlen(sdp->sd_vfs->s_id) + + strlen(device_id) + strlen(sdp->sd_fsname) + 3; } @@ -105,8 +111,11 @@ do_list(char *user_buf, size_t size) x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); + bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); + sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), + MINOR(bdevice->bd_dev)); x += sprintf(buf + x, "%lu %s %s\n", - (unsigned long)sdp, sdp->sd_vfs->s_id, sdp->sd_fsname); + (unsigned long)sdp, device_id, sdp->sd_fsname); } if (copy_to_user(user_buf, buf, x)) diff --git a/gfs/gfs_tool/util.c b/gfs/gfs_tool/util.c index 4e0a868..3893c96 100644 --- a/gfs/gfs_tool/util.c +++ b/gfs/gfs_tool/util.c @@ -122,52 +122,6 @@ str2lines(char *str) } /** - * do_basename - Create dm-N style name for the device - * @device: - * - * Returns: Pointer to dm name or basename - */ - -static char * -do_basename(char *device) -{ - FILE *file; - int found = FALSE; - char line[256], major_name[256]; - unsigned int major_number; - struct stat st; - - file = fopen("/proc/devices", "r"); - if (!file) - goto punt; - - while (fgets(line, 256, file)) { - if (sscanf(line, "%u %s", &major_number, major_name) != 2) - continue; - if (strcmp(major_name, "device-mapper") != 0) - continue; - found = TRUE; - break; - } - - fclose(file); - - if (!found) - goto punt; - - if (stat(device, &st)) - goto punt; - if (major(st.st_rdev) == major_number) { - static char realname[16]; - snprintf(realname, 16, "dm-%u", minor(st.st_rdev)); - return realname; - } - - punt: - return basename(device); -} - -/** * mp2cookie - Find the cookie for a filesystem given its mountpoint * @mp: * @ioctl_ok: If this is FALSE, it's not acceptable to open() the mountpoint @@ -181,9 +135,9 @@ mp2cookie(char *mp, int ioctl_ok) char *cookie; char *list, **lines; FILE *file; - char line[256], device[256]; - char *dev = NULL; + char line[256], device[256], dev_id[256]; unsigned int x; + struct stat st; cookie = malloc(256); if (!cookie) @@ -196,6 +150,7 @@ mp2cookie(char *mp, int ioctl_ok) die("can't open /proc/mounts: %s\n", strerror(errno)); + memset(dev_id, 0, sizeof(dev_id)); while (fgets(line, 256, file)) { char path[256], type[256]; @@ -206,18 +161,19 @@ mp2cookie(char *mp, int ioctl_ok) if (strcmp(type, "gfs")) die("%s is not a GFS filesystem\n", mp); - dev = do_basename(device); - + if (stat(device, &st)) + continue; + sprintf(dev_id, "%u:%u", major(st.st_rdev),minor(st.st_rdev)); break; } fclose(file); for (x = 0; *lines[x]; x++) { - char s_id[256]; - sscanf(lines[x], "%s %s", cookie, s_id); - if (dev) { - if (strcmp(s_id, dev) == 0) + char device_id[256]; + sscanf(lines[x], "%s %s", cookie, device_id); + if (dev_id[0]) { + if (strcmp(device_id, dev_id) == 0) return cookie; } else { if (strcmp(cookie, mp) == 0) hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Fri Mar 14 19:58:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 14 Mar 2008 19:58:00 -0000 Subject: conga/ricci make/defines.mk.in modules/cluster ... Message-ID: <20080314195812.31607.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-14 19:58:12 Modified files: ricci/make : defines.mk.in ricci/modules/cluster: ClusterModule.cpp Makefile Virt.cpp Virt.h Added files: ricci/test_suite/cluster: vm_list.xml Log message: Add a call to list available VMs and provide their status (has to work around libvirt bz437216 for now) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/make/defines.mk.in.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Makefile.diff?cvsroot=cluster&r1=1.20&r2=1.21 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/vm_list.xml.diff?cvsroot=cluster&r1=NONE&r2=1.1 From rmccabe@sourceware.org Fri Mar 14 20:06:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 14 Mar 2008 20:06:00 -0000 Subject: conga/ricci common/File.cpp common/Variable.cp ... Message-ID: <20080314200639.2469.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-14 20:06:39 Modified files: ricci/common : File.cpp Variable.cpp utils.cpp ricci/include : shred_allocator.h Log message: Fixes for building with gcc 4.3.0 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/File.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Variable.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/utils.cpp.diff?cvsroot=cluster&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/shred_allocator.h.diff?cvsroot=cluster&r1=1.5&r2=1.6 From rmccabe@sourceware.org Fri Mar 14 20:21:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 14 Mar 2008 20:21:00 -0000 Subject: conga ricci.spec.in.in Message-ID: <20080314202116.15236.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-14 20:21:16 Modified files: . : ricci.spec.in.in Log message: require a build dep on file-devel instead of file, as the package has been split-up on Fedora Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.3&r2=1.4 From rpeterso@sourceware.org Fri Mar 14 20:42:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Fri, 14 Mar 2008 20:42:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-73-gfebfaf4 Message-ID: <20080314204207.24291.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=febfaf415cb873716ff5f105f873ec8401607a29 The branch, master has been updated via febfaf415cb873716ff5f105f873ec8401607a29 (commit) from 48f20902219251eacf28ec99bc98a17bff192e71 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit febfaf415cb873716ff5f105f873ec8401607a29 Author: Bob Peterson Date: Tue Mar 11 18:23:11 2008 -0500 Resolves: bz 435917: GFS2: mkfs.gfs2 default lock protocol differs from man page ----------------------------------------------------------------------- Summary of changes: gfs2/man/mkfs.gfs2.8 | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gfs2/man/mkfs.gfs2.8 b/gfs2/man/mkfs.gfs2.8 index c68ff8d..b411467 100644 --- a/gfs2/man/mkfs.gfs2.8 +++ b/gfs2/man/mkfs.gfs2.8 @@ -48,10 +48,10 @@ the filesystem. .TP \fB-p\fP \fILockProtoName\fR LockProtoName is the name of the locking protocol to use. Acceptable -locking protocols are \fIlock_dlm\fR or if you are using GFS2 -as a local filesystem (\fB1 node only\fP), you can specify the +locking protocols are \fIlock_dlm\fR (for shared storage) or if you are +using GFS2 as a local filesystem (\fB1 node only\fP), you can specify the \fIlock_nolock\fR protocol. If this option is not specified, -\fIlock_nolock\fR protocol will be assumed. +\fIlock_dlm\fR protocol will be assumed. .TP \fB-q\fP Be quiet. Don't print anything. hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Fri Mar 14 21:15:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 14 Mar 2008 21:15:00 -0000 Subject: conga ./clustermon.spec.in.in ./ricci.spec.in. ... Message-ID: <20080314211545.16791.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-14 21:15:45 Modified files: . : clustermon.spec.in.in ricci.spec.in.in luci/site/luci/Extensions: LuciClusterActions.py ricci_communicator.py ricci/modules/cluster/clumon/src/common: Cluster.cpp ricci/modules/cluster/clumon/src/daemon: Monitor.cpp ricci/modules/storage: ContentFS.cpp ExtendedFS.cpp Mapper.cpp MountHandler.cpp PTSource.cpp PV.cpp Partition.cpp PartitionTable.cpp parted_wrapper.cpp Log message: More gcc 3.4.0 build fixes Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.37&r2=1.38 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&r1=1.32&r2=1.33 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Cluster.cpp.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.cpp.diff?cvsroot=cluster&r1=1.22&r2=1.23 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.cpp.diff?cvsroot=cluster&r1=1.13&r2=1.14 From fabbione@sourceware.org Sun Mar 16 05:52:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Sun, 16 Mar 2008 05:52:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-17-g1c5fcd3 Message-ID: <20080316055256.7778.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1c5fcd3e08369099f71182557cd88470860d2e85 The branch, STABLE2 has been updated via 1c5fcd3e08369099f71182557cd88470860d2e85 (commit) from 52bd5e962e13261a22aa984eec98439b0a59f0bb (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1c5fcd3e08369099f71182557cd88470860d2e85 Author: Bob Peterson Date: Tue Mar 11 18:23:11 2008 -0500 Resolves: bz 435917: GFS2: mkfs.gfs2 default lock protocol differs from man page ----------------------------------------------------------------------- Summary of changes: gfs2/man/mkfs.gfs2.8 | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gfs2/man/mkfs.gfs2.8 b/gfs2/man/mkfs.gfs2.8 index c68ff8d..b411467 100644 --- a/gfs2/man/mkfs.gfs2.8 +++ b/gfs2/man/mkfs.gfs2.8 @@ -48,10 +48,10 @@ the filesystem. .TP \fB-p\fP \fILockProtoName\fR LockProtoName is the name of the locking protocol to use. Acceptable -locking protocols are \fIlock_dlm\fR or if you are using GFS2 -as a local filesystem (\fB1 node only\fP), you can specify the +locking protocols are \fIlock_dlm\fR (for shared storage) or if you are +using GFS2 as a local filesystem (\fB1 node only\fP), you can specify the \fIlock_nolock\fR protocol. If this option is not specified, -\fIlock_nolock\fR protocol will be assumed. +\fIlock_dlm\fR protocol will be assumed. .TP \fB-q\fP Be quiet. Don't print anything. hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Mon Mar 17 16:58:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 17 Mar 2008 16:58:00 -0000 Subject: conga/ricci/modules/cluster Virt.cpp Message-ID: <20080317165807.17002.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-17 16:58:07 Modified files: ricci/modules/cluster: Virt.cpp Log message: The bug is actually virConnectNumOfDefinedDomains(), so the code as is correct (and not working around any bug) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10 From ccaulfield@sourceware.org Tue Mar 18 13:26:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Tue, 18 Mar 2008 13:26:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-75-gbee9018 Message-ID: <20080318132636.15037.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=bee9018146ab3200d1691621dc4bd648670ece09 The branch, master has been updated via bee9018146ab3200d1691621dc4bd648670ece09 (commit) via 11aa8972e4fcf7524647f55237bd46a7b7489e6b (commit) from febfaf415cb873716ff5f105f873ec8401607a29 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit bee9018146ab3200d1691621dc4bd648670ece09 Author: Christine Caulfield Date: Tue Mar 18 13:11:47 2008 +0000 [CMAN] Make cman cope with the new objdb structure Now the /cluster bits are held on the objdb below "cluster" we need to look for everything (well, nearly everything) under there. Also add a 'cman_tool dump-db' command which is only built in DEBUG mode. Signed-off-by: Christine Caulfield commit 11aa8972e4fcf7524647f55237bd46a7b7489e6b Author: Christine Caulfield Date: Tue Mar 18 13:10:22 2008 +0000 [CCS] Fix the config loader for good We were removing the "/cluster" top level domain to allow /cluster/totem and other random ais bits to be at the top level of the objdb since aisexec expects to find them there. This is not clean in several way because it would break queries like: /cluster/child::* by returning a bunch of top levels objdb that are internal to aisexec and we don't want to expose to everybody. This is achieved by doing a few tricks here and there.. best would be to allow objdb symlinking. First we load the special bits for aisexec at the top level by using the right path within the xml config and then we load (again) the whole configuration. The final result will have some duplicates entries but for now we can live with that. The overhead is minimal. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: ccs/ccsais/config.c | 46 ++++++--------------------- cman/cman_tool/cman_tool.h | 1 + cman/cman_tool/main.c | 32 ++++++++++++++++++- cman/daemon/cman-preconfig.c | 71 +++++++++++++++++++++++++----------------- cman/daemon/cmanconfig.c | 23 ++++++++----- cman/daemon/cnxman-socket.h | 1 + cman/daemon/commands.c | 16 +++++++++- cman/daemon/nodelist.h | 14 +++++--- cman/lib/libcman.c | 10 ++++++ cman/lib/libcman.h | 3 ++ 10 files changed, 136 insertions(+), 81 deletions(-) diff --git a/ccs/ccsais/config.c b/ccs/ccsais/config.c index 07db749..d8b815b 100644 --- a/ccs/ccsais/config.c +++ b/ccs/ccsais/config.c @@ -83,14 +83,14 @@ static int should_alloc(int ccs_fd, char *key) char path[256]; char *str = NULL; - sprintf(path, "/cluster/%s/@*", key); + sprintf(path, "%s/@*", key); keyerror = ccs_get_list(ccs_fd, path, &str); if(str) { free(str); str = NULL; } - sprintf(path, "/cluster/%s/child::*", key); + sprintf(path, "%s/child::*", key); childerr = ccs_get_list(ccs_fd, path, &str); if(str) free(str); @@ -116,7 +116,7 @@ static int read_config_for(int ccs_fd, struct objdb_iface_ver0 *objdb, unsigned if (should_alloc(ccs_fd, key) || always_create) objdb->object_create(parent, &object_handle, object, strlen(object)); - sprintf(path, "/cluster/%s/@*", key); + sprintf(path, "%s/@*", key); /* Get the keys */ for (;;) @@ -143,7 +143,7 @@ static int read_config_for(int ccs_fd, struct objdb_iface_ver0 *objdb, unsigned CCS can't cope with recursive queries so we have to store the result of the subkey search */ memset(subkeys, 0, sizeof(subkeys)); - sprintf(path, "/cluster/%s/child::*", key); + sprintf(path, "%s/child::*", key); for (;;) { char *equal; @@ -229,7 +229,6 @@ static int init_config(struct objdb_iface_ver0 *objdb, char *error_string) { int cd; char *cname = NULL; - char *str; /* Connect to ccsd */ if (getenv("CCS_CLUSTER_NAME")) { @@ -244,40 +243,15 @@ static int init_config(struct objdb_iface_ver0 *objdb, char *error_string) } /* These first few are just versions of openais.conf */ - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "totem", "totem", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "logging", "logging", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "event", "event", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "aisexec", "aisexec", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "amf", "amf", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "totem", "/cluster/totem", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "logging", "/cluster/logging", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "event", "/cluster/event", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "aisexec", "/cluster/aisexec", 1); + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "amf", "/cluster/amf", 1); /* This is stuff specific to us, eg quorum device timeout */ - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "cman", "cman", 1); - - /* Nodes information */ - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "clusternodes", "clusternodes", 1); - - /* all the others */ - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "quorumd", "quorumd", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "fence_xvmd", "fence_xvmd", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "fencedevices", "fencedevices", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "dlm", "dlm", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "gfs_controld", "gfs_controld", 1); - read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "rm", "rm", 1); - - /* Also get cluster name and config version number */ - if (!ccs_get(cd, CONFIG_VERSION_PATH, &str)) { - objdb->object_key_create(OBJECT_PARENT_HANDLE, - "config_version", strlen("config_version"), - str, strlen(str)+1); - free(str); - } + read_config_for(cd, objdb, OBJECT_PARENT_HANDLE, "cluster", "/cluster", 1); - if (!ccs_get(cd, CONFIG_NAME_PATH, &str)) { - objdb->object_key_create(OBJECT_PARENT_HANDLE, - "name", strlen("name"), - str, strlen(str)+1); - free(str); - } ccs_disconnect(cd); return 0; } diff --git a/cman/cman_tool/cman_tool.h b/cman/cman_tool/cman_tool.h index ea4e472..8a98c12 100644 --- a/cman/cman_tool/cman_tool.h +++ b/cman/cman_tool/cman_tool.h @@ -76,6 +76,7 @@ struct commandline char *interfaces[MAX_INTERFACES]; char *override_nodename; char *key_filename; + char *filename; char *format_opts; char *config_lcrso; int votes; diff --git a/cman/cman_tool/main.c b/cman/cman_tool/main.c index 98d0802..c916b7f 100644 --- a/cman/cman_tool/main.c +++ b/cman/cman_tool/main.c @@ -34,6 +34,7 @@ #define OP_NODES 9 #define OP_SERVICES 10 #define OP_DEBUG 11 +#define OP_DUMP_OBJDB 12 static void print_usage(int subcmd) @@ -708,6 +709,19 @@ static void set_debuglog(commandline_t *comline) cman_finish(h); } +#ifdef DEBUG +static void dump_objdb(commandline_t *comline) +{ + cman_handle_t h; + + h = open_cman_handle(1); + + if (cman_dump_objdb(h, comline->filename)) + perror("dump objdb failed"); + + cman_finish(h); +} +#endif static int get_int_arg(char argopt, char *arg) { @@ -913,6 +927,18 @@ static void decode_arguments(int argc, char *argv[], commandline_t *comline) if (comline->operation) die("can't specify two operations"); comline->operation = OP_DEBUG; +#ifdef DEBUG + } else if (strcmp(argv[optind], "dump-db") == 0) { + if (comline->operation) + die("can't specify two operations"); + comline->operation = OP_DUMP_OBJDB; + if (!argv[optind+1]) + die("no filename given"); + comline->filename = strdup(argv[optind+1]); + if (comline->filename[0] != '/') + die("dump filename must be an absolute path"); + optind++; +#endif } else if (strcmp(argv[optind], "remove") == 0) { comline->remove = TRUE; } else if (strcmp(argv[optind], "force") == 0) { @@ -1031,8 +1057,12 @@ int main(int argc, char *argv[]) case OP_DEBUG: set_debuglog(&comline); break; +#ifdef DEBUG + case OP_DUMP_OBJDB: + dump_objdb(&comline); + break; } - +#endif exit(EXIT_SUCCESS); } diff --git a/cman/daemon/cman-preconfig.c b/cman/daemon/cman-preconfig.c index 5900256..c45cc0e 100644 --- a/cman/daemon/cman-preconfig.c +++ b/cman/daemon/cman-preconfig.c @@ -65,6 +65,7 @@ static char *key_filename; static char *mcast_name; static char *cluster_name; static char error_reason[1024]; +static unsigned int cluster_parent_handle; /* * Exports the interface for the service @@ -130,15 +131,15 @@ static int add_ifaddr(struct objdb_iface_ver0 *objdb, char *mcast, char *ifaddr, "totem", strlen("totem"), &totem_object_handle)) { objdb->object_create(OBJECT_PARENT_HANDLE, &totem_object_handle, - "totem", strlen("totem")); + "totem", strlen("totem")); } objdb->object_find_reset(OBJECT_PARENT_HANDLE); if (objdb->object_find(OBJECT_PARENT_HANDLE, - "totem", strlen("totem"), &totem_object_handle) == 0) { + "totem", strlen("totem"), &totem_object_handle) == 0) { if (objdb->object_create(totem_object_handle, &interface_object_handle, - "interface", strlen("interface")) == 0) { + "interface", strlen("interface")) == 0) { P_AIS("Setting if %d, name: %s, mcast: %s, port=%d, \n", num_interfaces, ifaddr, mcast, portnum); @@ -221,7 +222,7 @@ static int verify_nodename(struct objdb_iface_ver0 *objdb, char *nodename) int error; /* nodename is either from commandline or from uname */ - if (nodelist_byname(objdb, nodename)) + if (nodelist_byname(objdb, cluster_parent_handle, nodename)) return 0; /* If nodename was from uname, try a domain-less version of it */ @@ -230,7 +231,7 @@ static int verify_nodename(struct objdb_iface_ver0 *objdb, char *nodename) if (dot) { *dot = '\0'; - if (nodelist_byname(objdb, nodename2)) { + if (nodelist_byname(objdb, cluster_parent_handle, nodename2)) { strcpy(nodename, nodename2); return 0; } @@ -238,7 +239,7 @@ static int verify_nodename(struct objdb_iface_ver0 *objdb, char *nodename) /* If nodename (from uname) is domain-less, try to match against cluster.conf names which may have domainname specified */ - nodes_handle = nodeslist_init(objdb, &parent_handle); + nodes_handle = nodeslist_init(objdb, cluster_parent_handle, &parent_handle); do { int len; @@ -284,7 +285,7 @@ static int verify_nodename(struct objdb_iface_ver0 *objdb, char *nodename) if (error) goto out; - if (nodelist_byname(objdb, nodename2)) { + if (nodelist_byname(objdb, cluster_parent_handle, nodename2)) { strcpy(nodename, nodename2); goto out; } @@ -296,7 +297,7 @@ static int verify_nodename(struct objdb_iface_ver0 *objdb, char *nodename) continue; *dot = '\0'; - if (nodelist_byname(objdb, nodename2)) { + if (nodelist_byname(objdb, cluster_parent_handle, nodename2)) { strcpy(nodename, nodename2); goto out; } @@ -307,7 +308,7 @@ static int verify_nodename(struct objdb_iface_ver0 *objdb, char *nodename) if (error) goto out; - if (nodelist_byname(objdb, nodename2)) { + if (nodelist_byname(objdb, cluster_parent_handle, nodename2)) { strcpy(nodename, nodename2); goto out; } @@ -441,7 +442,7 @@ static int get_nodename(struct objdb_iface_ver0 *objdb) // Add - if ( (node_object_handle = nodelist_byname(objdb, nodename))) { + if ( (node_object_handle = nodelist_byname(objdb, cluster_parent_handle, nodename))) { if (objdb_get_string(objdb, node_object_handle, "nodeid", &nodeid_str)) { log_printf(LOG_ERR, "Cannot get node ID"); write_cman_pipe("This node has no nodeid in cluster.conf"); @@ -449,9 +450,9 @@ static int get_nodename(struct objdb_iface_ver0 *objdb) } } - objdb->object_find_reset(OBJECT_PARENT_HANDLE); + objdb->object_find_reset(cluster_parent_handle); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { @@ -615,15 +616,15 @@ static void add_cman_overrides(struct objdb_iface_ver0 *objdb) } /* Make sure mainconfig doesn't stomp on our logging options */ - if (objdb->object_find(OBJECT_PARENT_HANDLE, + if (objdb->object_find(cluster_parent_handle, "logging", strlen("logging"), &object_handle)) { - objdb->object_create(OBJECT_PARENT_HANDLE, &object_handle, + objdb->object_create(cluster_parent_handle, &object_handle, "logging", strlen("logging")); } - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "logging", strlen("logging"), &object_handle) == 0) { unsigned int logger_object_handle; @@ -649,8 +650,8 @@ static void add_cman_overrides(struct objdb_iface_ver0 *objdb) } /* Don't run under user "ais" */ - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, "aisexec", strlen("aisexec"), &object_handle) == 0) + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "aisexec", strlen("aisexec"), &object_handle) == 0) { objdb->object_key_create(object_handle, "user", strlen("user"), "root", strlen("root") + 1); @@ -658,8 +659,8 @@ static void add_cman_overrides(struct objdb_iface_ver0 *objdb) "root", strlen("root") + 1); } - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, "cman", strlen("cman"), &object_handle) == 0) + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { char str[255]; @@ -757,7 +758,7 @@ static int set_noccs_defaults(struct objdb_iface_ver0 *objdb) } /* Write a local entry to keep the rest of the code happy */ - objdb->object_create(OBJECT_PARENT_HANDLE, &object_handle, + objdb->object_create(cluster_parent_handle, &object_handle, "clusternodes", strlen("clusternodes")); objdb->object_create(object_handle, &object_handle, "clusternode", strlen("clusternode")); @@ -773,19 +774,19 @@ static int set_noccs_defaults(struct objdb_iface_ver0 *objdb) tmp, strlen(tmp)+1); /* Write the default cluster name & ID in here too */ - objdb->object_key_create(OBJECT_PARENT_HANDLE, "name", strlen("name"), + objdb->object_key_create(cluster_parent_handle, "name", strlen("name"), cluster_name, strlen(cluster_name)+1); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle)) { - objdb->object_create(OBJECT_PARENT_HANDLE, &object_handle, + objdb->object_create(cluster_parent_handle, &object_handle, "cman", strlen("cman")); } - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { @@ -804,11 +805,11 @@ static int get_cman_globals(struct objdb_iface_ver0 *objdb) { unsigned int object_handle; - objdb_get_string(objdb, OBJECT_PARENT_HANDLE, "name", &cluster_name); + objdb_get_string(objdb, cluster_parent_handle, "name", &cluster_name); /* Get the bits that override bits */ - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { if (!portnum) @@ -829,6 +830,7 @@ static int get_cman_globals(struct objdb_iface_ver0 *objdb) static int cmanpre_readconfig(struct objdb_iface_ver0 *objdb, char **error_string) { int ret = 0; + unsigned int object_handle; if (getenv("CMAN_PIPE")) startup_pipe = atoi(getenv("CMAN_PIPE")); @@ -847,6 +849,17 @@ static int cmanpre_readconfig(struct objdb_iface_ver0 *objdb, char **error_strin logsys_config_subsys_set("CMAN", LOGSYS_TAG_LOG, LOG_DEBUG); } + objdb->object_find_reset(OBJECT_PARENT_HANDLE); + objdb->object_find(OBJECT_PARENT_HANDLE, + "cluster", strlen("cluster"), &cluster_parent_handle); + + if (objdb->object_find(cluster_parent_handle, + "cman", strlen("cman"), &object_handle)) { + + objdb->object_create(cluster_parent_handle, &object_handle, + "cman", strlen("cman")); + } + get_env_overrides(); if (getenv("CMAN_NOCCS")) ret = set_noccs_defaults(objdb); diff --git a/cman/daemon/cmanconfig.c b/cman/daemon/cmanconfig.c index b190b9c..8bd24dd 100644 --- a/cman/daemon/cmanconfig.c +++ b/cman/daemon/cmanconfig.c @@ -41,6 +41,7 @@ static char cluster_name[MAX_CLUSTER_NAME_LEN + 1]; static unsigned int expected_votes; static char *our_nodename; static int our_votes; +static unsigned int cluster_parent_handle; /* Get all the cluster node names from objdb and * add them to our node list. @@ -58,11 +59,11 @@ int read_cman_nodes(struct objdb_iface_ver0 *objdb, unsigned int *config_version char *nodename; /* New config version */ - objdb_get_int(objdb, OBJECT_PARENT_HANDLE, "config_version", config_version); + objdb_get_int(objdb, cluster_parent_handle, "config_version", config_version); - objdb->object_find_reset(OBJECT_PARENT_HANDLE); + objdb->object_find_reset(cluster_parent_handle); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { @@ -77,7 +78,7 @@ int read_cman_nodes(struct objdb_iface_ver0 *objdb, unsigned int *config_version clear_reread_flags(); /* Get the nodes list */ - nodes_handle = nodeslist_init(objdb, &parent_handle); + nodes_handle = nodeslist_init(objdb, cluster_parent_handle, &parent_handle); do { if (objdb_get_string(objdb, nodes_handle, "name", &nodename)) { log_printf(LOG_ERR, "Cannot get node name"); @@ -149,7 +150,7 @@ static int get_cman_join_info(struct objdb_iface_ver0 *objdb) unsigned int node_object; /* Cluster name */ - if (objdb_get_string(objdb, OBJECT_PARENT_HANDLE, "name", &cname)) { + if (objdb_get_string(objdb, cluster_parent_handle, "name", &cname)) { log_printf(LOG_ERR, "cannot find cluster name in config file"); write_cman_pipe("Can't find cluster name in CCS"); error = -ENOENT; @@ -175,7 +176,7 @@ static int get_cman_join_info(struct objdb_iface_ver0 *objdb) unsigned int nodes_handle; unsigned int parent_handle; - nodes_handle = nodeslist_init(objdb, &parent_handle); + nodes_handle = nodeslist_init(objdb, cluster_parent_handle, &parent_handle); do { int votes; @@ -195,8 +196,8 @@ static int get_cman_join_info(struct objdb_iface_ver0 *objdb) nodes_handle = nodeslist_next(objdb, parent_handle); } while (nodes_handle); - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { @@ -214,7 +215,7 @@ static int get_cman_join_info(struct objdb_iface_ver0 *objdb) log_printf(LOG_INFO, "Using override votes %d\n", votes); } - node_object = nodelist_byname(objdb, our_nodename); + node_object = nodelist_byname(objdb, cluster_parent_handle, our_nodename); if (!node_object) { log_printf(LOG_ERR, "unable to find votes for %s", our_nodename); write_cman_pipe("Unable to find votes for node in CCS"); @@ -291,6 +292,10 @@ int read_cman_config(struct objdb_iface_ver0 *objdb, unsigned int *config_versio { int error; + objdb->object_find_reset(OBJECT_PARENT_HANDLE); + objdb->object_find(OBJECT_PARENT_HANDLE, + "cluster", strlen("cluster"), &cluster_parent_handle); + read_cman_nodes(objdb, config_version, 1); error = get_cman_join_info(objdb); if (error) { diff --git a/cman/daemon/cnxman-socket.h b/cman/daemon/cnxman-socket.h index 90cb9ee..d00ca5b 100644 --- a/cman/daemon/cnxman-socket.h +++ b/cman/daemon/cnxman-socket.h @@ -54,6 +54,7 @@ #define CMAN_CMD_STOP_CONFCHG 0x000000c1 #define CMAN_CMD_SET_DIRTY 0x800000c2 #define CMAN_CMD_SET_DEBUGLOG 0x800000c3 +#define CMAN_CMD_DUMP_OBJDB 0x800000c4 #define CMAN_CMD_DATA 0x00000100 #define CMAN_CMD_BIND 0x00000101 diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index 2549e06..eab29fe 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -1230,6 +1230,7 @@ int process_command(struct connection *con, int cmd, char *cmdbuf, struct cl_version cnxman_version; char *outbuf = *retbuf; int value; + FILE *dumpfile; P_MEMB("command to process is %x\n", cmd); @@ -1260,7 +1261,20 @@ int process_command(struct connection *con, int cmd, char *cmdbuf, set_debuglog(value); err = 0; break; - +#ifdef DEBUG + case CMAN_CMD_DUMP_OBJDB: + P_MEMB("CC: Dump_objdb: filename = %s\n", cmdbuf); + dumpfile = fopen(cmdbuf, "w+"); + if (dumpfile) { + global_objdb->object_dump(OBJECT_PARENT_HANDLE, dumpfile); + fclose(dumpfile); + err = 0; + } + else { + err = -errno; + } + break; +#endif case CMAN_CMD_START_CONFCHG: con->confchg = 1; err = 0; diff --git a/cman/daemon/nodelist.h b/cman/daemon/nodelist.h index a11b842..5363b67 100644 --- a/cman/daemon/nodelist.h +++ b/cman/daemon/nodelist.h @@ -12,12 +12,14 @@ /* Helper functions for navigating the nodes list */ -static unsigned int nodeslist_init(struct objdb_iface_ver0 *objdb, unsigned int *parent_handle) +static unsigned int nodeslist_init(struct objdb_iface_ver0 *objdb, + unsigned int cluster_parent_handle, + unsigned int *parent_handle) { unsigned int object_handle; - objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, + objdb->object_find_reset(cluster_parent_handle); + if (objdb->object_find(cluster_parent_handle, "clusternodes", strlen("clusternodes"), &object_handle) == 0) { @@ -47,13 +49,15 @@ static unsigned int nodeslist_next(struct objdb_iface_ver0 *objdb, unsigned int return 0; } -static unsigned int nodelist_byname(struct objdb_iface_ver0 *objdb, char *name) +static unsigned int nodelist_byname(struct objdb_iface_ver0 *objdb, + unsigned int cluster_parent_handle, + char *name) { char *nodename; unsigned int nodes_handle; unsigned int parent_handle; - nodes_handle = nodeslist_init(objdb, &parent_handle); + nodes_handle = nodeslist_init(objdb, cluster_parent_handle, &parent_handle); while (nodes_handle) { if (objdb_get_string(objdb, nodes_handle, "name", &nodename)) { log_printf(LOG_ERR, "Cannot get node name"); diff --git a/cman/lib/libcman.c b/cman/lib/libcman.c index 190ad0b..7b28dc1 100644 --- a/cman/lib/libcman.c +++ b/cman/lib/libcman.c @@ -1112,3 +1112,13 @@ int cman_node_fenced(cman_handle_t handle, int nodeid, uint64_t time, char *agen strcpy(f.fence_agent, agent); return info_call(h, CMAN_CMD_UPDATE_FENCE_INFO, &f, sizeof(f), NULL, 0); } + +#ifdef DEBUG +int cman_dump_objdb(cman_handle_t handle, char *filename) +{ + struct cman_handle *h = (struct cman_handle *)handle; + VALIDATE_HANDLE(h); + + return info_call(h, CMAN_CMD_DUMP_OBJDB, filename, strlen(filename)+1, NULL, 0); +} +#endif diff --git a/cman/lib/libcman.h b/cman/lib/libcman.h index 21acba3..4afe126 100644 --- a/cman/lib/libcman.h +++ b/cman/lib/libcman.h @@ -337,6 +337,9 @@ int cman_get_fenceinfo(cman_handle_t handle, int nodeid, uint64_t *fence_time, i /* Get stuff for cman_tool. Nobody else should use this */ int cman_get_extra_info(cman_handle_t handle, cman_extra_info_t *info, int maxlen); +/* Dump the objdb contents (only works if compiled with DEBUG enabled) */ +int cman_dump_objdb(cman_handle_t handle, char *filename); + /* * ----------------------------------------------------------------------------- * Admin functions. You will need privileges and have a handle created by hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Tue Mar 18 15:43:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Tue, 18 Mar 2008 15:43:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-76-g2f41945 Message-ID: <20080318154322.5462.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=2f419450985f7bbc069a5be4443757f35450655c The branch, master has been updated via 2f419450985f7bbc069a5be4443757f35450655c (commit) from bee9018146ab3200d1691621dc4bd648670ece09 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2f419450985f7bbc069a5be4443757f35450655c Author: Christine Caulfield Date: Tue Mar 18 15:42:04 2008 +0000 [CMAN] Free up any queued messages when someone disconnects When a client disconnects we need to go through the list of queued replies to get rid of any that have not been collected. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/cnxman-private.h | 1 - cman/daemon/daemon.c | 14 +++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cman/daemon/cnxman-private.h b/cman/daemon/cnxman-private.h index a7e386a..7f6f692 100644 --- a/cman/daemon/cnxman-private.h +++ b/cman/daemon/cnxman-private.h @@ -124,7 +124,6 @@ struct connection uint32_t events; /* Registered for events */ uint32_t confchg; /* Registered for confchg */ struct list write_msgs; /* Queued messages to go to data clients */ - struct cl_comms_socket *clsock; struct connection *next; struct list list; /* when on the client_list */ }; diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index 444d95b..b9923c9 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -102,9 +102,12 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) return 0; } - static void remove_client(poll_handle handle, struct connection *con) { + struct list *tmp, *qmh; + struct queued_reply *qm; + int msgs=0; + poll_dispatch_delete(handle, con->fd); close(con->fd); if (con->type == CON_CLIENT) @@ -113,6 +116,15 @@ static void remove_client(poll_handle handle, struct connection *con) unbind_con(con); remove_barriers(con); + list_iterate_safe(qmh, tmp, &con->write_msgs) { + qm = list_item(qmh, struct queued_reply); + + list_del(&qm->list); + free(qm); + msgs++; + } + + P_DAEMON("Freed %d queued messages\n", msgs); free(con); num_connections--; } hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Tue Mar 18 15:58:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Tue, 18 Mar 2008 15:58:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-18-gae3311d Message-ID: <20080318155814.10240.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ae3311d1de243236751a1d8b1970ee413e24d305 The branch, STABLE2 has been updated via ae3311d1de243236751a1d8b1970ee413e24d305 (commit) from 1c5fcd3e08369099f71182557cd88470860d2e85 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ae3311d1de243236751a1d8b1970ee413e24d305 Author: Christine Caulfield Date: Tue Mar 18 15:56:45 2008 +0000 [CMAN] Free up any queued messages when someone disconnects When a client disconnects we need to go through the list of queued replies to get rid of any that have not been collected. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/cnxman-private.h | 1 - cman/daemon/daemon.c | 14 +++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cman/daemon/cnxman-private.h b/cman/daemon/cnxman-private.h index 5691ccf..e132397 100644 --- a/cman/daemon/cnxman-private.h +++ b/cman/daemon/cnxman-private.h @@ -132,7 +132,6 @@ struct connection uint32_t events; /* Registered for events */ uint32_t confchg; /* Registered for confchg */ struct list write_msgs; /* Queued messages to go to data clients */ - struct cl_comms_socket *clsock; struct connection *next; struct list list; /* when on the client_list */ }; diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index e7f4766..099b421 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -101,9 +101,12 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) return 0; } - static void remove_client(poll_handle handle, struct connection *con) { + struct list *tmp, *qmh; + struct queued_reply *qm; + int msgs=0; + poll_dispatch_delete(handle, con->fd); close(con->fd); if (con->type == CON_CLIENT) @@ -112,6 +115,15 @@ static void remove_client(poll_handle handle, struct connection *con) unbind_con(con); remove_barriers(con); + list_iterate_safe(qmh, tmp, &con->write_msgs) { + qm = list_item(qmh, struct queued_reply); + + list_del(&qm->list); + free(qm); + msgs++; + } + + P_DAEMON("Freed %d queued messages\n", msgs); free(con); num_connections--; } hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Tue Mar 18 17:13:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Tue, 18 Mar 2008 17:13:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-77-gd7387de Message-ID: <20080318171306.2342.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d7387dedf8cf77f3a4156eb5a5264cca15e4e5bd The branch, master has been updated via d7387dedf8cf77f3a4156eb5a5264cca15e4e5bd (commit) from 2f419450985f7bbc069a5be4443757f35450655c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d7387dedf8cf77f3a4156eb5a5264cca15e4e5bd Author: Christine Caulfield Date: Tue Mar 18 17:10:51 2008 +0000 [CMAN] Limit outstanding replies This commit imposes a limit on the number of outstanding replies that a connection can have. This is to prevent a DoS attack that causes cman to eat all available memory by sending lots of requests and not reading the replies. The deafult is 128, it can be set in cluster.conf as Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/cmanconfig.c | 1 + cman/daemon/cnxman-private.h | 1 + cman/daemon/commands.h | 1 + cman/daemon/daemon.c | 16 +++++++++++++++- 4 files changed, 18 insertions(+), 1 deletions(-) diff --git a/cman/daemon/cmanconfig.c b/cman/daemon/cmanconfig.c index 8bd24dd..e0dc46b 100644 --- a/cman/daemon/cmanconfig.c +++ b/cman/daemon/cmanconfig.c @@ -73,6 +73,7 @@ int read_cman_nodes(struct objdb_iface_ver0 *objdb, unsigned int *config_version objdb_get_int(objdb, object_handle, "two_node", (unsigned int *)&two_node); objdb_get_int(objdb, object_handle, "cluster_id", &cluster_id); objdb_get_string(objdb, object_handle, "nodename", &our_nodename); + objdb_get_int(objdb, object_handle, "max_queued", &max_outstanding_messages); } clear_reread_flags(); diff --git a/cman/daemon/cnxman-private.h b/cman/daemon/cnxman-private.h index 7f6f692..527d571 100644 --- a/cman/daemon/cnxman-private.h +++ b/cman/daemon/cnxman-private.h @@ -124,6 +124,7 @@ struct connection uint32_t events; /* Registered for events */ uint32_t confchg; /* Registered for confchg */ struct list write_msgs; /* Queued messages to go to data clients */ + uint32_t num_write_msgs; /* Count of messages */ struct connection *next; struct list list; /* when on the client_list */ }; diff --git a/cman/daemon/commands.h b/cman/daemon/commands.h index 923a9d9..b3441ae 100644 --- a/cman/daemon/commands.h +++ b/cman/daemon/commands.h @@ -47,3 +47,4 @@ extern int cman_join_cluster(struct objdb_iface_ver0 *objdb, int votes, int expected_votes); extern int cluster_members; +extern uint32_t max_outstanding_messages; diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index b9923c9..e3160b7 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -61,8 +61,10 @@ volatile sig_atomic_t quit_threads=0; int num_connections = 0; poll_handle ais_poll_handle; +uint32_t max_outstanding_messages = 128; static int process_client(poll_handle handle, int fd, int revent, void *data); +static void remove_client(poll_handle handle, struct connection *con); /* Send it, or queue it for later if the socket is busy */ static int send_reply_message(struct connection *con, struct sock_header *msg) @@ -83,6 +85,14 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) if ((ret > 0 && ret != msg->length) || (ret == -1 && errno == EAGAIN)) { + + /* Have we exceeded the allowed number of queued messages ? */ + if (con->num_write_msgs > max_outstanding_messages) { + P_DAEMON("Disconnecting. client has more that %d replies outstanding (%d)\n", max_outstanding_messages, con->num_write_msgs); + remove_client(ais_poll_handle, con); + return -1; + } + /* Queue it */ struct queued_reply *qm = malloc(sizeof(struct queued_reply) + msg->length); if (!qm) @@ -96,7 +106,8 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) else qm->offset = 0; list_add(&con->write_msgs, &qm->list); - P_DAEMON("queued last message\n"); + con->num_write_msgs++; + P_DAEMON("queued last message, count is %d\n", con->num_write_msgs); poll_dispatch_modify(ais_poll_handle, con->fd, POLLIN | POLLOUT, process_client); } return 0; @@ -145,6 +156,7 @@ static void send_queued_reply(struct connection *con) { list_del(&qm->list); free(qm); + con->num_write_msgs--; } else { @@ -330,6 +342,7 @@ static int process_rendezvous(poll_handle handle, int fd, int revent, void *data newcon->type = con->type; newcon->port = 0; newcon->events = 0; + newcon->num_write_msgs = 0; list_init(&newcon->write_msgs); fcntl(client_fd, F_SETFL, fcntl(client_fd, F_GETFL, 0) | O_NONBLOCK); @@ -388,6 +401,7 @@ static int open_local_sock(const char *name, int name_len, mode_t mode, poll_han } con->type = type; con->fd = local_socket; + con->num_write_msgs = 0; poll_dispatch_add(handle, con->fd, POLLIN, con, process_rendezvous); hooks/post-receive -- Cluster Project From cfeist@sourceware.org Tue Mar 18 21:54:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Tue, 18 Mar 2008 21:54:00 -0000 Subject: Cluster Project tag, rgmanager_1_9_74, created. gfs-kernel_2_6_9_76-14-gb2fb101 Message-ID: <20080318215409.9938.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b2fb1017061f86f02f3cd864e10b44e9fa347441 The tag, rgmanager_1_9_74 has been created at b2fb1017061f86f02f3cd864e10b44e9fa347441 (commit) - Log ----------------------------------------------------------------- commit b2fb1017061f86f02f3cd864e10b44e9fa347441 Author: Lon Hohberger Date: Tue Mar 11 16:14:01 2008 -0400 Revert "Commit phase 1 of update from rhel5 branch" This reverts commit df101a4507641607e5869f2f15c05cb1be6e0639. This wasn't finished; I committed from the wrong branch. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Tue Mar 18 21:54:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Tue, 18 Mar 2008 21:54:00 -0000 Subject: Cluster Project tag, gfs-kernel_2_6_9_78, created. gfs-kernel_2_6_9_76-15-ga623bf5 Message-ID: <20080318215409.9870.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=a623bf5bbecedd41e592d584c790f68fd218b569 The tag, gfs-kernel_2_6_9_78 has been created at a623bf5bbecedd41e592d584c790f68fd218b569 (commit) - Log ----------------------------------------------------------------- commit a623bf5bbecedd41e592d584c790f68fd218b569 Author: Bob Peterson Date: Fri Mar 14 11:09:09 2008 -0500 Resolves: bz 431945: GFS: gfs-kernel should use device major:minor ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Tue Mar 18 21:54:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Tue, 18 Mar 2008 21:54:00 -0000 Subject: Cluster Project tag, gfs_6_1_16, created. gfs-kernel_2_6_9_76-16-gc118d0c Message-ID: <20080318215409.9907.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c118d0ce03910523ebd6cd533a410283640caf37 The tag, gfs_6_1_16 has been created at c118d0ce03910523ebd6cd533a410283640caf37 (commit) - Log ----------------------------------------------------------------- commit c118d0ce03910523ebd6cd533a410283640caf37 Author: Bob Peterson Date: Fri Mar 14 11:17:46 2008 -0500 Resolves: bz 421761: 'gfs_tool lockdump' wrongly says 'unknown mountpoint' re HP cciss RAID array ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Tue Mar 18 21:54:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Tue, 18 Mar 2008 21:54:00 -0000 Subject: Cluster Project tag, cman_1_0_22, created. gfs-kernel_2_6_9_76-12-gdb6a74a Message-ID: <20080318215408.9848.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=db6a74a9900257848aa4c07256b77b2d10a7db13 The tag, cman_1_0_22 has been created at db6a74a9900257848aa4c07256b77b2d10a7db13 (commit) - Log ----------------------------------------------------------------- commit db6a74a9900257848aa4c07256b77b2d10a7db13 Author: Lon Hohberger Date: Tue Mar 4 17:31:32 2008 -0500 [CMAN] make qdisk master abdication work in all cases Red Hat bugzilla 430264 ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Wed Mar 19 10:09:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Wed, 19 Mar 2008 10:09:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-19-g8434902 Message-ID: <20080319100934.13694.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=84349029e264e982d6b962ee81b13a9f13419115 The branch, STABLE2 has been updated via 84349029e264e982d6b962ee81b13a9f13419115 (commit) from ae3311d1de243236751a1d8b1970ee413e24d305 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 84349029e264e982d6b962ee81b13a9f13419115 Author: Christine Caulfield Date: Wed Mar 19 10:08:51 2008 +0000 [CMAN] Limit outstanding replies This commit imposes a limit on the number of outstanding replies that a connection can have. This is to prevent a DoS attack that causes cman to eat all available memory by sending lots of requests and not reading the replies. The deafult is 128, it can be set in cluster.conf as Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/cmanccs.c | 11 ++++++++++- cman/daemon/cnxman-private.h | 1 + cman/daemon/daemon.c | 20 +++++++++++++++++--- cman/daemon/daemon.h | 3 ++- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/cman/daemon/cmanccs.c b/cman/daemon/cmanccs.c index b7b9748..a901df2 100644 --- a/cman/daemon/cmanccs.c +++ b/cman/daemon/cmanccs.c @@ -1,7 +1,7 @@ /****************************************************************************** ******************************************************************************* ** -** Copyright (C) 2005-2007 Red Hat, Inc. All rights reserved. +** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved. ** ** This copyrighted material is made available to anyone wishing to use, ** modify, copy, or redistribute it subject to the terms and conditions @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,7 @@ #include "cnxman-private.h" #include "logging.h" #include "commands.h" +#include "daemon.h" #include "ais.h" #include "ccs.h" @@ -46,6 +48,7 @@ #define MCAST_ADDR_PATH "/cluster/cman/multicast/@addr" #define PORT_PATH "/cluster/cman/@port" #define KEY_PATH "/cluster/cman/@keyfile" +#define MAXQUEUED_PATH "/cluster/cman/@max_queued" #define NODE_NAME_PATH_BYNAME "/cluster/clusternodes/clusternode[@name=\"%s\"]/@name" #define NODE_NAME_PATH_BYNUM "/cluster/clusternodes/clusternode[%d]/@name" @@ -551,6 +554,12 @@ static int get_ccs_join_info(void) cluster_id = generate_cluster_id(cluster_name); } + error = ccs_get(cd, MAXQUEUED_PATH, &str); + if (!error) { + max_outstanding_messages = atoi(str); + free(str); + } + /* our nodename */ if (nodename_env) { int ret; diff --git a/cman/daemon/cnxman-private.h b/cman/daemon/cnxman-private.h index e132397..a3b3f55 100644 --- a/cman/daemon/cnxman-private.h +++ b/cman/daemon/cnxman-private.h @@ -132,6 +132,7 @@ struct connection uint32_t events; /* Registered for events */ uint32_t confchg; /* Registered for confchg */ struct list write_msgs; /* Queued messages to go to data clients */ + uint32_t num_write_msgs; /* Count of messages */ struct connection *next; struct list list; /* when on the client_list */ }; diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index 099b421..1e51a38 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -1,7 +1,7 @@ /****************************************************************************** ******************************************************************************* ** -** Copyright (C) 2005-2006 Red Hat, Inc. All rights reserved. +** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved. ** ** This copyrighted material is made available to anyone wishing to use, ** modify, copy, or redistribute it subject to the terms and conditions @@ -60,8 +60,10 @@ volatile sig_atomic_t quit_threads=0; int num_connections = 0; poll_handle ais_poll_handle; +uint32_t max_outstanding_messages = 128; static int process_client(poll_handle handle, int fd, int revent, void *data); +static void remove_client(poll_handle handle, struct connection *con); /* Send it, or queue it for later if the socket is busy */ static int send_reply_message(struct connection *con, struct sock_header *msg) @@ -82,8 +84,17 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) if ((ret > 0 && ret != msg->length) || (ret == -1 && errno == EAGAIN)) { + struct queued_reply *qm; + + /* Have we exceeded the allowed number of queued messages ? */ + if (con->num_write_msgs > max_outstanding_messages) { + P_DAEMON("Disconnecting. client has more that %d replies outstanding (%d)\n", max_outstanding_messages, con->num_write_msgs); + remove_client(ais_poll_handle, con); + return -1; + } + /* Queue it */ - struct queued_reply *qm = malloc(sizeof(struct queued_reply) + msg->length); + qm = malloc(sizeof(struct queued_reply) + msg->length); if (!qm) { perror("Error allocating queued message"); @@ -95,7 +106,8 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) else qm->offset = 0; list_add(&con->write_msgs, &qm->list); - P_DAEMON("queued last message\n"); + con->num_write_msgs++; + P_DAEMON("queued last message, count is %d\n", con->num_write_msgs); poll_dispatch_modify(ais_poll_handle, con->fd, POLLIN | POLLOUT, process_client); } return 0; @@ -144,6 +156,7 @@ static void send_queued_reply(struct connection *con) { list_del(&qm->list); free(qm); + con->num_write_msgs--; } else { @@ -329,6 +342,7 @@ static int process_rendezvous(poll_handle handle, int fd, int revent, void *data newcon->type = con->type; newcon->port = 0; newcon->events = 0; + newcon->num_write_msgs = 0; list_init(&newcon->write_msgs); fcntl(client_fd, F_SETFL, fcntl(client_fd, F_GETFL, 0) | O_NONBLOCK); diff --git a/cman/daemon/daemon.h b/cman/daemon/daemon.h index 3897bd9..7f604a8 100644 --- a/cman/daemon/daemon.h +++ b/cman/daemon/daemon.h @@ -1,7 +1,7 @@ /****************************************************************************** ******************************************************************************* ** -** Copyright (C) 2005 Red Hat, Inc. All rights reserved. +** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved. ** ** This copyrighted material is made available to anyone wishing to use, ** modify, copy, or redistribute it subject to the terms and conditions @@ -22,3 +22,4 @@ extern void notify_confchg(struct sock_header *message); extern volatile sig_atomic_t quit_threads; extern int num_connections; +extern uint32_t max_outstanding_messages; hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Wed Mar 19 10:38:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Wed, 19 Mar 2008 10:38:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-78-gb8920a3 Message-ID: <20080319103839.27329.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b8920a3ce7c3af2f6d8ff8eed4a739f4b7cb81b6 The branch, master has been updated via b8920a3ce7c3af2f6d8ff8eed4a739f4b7cb81b6 (commit) from d7387dedf8cf77f3a4156eb5a5264cca15e4e5bd (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b8920a3ce7c3af2f6d8ff8eed4a739f4b7cb81b6 Author: Christine Caulfield Date: Wed Mar 19 10:36:54 2008 +0000 [CMAN] Don't declare a variable in the middle of a block Later gccs seem to allow this behaviour (and leaving it like that was a mistake on my part) but I've moved the declaration of 'qm' back to the start of the block for normality's sake. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/daemon.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index e3160b7..f504db3 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -85,6 +85,7 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) if ((ret > 0 && ret != msg->length) || (ret == -1 && errno == EAGAIN)) { + struct queued_reply *qm; /* Have we exceeded the allowed number of queued messages ? */ if (con->num_write_msgs > max_outstanding_messages) { @@ -94,7 +95,7 @@ static int send_reply_message(struct connection *con, struct sock_header *msg) } /* Queue it */ - struct queued_reply *qm = malloc(sizeof(struct queued_reply) + msg->length); + qm = malloc(sizeof(struct queued_reply) + msg->length); if (!qm) { perror("Error allocating queued message"); hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Wed Mar 19 11:37:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Wed, 19 Mar 2008 11:37:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-79-g256cd80 Message-ID: <20080319113708.25760.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=256cd80bd60d1194bc5148fb7bd656a0fd8a5a27 The branch, master has been updated via 256cd80bd60d1194bc5148fb7bd656a0fd8a5a27 (commit) from b8920a3ce7c3af2f6d8ff8eed4a739f4b7cb81b6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 256cd80bd60d1194bc5148fb7bd656a0fd8a5a27 Author: Christine Caulfield Date: Wed Mar 19 11:34:05 2008 +0000 [CMAN] valid port number & don't use it before validation cman_send_data didn't validate the port number. This was not a great problem, but it was slightly silly. cman_start_recv_data used the port number before validation in a debug message, this could crash the server if debug is enabled and a very large port number was passed in. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/commands.c | 2 +- cman/daemon/daemon.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletions(-) diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index eab29fe..5cbc012 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -844,7 +844,7 @@ static int do_cmd_bind(struct connection *con, char *cmdbuf) memcpy(&port, cmdbuf, sizeof(int)); - P_MEMB("requested bind to port %d, port_con = %p (us=%p)\n", port, port_array[port], con); + P_MEMB("requested bind to port %d, (us=%p)\n", port, con); if (port == 0 || port > 255) return -EINVAL; diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index f504db3..11908ad 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -272,10 +272,16 @@ static int process_client(poll_handle handle, int fd, int revent, void *data) buf += sizeof(struct sock_data_header); + if (dmsg->port > 255) { + send_status_return(con, msg->command, -EINVAL); + return 0; + } + if (dmsg->port) port = dmsg->port; else port = con->port; + ret = comms_send_message(buf, msg->length - sizeof(struct sock_data_header), port, con->port, dmsg->nodeid, hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Wed Mar 19 11:38:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Wed, 19 Mar 2008 11:38:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-20-gce3caa5 Message-ID: <20080319113834.26097.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ce3caa50bca9ae837f50ab7a5f7602b9a1a1401f The branch, STABLE2 has been updated via ce3caa50bca9ae837f50ab7a5f7602b9a1a1401f (commit) from 84349029e264e982d6b962ee81b13a9f13419115 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ce3caa50bca9ae837f50ab7a5f7602b9a1a1401f Author: Christine Caulfield Date: Wed Mar 19 11:37:58 2008 +0000 [CMAN] valid port number & don't use it before validation cman_send_data didn't validate the port number. This was not a great problem, but it was slightly silly. cman_start_recv_data used the port number before validation in a debug message, this could crash the server if debug is enabled and a very large port number was passed in. Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: cman/daemon/commands.c | 2 +- cman/daemon/daemon.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletions(-) diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index 4696047..b6d796a 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -809,7 +809,7 @@ static int do_cmd_bind(struct connection *con, char *cmdbuf) memcpy(&port, cmdbuf, sizeof(int)); - P_MEMB("requested bind to port %d, port_con = %p (us=%p)\n", port, port_array[port], con); + P_MEMB("requested bind to port %d, (us=%p)\n", port, con); if (port == 0 || port > 255) return -EINVAL; diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index 1e51a38..eded81e 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -271,10 +271,16 @@ static int process_client(poll_handle handle, int fd, int revent, void *data) buf += sizeof(struct sock_data_header); + if (dmsg->port > 255) { + send_status_return(con, msg->command, -EINVAL); + return 0; + } + if (dmsg->port) port = dmsg->port; else port = con->port; + ret = comms_send_message(buf, msg->length - sizeof(struct sock_data_header), port, con->port, dmsg->nodeid, hooks/post-receive -- Cluster Project From rpeterso@sourceware.org Wed Mar 19 14:11:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Wed, 19 Mar 2008 14:11:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-82-gca0ff53 Message-ID: <20080319141111.1347.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=ca0ff53f1889723bcea026e734a53574a9cbae6e The branch, master has been updated via ca0ff53f1889723bcea026e734a53574a9cbae6e (commit) via ddf06f1c8d723090aad82f4b742b388b99fc6615 (commit) via cee0863aa683dd7982f5396d5cc50752ca65b10e (commit) from 256cd80bd60d1194bc5148fb7bd656a0fd8a5a27 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ca0ff53f1889723bcea026e734a53574a9cbae6e Merge: ddf06f1c8d723090aad82f4b742b388b99fc6615 256cd80bd60d1194bc5148fb7bd656a0fd8a5a27 Author: Bob Peterson Date: Wed Mar 19 09:02:13 2008 -0500 Merge branch 'master' of ssh://sources.redhat.com/git/cluster into master.bz431945 commit ddf06f1c8d723090aad82f4b742b388b99fc6615 Author: Bob Peterson Date: Fri Mar 14 11:09:09 2008 -0500 Resolves: bz 431945: GFS: gfs-kernel should use device major:minor commit cee0863aa683dd7982f5396d5cc50752ca65b10e Author: Bob Peterson Date: Fri Mar 14 11:17:46 2008 -0500 Resolves: bz 421761: 'gfs_tool lockdump' wrongly says 'unknown mountpoint' re HP cciss RAID array ----------------------------------------------------------------------- Summary of changes: gfs-kernel/src/gfs/proc.c | 13 +++++++- gfs/gfs_tool/util.c | 64 +++++++-------------------------------------- 2 files changed, 21 insertions(+), 56 deletions(-) diff --git a/gfs-kernel/src/gfs/proc.c b/gfs-kernel/src/gfs/proc.c index c86b4e6..b58181c 100644 --- a/gfs-kernel/src/gfs/proc.c +++ b/gfs-kernel/src/gfs/proc.c @@ -27,6 +27,7 @@ #include "lm.h" #include "proc.h" #include "super.h" +#include "diaper.h" struct list_head gfs_fs_list; struct semaphore gfs_fs_lock; @@ -77,16 +78,21 @@ do_list(char *user_buf, size_t size) struct gfs_sbd *sdp = NULL; unsigned int x; char num[21]; + char device_id[32]; char *buf; int error = 0; + struct block_device *bdevice; down(&gfs_fs_lock); x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); + bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); + sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), + MINOR(bdevice->bd_dev)); x += sprintf(num, "%lu", (unsigned long)sdp) + - strlen(sdp->sd_vfs->s_id) + + strlen(device_id) + strlen(sdp->sd_fsname) + 3; } @@ -105,8 +111,11 @@ do_list(char *user_buf, size_t size) x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); + bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); + sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), + MINOR(bdevice->bd_dev)); x += sprintf(buf + x, "%lu %s %s\n", - (unsigned long)sdp, sdp->sd_vfs->s_id, sdp->sd_fsname); + (unsigned long)sdp, device_id, sdp->sd_fsname); } if (copy_to_user(user_buf, buf, x)) diff --git a/gfs/gfs_tool/util.c b/gfs/gfs_tool/util.c index b9a4703..a4c1ab4 100644 --- a/gfs/gfs_tool/util.c +++ b/gfs/gfs_tool/util.c @@ -122,52 +122,6 @@ str2lines(char *str) } /** - * do_basename - Create dm-N style name for the device - * @device: - * - * Returns: Pointer to dm name or basename - */ - -static char * -do_basename(char *device) -{ - FILE *file; - int found = FALSE; - char line[256], major_name[256]; - unsigned int major_number; - struct stat st; - - file = fopen("/proc/devices", "r"); - if (!file) - goto punt; - - while (fgets(line, 256, file)) { - if (sscanf(line, "%u %s", &major_number, major_name) != 2) - continue; - if (strcmp(major_name, "device-mapper") != 0) - continue; - found = TRUE; - break; - } - - fclose(file); - - if (!found) - goto punt; - - if (stat(device, &st)) - goto punt; - if (major(st.st_rdev) == major_number) { - static char realname[16]; - snprintf(realname, 16, "dm-%u", minor(st.st_rdev)); - return realname; - } - - punt: - return basename(device); -} - -/** * mp2cookie - Find the cookie for a filesystem given its mountpoint * @mp: * @ioctl_ok: If this is FALSE, it's not acceptable to open() the mountpoint @@ -181,9 +135,9 @@ mp2cookie(char *mp, int ioctl_ok) char *cookie; char *list, **lines; FILE *file; - char line[256], device[256]; - char *dev = NULL; + char line[256], device[256], dev_id[256]; unsigned int x; + struct stat st; cookie = malloc(256); if (!cookie) @@ -196,6 +150,7 @@ mp2cookie(char *mp, int ioctl_ok) die("can't open /proc/mounts: %s\n", strerror(errno)); + memset(dev_id, 0, sizeof(dev_id)); while (fgets(line, 256, file)) { char path[256], type[256]; @@ -206,18 +161,19 @@ mp2cookie(char *mp, int ioctl_ok) if (strcmp(type, "gfs")) die("%s is not a GFS filesystem\n", mp); - dev = do_basename(device); - + if (stat(device, &st)) + continue; + sprintf(dev_id, "%u:%u", major(st.st_rdev),minor(st.st_rdev)); break; } fclose(file); for (x = 0; *lines[x]; x++) { - char s_id[256]; - sscanf(lines[x], "%s %s", cookie, s_id); - if (dev) { - if (strcmp(s_id, dev) == 0) + char device_id[256]; + sscanf(lines[x], "%s %s", cookie, device_id); + if (dev_id[0]) { + if (strcmp(device_id, dev_id) == 0) return cookie; } else { if (strcmp(cookie, mp) == 0) hooks/post-receive -- Cluster Project From rpeterso@sourceware.org Wed Mar 19 14:23:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Wed, 19 Mar 2008 14:23:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-22-g318e2b2 Message-ID: <20080319142332.6229.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=318e2b2b42769a9db2387d5f21c290ef3fc926f9 The branch, STABLE2 has been updated via 318e2b2b42769a9db2387d5f21c290ef3fc926f9 (commit) via 8be4a9b8cb7531fd9f6cd9457aacbac71787f237 (commit) from ce3caa50bca9ae837f50ab7a5f7602b9a1a1401f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 318e2b2b42769a9db2387d5f21c290ef3fc926f9 Author: Bob Peterson Date: Fri Mar 14 11:09:09 2008 -0500 Resolves: bz 431945: GFS: gfs-kernel should use device major:minor commit 8be4a9b8cb7531fd9f6cd9457aacbac71787f237 Author: Bob Peterson Date: Fri Mar 14 11:17:46 2008 -0500 Resolves: bz 421761: 'gfs_tool lockdump' wrongly says 'unknown mountpoint' re HP cciss RAID array ----------------------------------------------------------------------- Summary of changes: gfs-kernel/src/gfs/proc.c | 13 +++++++- gfs/gfs_tool/util.c | 64 +++++++-------------------------------------- 2 files changed, 21 insertions(+), 56 deletions(-) diff --git a/gfs-kernel/src/gfs/proc.c b/gfs-kernel/src/gfs/proc.c index c86b4e6..b58181c 100644 --- a/gfs-kernel/src/gfs/proc.c +++ b/gfs-kernel/src/gfs/proc.c @@ -27,6 +27,7 @@ #include "lm.h" #include "proc.h" #include "super.h" +#include "diaper.h" struct list_head gfs_fs_list; struct semaphore gfs_fs_lock; @@ -77,16 +78,21 @@ do_list(char *user_buf, size_t size) struct gfs_sbd *sdp = NULL; unsigned int x; char num[21]; + char device_id[32]; char *buf; int error = 0; + struct block_device *bdevice; down(&gfs_fs_lock); x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); + bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); + sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), + MINOR(bdevice->bd_dev)); x += sprintf(num, "%lu", (unsigned long)sdp) + - strlen(sdp->sd_vfs->s_id) + + strlen(device_id) + strlen(sdp->sd_fsname) + 3; } @@ -105,8 +111,11 @@ do_list(char *user_buf, size_t size) x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); + bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); + sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), + MINOR(bdevice->bd_dev)); x += sprintf(buf + x, "%lu %s %s\n", - (unsigned long)sdp, sdp->sd_vfs->s_id, sdp->sd_fsname); + (unsigned long)sdp, device_id, sdp->sd_fsname); } if (copy_to_user(user_buf, buf, x)) diff --git a/gfs/gfs_tool/util.c b/gfs/gfs_tool/util.c index b9a4703..a4c1ab4 100644 --- a/gfs/gfs_tool/util.c +++ b/gfs/gfs_tool/util.c @@ -122,52 +122,6 @@ str2lines(char *str) } /** - * do_basename - Create dm-N style name for the device - * @device: - * - * Returns: Pointer to dm name or basename - */ - -static char * -do_basename(char *device) -{ - FILE *file; - int found = FALSE; - char line[256], major_name[256]; - unsigned int major_number; - struct stat st; - - file = fopen("/proc/devices", "r"); - if (!file) - goto punt; - - while (fgets(line, 256, file)) { - if (sscanf(line, "%u %s", &major_number, major_name) != 2) - continue; - if (strcmp(major_name, "device-mapper") != 0) - continue; - found = TRUE; - break; - } - - fclose(file); - - if (!found) - goto punt; - - if (stat(device, &st)) - goto punt; - if (major(st.st_rdev) == major_number) { - static char realname[16]; - snprintf(realname, 16, "dm-%u", minor(st.st_rdev)); - return realname; - } - - punt: - return basename(device); -} - -/** * mp2cookie - Find the cookie for a filesystem given its mountpoint * @mp: * @ioctl_ok: If this is FALSE, it's not acceptable to open() the mountpoint @@ -181,9 +135,9 @@ mp2cookie(char *mp, int ioctl_ok) char *cookie; char *list, **lines; FILE *file; - char line[256], device[256]; - char *dev = NULL; + char line[256], device[256], dev_id[256]; unsigned int x; + struct stat st; cookie = malloc(256); if (!cookie) @@ -196,6 +150,7 @@ mp2cookie(char *mp, int ioctl_ok) die("can't open /proc/mounts: %s\n", strerror(errno)); + memset(dev_id, 0, sizeof(dev_id)); while (fgets(line, 256, file)) { char path[256], type[256]; @@ -206,18 +161,19 @@ mp2cookie(char *mp, int ioctl_ok) if (strcmp(type, "gfs")) die("%s is not a GFS filesystem\n", mp); - dev = do_basename(device); - + if (stat(device, &st)) + continue; + sprintf(dev_id, "%u:%u", major(st.st_rdev),minor(st.st_rdev)); break; } fclose(file); for (x = 0; *lines[x]; x++) { - char s_id[256]; - sscanf(lines[x], "%s %s", cookie, s_id); - if (dev) { - if (strcmp(s_id, dev) == 0) + char device_id[256]; + sscanf(lines[x], "%s %s", cookie, device_id); + if (dev_id[0]) { + if (strcmp(device_id, dev_id) == 0) return cookie; } else { if (strcmp(cookie, mp) == 0) hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Wed Mar 19 14:45:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 19 Mar 2008 14:45:00 -0000 Subject: conga ./conga.spec.in.in ricci/modules/cluster ... Message-ID: <20080319144534.17964.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-19 14:45:34 Modified files: . : conga.spec.in.in ricci/modules/cluster: ClusterModule.cpp Makefile Virt.cpp Virt.h Added files: ricci/test_suite/cluster: vm_list.xml Log message: Fix bz206570: vm list from ricci Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.71&r2=1.45.2.72 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.4&r2=1.5.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.14.2.4&r2=1.14.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.3&r2=1.1.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/cluster/vm_list.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1 From rmccabe@sourceware.org Wed Mar 19 14:59:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 19 Mar 2008 14:59:00 -0000 Subject: conga conga.spec.in.in Message-ID: <20080319145942.24957.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-19 14:59:42 Modified files: . : conga.spec.in.in Log message: Add a build dependency against libvirt-devel for building ricci Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.72&r2=1.45.2.73 From rmccabe@sourceware.org Wed Mar 19 17:59:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 19 Mar 2008 17:59:00 -0000 Subject: conga clustermon.spec.in.in conga.spec.in.in r ... Message-ID: <20080319175915.9372.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-19 17:59:15 Modified files: . : clustermon.spec.in.in conga.spec.in.in ricci.spec.in.in Log message: Fix minor consistency issues Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.38&r2=1.39 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.96&r2=1.97 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.5&r2=1.6 From lhh@sourceware.org Wed Mar 19 19:45:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 19 Mar 2008 19:45:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-13-g1acab71 Message-ID: <20080319194515.9836.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1acab71f585b845992e6070d6616644690f4e444 The branch, RHEL5 has been updated via 1acab71f585b845992e6070d6616644690f4e444 (commit) via 4cbc5a146009d8fe648c1817641ad04633478c37 (commit) via 8db6a0907ab1c443e9f3c2799ef98a1c069ec41d (commit) via e651985b0fc5741396f65845df2d17be05328034 (commit) via f667470748a1968963e0c17f325aadfcbb5c7415 (commit) from 14e702986f37607300cafdf68886daf15c10be38 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1acab71f585b845992e6070d6616644690f4e444 Author: Lon Hohberger Date: Wed Mar 19 15:15:11 2008 -0400 [rgmanager] Update changelog for rhel5 branch commit 4cbc5a146009d8fe648c1817641ad04633478c37 Author: Lon Hohberger Date: Wed Mar 19 15:14:19 2008 -0400 [rgmanager] Fix #432998 Fix a bug causing incorrect return codes during service stop operations commit 8db6a0907ab1c443e9f3c2799ef98a1c069ec41d Merge: e651985b0fc5741396f65845df2d17be05328034 14e702986f37607300cafdf68886daf15c10be38 Author: Lon Hohberger Date: Wed Mar 19 13:55:21 2008 -0400 Merge branch 'RHEL5' of ssh://sources.redhat.com/git/cluster into rhel5 commit e651985b0fc5741396f65845df2d17be05328034 Merge: f667470748a1968963e0c17f325aadfcbb5c7415 b70ad6fe5a5795a699ad208ab009a4c952e9078f Author: Lon Hohberger Date: Tue Mar 11 14:53:04 2008 -0400 Merge branch 'RHEL5' of ssh://sources.redhat.com/git/cluster into rhel5 commit f667470748a1968963e0c17f325aadfcbb5c7415 Author: Lon Hohberger Date: Tue Mar 4 17:24:15 2008 -0500 [fence] Make fence_xvmd support reloading of key files on the fly. ----------------------------------------------------------------------- Summary of changes: fence/agents/xvm/fence_xvm.c | 2 +- fence/agents/xvm/fence_xvmd.c | 31 +++++++++++++++++++++++++++++-- fence/agents/xvm/simple_auth.c | 2 ++ fence/agents/xvm/xvm.h | 1 + rgmanager/ChangeLog | 3 +++ rgmanager/src/daemons/restree.c | 2 +- 6 files changed, 37 insertions(+), 4 deletions(-) diff --git a/fence/agents/xvm/fence_xvm.c b/fence/agents/xvm/fence_xvm.c index bd1eba9..898a55f 100644 --- a/fence/agents/xvm/fence_xvm.c +++ b/fence/agents/xvm/fence_xvm.c @@ -217,7 +217,7 @@ int fence_xen_domain(fence_xvm_args_t *args) { ip_list_t ipl; - char key[4096]; + char key[MAX_KEY_LEN]; int lfd, key_len = 0, fd; int attempts = 0; diff --git a/fence/agents/xvm/fence_xvmd.c b/fence/agents/xvm/fence_xvmd.c index 47d59fd..d7d25ca 100644 --- a/fence/agents/xvm/fence_xvmd.c +++ b/fence/agents/xvm/fence_xvmd.c @@ -55,6 +55,7 @@ #include "debug.h" static int running = 1; +static int reload_key; int cleanup_xml(char *xmldesc, char **ret, size_t *retsz); @@ -596,6 +597,27 @@ xvmd_loop(cman_handle_t ch, void *h, int fd, fence_xvm_args_t *args, virConnectClose(vp); vp = NULL; } + + if (reload_key) { + char temp_key[MAX_KEY_LEN]; + int ret; + + reload_key = 0; + + ret = read_key_file(args->key_file, temp_key, sizeof(temp_key)); + if (ret < 0) { + printf("Could not read %s; not updating key", + args->key_file); + } else { + memcpy(key, temp_key, MAX_KEY_LEN); + key_len = (size_t) ret; + + if (args->auth == AUTH_NONE) + args->auth = AUTH_SHA256; + if (args->hash == HASH_NONE) + args->hash = HASH_SHA256; + } + } n = select(fd+1, &rfds, NULL, NULL, &tv); if (n < 0) @@ -701,6 +723,11 @@ sigint_handler(int sig) running = 0; } +void +sighup_handler(int sig) +{ + reload_key = 1; +} void malloc_dump_table(void); @@ -710,7 +737,7 @@ main(int argc, char **argv) { fence_xvm_args_t args; int mc_sock; - char key[4096]; + char key[MAX_KEY_LEN]; int key_len = 0, x; char *my_options = "dfi:a:p:C:c:k:u?hLXV"; cman_handle_t ch = NULL; @@ -803,7 +830,6 @@ main(int argc, char **argv) if (x) printf("Checkpoint initialized\n"); } - if (args.family == PF_INET) mc_sock = ipv4_recv_sk(args.addr, args.port); else @@ -814,6 +840,7 @@ main(int argc, char **argv) } + signal(SIGHUP, sighup_handler); signal(SIGINT, sigint_handler); signal(SIGTERM, sigint_handler); signal(SIGQUIT, sigint_handler); diff --git a/fence/agents/xvm/simple_auth.c b/fence/agents/xvm/simple_auth.c index 0064e5c..7eb26ee 100644 --- a/fence/agents/xvm/simple_auth.c +++ b/fence/agents/xvm/simple_auth.c @@ -390,6 +390,8 @@ read_key_file(char *file, char *key, size_t max_len) while (remain) { nread = read(fd, p, remain); if (nread < 0) { + if (errno == EINTR) + continue; dbg_printf(2, "Error from read: %s\n", strerror(errno)); close(fd); return -1; diff --git a/fence/agents/xvm/xvm.h b/fence/agents/xvm/xvm.h index a423e67..b035d24 100644 --- a/fence/agents/xvm/xvm.h +++ b/fence/agents/xvm/xvm.h @@ -57,6 +57,7 @@ typedef enum { } fence_cmd_t; #define MAX_HASH_LENGTH SHA512_LENGTH +#define MAX_KEY_LEN 4096 typedef struct __attribute__ ((packed)) _fence_req { uint8_t request; /* Fence request */ diff --git a/rgmanager/ChangeLog b/rgmanager/ChangeLog index 49cd4a0..b28e23e 100644 --- a/rgmanager/ChangeLog +++ b/rgmanager/ChangeLog @@ -1,3 +1,6 @@ +2008-03-19 Lon Hohberger + * src/daemons/restree.c: Fix #432998 + 2008-03-04 Lon Hohberger * src/resources/Makefile, ASEHAagent.sh: Add support for Sybase ASE failover, #435795 diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c index fc9cde1..d08bdb0 100644 --- a/rgmanager/src/daemons/restree.c +++ b/rgmanager/src/daemons/restree.c @@ -1315,7 +1315,7 @@ _res_op_internal(resource_node_t **tree, resource_t *first, /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { node->rn_flags &= ~RF_NEEDSTOP; - rv = res_exec(node, op, NULL, 0); + rv |= res_exec(node, op, NULL, 0); if (rv != 0) { node->rn_state = RES_FAILED; hooks/post-receive -- Cluster Project From lhh@sourceware.org Wed Mar 19 19:46:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 19 Mar 2008 19:46:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-83-gb1c2b5e Message-ID: <20080319194618.10831.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b1c2b5e5c36f3ed806593716790d8834892182da The branch, master has been updated via b1c2b5e5c36f3ed806593716790d8834892182da (commit) from ca0ff53f1889723bcea026e734a53574a9cbae6e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b1c2b5e5c36f3ed806593716790d8834892182da Author: Lon Hohberger Date: Wed Mar 19 15:14:19 2008 -0400 [rgmanager] Fix #432998 Fix a bug causing incorrect return codes during service stop operations ----------------------------------------------------------------------- Summary of changes: rgmanager/src/daemons/restree.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c index fc9cde1..d08bdb0 100644 --- a/rgmanager/src/daemons/restree.c +++ b/rgmanager/src/daemons/restree.c @@ -1315,7 +1315,7 @@ _res_op_internal(resource_node_t **tree, resource_t *first, /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { node->rn_flags &= ~RF_NEEDSTOP; - rv = res_exec(node, op, NULL, 0); + rv |= res_exec(node, op, NULL, 0); if (rv != 0) { node->rn_state = RES_FAILED; hooks/post-receive -- Cluster Project From lhh@sourceware.org Wed Mar 19 19:47:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Wed, 19 Mar 2008 19:47:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-23-gd7e3a6e Message-ID: <20080319194709.11267.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d7e3a6ea468339ef2f5908379d622004fa04030e The branch, STABLE2 has been updated via d7e3a6ea468339ef2f5908379d622004fa04030e (commit) from 318e2b2b42769a9db2387d5f21c290ef3fc926f9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d7e3a6ea468339ef2f5908379d622004fa04030e Author: Lon Hohberger Date: Wed Mar 19 15:14:19 2008 -0400 [rgmanager] Fix #432998 Fix a bug causing incorrect return codes during service stop operations ----------------------------------------------------------------------- Summary of changes: rgmanager/src/daemons/restree.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c index fc9cde1..d08bdb0 100644 --- a/rgmanager/src/daemons/restree.c +++ b/rgmanager/src/daemons/restree.c @@ -1315,7 +1315,7 @@ _res_op_internal(resource_node_t **tree, resource_t *first, /* Stop should occur after children have stopped */ if (me && (op == RS_STOP)) { node->rn_flags &= ~RF_NEEDSTOP; - rv = res_exec(node, op, NULL, 0); + rv |= res_exec(node, op, NULL, 0); if (rv != 0) { node->rn_state = RES_FAILED; hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Wed Mar 19 20:09:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 19 Mar 2008 20:09:00 -0000 Subject: conga Makefile clustermon.spec.in.in ricci.spe ... Message-ID: <20080319200949.26710.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-19 20:09:49 Modified files: . : Makefile clustermon.spec.in.in ricci.spec.in.in Log message: more build tweaks Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Makefile.diff?cvsroot=cluster&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.39&r2=1.40 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.6&r2=1.7 From rmccabe@sourceware.org Wed Mar 19 20:10:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Wed, 19 Mar 2008 20:10:00 -0000 Subject: conga clustermon.spec.in.in conga.spec.in.in Message-ID: <20080319201047.27176.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-19 20:10:47 Modified files: . : clustermon.spec.in.in conga.spec.in.in Log message: clustermon should be marked as fixing the "vm list from ricci" bug, not conga Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.32&r2=1.18.2.33 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.73&r2=1.45.2.74 From teigland@sourceware.org Wed Mar 19 21:21:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Wed, 19 Mar 2008 21:21:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-84-gc2b3b2b Message-ID: <20080319212109.1713.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c2b3b2b7be437bc4476326dcfe58e9f2b6c55d48 The branch, master has been updated via c2b3b2b7be437bc4476326dcfe58e9f2b6c55d48 (commit) from b1c2b5e5c36f3ed806593716790d8834892182da (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c2b3b2b7be437bc4476326dcfe58e9f2b6c55d48 Author: Joel Becker Date: Wed Mar 19 16:08:49 2008 -0500 libdlm: Don't pass LKF_WAIT to the kernel libdlm is passing LKF_WAIT to the kernel. In the kernel, the unlock path strictly audits flags, and errors on this unknown (to the kernel) flag. The correct answer is to keep the flag in userspace. Signed-off-by: Joel Becker Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index d182095..4bafbbc 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -754,7 +754,7 @@ static int ls_lock_v5(dlm_lshandle_t ls, req->cmd = DLM_USER_LOCK; req->i.lock.mode = mode; - req->i.lock.flags = flags; + req->i.lock.flags = (flags & ~LKF_WAIT); req->i.lock.lkid = lksb->sb_lkid; req->i.lock.parent = parent; req->i.lock.lksb = lksb; @@ -822,7 +822,7 @@ static int ls_lock_v6(dlm_lshandle_t ls, req->cmd = DLM_USER_LOCK; req->i.lock.mode = mode; - req->i.lock.flags = flags; + req->i.lock.flags = (flags & ~LKF_WAIT); req->i.lock.lkid = lksb->sb_lkid; req->i.lock.parent = parent; req->i.lock.lksb = lksb; @@ -1019,7 +1019,7 @@ static int ls_unlock_v5(struct dlm_ls_info *lsinfo, uint32_t lkid, set_version_v5(&req); req.cmd = DLM_USER_UNLOCK; req.i.lock.lkid = lkid; - req.i.lock.flags = flags; + req.i.lock.flags = (flags & ~LKF_WAIT); req.i.lock.lksb = lksb; req.i.lock.castparam = astarg; /* DLM_USER_UNLOCK will default to existing completion AST */ @@ -1040,7 +1040,7 @@ static int ls_unlock_v6(struct dlm_ls_info *lsinfo, uint32_t lkid, set_version_v6(&req); req.cmd = DLM_USER_UNLOCK; req.i.lock.lkid = lkid; - req.i.lock.flags = flags; + req.i.lock.flags = (flags & ~LKF_WAIT); req.i.lock.lksb = lksb; req.i.lock.namelen = 0; req.i.lock.castparam = astarg; hooks/post-receive -- Cluster Project From teigland@sourceware.org Wed Mar 19 21:23:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Wed, 19 Mar 2008 21:23:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-24-g025b0b4 Message-ID: <20080319212349.2243.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=025b0b4a525b5f5b72f8a583ff89bedb5ee738a8 The branch, STABLE2 has been updated via 025b0b4a525b5f5b72f8a583ff89bedb5ee738a8 (commit) from d7e3a6ea468339ef2f5908379d622004fa04030e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 025b0b4a525b5f5b72f8a583ff89bedb5ee738a8 Author: Joel Becker Date: Wed Mar 19 16:08:49 2008 -0500 libdlm: Don't pass LKF_WAIT to the kernel libdlm is passing LKF_WAIT to the kernel. In the kernel, the unlock path strictly audits flags, and errors on this unknown (to the kernel) flag. The correct answer is to keep the flag in userspace. Signed-off-by: Joel Becker Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index d182095..4bafbbc 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -754,7 +754,7 @@ static int ls_lock_v5(dlm_lshandle_t ls, req->cmd = DLM_USER_LOCK; req->i.lock.mode = mode; - req->i.lock.flags = flags; + req->i.lock.flags = (flags & ~LKF_WAIT); req->i.lock.lkid = lksb->sb_lkid; req->i.lock.parent = parent; req->i.lock.lksb = lksb; @@ -822,7 +822,7 @@ static int ls_lock_v6(dlm_lshandle_t ls, req->cmd = DLM_USER_LOCK; req->i.lock.mode = mode; - req->i.lock.flags = flags; + req->i.lock.flags = (flags & ~LKF_WAIT); req->i.lock.lkid = lksb->sb_lkid; req->i.lock.parent = parent; req->i.lock.lksb = lksb; @@ -1019,7 +1019,7 @@ static int ls_unlock_v5(struct dlm_ls_info *lsinfo, uint32_t lkid, set_version_v5(&req); req.cmd = DLM_USER_UNLOCK; req.i.lock.lkid = lkid; - req.i.lock.flags = flags; + req.i.lock.flags = (flags & ~LKF_WAIT); req.i.lock.lksb = lksb; req.i.lock.castparam = astarg; /* DLM_USER_UNLOCK will default to existing completion AST */ @@ -1040,7 +1040,7 @@ static int ls_unlock_v6(struct dlm_ls_info *lsinfo, uint32_t lkid, set_version_v6(&req); req.cmd = DLM_USER_UNLOCK; req.i.lock.lkid = lkid; - req.i.lock.flags = flags; + req.i.lock.flags = (flags & ~LKF_WAIT); req.i.lock.lksb = lksb; req.i.lock.namelen = 0; req.i.lock.castparam = astarg; hooks/post-receive -- Cluster Project From lhh@sourceware.org Thu Mar 20 13:54:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 20 Mar 2008 13:54:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-85-g8b298b8 Message-ID: <20080320135449.30926.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=8b298b82eb1fcb9b6f3c7100159862dd1fd9c899 The branch, master has been updated via 8b298b82eb1fcb9b6f3c7100159862dd1fd9c899 (commit) from c2b3b2b7be437bc4476326dcfe58e9f2b6c55d48 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8b298b82eb1fcb9b6f3c7100159862dd1fd9c899 Author: Lon Hohberger Date: Thu Mar 20 09:54:33 2008 -0400 [rgmanager] Remove unused lockspace.c file ----------------------------------------------------------------------- Summary of changes: rgmanager/src/clulib/lockspace.c | 93 -------------------------------------- 1 files changed, 0 insertions(+), 93 deletions(-) delete mode 100644 rgmanager/src/clulib/lockspace.c diff --git a/rgmanager/src/clulib/lockspace.c b/rgmanager/src/clulib/lockspace.c deleted file mode 100644 index 591c732..0000000 --- a/rgmanager/src/clulib/lockspace.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright Red Hat, Inc. 2006 - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, - MA 02139, USA. -*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define RGMGR_LOCKSPACE "rgmanager" - -static pthread_mutex_t _default_lock = PTHREAD_MUTEX_INITIALIZER; -static char _init = 0; -static pid_t _holder_id = 0; -static dlm_lshandle_t _default_ls; - - -static int -_init_lockspace(void) -{ - _default_ls = clu_acquire_lockspace(RGMGR_LOCKSPACE); - if (!_default_ls) { - return -1; - } - _init = 1; - return 0; -} - - -dlm_lshandle_t -ls_hold_default(void) -{ - pthread_mutex_lock(&_default_lock); - if (!_init && (_init_lockspace() < 0)) { - pthread_mutex_unlock(&_default_lock); - errno = ENOLCK; - return NULL; - } - - if (_holder_id != 0) { - pthread_mutex_unlock(&_default_lock); - errno = EAGAIN; - return NULL; - } - - _holder_id = gettid(); - pthread_mutex_unlock(&_default_lock); - return _default_ls; -} - - -void -ls_release_default(void) -{ - pthread_mutex_lock(&_default_lock); - if (_holder_id != gettid()) { - clulog(LOG_ERR, "Attempt to release lockspace when I am not" - "the holder!\n"); - raise(SIGSTOP); - } - - _holder_id = 0; - pthread_mutex_unlock(&_default_lock); -} - - hooks/post-receive -- Cluster Project From ccaulfield@sourceware.org Thu Mar 20 14:48:00 2008 From: ccaulfield@sourceware.org (ccaulfield@sourceware.org) Date: Thu, 20 Mar 2008 14:48:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-86-ga1493bc Message-ID: <20080320144832.3663.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=a1493bc4efd6ffdfa4064eb1105b300d47ea12b3 The branch, master has been updated via a1493bc4efd6ffdfa4064eb1105b300d47ea12b3 (commit) from 8b298b82eb1fcb9b6f3c7100159862dd1fd9c899 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a1493bc4efd6ffdfa4064eb1105b300d47ea12b3 Author: Christine Caulfield Date: Thu Mar 20 14:47:47 2008 +0000 [DLM] Mention lidlm_lt in the man page Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: dlm/man/libdlm.3 | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/dlm/man/libdlm.3 b/dlm/man/libdlm.3 index 0782a2c..a020560 100644 --- a/dlm/man/libdlm.3 +++ b/dlm/man/libdlm.3 @@ -49,6 +49,9 @@ Reads from the DLM and calls any AST routines that may be needed. This routine r .PP +.SH libdlm_lt +There also exists a "light" version of the libdlm library called libdlm_lt. This is provided for those applications that do not want to use pthread functions. If you use this library it is important that your application is NOT compiled with -D_REENTRANT or linked with libpthread. + .SH EXAMPLES Create a lockspace and start a thread to deliver its callbacks: hooks/post-receive -- Cluster Project From jbrassow@sourceware.org Thu Mar 20 16:05:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 20 Mar 2008 16:05:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-18-g9d2d37e Message-ID: <20080320160531.28764.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=9d2d37ee3db933f01c8e5021d6d6a5897d5fe017 The branch, RHEL4 has been updated via 9d2d37ee3db933f01c8e5021d6d6a5897d5fe017 (commit) via 8c6094c0c5d457c9572ff386c5b53f075ce54f9c (commit) from c118d0ce03910523ebd6cd533a410283640caf37 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9d2d37ee3db933f01c8e5021d6d6a5897d5fe017 Merge: 8c6094c0c5d457c9572ff386c5b53f075ce54f9c c118d0ce03910523ebd6cd533a410283640caf37 Author: Jonathan Brassow Date: Thu Mar 20 10:55:12 2008 -0500 Merge branch 'RHEL4' of ssh://jbrassow@sources.redhat.com/git/cluster into rhel4 commit 8c6094c0c5d457c9572ff386c5b53f075ce54f9c Author: Jonathan Brassow Date: Thu Mar 20 10:37:50 2008 -0500 dm-cmirror.ko: change a blocking I/O to async I/O Sometimes, the mirror subdevices get suspended before the log server suspends. This can lead to the server issuing I/O requests on devices that are suspended. If it waits for the I/O to complete, it could wait indefinitly. Now there is a timeout in place for the I/O, which should prevent the server from getting stuck. ----------------------------------------------------------------------- Summary of changes: cmirror-kernel/src/dm-cmirror-client.c | 1 + cmirror-kernel/src/dm-cmirror-common.h | 7 ++++ cmirror-kernel/src/dm-cmirror-server.c | 53 +++++++++++++++++++++++++++----- 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/cmirror-kernel/src/dm-cmirror-client.c b/cmirror-kernel/src/dm-cmirror-client.c index 425a000..c644c13 100644 --- a/cmirror-kernel/src/dm-cmirror-client.c +++ b/cmirror-kernel/src/dm-cmirror-client.c @@ -113,6 +113,7 @@ static int core_ctr(struct dirty_log *log, struct dm_target *ti, lc->sync = sync; lc->failure_response = failure_response; strncpy(lc->uuid, argv[uuid], MAX_NAME_LEN); + init_completion(&lc->complete); /* * Work out how many words we need to hold the bitset. diff --git a/cmirror-kernel/src/dm-cmirror-common.h b/cmirror-kernel/src/dm-cmirror-common.h index 588958c..e8d2144 100644 --- a/cmirror-kernel/src/dm-cmirror-common.h +++ b/cmirror-kernel/src/dm-cmirror-common.h @@ -17,6 +17,9 @@ int dm_io_get(unsigned int num_pages); void dm_io_put(unsigned int num_pages); int dm_io_sync_vm(unsigned int num_regions, struct io_region *where, int rw, void *data, unsigned long *error_bits); +int dm_io_async_vm(unsigned int num_regions, struct io_region *where, int rw, + void *data, void (*fn)(unsigned long, void *),/*io_notify_fn fn,*/ void *context); + /* from dm.h */ #define DM_NAME "dm-cmirror" #define DMWARN(f, x...) printk(KERN_WARNING DM_NAME ": " f "\n" , ## x) @@ -63,6 +66,7 @@ struct dm_dev { void dm_table_event(struct dm_table *t); /* end of dm.h */ +#define SHORT_UUID(x) (strlen(x) > 8) ? ((x) + (strlen(x) - 8)) : (x) /* * Magic for persistent mirrors: "MiRr" */ @@ -115,6 +119,9 @@ struct log_c { /* * Disk log fields */ + int log_error; + struct completion complete; + int log_dev_failed; atomic_t suspended; /* diff --git a/cmirror-kernel/src/dm-cmirror-server.c b/cmirror-kernel/src/dm-cmirror-server.c index f05f0bd..4252058 100644 --- a/cmirror-kernel/src/dm-cmirror-server.c +++ b/cmirror-kernel/src/dm-cmirror-server.c @@ -98,6 +98,46 @@ static void header_from_disk(struct log_header *core, struct log_header *disk) memcpy(core->uuid, disk->uuid, MAX_NAME_LEN); } +static void do_io_callback(unsigned long error, void *context) +{ + struct log_c *lc = context; + + lc->log_error = (error) ? -EIO : 0; + complete(&lc->complete); +} + +/* + * do_io + * @log + * @rw: read/write + * @header: header (if not, then bits) + * + * Returns: 0 on success, -EXXX on error + */ +static int do_io(struct log_c *log, int rw, int header) +{ + int r; + + r = dm_io_async_vm(1, + (header) ? &log->header_location : &log->bits_location, + rw, + (header) ? log->disk_header : log->clean_bits, + do_io_callback, log); + if (r) { + DMERR("Error while submitting log I/O: %d", r); + return r; + } + + r = wait_for_completion_timeout(&log->complete, 5 * HZ); + if (!r) { + DMERR("[%s] Timed out waiting for log I/O: %s of %s", + SHORT_UUID(log->uuid), (rw == WRITE) ? "Write" : "Read", + (header) ? "header" : "bits"); + return -EDEADLK; + } + return log->log_error; +} + int read_header(struct log_c *log) { int r; @@ -109,8 +149,7 @@ int read_header(struct log_c *log) if (atomic_read(&log->suspended)) return -EDEADLK; - r = dm_io_sync_vm(1, &log->header_location, READ, - log->disk_header, &ebits); + r = do_io(log, READ, 1); if (unlikely(r)) return r; @@ -143,8 +182,8 @@ int write_header(struct log_c *log) return -EDEADLK; header_to_disk(&log->header, log->disk_header); - return dm_io_sync_vm(1, &log->header_location, WRITE, - log->disk_header, &ebits); + + return do_io(log, WRITE, 1); } /*---------------------------------------------------------------- @@ -188,8 +227,7 @@ static int read_bits(struct log_c *log) if (atomic_read(&log->suspended)) return -EDEADLK; - r = dm_io_sync_vm(1, &log->bits_location, READ, - log->clean_bits, &ebits); + r = do_io(log, READ, 0); if (unlikely(r)) return r; @@ -207,8 +245,7 @@ static int write_bits(struct log_c *log) if (atomic_read(&log->suspended)) return -EDEADLK; - return dm_io_sync_vm(1, &log->bits_location, WRITE, - log->clean_bits, &ebits); + return do_io(log, WRITE, 0); } static int count_bits32(uint32_t *addr, unsigned size) hooks/post-receive -- Cluster Project From lhh@sourceware.org Thu Mar 20 16:51:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 20 Mar 2008 16:51:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-87-gf4a6e5e Message-ID: <20080320165127.18044.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=f4a6e5e1e81f8355cd0f50f032e6f443db17ade9 The branch, master has been updated via f4a6e5e1e81f8355cd0f50f032e6f443db17ade9 (commit) from a1493bc4efd6ffdfa4064eb1105b300d47ea12b3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f4a6e5e1e81f8355cd0f50f032e6f443db17ade9 Author: Lon Hohberger Date: Thu Mar 20 12:49:36 2008 -0400 [cman] Merge scandisk & fixes from RHEL5 branch Scandisk replaces the old scanning of /proc/partitions with a flexible library created by Fabio M. Di Nitto Fixes from the RHEL5 branch include: * ability to use block devices with >512 byte sector size * bug causing infinite "Node X is undead" messages ----------------------------------------------------------------------- Summary of changes: cman/qdisk/Makefile | 13 +- cman/qdisk/disk.c | 207 ++++++++------- cman/qdisk/disk.h | 62 +++-- cman/qdisk/disk_util.c | 23 +- cman/qdisk/main.c | 157 ++++++----- cman/qdisk/mkqdisk.c | 15 +- cman/qdisk/proc.c | 263 ++++++++++++++---- cman/qdisk/scandisk.c | 713 ++++++++++++++++++++++++++++++++++++++++++++++++ cman/qdisk/scandisk.h | 100 +++++++ 9 files changed, 1282 insertions(+), 271 deletions(-) create mode 100644 cman/qdisk/scandisk.c create mode 100644 cman/qdisk/scandisk.h diff --git a/cman/qdisk/Makefile b/cman/qdisk/Makefile index a6ab43f..e5c7f27 100644 --- a/cman/qdisk/Makefile +++ b/cman/qdisk/Makefile @@ -29,8 +29,11 @@ CFLAGS += -I${ccsincdir} -I${cmanincdir} CFLAGS += -I$(S) CFLAGS += -I${incdir} -EXTRA_LDFLAGS += -L${cmanlibdir} -L${ccslibdir} -lcman -lccs -EXTRA_LDFLAGS += -lpthread +EXTRA_LDFLAGS += -lcman -lccs +# +# XXX Fabio has a way to clean up the devmapper requirement +# +EXTRA_LDFLAGS += -lpthread -ldevmapper OBJS1= main.o \ score.o \ @@ -44,14 +47,16 @@ OBJS2= mkqdisk.o SHAREDOBJS= disk.o \ crc32.o \ disk_util.o \ - proc.o + proc.o \ + scandisk.o ${TARGET1}: ${SHAREDOBJS} ${OBJS1} $(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) +# XXX Remove $(EXTRA_LDFLAGS) when libdevmapper is no longer required ${TARGET2}: ${SHAREDOBJS} ${OBJS2} - $(CC) -o $@ $^ $(LDFLAGS) + $(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) depends: $(MAKE) -C ../lib all diff --git a/cman/qdisk/disk.c b/cman/qdisk/disk.c index eb1cf67..f3222ed 100644 --- a/cman/qdisk/disk.c +++ b/cman/qdisk/disk.c @@ -43,8 +43,9 @@ #include #include #include +#include -static int diskRawRead(int fd, char *buf, int len); +static int diskRawRead(target_info_t *disk, char *buf, int len); uint32_t clu_crc32(const char *data, size_t count); @@ -211,49 +212,57 @@ header_verify(shared_header_t *hdr, const char *data, size_t count) * Returns - (the file descriptor), a value >= 0 on success. */ int -qdisk_open(char *name) +qdisk_open(char *name, target_info_t *disk) { - int fd; - int retval; + int ret; + int ssz; /* * Open for synchronous writes to insure all writes go directly * to disk. */ - fd = open(name, O_RDWR | O_SYNC | O_DIRECT); - if (fd < 0) { - return fd; + disk->d_fd = open(name, O_RDWR | O_SYNC | O_DIRECT); + if (disk->d_fd < 0) + return disk->d_fd; + + ret = ioctl(disk->d_fd, BLKSSZGET, &ssz); + if (ret < 0) { + perror("qdisk_open: ioctl(BLKSSZGET)"); + return -1; } - /* Check to verify that the partition is large enough.*/ - retval = lseek(fd, END_OF_DISK, SEEK_SET); + disk->d_blksz = ssz; + disk->d_pagesz = sysconf(_SC_PAGESIZE); - if (retval < 0) { + /* Check to verify that the partition is large enough.*/ + ret = lseek(disk->d_fd, END_OF_DISK(disk->d_blksz), SEEK_SET); + if (ret < 0) { perror("open_partition: seek"); return -1; } - if (retval < END_OF_DISK) { + if (ret < END_OF_DISK(disk->d_blksz)) { fprintf(stderr, "Partition %s too small\n", name); errno = EINVAL; return -1; } /* Set close-on-exec bit */ - retval = fcntl(fd, F_GETFD, 0); - if (retval < 0) { - close(fd); + ret = fcntl(disk->d_fd, F_GETFD, 0); + if (ret < 0) { + perror("open_partition: fcntl(F_GETFD)"); + close(disk->d_fd); return -1; } - retval |= FD_CLOEXEC; - if (fcntl(fd, F_SETFD, retval) < 0) { - perror("open_partition: fcntl"); - close(fd); + ret |= FD_CLOEXEC; + if (fcntl(disk->d_fd, F_SETFD, ret) < 0) { + perror("open_partition: fcntl(F_SETFD)"); + close(disk->d_fd); return -1; } - return fd; + return 0; } @@ -263,17 +272,17 @@ qdisk_open(char *name) * Returns - value from close syscall. */ int -qdisk_close(int *fd) +qdisk_close(target_info_t *disk) { int retval; - if (!fd || *fd < 0) { + if (!disk || disk->d_fd < 0) { errno = EINVAL; return -1; } - retval = close(*fd); - *fd = -1; + retval = close(disk->d_fd); + disk->d_fd = -1; return retval; } @@ -288,7 +297,7 @@ int qdisk_validate(char *name) { struct stat stat_st, *stat_ptr; - int fd; + target_info_t disk; stat_ptr = &stat_st; if (stat(name, stat_ptr) < 0) { @@ -310,26 +319,25 @@ qdisk_validate(char *name) /* * Verify read/write permission. */ - fd = qdisk_open(name); - if (fd < 0) { + if (qdisk_open(name, &disk) < 0) { fprintf(stderr, "%s: open of %s for RDWR failed: %s\n", __FUNCTION__, name, strerror(errno)); return -1; } - qdisk_close(&fd); + qdisk_close(&disk); return 0; } static int -diskRawReadShadow(int fd, off_t readOffset, char *buf, int len) +diskRawReadShadow(target_info_t *disk, off_t readOffset, char *buf, int len) { int ret; shared_header_t *hdrp; char *data; int datalen; - ret = lseek(fd, readOffset, SEEK_SET); + ret = lseek(disk->d_fd, readOffset, SEEK_SET); if (ret != readOffset) { #if 0 fprintf(stderr, @@ -340,7 +348,7 @@ diskRawReadShadow(int fd, off_t readOffset, char *buf, int len) return -1; } - ret = diskRawRead(fd, buf, len); + ret = diskRawRead(disk, buf, len); if (ret != len) { #if 0 fprintf(stderr, "diskRawReadShadow: aligned read " @@ -375,7 +383,7 @@ diskRawReadShadow(int fd, off_t readOffset, char *buf, int len) * Here we check for alignment and do a bounceio if necessary. */ static int -diskRawRead(int fd, char *buf, int len) +diskRawRead(target_info_t *disk, char *buf, int len) { void *alignedBuf; int readret; @@ -383,21 +391,24 @@ diskRawRead(int fd, char *buf, int len) int readlen; int bounceNeeded = 1; - if ((((unsigned long) buf & (unsigned long) 0x3ff) == 0) && - ((len % 512) == 0)) { + + /* was 3ff, which is (512<<1-1) */ + if ((((unsigned long) buf & + (unsigned long) ((disk->d_blksz << 1) -1)) == 0) && + ((len % (disk->d_blksz)) == 0)) { bounceNeeded = 0; } if (bounceNeeded == 0) { /* Already aligned and even multiple of 512, no bounceio * required. */ - return (read(fd, buf, len)); + return (read(disk->d_fd, buf, len)); } - if (len > 512) { + if (len > disk->d_blksz) { fprintf(stderr, "diskRawRead: not setup for reads larger than %d.\n", - 512); + (int)disk->d_blksz); return (-1); } /* @@ -406,8 +417,8 @@ diskRawRead(int fd, char *buf, int len) * XXX - if the on-disk offsets don't provide enough room we're cooked! */ extraLength = 0; - if (len % 512) { - extraLength = 512 - (len % 512); + if (len % disk->d_blksz) { + extraLength = disk->d_blksz - (len % disk->d_blksz); } readlen = len; @@ -415,18 +426,18 @@ diskRawRead(int fd, char *buf, int len) readlen += extraLength; } - readret = posix_memalign((void **)&alignedBuf, 512, 512); + readret = posix_memalign((void **)&alignedBuf, disk->d_pagesz, disk->d_blksz); if (readret < 0) { return -1; } - readret = read(fd, alignedBuf, readlen); + readret = read(disk->d_fd, alignedBuf, readlen); if (readret > 0) { if (readret > len) { - bcopy(alignedBuf, buf, len); + memcpy(alignedBuf, buf, len); readret = len; } else { - bcopy(alignedBuf, buf, readret); + memcpy(alignedBuf, buf, readret); } } @@ -445,7 +456,7 @@ diskRawRead(int fd, char *buf, int len) * Here we check for alignment and do a bounceio if necessary. */ static int -diskRawWrite(int fd, char *buf, int len) +diskRawWrite(target_info_t *disk, char *buf, int len) { void *alignedBuf; int ret; @@ -453,31 +464,33 @@ diskRawWrite(int fd, char *buf, int len) int writelen; int bounceNeeded = 1; - if ((((unsigned long) buf & (unsigned long) 0x3ff) == 0) && - ((len % 512) == 0)) { + /* was 3ff, which is (512<<1-1) */ + if ((((unsigned long) buf & + (unsigned long) ((disk->d_blksz << 1) -1)) == 0) && + ((len % (disk->d_blksz)) == 0)) { bounceNeeded = 0; } + if (bounceNeeded == 0) { /* Already aligned and even multiple of 512, no bounceio * required. */ - return (write(fd, buf, len)); + return (write(disk->d_fd, buf, len)); } - if (len > 512) { + if (len > disk->d_blksz) { fprintf(stderr, - "diskRawWrite: not setup for larger than %d.\n", - 512); + "diskRawRead: not setup for reads larger than %d.\n", + (int)disk->d_blksz); return (-1); } - /* * All IOs must be of size which is a multiple of 512. Here we * just add in enough extra to accommodate. * XXX - if the on-disk offsets don't provide enough room we're cooked! */ extraLength = 0; - if (len % 512) { - extraLength = 512 - (len % 512); + if (len % disk->d_blksz) { + extraLength = disk->d_blksz - (len % disk->d_blksz); } writelen = len; @@ -485,13 +498,20 @@ diskRawWrite(int fd, char *buf, int len) writelen += extraLength; } - ret = posix_memalign((void **)&alignedBuf, 512,512); + ret = posix_memalign((void **)&alignedBuf, disk->d_pagesz, disk->d_blksz); if (ret < 0) { + return -1; + } + + if (len > disk->d_blksz) { + fprintf(stderr, + "diskRawWrite: not setup for larger than %d.\n", + (int)disk->d_blksz); return (-1); } - bcopy(buf, alignedBuf, len); - ret = write(fd, alignedBuf, writelen); + memcpy(buf, alignedBuf, len); + ret = write(disk->d_fd, alignedBuf, writelen); if (ret > len) { ret = len; } @@ -507,7 +527,7 @@ diskRawWrite(int fd, char *buf, int len) static int -diskRawWriteShadow(int fd, __off64_t writeOffset, char *buf, int len) +diskRawWriteShadow(target_info_t *disk, __off64_t writeOffset, char *buf, int len) { off_t retval_seek; ssize_t retval_write; @@ -519,7 +539,7 @@ diskRawWriteShadow(int fd, __off64_t writeOffset, char *buf, int len) return (-1); } - retval_seek = lseek(fd, writeOffset, SEEK_SET); + retval_seek = lseek(disk->d_fd, writeOffset, SEEK_SET); if (retval_seek != writeOffset) { fprintf(stderr, "diskRawWriteShadow: can't seek to offset %d\n", @@ -527,7 +547,7 @@ diskRawWriteShadow(int fd, __off64_t writeOffset, char *buf, int len) return (-1); } - retval_write = diskRawWrite(fd, buf, len); + retval_write = diskRawWrite(disk, buf, len); if (retval_write != len) { if (retval_write == -1) { fprintf(stderr, "%s: %s\n", __FUNCTION__, @@ -544,10 +564,10 @@ diskRawWriteShadow(int fd, __off64_t writeOffset, char *buf, int len) int -qdisk_read(int fd, __off64_t offset, void *buf, int count) +qdisk_read(target_info_t *disk, __off64_t offset, void *buf, int count) { - void *hdrbuf; shared_header_t *hdrp; + void *ptr; char *data; size_t total; int rv; @@ -557,25 +577,25 @@ qdisk_read(int fd, __off64_t offset, void *buf, int count) * Raw blocks are 512 byte aligned. */ total = count + sizeof(shared_header_t); - if (total < 512) - total = 512; + if (total < disk->d_blksz) + total = disk->d_blksz; /* Round it up */ - if (total % 512) - total = total + (512 * !!(total % 512)) - (total % 512); + if (total % disk->d_blksz) + total = total + (disk->d_blksz * !!(total % disk->d_blksz)) - (total % disk->d_blksz); - hdrbuf = NULL; - rv = posix_memalign((void **)&hdrbuf, sysconf(_SC_PAGESIZE), total); + ptr = NULL; + rv = posix_memalign((void **)&ptr, disk->d_pagesz, disk->d_blksz); if (rv < 0) return -1; - if (hdrbuf == NULL) + if (ptr == NULL) return -1; - hdrp = (shared_header_t *)hdrbuf; + hdrp = (shared_header_t *)ptr; data = (char *)hdrp + sizeof(shared_header_t); - rv = diskRawReadShadow(fd, offset, (char *)hdrp, total); + rv = diskRawReadShadow(disk, offset, (char *)hdrp, disk->d_blksz); if (rv == -1) { return -1; @@ -590,19 +610,19 @@ qdisk_read(int fd, __off64_t offset, void *buf, int count) count - hdrp->h_length); } - free(hdrbuf); + free(hdrp); return count; } int -qdisk_write(int fd, __off64_t offset, const void *buf, int count) +qdisk_write(target_info_t *disk, __off64_t offset, const void *buf, int count) { size_t maxsize; - void *hdrbuf; shared_header_t *hdrp; + void *ptr; char *data; - size_t total = 0, rv = -1, psz = 512; //sysconf(_SC_PAGESIZE); + size_t total = 0, rv = -1, psz = disk->d_blksz; //sysconf(_SC_PAGESIZE); maxsize = psz - (sizeof(shared_header_t)); if (count >= (maxsize + sizeof(shared_header_t))) { @@ -614,7 +634,6 @@ qdisk_write(int fd, __off64_t offset, const void *buf, int count) /* * Calculate the total length of the buffer, including the header. - * Raw blocks are 512 byte aligned. */ total = count + sizeof(shared_header_t); if (total < psz) @@ -624,17 +643,17 @@ qdisk_write(int fd, __off64_t offset, const void *buf, int count) if (total % psz) total = total + (psz * !!(total % psz)) - (total % psz); - hdrbuf = NULL; - rv = posix_memalign((void **)&hdrbuf, sysconf(_SC_PAGESIZE), total); + ptr = NULL; + rv = posix_memalign((void **)&ptr, disk->d_pagesz, total); if (rv < 0) { perror("posix_memalign"); return -1; } - hdrp = (shared_header_t *)hdrbuf; /* * Copy the data into our new buffer */ + hdrp = (shared_header_t *)ptr; data = (char *)hdrp + sizeof(shared_header_t); memcpy(data, buf, count); @@ -649,12 +668,12 @@ qdisk_write(int fd, __off64_t offset, const void *buf, int count) * about locking here. */ if (total == psz) - rv = diskRawWriteShadow(fd, offset, (char *)hdrp, psz); + rv = diskRawWriteShadow(disk, offset, (char *)hdrp, psz); if (rv == -1) perror("diskRawWriteShadow"); - free(hdrbuf); + free((char *)hdrp); if (rv == -1) return -1; return count; @@ -662,11 +681,11 @@ qdisk_write(int fd, __off64_t offset, const void *buf, int count) static int -header_init(int fd, char *label) +header_init(target_info_t *disk, char *label) { quorum_header_t qh; - if (qdisk_read(fd, OFFSET_HEADER, &qh, sizeof(qh)) == sizeof(qh)) { + if (qdisk_read(disk, OFFSET_HEADER, &qh, sizeof(qh)) == sizeof(qh)) { swab_quorum_header_t(&qh); if (qh.qh_magic == HEADER_MAGIC_OLD) { printf("Warning: Red Hat Cluster Manager 1.2.x " @@ -685,14 +704,18 @@ header_init(int fd, char *label) /* Copy in the cluster/label name */ snprintf(qh.qh_cluster, sizeof(qh.qh_cluster)-1, "%s", label); + qh.qh_version = VERSION_MAGIC_V2; if ((qh.qh_timestamp = (uint64_t)time(NULL)) <= 0) { perror("time"); return -1; } qh.qh_magic = HEADER_MAGIC_NUMBER; + qh.qh_blksz = disk->d_blksz; + qh.qh_kernsz = 0; + swab_quorum_header_t(&qh); - if (qdisk_write(fd, OFFSET_HEADER, &qh, sizeof(qh)) != sizeof(qh)) { + if (qdisk_write(disk, OFFSET_HEADER, &qh, sizeof(qh)) != sizeof(qh)) { return -1; } @@ -703,24 +726,24 @@ header_init(int fd, char *label) int qdisk_init(char *partname, char *label) { - int fd; + target_info_t disk; status_block_t ps, wps; - int nid; + int nid, ret; time_t t; - fd = qdisk_validate(partname); - if (fd < 0) { + ret = qdisk_validate(partname); + if (ret < 0) { perror("qdisk_verify"); return -1; } - fd = qdisk_open(partname); - if (fd < 0) { + ret = qdisk_open(partname, &disk); + if (ret < 0) { perror("qdisk_open"); return -1; } - if (header_init(fd, label) < 0) { + if (header_init(&disk, label) < 0) { return -1; } @@ -748,14 +771,14 @@ qdisk_init(char *partname, char *label) wps = ps; swab_status_block_t(&wps); - if (qdisk_write(fd, qdisk_nodeid_offset(nid), &wps, sizeof(wps)) < 0) { + if (qdisk_write(&disk, qdisk_nodeid_offset(nid, disk.d_blksz), &wps, sizeof(wps)) < 0) { printf("Error writing node ID block %d\n", nid); - qdisk_close(&fd); + qdisk_close(&disk); return -1; } } - qdisk_close(&fd); + qdisk_close(&disk); return 0; } diff --git a/cman/qdisk/disk.h b/cman/qdisk/disk.h index bc4bb91..8c9a424 100644 --- a/cman/qdisk/disk.h +++ b/cman/qdisk/disk.h @@ -72,7 +72,8 @@ typedef enum { RF_DEBUG = 0x4, RF_PARANOID = 0x8, RF_ALLOW_KILL = 0x10, - RF_UPTIME = 0x20 + RF_UPTIME = 0x20, + RF_CMAN_LABEL = 0x40 } run_flag_t; @@ -86,6 +87,9 @@ typedef enum { #define STATE_MAGIC_NUMBER 0x47bacef8 /* Status block */ #define SHARED_HEADER_MAGIC 0x00DEBB1E /* Per-block headeer */ +/* Version magic. */ +#define VERSION_MAGIC_V2 0x389fabc4 + typedef struct __attribute__ ((packed)) { uint32_t ps_magic; @@ -152,16 +156,21 @@ typedef struct __attribute__ ((packed)) { */ typedef struct __attribute__ ((packed)) { uint32_t qh_magic; - uint32_t qh_align; // 64-bit-ism: alignment fixer. + uint32_t qh_version; // uint64_t qh_timestamp; // time of last update char qh_updatehost[128];// Hostname who put this here... - char qh_cluster[128]; // Cluster name + char qh_cluster[120]; // Cluster name; CMAN only + // supports 16 chars. + uint32_t qh_blksz; // Known block size @ creation + uint32_t qh_kernsz; // Ingored } quorum_header_t; #define swab_quorum_header_t(ptr) \ {\ swab32((ptr)->qh_magic); \ - swab32((ptr)->qh_align); \ + swab32((ptr)->qh_version); \ + swab32((ptr)->qh_blksz); \ + swab32((ptr)->qh_kernsz); \ swab64((ptr)->qh_timestamp); \ } @@ -196,31 +205,35 @@ typedef struct __attribute__ ((packed)) { /* Offsets from RHCM 1.2.x */ #define OFFSET_HEADER 0 -#define HEADER_SIZE 4096 /* Page size for now */ +#define HEADER_SIZE(ssz) (ssz<4096?4096:ssz) -#define OFFSET_FIRST_STATUS_BLOCK (OFFSET_HEADER + HEADER_SIZE) -#define SPACE_PER_STATUS_BLOCK 4096 /* Page size for now */ +#define OFFSET_FIRST_STATUS_BLOCK(ssz) (OFFSET_HEADER + HEADER_SIZE(ssz)) +#define SPACE_PER_STATUS_BLOCK(ssz) (ssz<4096?4096:ssz) #define STATUS_BLOCK_COUNT MAX_NODES_DISK -#define SPACE_PER_MESSAGE_BLOCK (4096) -#define MESSAGE_BLOCK_COUNT MAX_NODES_DISK - -#define END_OF_DISK (OFFSET_FIRST_STATUS_BLOCK + \ +#define END_OF_DISK(ssz) (OFFSET_FIRST_STATUS_BLOCK(ssz) + \ (MAX_NODES_DISK + 1) * \ - SPACE_PER_STATUS_BLOCK) \ + SPACE_PER_STATUS_BLOCK(ssz)) \ +typedef struct { + int d_fd; + int _pad_; + size_t d_blksz; + size_t d_pagesz; +} target_info_t; + /* From disk.c */ -int qdisk_open(char *name); -int qdisk_close(int *fd); +int qdisk_open(char *name, target_info_t *disk); +int qdisk_close(target_info_t *disk); int qdisk_init(char *name, char *clustername); int qdisk_validate(char *name); -int qdisk_read(int fd, __off64_t ofs, void *buf, int len); -int qdisk_write(int fd, __off64_t ofs, const void *buf, int len); +int qdisk_read(target_info_t *disk, __off64_t ofs, void *buf, int len); +int qdisk_write(target_info_t *disk, __off64_t ofs, const void *buf, int len); -#define qdisk_nodeid_offset(nodeid) \ - (OFFSET_FIRST_STATUS_BLOCK + (SPACE_PER_STATUS_BLOCK * (nodeid - 1))) +#define qdisk_nodeid_offset(nodeid, ssz) \ + (OFFSET_FIRST_STATUS_BLOCK(ssz) + (SPACE_PER_STATUS_BLOCK(ssz) * (nodeid - 1))) /* From disk_utils.c */ #define HISTORY_LENGTH 60 @@ -231,11 +244,12 @@ typedef struct { uint16_t pad0; } disk_msg_t; + typedef struct { uint64_t qc_incarnation; struct timeval qc_average; struct timeval qc_last[HISTORY_LENGTH]; - int qc_fd; + target_info_t qc_disk; int qc_my_id; int qc_writes; int qc_interval; @@ -250,12 +264,14 @@ typedef struct { disk_node_state_t qc_disk_status; disk_node_state_t qc_status; int qc_master; /* Master?! */ - int _pad_; + int qc_status_sock; run_flag_t qc_flags; cman_handle_t qc_ch; char *qc_device; char *qc_label; char *qc_status_file; + char *qc_cman_label; + char *qc_status_sockname; } qd_ctx; typedef struct { @@ -272,14 +288,14 @@ typedef struct { int qd_write_status(qd_ctx *ctx, int nid, disk_node_state_t state, disk_msg_t *msg, memb_mask_t mask, memb_mask_t master); -int qd_read_print_status(int fd, int nid); +int qd_read_print_status(target_info_t *disk, int nid); int qd_init(qd_ctx *ctx, cman_handle_t ch, int me); void qd_destroy(qd_ctx *ctx); /* proc.c */ -int find_partitions(const char *devdir, const char *label, +int find_partitions(const char *label, char *devname, size_t devlen, int print); -int check_device(char *device, char *label, quorum_header_t *qh); +int check_device(char *device, char *label, quorum_header_t *qh, int flags); #endif diff --git a/cman/qdisk/disk_util.c b/cman/qdisk/disk_util.c index eb5e6fa..a3d73d8 100644 --- a/cman/qdisk/disk_util.c +++ b/cman/qdisk/disk_util.c @@ -71,7 +71,7 @@ getuptime(struct timeval *tv) if (!fp) return -1; -#if defined(__sparc__) || defined(__sparc64__) +#if defined(__sparc__) || defined(__hppa__) || defined(__sparc64__) || defined (__hppa64__) rv = fscanf(fp,"%ld.%d %ld.%d\n", &tv->tv_sec, &tv->tv_usec, &junk.tv_sec, &junk.tv_usec); #else @@ -201,8 +201,9 @@ qd_write_status(qd_ctx *ctx, int nid, disk_node_state_t state, if (get_time(&start, ctx->qc_flags&RF_UPTIME) < 0) utime_ok = 0; swab_status_block_t(&ps); - if (qdisk_write(ctx->qc_fd, qdisk_nodeid_offset(nid), &ps, - sizeof(ps)) < 0) { + if (qdisk_write(&ctx->qc_disk, + qdisk_nodeid_offset(nid, ctx->qc_disk.d_blksz), + &ps, sizeof(ps)) < 0) { printf("Error writing node ID block %d\n", nid); return -1; } @@ -223,12 +224,12 @@ qd_write_status(qd_ctx *ctx, int nid, disk_node_state_t state, int -qd_print_status(status_block_t *ps) +qd_print_status(target_info_t *disk, status_block_t *ps) { int x; printf("Data @ offset %d:\n", - (int)qdisk_nodeid_offset(ps->ps_nodeid)); + (int)qdisk_nodeid_offset(ps->ps_nodeid, disk->d_blksz)); printf("status_block_t {\n"); printf("\t.ps_magic = %08x;\n", (int)ps->ps_magic); printf("\t.ps_nodeid = %d;\n", (int)ps->ps_nodeid); @@ -261,11 +262,11 @@ qd_print_status(status_block_t *ps) int -qd_read_print_status(int fd, int nid) +qd_read_print_status(target_info_t *disk, int nid) { status_block_t ps; - if (fd < 0) { + if (!disk || disk->d_fd < 0) { errno = EINVAL; return -1; } @@ -275,13 +276,13 @@ qd_read_print_status(int fd, int nid) return -1; } - if (qdisk_read(fd, qdisk_nodeid_offset(nid), &ps, + if (qdisk_read(disk, qdisk_nodeid_offset(nid, disk->d_blksz), &ps, sizeof(ps)) < 0) { printf("Error reading node ID block %d\n", nid); return -1; } swab_status_block_t(&ps); - qd_print_status(&ps); + qd_print_status(disk, &ps); return 0; } @@ -322,6 +323,7 @@ qd_init(qd_ctx *ctx, cman_handle_t ch, int me) ctx->qc_incarnation = generate_token(); ctx->qc_ch = ch; ctx->qc_my_id = me; + ctx->qc_status_sock = -1; return 0; } @@ -339,6 +341,5 @@ qd_destroy(qd_ctx *ctx) free(ctx->qc_device); ctx->qc_device = NULL; } - close(ctx->qc_fd); - ctx->qc_fd = -1; + qdisk_close(&ctx->qc_disk); } diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index 8bd8c7d..b953367 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -147,7 +148,8 @@ read_node_blocks(qd_ctx *ctx, node_info_t *ni, int max) sb = &ni[x].ni_status; - if (qdisk_read(ctx->qc_fd, qdisk_nodeid_offset(x+1), + if (qdisk_read(&ctx->qc_disk, + qdisk_nodeid_offset(x+1, ctx->qc_disk.d_blksz), sb, sizeof(*sb)) < 0) { clulog(LOG_WARNING,"Error reading node ID block %d\n", x+1); @@ -252,23 +254,6 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) state_run(ni[x].ni_status.ps_state)) { /* - Mark our internal views as dead if nodes miss too - many heartbeats... This will cause a master - transition if no live master exists. - */ - if (ni[x].ni_status.ps_state >= S_RUN && - ni[x].ni_seen) { - clulog(LOG_DEBUG, "Node %d DOWN\n", - ni[x].ni_status.ps_nodeid); - ni[x].ni_seen = 0; - } - - ni[x].ni_state = S_EVICT; - ni[x].ni_status.ps_state = S_EVICT; - ni[x].ni_evil_incarnation = - ni[x].ni_status.ps_incarnation; - - /* Write eviction notice if we're the master. */ if (ctx->qc_status == S_MASTER) { @@ -285,6 +270,23 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, memb_mask_t mask) } } + /* + Mark our internal views as dead if nodes miss too + many heartbeats... This will cause a master + transition if no live master exists. + */ + if (ni[x].ni_status.ps_state >= S_RUN && + ni[x].ni_seen) { + clulog(LOG_DEBUG, "Node %d DOWN\n", + ni[x].ni_status.ps_nodeid); + ni[x].ni_seen = 0; + } + + ni[x].ni_state = S_EVICT; + ni[x].ni_status.ps_state = S_EVICT; + ni[x].ni_evil_incarnation = + ni[x].ni_status.ps_incarnation; + /* Clear our master mask for the node after eviction */ if (mask) clear_bit(mask, (ni[x].ni_status.ps_nodeid-1), @@ -462,12 +464,14 @@ quorum_init(qd_ctx *ctx, node_info_t *ni, int max, struct h_data *h, int maxh) if (qdisk_validate(ctx->qc_device) < 0) return -1; - ctx->qc_fd = qdisk_open(ctx->qc_device); - if (ctx->qc_fd < 0) { + if (qdisk_open(ctx->qc_device, &ctx->qc_disk) < 0) { clulog(LOG_CRIT, "Failed to open %s: %s\n", ctx->qc_device, strerror(errno)); return -1; } + + clulog(LOG_DEBUG, "I/O Size: %d Page Size: %d\n", + ctx->qc_disk.d_blksz, ctx->qc_disk.d_pagesz); if (h && maxh) { start_score_thread(ctx, h, maxh); @@ -622,23 +626,7 @@ check_votes(qd_ctx *ctx, node_info_t *ni, int max, disk_msg_t *msg) char * -state_str(disk_node_state_t s) -{ - switch (s) { - case S_NONE: - return "None"; - case S_EVICT: - return "Evicted"; - case S_INIT: - return "Initializing"; - case S_RUN: - return "Running"; - case S_MASTER: - return "Master"; - default: - return "ILLEGAL"; - } -} +state_str(disk_node_state_t s); void @@ -1210,30 +1198,14 @@ get_config_data(char *cluster_name, qd_ctx *ctx, struct h_data *h, int maxh, } if (ctx->qc_master_wait <= ctx->qc_tko_up) ctx->qc_master_wait = ctx->qc_tko_up + 1; - + /* Get votes */ - - /* check if votes is set in cluster.conf */ snprintf(query, sizeof(query), "/cluster/quorumd/@votes"); if (ccs_get(ccsfd, query, &val) == 0) { ctx->qc_votes = atoi(val); free(val); if (ctx->qc_votes < 0) ctx->qc_votes = 0; - } else { /* if votes is not set, default to node_num - 1 */ - int nodes = 0, error; - for (;;) { - error = ccs_get_list(ccsfd, "/cluster/clusternodes/child::*", &val); - if (error || !val) - break; - - nodes++; - } - nodes--; - if (nodes < 0) - nodes = 0; - - ctx->qc_votes = nodes; } /* Get device */ @@ -1254,6 +1226,12 @@ get_config_data(char *cluster_name, qd_ctx *ctx, struct h_data *h, int maxh, ctx->qc_status_file = val; } + /* Get status socket */ + snprintf(query, sizeof(query), "/cluster/quorumd/@status_sock"); + if (ccs_get(ccsfd, query, &val) == 0) { + ctx->qc_status_sockname = val; + } + /* Get min score */ snprintf(query, sizeof(query), "/cluster/quorumd/@min_score"); if (ccs_get(ccsfd, query, &val) == 0) { @@ -1302,6 +1280,15 @@ get_config_data(char *cluster_name, qd_ctx *ctx, struct h_data *h, int maxh, ctx->qc_flags &= ~RF_REBOOT; free(val); } + + /* Get cman_label */ + snprintf(query, sizeof(query), "/cluster/quorumd/@cman_label"); + if (ccs_get(ccsfd, query, &val) == 0) { + if (strlen(val) > 0) { + ctx->qc_flags |= RF_CMAN_LABEL; + ctx->qc_cman_label = val; + } + } /* * Get flag to see if we're supposed to kill cman if qdisk is not @@ -1366,6 +1353,7 @@ get_config_data(char *cluster_name, qd_ctx *ctx, struct h_data *h, int maxh, clulog(LOG_DEBUG, "Quorum Daemon: %d heuristics, %d interval, %d tko, %d votes\n", *cfh, ctx->qc_interval, ctx->qc_tko, ctx->qc_votes); + clulog(LOG_DEBUG, "Run Flags: %08x\n", ctx->qc_flags); ccs_disconnect(ccsfd); @@ -1400,21 +1388,22 @@ int main(int argc, char **argv) { cman_node_t me; - int cfh, rv, forked = 0, nfd = -1; + int cfh, rv, forked = 0, nfd = -1, ret = -1; qd_ctx ctx; - cman_handle_t ch; + cman_handle_t ch = NULL; node_info_t ni[MAX_NODES_DISK]; struct h_data h[10]; char debug = 0, foreground = 0; char device[128]; pid_t pid; + quorum_header_t qh; if (check_process_running(argv[0], &pid) && pid !=getpid()) { printf("QDisk services already running\n"); return 0; } - while ((rv = getopt(argc, argv, "fdQ")) != EOF) { + while ((rv = getopt(argc, argv, "fdQs")) != EOF) { switch (rv) { case 'd': debug = 1; @@ -1438,7 +1427,7 @@ main(int argc, char **argv) break; } } - + #if (defined(LIBCMAN_VERSION) && LIBCMAN_VERSION >= 2) ch = cman_admin_init(NULL); #else @@ -1447,7 +1436,7 @@ main(int argc, char **argv) if (!ch) { if (!foreground && !forked) { if (daemon_init(argv[0]) < 0) - return -1; + goto out; else forked = 1; } @@ -1468,7 +1457,7 @@ main(int argc, char **argv) while (cman_get_node(ch, CMAN_NODEID_US, &me) < 0) { if (!foreground && !forked) { if (daemon_init(argv[0]) < 0) - return -1; + goto out; else forked = 1; } @@ -1488,20 +1477,19 @@ main(int argc, char **argv) if (get_config_data(NULL, &ctx, h, 10, &cfh, debug) < 0) { clulog_and_print(LOG_CRIT, "Configuration failed\n"); check_stop_cman(&ctx); - return -1; + goto out; } if (ctx.qc_label) { - memset(device, 0, sizeof(device)); - if (find_partitions("/dev", - ctx.qc_label, device, - sizeof(device), 0) != 0) { + ret = find_partitions(ctx.qc_label, device, sizeof(device), 0); + if (ret < 0) { clulog_and_print(LOG_CRIT, "Unable to match label" " '%s' to any device\n", ctx.qc_label); check_stop_cman(&ctx); - return -1; + goto out; } + /* XXX Multiple matches: do we care? */ if (ctx.qc_device) free(ctx.qc_device); @@ -1511,18 +1499,29 @@ main(int argc, char **argv) clulog(LOG_INFO, "Quorum Partition: %s Label: %s\n", ctx.qc_device, ctx.qc_label); } else if (ctx.qc_device) { - if (check_device(ctx.qc_device, NULL, NULL) != 0) { + if (check_device(ctx.qc_device, NULL, &qh, 0) != 0) { clulog(LOG_CRIT, "Specified partition %s does not have a " "qdisk label\n", ctx.qc_device); check_stop_cman(&ctx); - return -1; + goto out; + } + + if (qh.qh_version == VERSION_MAGIC_V2 && + qh.qh_blksz != rv) { + clulog(LOG_CRIT, + "Specified device %s does match kernel's " + "reported sector size (%d != %d)\n", + ctx.qc_device, + ctx.qc_disk.d_blksz, rv); + check_stop_cman(&ctx); + goto out; } } if (!foreground && !forked) { if (daemon_init(argv[0]) < 0) - return -1; + goto out; } set_priority(ctx.qc_sched, ctx.qc_sched_prio); @@ -1530,13 +1529,19 @@ main(int argc, char **argv) if (quorum_init(&ctx, ni, MAX_NODES_DISK, h, cfh) < 0) { clulog_and_print(LOG_CRIT, "Initialization failed\n"); check_stop_cman(&ctx); - return -1; + goto out; } + ret = 0; + if (!_running) - return 0; + goto out; - cman_register_quorum_device(ctx.qc_ch, ctx.qc_device, ctx.qc_votes); + cman_register_quorum_device(ctx.qc_ch, + (ctx.qc_flags&RF_CMAN_LABEL)? + ctx.qc_cman_label: + ctx.qc_device, + ctx.qc_votes); /* XXX this always returns -1 / EBUSY even when it works?!!! @@ -1546,16 +1551,18 @@ main(int argc, char **argv) "Could not register %s with CMAN; " "return = %d; error = %s\n", ctx.qc_device, rv, strerror(errno)); - return -1; + goto out; } */ - if (quorum_loop(&ctx, ni, MAX_NODES_DISK) == 0) cman_unregister_quorum_device(ctx.qc_ch); quorum_logout(&ctx); + /* free cman handle to avoid leak in cman */ +out: + cman_finish(ctx.qc_ch); qd_destroy(&ctx); - return 0; + return ret; } diff --git a/cman/qdisk/mkqdisk.c b/cman/qdisk/mkqdisk.c index fab5ea4..19cb5e2 100644 --- a/cman/qdisk/mkqdisk.c +++ b/cman/qdisk/mkqdisk.c @@ -37,23 +37,24 @@ main(int argc, char **argv) { char device[128]; char *newdev = NULL, *newlabel = NULL; - int rv; + int rv, verbose_level = 1; printf("mkqdisk v" RELEASE_VERSION "\n\n"); - while ((rv = getopt(argc, argv, "Lf:c:l:h")) != EOF) { + while ((rv = getopt(argc, argv, "Ldf:c:l:h")) != EOF) { switch (rv) { + case 'd': + ++verbose_level; + break; case 'L': /* List */ close(2); - return find_partitions("/dev", - NULL, NULL, 0, 1); + return find_partitions(NULL, NULL, 0, verbose_level); break; case 'f': close(2); - return find_partitions("/dev", - optarg, device, - sizeof(device), 1); + return find_partitions( optarg, device, + sizeof(device), verbose_level); case 'c': newdev = optarg; break; diff --git a/cman/qdisk/proc.c b/cman/qdisk/proc.c index acde85a..6c7ef48 100644 --- a/cman/qdisk/proc.c +++ b/cman/qdisk/proc.c @@ -26,35 +26,46 @@ #include #include #include -#include #include #include #include -#include -#include +#include "scandisk.h" + +struct device_args { + char *label; + struct devnode *devnode; + int sector_size; + int flags; + int count; + int pad; +}; + int -check_device(char *device, char *label, quorum_header_t *qh) +check_device(char *device, char *label, quorum_header_t *qh, + int flags) { - int fd = -1, ret = -1; + int ret = -1; quorum_header_t qh_local; + target_info_t disk; if (!qh) qh = &qh_local; - fd = qdisk_validate(device); - if (fd < 0) { + ret = qdisk_validate(device); + if (ret < 0) { perror("qdisk_verify"); return -1; } - fd = qdisk_open(device); - if (fd < 0) { + ret = qdisk_open(device, &disk); + if (ret < 0) { perror("qdisk_open"); return -1; } - if (qdisk_read(fd, OFFSET_HEADER, qh, sizeof(*qh)) == sizeof(*qh)) { + ret = -1; + if (qdisk_read(&disk, OFFSET_HEADER, qh, sizeof(*qh)) == sizeof(*qh)) { swab_quorum_header_t(qh); if (qh->qh_magic == HEADER_MAGIC_NUMBER) { if (!label || !strcmp(qh->qh_cluster, label)) { @@ -63,68 +74,202 @@ check_device(char *device, char *label, quorum_header_t *qh) } } - qdisk_close(&fd); + qh->qh_kernsz = disk.d_blksz; + + /* only flag now is 'strict device check'; i.e., + "block size recorded must match kernel's reported size" */ + if (flags && qh->qh_version == VERSION_MAGIC_V2 && + disk.d_blksz != qh->qh_blksz) { + ret = -1; + } + + qdisk_close(&disk); return ret; } -int -find_partitions(const char *devdir, const char *label, - char *devname, size_t devlen, int print) +void +filter_devs(struct devnode *node, void *v_args) { - struct dirent **namelist; - struct stat sb; - char newpath[256]; - int n; + struct device_args *args = (struct device_args *)v_args; quorum_header_t qh; + quorum_header_t *ret_qh = NULL; + int ret; - n = scandir(devdir, &namelist, 0, alphasort); - if (n <= 0) - return -1; + if (!node->sysfsattrs.sysfs) + return; + if (!node->devpath) + return; + if (node->sysfsattrs.holders) + return; + /* Qdiskd doesn't work on soft-raid */ + if (node->md > 0) + return; + + ret = check_device(node->devpath->path, args->label, &qh, args->flags); + if (ret == 0) { + ret_qh = malloc(sizeof(qh)); + if (!ret_qh) + return; + memcpy(ret_qh, &qh, sizeof(qh)); + + node->filter = (void *)ret_qh; + if (!args->count) { + args->devnode = node; + } + ++args->count; + } +} + + +char * +state_str(disk_node_state_t s) +{ + switch (s) { + case S_NONE: + return "None"; + case S_EVICT: + return "Evicted"; + case S_INIT: + return "Initializing"; + case S_RUN: + return "Running"; + case S_MASTER: + return "Master"; + default: + return "ILLEGAL"; + } +} + + +void +print_status_block(status_block_t *sb) +{ + if (sb->ps_state == S_NONE) + return; + printf("Status block for node %d\n", sb->ps_nodeid); + printf("\tLast updated by node %d\n", sb->ps_updatenode); + printf("\tLast updated on %s", ctime((time_t *)&sb->ps_timestamp)); + printf("\tState: %s\n", state_str(sb->ps_state)); + printf("\tFlags: %04x\n", sb->ps_flags); + printf("\tScore: %d/%d\n", sb->ps_score, sb->ps_scoremax); + printf("\tAverage Cycle speed: %d.%06d seconds\n", + sb->ps_ca_sec, sb->ps_ca_usec); + printf("\tLast Cycle speed: %d.%06d seconds\n", + sb->ps_lc_sec, sb->ps_lc_usec); + printf("\tIncarnation: %08x%08x\n", + (int)(sb->ps_incarnation>>32&0xffffffff), + (int)(sb->ps_incarnation&0xffffffff)); + +} + + +void +read_info(char *dev) +{ + target_info_t ti; + int x; + status_block_t sb; + + if (qdisk_open(dev, &ti) < 0) { + printf("Could not read from %s: %s\n", + dev, strerror(errno)); + return; + } - while (n--) { - /* filter out: - * . and .. - * .static and .udev that are typical udev dirs that we don't want to scan - */ - if (strcmp(namelist[n]->d_name, ".") && - strcmp(namelist[n]->d_name, "..") && - strcmp(namelist[n]->d_name, ".static") && - strcmp(namelist[n]->d_name, ".udev")) { - snprintf(newpath, sizeof(newpath), "%s/%s", devdir, namelist[n]->d_name); - if (!lstat(newpath, &sb)) { - /* dive into directories */ - if (S_ISDIR(sb.st_mode)) { - if (!find_partitions(newpath, label, devname, devlen, print)) { - if (devname && (strlen(devname) > 0)) - return 0; - } - } - /* check if it's a block device */ - if (S_ISBLK(sb.st_mode)) { - if (!check_device(newpath, (char *)label, &qh)) { - if (print) { - time_t timestamp = qh.qh_timestamp; - printf("%s:\n", newpath); - printf("\tMagic: %08x\n", qh.qh_magic); - printf("\tLabel: %s\n", qh.qh_cluster); - printf("\tCreated: %s", - ctime((time_t *)×tamp)); - printf("\tHost: %s\n\n", qh.qh_updatehost); - } - - if (devname && devlen) { - strncpy(devname, newpath, devlen); - return 0; - } - } - } + for (x = 0; x < MAX_NODES_DISK; x++) { + + if (qdisk_read(&ti, + qdisk_nodeid_offset(x+1, ti.d_blksz), + &sb, sizeof(sb)) < 0) { + printf("Error reading node ID block %d\n", + x+1); + continue; + } + swab_status_block_t(&sb); + print_status_block(&sb); + } + + qdisk_close(&ti); +} + + +void +print_qdisk_info(struct devnode *dn) +{ + quorum_header_t *qh = (quorum_header_t *)dn->filter; + + printf("%s:\n", dn->devpath->path); + printf("\tMagic: %08x\n", qh->qh_magic); + printf("\tLabel: %s\n", qh->qh_cluster); + printf("\tCreated: %s", + ctime((time_t *)&(qh->qh_timestamp))); + printf("\tHost: %s\n", qh->qh_updatehost); + printf("\tKernel Sector Size: %d\n", qh->qh_kernsz); + if (qh->qh_version == VERSION_MAGIC_V2) { + printf("\tRecorded Sector Size: %d\n\n", (int)qh->qh_blksz); + } +} + +int +find_partitions(const char *label, char *devname, size_t devlen, int print) +{ + struct devlisthead *dh = NULL; + struct devnode *dn = NULL; + struct device_args dargs; + + memset(&dargs, 0, sizeof(dargs)); + dargs.label = (char *)label; + dargs.flags = 1; /* strict device check */ + dargs.devnode = NULL; /* First matching device */ + + dh = scan_for_dev(NULL, 5, filter_devs, (void *)(&dargs)); + if (!dh) + goto not_found; + if (!dargs.devnode) + goto not_found; + + if (dargs.count > 0 && print) { + for (dn = dh->devnode; dn; dn = dn->next) { + if (dn->filter == NULL) { + continue; + } + + print_qdisk_info(dn); + if (print >= 2) { + /* Print node stuff */ + read_info(dn->devpath->path); } } - free(namelist[n]); } + if (dargs.count == 1 && label) { + snprintf(devname, devlen, "%s", dargs.devnode->devpath->path); + } + + for (dn = dh->devnode; dn; dn = dn->next) + if (dn->filter) + free(dn->filter); + free_dev_list(dh); + + if (print) + /* No errors if we're just printing stuff */ + return 0; + + if (dargs.count == 1 || !label) + return 0; + + /* more than one match */ + return 1; + + not_found: + if (dh) { + for (dn = dh->devnode; dn; dn = dn->next) + if (dn->filter) + free(dn->filter); + free_dev_list(dh); + } errno = ENOENT; return -1; } diff --git a/cman/qdisk/scandisk.c b/cman/qdisk/scandisk.c new file mode 100644 index 0000000..b0bd8a6 --- /dev/null +++ b/cman/qdisk/scandisk.c @@ -0,0 +1,713 @@ +/****************************************************************************** +******************************************************************************* +** +** Copyright (C) 2008 Fabio M. Di Nitto . +** All rights reserved. +** +** This copyrighted material is made available to anyone wishing to use, +** modify, copy, or redistribute it subject to the terms and conditions +** of the GNU General Public License v.2. +** +******************************************************************************* +******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "scandisk.h" + +/** search in cache helpers **/ + +/* + * match is 0 for exact match + * 1 to see if the string is contained and return the first match + */ + +static struct devnode *find_dev_by_path(struct devnode *startnode, char *path, + int match) +{ + struct devnode *nextnode; + struct devpath *nextpath; + + while (startnode) { + nextnode = startnode->next; + nextpath = startnode->devpath; + while (nextpath) { + if (match) { + if (strstr(nextpath->path, path)) + return startnode; + } else { + if (!strcmp(nextpath->path, path)) + return startnode; + } + nextpath = nextpath->next; + } + startnode = nextnode; + } + + return 0; +} + +static struct devnode *find_dev_by_majmin(struct devnode *startnode, int maj, + int min) +{ + struct devnode *nextnode; + + while (startnode) { + nextnode = startnode->next; + if ((startnode->maj == maj) && (startnode->min == min)) + return startnode; + startnode = nextnode; + } + + return 0; +} + +/** free the cache.. this one is easy ;) **/ + +/* free all the path associated to one node */ +static void flush_dev_list(struct devpath *startpath) +{ + struct devpath *nextpath; + + while (startpath) { + nextpath = startpath->next; + free(startpath); + startpath = nextpath; + } + + return; +} + +/* free all nodes associated with one devlist */ +static void flush_dev_cache(struct devlisthead *devlisthead) +{ + struct devnode *nextnode, *startnode = devlisthead->devnode; + + while (startnode) { + nextnode = startnode->next; + flush_dev_list(startnode->devpath); + free(startnode); + startnode = nextnode; + } + + return; +} + +/** list object allocation helpers **/ + +/* our only certain keys in the list are maj and min + * this function append a devnode obj to devlisthead + * and set maj and min + */ + +static struct devnode *alloc_list_obj(struct devlisthead *devlisthead, int maj, + int min) +{ + struct devnode *nextnode, *startnode; + + nextnode = malloc(sizeof(struct devnode)); + if (!nextnode) + return 0; + + memset(nextnode, 0, sizeof(struct devnode)); + + if (!devlisthead->devnode) { + devlisthead->devnode = startnode = nextnode; + } else { + startnode = devlisthead->devnode; + while (startnode->next) + startnode = startnode->next; + + /* always append what we find */ + startnode->next = nextnode; + startnode = nextnode; + } + + startnode->maj = maj; + startnode->min = min; + + return startnode; +} + +/* really annoying but we have no way to know upfront how + * many paths are linked to a certain maj/min combo. + * Once we find a device, we know maj/min and this new path. + * add_path_obj will add the given path to the devnode + */ +static int add_path_obj(struct devnode *startnode, char *path) +{ + struct devpath *nextpath, *startpath; + + nextpath = malloc(sizeof(struct devpath)); + if (!nextpath) + return 0; + + memset(nextpath, 0, sizeof(struct devpath)); + + if (!startnode->devpath) { + startnode->devpath = startpath = nextpath; + } else { + startpath = startnode->devpath; + while (startpath->next) + startpath = startpath->next; + + /* always append what we find */ + startpath->next = nextpath; + startpath = nextpath; + } + + strncpy(startpath->path, path, MAXPATHLEN - 1); + + return 1; +} + +/* lsdev needs to add blocks in 2 conditions: if we have a real block device + * or if have a symlink to a block device. + * this function simply avoid duplicate code around. + */ +static int add_lsdev_block(struct devlisthead *devlisthead, struct stat *sb, + char *path) +{ + int maj, min; + struct devnode *startnode; + + maj = major(sb->st_rdev); + min = minor(sb->st_rdev); + + startnode = find_dev_by_majmin(devlisthead->devnode, maj, min); + if (!startnode) { + startnode = alloc_list_obj(devlisthead, maj, min); + if (!startnode) + return 0; + } + + if (!add_path_obj(startnode, path)) + return 0; + + return 1; +} + +/* check if it is a device or a symlink to a device */ +static int dev_is_block(struct stat *sb, char *path) +{ + if (S_ISBLK(sb->st_mode)) + return 1; + + if (S_ISLNK(sb->st_mode)) + if (!stat(path, sb)) + if (S_ISBLK(sb->st_mode)) + return 1; + + return 0; +} + +/* lsdev does nothing more than ls -lR /dev + * dives into dirs (skips hidden directories) + * add block devices + * parse symlinks + * + * ret: + * 1 on success + * -1 for generic errors + * -2 -ENOMEM + */ +static int lsdev(struct devlisthead *devlisthead, char *path) +{ + int i, n, err = 0; + struct dirent **namelist; + struct stat sb; + char newpath[MAXPATHLEN]; + + i = scandir(path, &namelist, 0, alphasort); + if (i < 0) + return -1; + + for (n = 0; n < i; n++) { + if (namelist[n]->d_name[0] != '.') { + snprintf(newpath, sizeof(newpath), "%s/%s", path, + namelist[n]->d_name); + + if (!lstat(newpath, &sb)) { + if (S_ISDIR(sb.st_mode)) + err = lsdev(devlisthead, newpath); + if (err < 0) + return err; + + if (dev_is_block(&sb, newpath)) + if (!add_lsdev_block + (devlisthead, &sb, newpath) < 0) + return -2; + } + } + free(namelist[n]); + } + free(namelist); + return 1; +} + +/* + * scan /proc/partitions and adds info into the list. + * It's able to add nodes if those are not found in sysfs. + * + * ret: + * 0 if we can't scan + * -2 -ENOMEM + * 1 if everything is ok + */ + +static int scanprocpart(struct devlisthead *devlisthead) +{ + char line[4096]; + FILE *fp; + int minor, major; + unsigned long long blkcnt; + char device[128]; + struct devnode *startnode; + fp = fopen("/proc/partitions", "r"); + if (!fp) + return 0; + while (fgets(line, sizeof(line), fp) + != NULL) { + + if (strlen(line) > 128 + (22)) + continue; + sscanf(line, "%4d %4d %10llu %s", + &major, &minor, &blkcnt, device); + + /* careful here.. if there is no device, we are scanning the + * first two lines that are not useful to us + */ + if (!strlen(device)) + continue; + startnode = + find_dev_by_majmin(devlisthead->devnode, major, minor); + if (!startnode) { + startnode = alloc_list_obj(devlisthead, major, minor); + if (!startnode) + return -2; + } + + startnode->procpart = 1; + strcpy(startnode->procname, device); + } + + fclose(fp); + return 1; +} + +/* scan /proc/mdstat and adds info to the list. At this point + * all the devices _must_ be already in the list. We don't add anymore + * since raids can only be assembled out of existing devices + * + * ret: + * 1 if we could scan + * 0 otherwise + */ +static int scanmdstat(struct devlisthead *devlisthead) +{ + char line[4096]; + FILE *fp; + char device[16]; + char separator[4]; + char status[16]; + char personality[16]; + char firstdevice[16]; + char devices[4096]; + char *tmp, *next; + struct devnode *startnode = NULL; + + fp = fopen("/proc/mdstat", "r"); + if (!fp) + return 0; + + while (fgets(line, sizeof(line), fp) != NULL) { + + /* i like things to be absolutely clean */ + memset(device, 0, 16); + memset(separator, 0, 4); + memset(status, 0, 16); + memset(personality, 0, 16); + memset(firstdevice, 0, 16); + memset(devices, 0, 4096); + + if (strlen(line) > 4096) + continue; + + /* we only parse stuff that starts with ^md + * that's supposed to point to raid */ + if (!(line[0] == 'm' && line[1] == 'd')) + continue; + + sscanf(line, "%s %s %s %s %s", + device, separator, status, personality, firstdevice); + + /* scan only raids that are active */ + if (strcmp(status, "active")) + continue; + + /* try to find *mdX and set the device as real raid. + * if we don't find the device we don't try to set the slaves */ + startnode = find_dev_by_path(devlisthead->devnode, device, 1); + if (!startnode) + continue; + + startnode->md = 1; + + /* trunkate the string from sdaX[Y] to sdaX and + * copy the whole device string over */ + memset(strstr(firstdevice, "["), 0, 1); + strcpy(devices, strstr(line, firstdevice)); + + /* if we don't find any slave (for whatever reason) + * keep going */ + if (!strlen(devices)) + continue; + + tmp = devices; + while ((tmp) && ((next = strstr(tmp, " ")) || strlen(tmp))) { + + memset(strstr(tmp, "["), 0, 1); + + startnode = + find_dev_by_path(devlisthead->devnode, tmp, 1); + if (startnode) + startnode->md = 2; + + tmp = next; + + if (tmp) + tmp++; + + } + } + + fclose(fp); + return 1; +} + +/* TODO: add more stuff from devmapper to understand if a maj/min + * is a slave or a holder. If we have sysfs this is of no use. + */ + +/* scanmapper uses libdevmapper to identify devices that are not real + * + * ret: + * can't fail for now + */ +static int scanmapper(struct devlisthead *devlisthead) +{ + struct devnode *startnode = devlisthead->devnode; + + while (startnode) { + if (dm_is_dm_major(startnode->maj) > 0) + startnode->mapper = 1; + startnode = startnode->next; + } + + return 1; +} + +/* scan through the list and execute the custom filter for each entry */ +static void run_filter(struct devlisthead *devlisthead, + devfilter filter, void *filter_args) +{ + struct devnode *startnode = devlisthead->devnode; + + while (startnode) { + filter(startnode, filter_args); + startnode = startnode->next; + } + return; +} + +/** sysfs helper functions **/ + +/* /sys/block/sda/dev or /sys/block/sda1/dev exists + * the device is real and dev contains maj/min info. + * + * ret: + * 1 on success and set maj/min + * 0 if no file is found + * -1 if we could not open the file + */ +static int sysfs_is_dev(char *path, int *maj, int *min) +{ + char newpath[MAXPATHLEN]; + struct stat sb; + FILE *f; + snprintf(newpath, sizeof(newpath), "%s/dev", path); + if (!lstat(newpath, &sb)) { + f = fopen(newpath, "r"); + if (f) { + fscanf(f, "%d:%d", maj, min); + fclose(f); + return 1; + } else + return -1; + } + return 0; +} + +/* /sys/block/sda/removable tells us if a device can be ejected + * from the system or not. This is useful for USB pendrive that are + * both removable and disks. + * + * ret: + * 1 if is removable + * 0 if not + * -1 if we couldn't find the file. + */ +static int sysfs_is_removable(char *path) +{ + char newpath[MAXPATHLEN]; + struct stat sb; + int i = -1; + FILE *f; + snprintf(newpath, sizeof(newpath), "%s/removable", path); + if (!lstat(newpath, &sb)) { + f = fopen(newpath, "r"); + if (f) { + fscanf(f, "%d\n", &i); + fclose(f); + } + } + return i; +} + +/* we use this function to scan /sys/block/sda{,1}/{holders,slaves} + * to know in what position of the foodchain this device is. + * NOTE: a device can have both holders and slaves at the same time! + * (for example an lvm volume on top of a raid device made of N real disks + * + * ret: + * always return the amount of entries in the dir if successful + * or any return value from scandir. + */ +static int sysfs_has_subdirs_entries(char *path, char *subdir) +{ + char newpath[MAXPATHLEN]; + struct dirent **namelist; + struct stat sb; + int n, i, count = 0; + + snprintf(newpath, sizeof(newpath), "%s/%s", path, subdir); + if (!lstat(newpath, &sb)) { + if (S_ISDIR(sb.st_mode)) { + i = scandir(newpath, &namelist, 0, alphasort); + if (i < 0) + return i; + for (n = 0; n < i; n++) { + if (namelist[n]->d_name[0] != '.') + count++; + free(namelist[n]); + } + free(namelist); + } + } + return count; +} + +/* this is the best approach so far to make sure a block device + * is a disk and distinguish it from a cdrom or tape or etc. + * What we know for sure is that a type 0 is a disk. + * From an old piece code 0xe is an IDE disk and comes from media. + * NOTE: we scan also for ../ that while it seems stupid, it will + * allow to easily mark partitions as real disks. + * (see for example /sys/block/sda/device/type and + * /sys/block/sda1/../device/type) + * TODO: there might be more cases to evaluate. + * + * ret: + * -2 we were not able to open the file + * -1 no path found + * 0 we found the path but we have 0 clue on what it is + * 1 is a disk + */ +static int sysfs_is_disk(char *path) +{ + char newpath[MAXPATHLEN]; + struct stat sb; + int i = -1; + FILE *f; + + snprintf(newpath, sizeof(newpath), "%s/device/type", path); + if (!lstat(newpath, &sb)) + goto found; + + snprintf(newpath, sizeof(newpath), "%s/../device/type", path); + if (!lstat(newpath, &sb)) + goto found; + + snprintf(newpath, sizeof(newpath), "%s/device/media", path); + if (!lstat(newpath, &sb)) + goto found; + + snprintf(newpath, sizeof(newpath), "%s/../device/media", path); + if (lstat(newpath, &sb)) + return -1; + + found: + f = fopen(newpath, "r"); + if (f) { + fscanf(f, "%d\n", &i); + fclose(f); + + switch (i) { + case 0x0: /* scsi type_disk */ + case 0xe: /* found on ide disks from old kernels.. */ + i = 1; + break; + default: + i = 0; /* by default we have no clue */ + break; + } + } else + i = -2; + + return i; +} + +/* recursive function that will scan and dive into /sys/block + * looking for devices and scanning for attributes. + * + * ret: + * 1 on success + * -1 on generic error + * -2 -ENOMEM + */ +static int scansysfs(struct devlisthead *devlisthead, char *path) +{ + struct devnode *startnode; + int i, n, maj, min; + struct dirent **namelist; + struct stat sb; + char newpath[MAXPATHLEN]; + + i = scandir(path, &namelist, 0, alphasort); + if (i < 0) + return -1; + + for (n = 0; n < i; n++) { + if (namelist[n]->d_name[0] != '.') { + snprintf(newpath, sizeof(newpath), + "%s/%s", path, namelist[n]->d_name); + if (!lstat(newpath, &sb)) { + + if (S_ISDIR(sb.st_mode)) + if (scansysfs(devlisthead, newpath) < 0) + return -1; + + if (S_ISLNK(sb.st_mode)) + continue; + + if (sysfs_is_dev(newpath, &maj, &min) > 0) { + startnode = + alloc_list_obj(devlisthead, maj, + min); + if (!startnode) + return -2; + + startnode->sysfsattrs.sysfs = 1; + startnode->sysfsattrs.removable = + sysfs_is_removable(newpath); + startnode->sysfsattrs.holders = + sysfs_has_subdirs_entries(newpath, + "holders"); + startnode->sysfsattrs.slaves = + sysfs_has_subdirs_entries(newpath, + "slaves"); + startnode->sysfsattrs.disk = + sysfs_is_disk(newpath); + } + } + } + free(namelist[n]); + } + + free(namelist); + return 1; +} + +/* + * devlisthead can be null if you are at init time. pass the old one if you are + * updating or scanning.. + * + * timeout is used only at init time to set the cache timeout value if default + * value is not good enough. We might extend its meaning at somepoint. + * Anything <= 0 means that the cache does not expire. + */ + +struct devlisthead *scan_for_dev(struct devlisthead *devlisthead, + time_t timeout, + devfilter filter, void *filter_args) +{ + int res; + time_t current; + + time(¤t); + + if (devlisthead) { + if ((current - devlisthead->cache_timestamp) < + devlisthead->cache_timeout) { + return devlisthead; + } + } else { + devlisthead = malloc(sizeof(struct devlisthead)); + if (!devlisthead) + return NULL; + memset(devlisthead, 0, sizeof(struct devlisthead)); + if (timeout) + devlisthead->cache_timeout = timeout; + else + devlisthead->cache_timeout = DEVCACHETIMEOUT; + } + + flush_dev_cache(devlisthead); + devlisthead->cache_timestamp = current; + + /* it's important we check those 3 errors and abort in case + * as it means that we are running out of mem, + */ + devlisthead->sysfs = res = scansysfs(devlisthead, SYSBLOCKPATH); + if (res < -1) + goto emergencyout; + + devlisthead->procpart = res = scanprocpart(devlisthead); + if (res < -1) + goto emergencyout; + + devlisthead->lsdev = res = lsdev(devlisthead, DEVPATH); + if (res < -1) + goto emergencyout; + + /* from now on we don't alloc mem ourselves but only add info */ + devlisthead->mdstat = scanmdstat(devlisthead); + devlisthead->mapper = scanmapper(devlisthead); + if (filter) + run_filter(devlisthead, filter, filter_args); + + return devlisthead; + + emergencyout: + free_dev_list(devlisthead); + return 0; +} + +/* free everything we used so far */ + +void free_dev_list(struct devlisthead *devlisthead) +{ + if (devlisthead) { + flush_dev_cache(devlisthead); + free(devlisthead); + } + return; +} diff --git a/cman/qdisk/scandisk.h b/cman/qdisk/scandisk.h new file mode 100644 index 0000000..b103a3c --- /dev/null +++ b/cman/qdisk/scandisk.h @@ -0,0 +1,100 @@ +/****************************************************************************** +******************************************************************************* +** +** Copyright (C) 2008 Fabio M. Di Nitto . +** All rights reserved. +** +** This copyrighted material is made available to anyone wishing to use, +** modify, copy, or redistribute it subject to the terms and conditions +** of the GNU General Public License v.2. +** +******************************************************************************* +******************************************************************************/ + +#ifndef __SCANDISK_H__ +#define __SCANDISK_H__ + +#ifndef DEVPATH +#define DEVPATH "/dev" +#endif + +#ifndef SYSFSPATH +#define SYSFSPATH "/sys" +#endif + +#ifndef SYSBLOCKPATH +#define SYSBLOCKPATH SYSFSPATH "/block" +#endif + +#ifdef DEBUG +#define DEVCACHETIMEOUT 5 /* expressed in seconds */ +#else +#define DEVCACHETIMEOUT 30 +#endif + +/* each entry can be (generally): + * > 0 on success or good hit + * 0 on success with no hit + * < 0 on error + */ + +struct sysfsattrs { /* usual 0 | 1 game */ + int sysfs; /* did we find an entry in sysfs at all? */ + int slaves; /* device has slaves */ + int holders; /* device has holders */ + int removable; /* device is removable */ + int disk; /* device is a disk */ +}; + +/* this structure is required because we don't know upfront how many + * entries for a certain maj/min will be found in /dev, and so we need + * to alloc them dynamically. + */ +struct devpath { + struct devpath *next; + char path[MAXPATHLEN]; +}; + +/* this structure holds all the data for each maj/min found in the system + * that is a block device + */ +struct devnode { + struct devnode *next; + struct devpath *devpath; /* point to the first path entry */ + int maj; /* device major */ + int min; /* device minor */ + struct sysfsattrs sysfsattrs; /* like the others.. scanning /sys */ + int procpart; /* 0 if the device is not in proc/part or 1 on success. <0 on error */ + char procname[MAXPATHLEN]; /* non-NULL if we find a maj/min match */ + int md; /* 0 nothing to do with raid, 1 is raid, + * 2 is raid slave - data from /proc/mdstat */ + int mapper; /* 0 nothing, 1 we believe it's a devmap dev */ + void *filter; /* your filter output.. whatever it is */ +}; + +/* this is what you get after a scan... if you are lucky */ +/* each entry can be 0 if we can't scan or < 0 if there are errors */ + +struct devlisthead { + time_t cache_timestamp; /* this cache timestamp */ + int cache_timeout; /* for how long this cache is valid */ + int sysfs; /* set to 1 if we were able to scan + * /sys */ + int procpart; /* set to 1 if we were able to scan + * /proc/partitions */ + int lsdev; /* set to 1 if we were able to ls /dev */ + int mdstat; /* set to 1 if we were able to scan + * /proc/mdstat */ + int mapper; /* set to 1 if we were able to run + * something against mapper */ + struct devnode *devnode; /* points to the first entry */ +}; + +typedef void (*devfilter) (struct devnode * cur, void *arg); + +struct devlisthead *scan_for_dev(struct devlisthead *devlisthead, + time_t timeout, + devfilter filter, void *filter_args); +void free_dev_list(struct devlisthead *devlisthead); + +#endif /* __SCANDISK_H__ */ hooks/post-receive -- Cluster Project From teigland@sourceware.org Thu Mar 20 17:31:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Thu, 20 Mar 2008 17:31:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-14-g1bb513e Message-ID: <20080320173124.20299.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1bb513e542a4ca7f3e79f5000b0bb0783a41b0b5 The branch, RHEL5 has been updated via 1bb513e542a4ca7f3e79f5000b0bb0783a41b0b5 (commit) from 1acab71f585b845992e6070d6616644690f4e444 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1bb513e542a4ca7f3e79f5000b0bb0783a41b0b5 Author: David Teigland Date: Fri Mar 14 10:36:54 2008 -0500 libdlm: fix lvb copying bz 437496 When a program does a lock operation that reads an lvb, libdlm copies the lvb data from a bogus location instead of from the proper offset in the buffer it just read. The location of the lvb data is calculated wrongly due to a missing cast. Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 5e4c7ef..876c16e 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -573,7 +573,7 @@ static int do_dlm_dispatch_v6(int fd) /* Copy lvb to user's buffer */ if (result->lvb_offset) memcpy(result->user_lksb->sb_lvbptr, - result + result->lvb_offset, DLM_LVB_LEN); + (char *)result + result->lvb_offset, DLM_LVB_LEN); result->user_lksb->sb_status = -result->user_lksb->sb_status; hooks/post-receive -- Cluster Project From lhh@sourceware.org Thu Mar 20 20:42:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 20 Mar 2008 20:42:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-89-g5802dd9 Message-ID: <20080320204230.12661.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=5802dd9743d7a020d1a9bc47da2dccdbc39a6514 The branch, master has been updated via 5802dd9743d7a020d1a9bc47da2dccdbc39a6514 (commit) via 24a202ca9ef616bf8f3def69dc52b55684e0d1f3 (commit) from f4a6e5e1e81f8355cd0f50f032e6f443db17ade9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5802dd9743d7a020d1a9bc47da2dccdbc39a6514 Author: Lon Hohberger Date: Thu Mar 20 16:42:09 2008 -0400 [cman] Make mkqdisk print all device paths commit 24a202ca9ef616bf8f3def69dc52b55684e0d1f3 Author: Lon Hohberger Date: Thu Mar 20 16:34:20 2008 -0400 [cman] Fix qdisk Makefile / disk_util merge bugs ----------------------------------------------------------------------- Summary of changes: cman/qdisk/Makefile | 2 +- cman/qdisk/disk_util.c | 2 +- cman/qdisk/proc.c | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cman/qdisk/Makefile b/cman/qdisk/Makefile index e5c7f27..e587941 100644 --- a/cman/qdisk/Makefile +++ b/cman/qdisk/Makefile @@ -29,7 +29,7 @@ CFLAGS += -I${ccsincdir} -I${cmanincdir} CFLAGS += -I$(S) CFLAGS += -I${incdir} -EXTRA_LDFLAGS += -lcman -lccs +EXTRA_LDFLAGS += -L${cmanlibdir} -L${ccslibdir} -lcman -lccs # # XXX Fabio has a way to clean up the devmapper requirement # diff --git a/cman/qdisk/disk_util.c b/cman/qdisk/disk_util.c index a3d73d8..f5539c0 100644 --- a/cman/qdisk/disk_util.c +++ b/cman/qdisk/disk_util.c @@ -71,7 +71,7 @@ getuptime(struct timeval *tv) if (!fp) return -1; -#if defined(__sparc__) || defined(__hppa__) || defined(__sparc64__) || defined (__hppa64__) +#if defined(__sparc__) || defined(__sparc64__) rv = fscanf(fp,"%ld.%d %ld.%d\n", &tv->tv_sec, &tv->tv_usec, &junk.tv_sec, &junk.tv_usec); #else diff --git a/cman/qdisk/proc.c b/cman/qdisk/proc.c index 6c7ef48..f27faa2 100644 --- a/cman/qdisk/proc.c +++ b/cman/qdisk/proc.c @@ -199,8 +199,10 @@ void print_qdisk_info(struct devnode *dn) { quorum_header_t *qh = (quorum_header_t *)dn->filter; + struct devpath *dp; - printf("%s:\n", dn->devpath->path); + for (dp = dn->devpath; dp; dp = dp->next) + printf("%s:\n", dp->path); printf("\tMagic: %08x\n", qh->qh_magic); printf("\tLabel: %s\n", qh->qh_cluster); printf("\tCreated: %s", hooks/post-receive -- Cluster Project From lhh@sourceware.org Thu Mar 20 21:25:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 20 Mar 2008 21:25:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-15-gc1f442a Message-ID: <20080320212530.4897.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c1f442a049bc5f7369ff5c88a834dab2e9b09251 The branch, RHEL5 has been updated via c1f442a049bc5f7369ff5c88a834dab2e9b09251 (commit) from 1bb513e542a4ca7f3e79f5000b0bb0783a41b0b5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c1f442a049bc5f7369ff5c88a834dab2e9b09251 Author: Lon Hohberger Date: Thu Mar 20 17:25:02 2008 -0400 [cman] Apply missing fix for #315711 ----------------------------------------------------------------------- Summary of changes: group/dlm_controld/member_cman.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/group/dlm_controld/member_cman.c b/group/dlm_controld/member_cman.c index ebef48f..53ba72f 100644 --- a/group/dlm_controld/member_cman.c +++ b/group/dlm_controld/member_cman.c @@ -81,6 +81,14 @@ static void statechange(void) return; } + /* Never allow node ID 0 to be considered a member #315711 */ + for (i = 0; i < cman_node_count; i++) { + if (cman_nodes[i].cn_nodeid == 0) { + cman_nodes[i].cn_member = 0; + break; + } + } + for (i = 0; i < old_node_count; i++) { if (old_nodes[i].cn_member && !is_cman_member(old_nodes[i].cn_nodeid)) { hooks/post-receive -- Cluster Project From lhh@sourceware.org Thu Mar 20 21:46:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 20 Mar 2008 21:46:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-90-g3a0c7d3 Message-ID: <20080320214653.13445.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=3a0c7d3e8b81ca339fbab9fb8d17f76991b1e358 The branch, master has been updated via 3a0c7d3e8b81ca339fbab9fb8d17f76991b1e358 (commit) from 5802dd9743d7a020d1a9bc47da2dccdbc39a6514 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 3a0c7d3e8b81ca339fbab9fb8d17f76991b1e358 Author: Lon Hohberger Date: Thu Mar 20 17:25:02 2008 -0400 [cman] Apply missing fix for #315711 ----------------------------------------------------------------------- Summary of changes: group/dlm_controld/member_cman.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/group/dlm_controld/member_cman.c b/group/dlm_controld/member_cman.c index 6fb5c4f..1ce180c 100644 --- a/group/dlm_controld/member_cman.c +++ b/group/dlm_controld/member_cman.c @@ -84,6 +84,14 @@ static void statechange(void) return; } + /* Never allow node ID 0 to be considered a member #315711 */ + for (i = 0; i < cman_node_count; i++) { + if (cman_nodes[i].cn_nodeid == 0) { + cman_nodes[i].cn_member = 0; + break; + } + } + for (i = 0; i < old_node_count; i++) { if (old_nodes[i].cn_member && !is_cman_member(old_nodes[i].cn_nodeid)) { hooks/post-receive -- Cluster Project From lhh@sourceware.org Thu Mar 20 21:48:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Thu, 20 Mar 2008 21:48:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-25-g0e05f55 Message-ID: <20080320214800.13836.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=0e05f5554afe6b24a4cc28afcfc8d46fa7ca1814 The branch, STABLE2 has been updated via 0e05f5554afe6b24a4cc28afcfc8d46fa7ca1814 (commit) from 025b0b4a525b5f5b72f8a583ff89bedb5ee738a8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 0e05f5554afe6b24a4cc28afcfc8d46fa7ca1814 Author: Lon Hohberger Date: Thu Mar 20 17:25:02 2008 -0400 [cman] Apply missing fix for #315711 ----------------------------------------------------------------------- Summary of changes: group/dlm_controld/member_cman.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/group/dlm_controld/member_cman.c b/group/dlm_controld/member_cman.c index 6fb5c4f..1ce180c 100644 --- a/group/dlm_controld/member_cman.c +++ b/group/dlm_controld/member_cman.c @@ -84,6 +84,14 @@ static void statechange(void) return; } + /* Never allow node ID 0 to be considered a member #315711 */ + for (i = 0; i < cman_node_count; i++) { + if (cman_nodes[i].cn_nodeid == 0) { + cman_nodes[i].cn_member = 0; + break; + } + } + for (i = 0; i < old_node_count; i++) { if (old_nodes[i].cn_member && !is_cman_member(old_nodes[i].cn_nodeid)) { hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 21 04:07:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 21 Mar 2008 04:07:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-91-gf61b789 Message-ID: <20080321040702.6272.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=f61b7891dfeab418bd1a20a12f084e848df335fc The branch, master has been updated via f61b7891dfeab418bd1a20a12f084e848df335fc (commit) from 3a0c7d3e8b81ca339fbab9fb8d17f76991b1e358 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f61b7891dfeab418bd1a20a12f084e848df335fc Author: Fabio M. Di Nitto Date: Fri Mar 21 05:05:43 2008 +0100 [CMAN] Drop dependency on libdevmapper Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/qdisk/Makefile | 8 +----- cman/qdisk/scandisk.c | 54 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/cman/qdisk/Makefile b/cman/qdisk/Makefile index e587941..4d3634d 100644 --- a/cman/qdisk/Makefile +++ b/cman/qdisk/Makefile @@ -30,10 +30,7 @@ CFLAGS += -I$(S) CFLAGS += -I${incdir} EXTRA_LDFLAGS += -L${cmanlibdir} -L${ccslibdir} -lcman -lccs -# -# XXX Fabio has a way to clean up the devmapper requirement -# -EXTRA_LDFLAGS += -lpthread -ldevmapper +EXTRA_LDFLAGS += -lpthread OBJS1= main.o \ score.o \ @@ -54,9 +51,8 @@ SHAREDOBJS= disk.o \ ${TARGET1}: ${SHAREDOBJS} ${OBJS1} $(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) -# XXX Remove $(EXTRA_LDFLAGS) when libdevmapper is no longer required ${TARGET2}: ${SHAREDOBJS} ${OBJS2} - $(CC) -o $@ $^ $(LDFLAGS) $(EXTRA_LDFLAGS) + $(CC) -o $@ $^ $(LDFLAGS) depends: $(MAKE) -C ../lib all diff --git a/cman/qdisk/scandisk.c b/cman/qdisk/scandisk.c index b0bd8a6..f4f7e0d 100644 --- a/cman/qdisk/scandisk.c +++ b/cman/qdisk/scandisk.c @@ -19,7 +19,6 @@ #include #include #include -#include #include "scandisk.h" @@ -393,25 +392,58 @@ static int scanmdstat(struct devlisthead *devlisthead) return 1; } -/* TODO: add more stuff from devmapper to understand if a maj/min - * is a slave or a holder. If we have sysfs this is of no use. - */ - -/* scanmapper uses libdevmapper to identify devices that are not real +/* scanmapper parses /proc/devices to identify what maj are associated + * with device-mapper * * ret: * can't fail for now */ static int scanmapper(struct devlisthead *devlisthead) { - struct devnode *startnode = devlisthead->devnode; + struct devnode *startnode; + FILE *fp; + char line[4096]; + char major[4]; + char device[64]; + int maj, start = 0; + + fp = fopen("/proc/devices", "r"); + if (!fp) + return 0; + + while (fgets(line, sizeof(line), fp) != NULL) { + memset(major, 0, 4); + memset(device, 0, 64); + + if (strlen(line) > 4096) + continue; + + if (!strncmp(line, "Block devices:", 13)) { + start = 1; + continue; + } + + if (!start) + continue; + + sscanf(line, "%s %s", major, device); + + if (!strncmp(device, "device-mapper", 13)) { + maj = atoi(major); + startnode = devlisthead->devnode; + + while (startnode) { + if (startnode->maj == maj) + startnode->mapper = 1; + + startnode = startnode->next; + } + + } - while (startnode) { - if (dm_is_dm_major(startnode->maj) > 0) - startnode->mapper = 1; - startnode = startnode->next; } + fclose(fp); return 1; } hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 21 04:12:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 21 Mar 2008 04:12:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-92-g99a0f20 Message-ID: <20080321041255.15281.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=99a0f20cc084fbf5be602db8be24b67a1e9ab6ac The branch, master has been updated via 99a0f20cc084fbf5be602db8be24b67a1e9ab6ac (commit) from f61b7891dfeab418bd1a20a12f084e848df335fc (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 99a0f20cc084fbf5be602db8be24b67a1e9ab6ac Author: Fabio M. Di Nitto Date: Fri Mar 21 05:11:55 2008 +0100 [CMAN] Fix building when -DDEBUG is not specified Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/cman_tool/main.c | 3 ++- cman/daemon/commands.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletions(-) diff --git a/cman/cman_tool/main.c b/cman/cman_tool/main.c index c916b7f..4ac0616 100644 --- a/cman/cman_tool/main.c +++ b/cman/cman_tool/main.c @@ -1061,8 +1061,9 @@ int main(int argc, char *argv[]) case OP_DUMP_OBJDB: dump_objdb(&comline); break; - } #endif + } + exit(EXIT_SUCCESS); } diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index 5cbc012..c15f1a7 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -1230,7 +1230,9 @@ int process_command(struct connection *con, int cmd, char *cmdbuf, struct cl_version cnxman_version; char *outbuf = *retbuf; int value; +#ifdef DEBUG FILE *dumpfile; +#endif P_MEMB("command to process is %x\n", cmd); hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 21 05:47:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 21 Mar 2008 05:47:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-93-g53bfde1 Message-ID: <20080321054742.7171.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=53bfde1e82343cfa5d2c713f97372beecee60eb6 The branch, master has been updated via 53bfde1e82343cfa5d2c713f97372beecee60eb6 (commit) from 99a0f20cc084fbf5be602db8be24b67a1e9ab6ac (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 53bfde1e82343cfa5d2c713f97372beecee60eb6 Author: Fabio M. Di Nitto Date: Fri Mar 21 06:32:04 2008 +0100 [BUILD] Fix handling of version and libraries soname The overall handling of release_major/minor/micro was wrong and it was discovered only after the first STABLE2 release. This change obsoletes release_major/minor/micro and introduces 3 new configure options: release_version, somajor and sominor. And add options to make/official_release_version. somajor/sominor should only be numbers (no sanity check is performed) and they can either be specified when invoking configure (both must be present at the same time and they will override official_release_version) or in make/official_release_version as: SONAME "2.2" If not specified anywhere they will be generated as before. release_version can now be a random string that will be shown when asking for tool versions. When specified from the configure it will override the one specified in make/official_release_version as previously documented (ex: VERSION "2.02.01"). If not specified anywhere it will be generated by somajor.sominor. NOTE to developers: you will need to rerun configure to regenerate make/defines.mk. NOTE to packagers: sorry about this intrusive change but the problem was noticed too late. Removing --release_major/minor/micro from your configure invokation should be enough and usually those values should be set by upstream. While we provide an easy option to override values, please try to keep them consistent with upstream for easy tracking of bugs vs released versions. NOTE to release manager: make/official_release_version is not tracked in git and should now contains 2 keywords to work properly (order is not important). Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/lib/Makefile | 14 +++++----- configure | 79 ++++++++++++++++++++++++++++++----------------------- dlm/lib/Makefile | 26 +++++++++--------- 3 files changed, 65 insertions(+), 54 deletions(-) diff --git a/cman/lib/Makefile b/cman/lib/Makefile index 7124b80..fbc4a28 100644 --- a/cman/lib/Makefile +++ b/cman/lib/Makefile @@ -14,16 +14,16 @@ TARGET= libcman LIBDIRT=$(TARGET).a \ - $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) + $(TARGET).so.$(SOMAJOR).$(SOMINOR) LIBSYMT=$(TARGET).so \ - $(TARGET).so.$(RELEASE_MAJOR) + $(TARGET).so.$(SOMAJOR) INCDIRT=$(TARGET).h include ../../make/defines.mk -SHAREDLIB=$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR} +SHAREDLIB=$(TARGET).so.${SOMAJOR}.${SOMINOR} STATICLIB=$(TARGET).a all: $(STATICLIB) $(SHAREDLIB) @@ -41,9 +41,9 @@ $(TARGET).a: $(TARGET).o ${AR} r $@ $^ ${RANLIB} $@ -$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR}: $(TARGET).o - $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(RELEASE_MAJOR) $< - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so.$(RELEASE_MAJOR) +$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).o + $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR) clean: generalclean diff --git a/configure b/configure index 2cd1b56..21e9dbc 100755 --- a/configure +++ b/configure @@ -80,9 +80,9 @@ my %options = ( conffile => \$conffile, fence_agents => \$fence_agents, enable_xen => \$enable_xen, - release_major => \$release_major, - release_minor => \$release_minor, - release_micro => \$release_micro, + somajor => \$somajor, + sominor => \$sominor, + release_version => \$release_version, without_ccs => \$without_ccs, without_cman => \$without_cman, without_dlm => \$without_dlm, @@ -143,9 +143,9 @@ my $err = &GetOptions (\%options, 'sharedir=s', 'confdir=s', 'conffile=s', - 'release_major=s', - 'release_minor=s', - 'release_micro=s', + 'somajor=s', + 'sominor=s', + 'release_version=s', 'fence_agents=s', 'enable_xen', 'without_ccs', @@ -527,14 +527,14 @@ if (!$without_rgmanager) { if (!$disable_kernel_check) { $disable_kernel_check=0; } -if (defined($release_major) && not length $release_major) { - $release_major=""; +if (defined($somajor) && not length $somajor) { + $somajor=""; } -if (defined($release_minor) && not length $release_minor) { - $release_minor=""; +if (defined($sominor) && not length $sominor) { + $sominor=""; } -if (defined($release_micro) && not length $release_micro) { - $release_micro=""; +if (defined($release_version) && not length $release_version) { + $release_version=""; } @args = "find fence/agents -mindepth 2 -maxdepth 2 -name Makefile -printf '%h'"; @@ -624,39 +624,50 @@ while () { close IFILE; -if ((not defined($release_major)) || (not defined($release_minor)) || (not defined($release_micro))) { +if ((not defined($somajor)) || (not defined($sominor)) || (not defined($release_version))) { + + my $current_soname; + my $current_version; if ( -f 'make/official_release_version' ) { - my $current_version = 0; open OFFICIAL_VERSION, '<', "make/official_release_version"; while () { + if ($_ =~ /SONAME/) { + $current_soname = $_; + } if ($_ =~ /VERSION/) { $current_version = $_; - last; } } close OFFICIAL_VERSION; - $current_version =~ s/.*"(.*)"\n/$1/; - my @release_version = split /\./, $current_version; - $release_major = $release_version[0]; - $release_minor = $release_version[1]; - $release_micro = $release_version[2]; - } else { - $release_major = DEVEL; - $release_minor = `date +%s`; - chomp $release_minor; - $release_micro = 0; } -} -print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; -print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; + if ((not defined($somajor)) || (not defined($sominor))) { + if (not defined($current_soname)) { + $somajor = DEVEL; + $sominor = `date +%s`; + chomp $sominor; + } else { + $current_soname =~ s/.*"(.*)"\n/$1/; + my @release_soname = split /\./, $current_soname; + $somajor = $release_soname[0]; + $sominor = $release_soname[1]; + } + } + + if (not defined($release_version)) { + if (not defined($current_version)) { + $release_version = "$somajor.$sominor"; + } else { + $release_version = $current_version; + $release_version =~ s/.*"(.*)"\n/$1/; + } + } +} -$release_major = abs $release_major; -$release_minor = abs $release_minor; -$release_micro = abs $release_micro; -print OFILE "RELEASE_MAJOR = $release_major\n"; -print OFILE "RELEASE_MINOR = $release_minor\n"; -print OFILE "RELEASE_MICRO = $release_micro\n"; +print OFILE "SOMAJOR = $somajor\n"; +print OFILE "SOMINOR = $sominor\n"; +print OFILE "RELEASE_VERSION = $release_version\n"; +print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_version\\\"\n"; close OFILE; diff --git a/dlm/lib/Makefile b/dlm/lib/Makefile index 85a78b2..b223df7 100644 --- a/dlm/lib/Makefile +++ b/dlm/lib/Makefile @@ -15,13 +15,13 @@ TARGET= libdlm LIBDIRT=$(TARGET).a \ $(TARGET)_lt.a \ - $(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR} \ - $(TARGET)_lt.so.${RELEASE_MAJOR}.${RELEASE_MINOR} + $(TARGET).so.${SOMAJOR}.${SOMINOR} \ + $(TARGET)_lt.so.${SOMAJOR}.${SOMINOR} LIBSYMT=$(TARGET).so \ $(TARGET)_lt.so \ - $(TARGET).so.$(RELEASE_MAJOR) \ - $(TARGET)_lt.so.$(RELEASE_MAJOR) + $(TARGET).so.$(SOMAJOR) \ + $(TARGET)_lt.so.$(SOMAJOR) INCDIRT=$(TARGET).h @@ -29,7 +29,7 @@ UDEVT=51-dlm.rules include ../../make/defines.mk -SHAREDLIB=$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR} $(TARGET)_lt.so.${RELEASE_MAJOR}.${RELEASE_MINOR} +SHAREDLIB=$(TARGET).so.${SOMAJOR}.${SOMINOR} $(TARGET)_lt.so.${SOMAJOR}.${SOMINOR} STATICLIB=$(TARGET).a $(TARGET)_lt.a all: $(STATICLIB) $(SHAREDLIB) @@ -55,15 +55,15 @@ $(TARGET)_lt.a: $(TARGET)_lt.o ${AR} r $@ $^ ${RANLIB} $@ -$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR}: $(TARGET).po $(AISTARGET).po - $(CC) $(PTHREAD_LDFLAGS) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET).so.$(RELEASE_MAJOR) $< - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so.$(RELEASE_MAJOR) +$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).po $(AISTARGET).po + $(CC) $(PTHREAD_LDFLAGS) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR) -$(TARGET)_lt.so.${RELEASE_MAJOR}.${RELEASE_MINOR}: $(TARGET)_lt.po - $(CC) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET)_lt.so.$(RELEASE_MAJOR) $< - ln -sf $(TARGET)_lt.so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET)_lt.so - ln -sf $(TARGET)_lt.so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET)_lt.so.$(RELEASE_MAJOR) +$(TARGET)_lt.so.${SOMAJOR}.${SOMINOR}: $(TARGET)_lt.po + $(CC) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET)_lt.so.$(SOMAJOR) $< + ln -sf $(TARGET)_lt.so.$(SOMAJOR).$(SOMINOR) $(TARGET)_lt.so + ln -sf $(TARGET)_lt.so.$(SOMAJOR).$(SOMINOR) $(TARGET)_lt.so.$(SOMAJOR) %_lt.o: $(S)/%.c $(CC) $(CFLAGS) -c -o $@ $< hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 21 05:50:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 21 Mar 2008 05:50:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-26-gb2be4d6 Message-ID: <20080321055011.7815.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b2be4d60359ff6fc01a2ccf9a98850063b8e1da3 The branch, STABLE2 has been updated via b2be4d60359ff6fc01a2ccf9a98850063b8e1da3 (commit) from 0e05f5554afe6b24a4cc28afcfc8d46fa7ca1814 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b2be4d60359ff6fc01a2ccf9a98850063b8e1da3 Author: Fabio M. Di Nitto Date: Fri Mar 21 06:32:04 2008 +0100 [BUILD] Fix handling of version and libraries soname The overall handling of release_major/minor/micro was wrong and it was discovered only after the first STABLE2 release. This change obsoletes release_major/minor/micro and introduces 3 new configure options: release_version, somajor and sominor. And add options to make/official_release_version. somajor/sominor should only be numbers (no sanity check is performed) and they can either be specified when invoking configure (both must be present at the same time and they will override official_release_version) or in make/official_release_version as: SONAME "2.2" If not specified anywhere they will be generated as before. release_version can now be a random string that will be shown when asking for tool versions. When specified from the configure it will override the one specified in make/official_release_version as previously documented (ex: VERSION "2.02.01"). If not specified anywhere it will be generated by somajor.sominor. NOTE to developers: you will need to rerun configure to regenerate make/defines.mk. NOTE to packagers: sorry about this intrusive change but the problem was noticed too late. Removing --release_major/minor/micro from your configure invokation should be enough and usually those values should be set by upstream. While we provide an easy option to override values, please try to keep them consistent with upstream for easy tracking of bugs vs released versions. NOTE to release manager: make/official_release_version is not tracked in git and should now contains 2 keywords to work properly (order is not important). Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/lib/Makefile | 14 +++++----- configure | 79 ++++++++++++++++++++++++++++++----------------------- dlm/lib/Makefile | 26 +++++++++--------- 3 files changed, 65 insertions(+), 54 deletions(-) diff --git a/cman/lib/Makefile b/cman/lib/Makefile index 7124b80..fbc4a28 100644 --- a/cman/lib/Makefile +++ b/cman/lib/Makefile @@ -14,16 +14,16 @@ TARGET= libcman LIBDIRT=$(TARGET).a \ - $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) + $(TARGET).so.$(SOMAJOR).$(SOMINOR) LIBSYMT=$(TARGET).so \ - $(TARGET).so.$(RELEASE_MAJOR) + $(TARGET).so.$(SOMAJOR) INCDIRT=$(TARGET).h include ../../make/defines.mk -SHAREDLIB=$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR} +SHAREDLIB=$(TARGET).so.${SOMAJOR}.${SOMINOR} STATICLIB=$(TARGET).a all: $(STATICLIB) $(SHAREDLIB) @@ -41,9 +41,9 @@ $(TARGET).a: $(TARGET).o ${AR} r $@ $^ ${RANLIB} $@ -$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR}: $(TARGET).o - $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(RELEASE_MAJOR) $< - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so.$(RELEASE_MAJOR) +$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).o + $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR) clean: generalclean diff --git a/configure b/configure index 52beb94..44961b2 100755 --- a/configure +++ b/configure @@ -81,9 +81,9 @@ my %options = ( conffile => \$conffile, fence_agents => \$fence_agents, enable_xen => \$enable_xen, - release_major => \$release_major, - release_minor => \$release_minor, - release_micro => \$release_micro, + somajor => \$somajor, + sominor => \$sominor, + release_version => \$release_version, without_ccs => \$without_ccs, without_cman => \$without_cman, without_dlm => \$without_dlm, @@ -145,9 +145,9 @@ my $err = &GetOptions (\%options, 'sharedir=s', 'confdir=s', 'conffile=s', - 'release_major=s', - 'release_minor=s', - 'release_micro=s', + 'somajor=s', + 'sominor=s', + 'release_version=s', 'fence_agents=s', 'enable_xen', 'without_ccs', @@ -536,14 +536,14 @@ if (!$without_rgmanager) { if (!$disable_kernel_check) { $disable_kernel_check=0; } -if (defined($release_major) && not length $release_major) { - $release_major=""; +if (defined($somajor) && not length $somajor) { + $somajor=""; } -if (defined($release_minor) && not length $release_minor) { - $release_minor=""; +if (defined($sominor) && not length $sominor) { + $sominor=""; } -if (defined($release_micro) && not length $release_micro) { - $release_micro=""; +if (defined($release_version) && not length $release_version) { + $release_version=""; } @args = "find fence/agents -mindepth 2 -maxdepth 2 -name Makefile -printf '%h'"; @@ -634,39 +634,50 @@ while () { close IFILE; -if ((not defined($release_major)) || (not defined($release_minor)) || (not defined($release_micro))) { +if ((not defined($somajor)) || (not defined($sominor)) || (not defined($release_version))) { + + my $current_soname; + my $current_version; if ( -f 'make/official_release_version' ) { - my $current_version = 0; open OFFICIAL_VERSION, '<', "make/official_release_version"; while () { + if ($_ =~ /SONAME/) { + $current_soname = $_; + } if ($_ =~ /VERSION/) { $current_version = $_; - last; } } close OFFICIAL_VERSION; - $current_version =~ s/.*"(.*)"\n/$1/; - my @release_version = split /\./, $current_version; - $release_major = $release_version[0]; - $release_minor = $release_version[1]; - $release_micro = $release_version[2]; - } else { - $release_major = DEVEL; - $release_minor = `date +%s`; - chomp $release_minor; - $release_micro = 0; } -} -print OFILE "RELEASE_VERSION = $release_major.$release_minor.$release_micro\n"; -print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_major.$release_minor.$release_micro\\\"\n"; + if ((not defined($somajor)) || (not defined($sominor))) { + if (not defined($current_soname)) { + $somajor = DEVEL; + $sominor = `date +%s`; + chomp $sominor; + } else { + $current_soname =~ s/.*"(.*)"\n/$1/; + my @release_soname = split /\./, $current_soname; + $somajor = $release_soname[0]; + $sominor = $release_soname[1]; + } + } + + if (not defined($release_version)) { + if (not defined($current_version)) { + $release_version = "$somajor.$sominor"; + } else { + $release_version = $current_version; + $release_version =~ s/.*"(.*)"\n/$1/; + } + } +} -$release_major = abs $release_major; -$release_minor = abs $release_minor; -$release_micro = abs $release_micro; -print OFILE "RELEASE_MAJOR = $release_major\n"; -print OFILE "RELEASE_MINOR = $release_minor\n"; -print OFILE "RELEASE_MICRO = $release_micro\n"; +print OFILE "SOMAJOR = $somajor\n"; +print OFILE "SOMINOR = $sominor\n"; +print OFILE "RELEASE_VERSION = $release_version\n"; +print OFILE "CFLAGS += -DRELEASE_VERSION=\\\"$release_version\\\"\n"; close OFILE; diff --git a/dlm/lib/Makefile b/dlm/lib/Makefile index 85a78b2..b223df7 100644 --- a/dlm/lib/Makefile +++ b/dlm/lib/Makefile @@ -15,13 +15,13 @@ TARGET= libdlm LIBDIRT=$(TARGET).a \ $(TARGET)_lt.a \ - $(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR} \ - $(TARGET)_lt.so.${RELEASE_MAJOR}.${RELEASE_MINOR} + $(TARGET).so.${SOMAJOR}.${SOMINOR} \ + $(TARGET)_lt.so.${SOMAJOR}.${SOMINOR} LIBSYMT=$(TARGET).so \ $(TARGET)_lt.so \ - $(TARGET).so.$(RELEASE_MAJOR) \ - $(TARGET)_lt.so.$(RELEASE_MAJOR) + $(TARGET).so.$(SOMAJOR) \ + $(TARGET)_lt.so.$(SOMAJOR) INCDIRT=$(TARGET).h @@ -29,7 +29,7 @@ UDEVT=51-dlm.rules include ../../make/defines.mk -SHAREDLIB=$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR} $(TARGET)_lt.so.${RELEASE_MAJOR}.${RELEASE_MINOR} +SHAREDLIB=$(TARGET).so.${SOMAJOR}.${SOMINOR} $(TARGET)_lt.so.${SOMAJOR}.${SOMINOR} STATICLIB=$(TARGET).a $(TARGET)_lt.a all: $(STATICLIB) $(SHAREDLIB) @@ -55,15 +55,15 @@ $(TARGET)_lt.a: $(TARGET)_lt.o ${AR} r $@ $^ ${RANLIB} $@ -$(TARGET).so.${RELEASE_MAJOR}.${RELEASE_MINOR}: $(TARGET).po $(AISTARGET).po - $(CC) $(PTHREAD_LDFLAGS) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET).so.$(RELEASE_MAJOR) $< - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so - ln -sf $(TARGET).so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET).so.$(RELEASE_MAJOR) +$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).po $(AISTARGET).po + $(CC) $(PTHREAD_LDFLAGS) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so + ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR) -$(TARGET)_lt.so.${RELEASE_MAJOR}.${RELEASE_MINOR}: $(TARGET)_lt.po - $(CC) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET)_lt.so.$(RELEASE_MAJOR) $< - ln -sf $(TARGET)_lt.so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET)_lt.so - ln -sf $(TARGET)_lt.so.$(RELEASE_MAJOR).$(RELEASE_MINOR) $(TARGET)_lt.so.$(RELEASE_MAJOR) +$(TARGET)_lt.so.${SOMAJOR}.${SOMINOR}: $(TARGET)_lt.po + $(CC) $(LDFLAGS) -shared -o $@ -Wl,-soname=$(TARGET)_lt.so.$(SOMAJOR) $< + ln -sf $(TARGET)_lt.so.$(SOMAJOR).$(SOMINOR) $(TARGET)_lt.so + ln -sf $(TARGET)_lt.so.$(SOMAJOR).$(SOMINOR) $(TARGET)_lt.so.$(SOMAJOR) %_lt.o: $(S)/%.c $(CC) $(CFLAGS) -c -o $@ $< hooks/post-receive -- Cluster Project From fabbione@sourceware.org Mon Mar 24 14:18:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Mon, 24 Mar 2008 14:18:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-95-gb83c377 Message-ID: <20080324141845.19123.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b83c377a297a79e45cb7a268bdad2680f81ef4df The branch, master has been updated via b83c377a297a79e45cb7a268bdad2680f81ef4df (commit) via 2ce223c19f4bc860d6dd2c916addff40533afb19 (commit) from 53bfde1e82343cfa5d2c713f97372beecee60eb6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b83c377a297a79e45cb7a268bdad2680f81ef4df Author: Fabio M. Di Nitto Date: Mon Mar 24 14:41:07 2008 +0100 [BUILD] Set -MMD as default CFLAGS Enable non-system header files dependency tracking by using -MMD in combination with -include .d files. This change will allow developers to edit an header file and simply fire a make to rebuild all the objects that are affect by the header change. Before this change a make clean and make were required to propagate the header change. NOTE to developers: you will need to rerun a configure to set -MMD in the default CFLAGS. All directories that builds objects now have a bunch of extra .d files that can be safely ignored as they are automatically generated and ignored by git. Signed-off-by: Fabio M. Di Nitto commit 2ce223c19f4bc860d6dd2c916addff40533afb19 Author: Fabio M. Di Nitto Date: Mon Mar 24 14:40:28 2008 +0100 [BUILD] Update .gitignore for .o and .d files Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: .gitignore | 2 ++ ccs/ccs_test/Makefile | 2 ++ ccs/ccs_tool/Makefile | 2 ++ ccs/ccsais/Makefile | 2 ++ ccs/daemon/Makefile | 2 ++ ccs/lib/Makefile | 2 ++ ccs/lib/libccs.c | 1 + cman/cman_tool/Makefile | 2 ++ cman/daemon/Makefile | 2 ++ cman/lib/Makefile | 8 ++++++-- cman/qdisk/Makefile | 4 ++++ configure | 2 +- dlm/lib/Makefile | 4 ++++ dlm/tool/Makefile | 2 ++ fence/agents/ipmilan/Makefile | 2 ++ fence/agents/rackswitch/Makefile | 2 ++ fence/agents/rps10/Makefile | 2 ++ fence/agents/xvm/Makefile | 5 +++++ fence/fence_node/Makefile | 2 ++ fence/fence_tool/Makefile | 2 ++ fence/fenced/Makefile | 2 ++ gfs/gfs_debug/Makefile | 2 ++ gfs/gfs_edit/Makefile | 2 ++ gfs/gfs_fsck/Makefile | 3 +-- gfs/gfs_grow/Makefile | 2 ++ gfs/gfs_jadd/Makefile | 2 ++ gfs/gfs_mkfs/Makefile | 2 ++ gfs/gfs_quota/Makefile | 2 ++ gfs/gfs_tool/Makefile | 2 ++ gfs/libgfs/Makefile | 2 ++ gfs/tests/filecon2/Makefile | 4 ++-- gfs/tests/mmdd/Makefile | 8 +++++--- gfs2/convert/Makefile | 2 ++ gfs2/edit/Makefile | 2 ++ gfs2/fsck/Makefile | 1 - gfs2/libgfs2/Makefile | 3 +++ gfs2/mkfs/Makefile | 2 ++ gfs2/mount/Makefile | 4 ++++ gfs2/quota/Makefile | 2 ++ gfs2/tool/Makefile | 2 ++ gnbd/client/Makefile | 4 ++++ gnbd/server/Makefile | 4 ++++ gnbd/tools/fence_gnbd/Makefile | 2 ++ gnbd/tools/gnbd_export/Makefile | 2 ++ gnbd/tools/gnbd_import/Makefile | 2 ++ gnbd/utils/Makefile | 6 ++++-- group/daemon/Makefile | 2 ++ group/dlm_controld/Makefile | 2 ++ group/gfs_controld/Makefile | 2 ++ group/lib/Makefile | 5 ++++- rgmanager/src/clulib/Makefile | 4 ++++ rgmanager/src/daemons/Makefile | 6 ++++++ rgmanager/src/utils/Makefile | 21 ++++++++++++++++----- 53 files changed, 146 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 5bce701..6df816f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ make/defines.mk +*.d +*.o diff --git a/ccs/ccs_test/Makefile b/ccs/ccs_test/Makefile index e9a8f48..81a3298 100644 --- a/ccs/ccs_test/Makefile +++ b/ccs/ccs_test/Makefile @@ -40,3 +40,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/ccs/ccs_tool/Makefile b/ccs/ccs_tool/Makefile index 078a84a..a375a7e 100644 --- a/ccs/ccs_tool/Makefile +++ b/ccs/ccs_tool/Makefile @@ -46,3 +46,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/ccs/ccsais/Makefile b/ccs/ccsais/Makefile index 2084c0b..49b14d3 100644 --- a/ccs/ccsais/Makefile +++ b/ccs/ccsais/Makefile @@ -41,3 +41,5 @@ depends: clean: generalclean rm -f logging.c + +-include $(OBJS:.o=.d) diff --git a/ccs/daemon/Makefile b/ccs/daemon/Makefile index f1bdb35..c4a862d 100644 --- a/ccs/daemon/Makefile +++ b/ccs/daemon/Makefile @@ -46,3 +46,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/ccs/lib/Makefile b/ccs/lib/Makefile index cfcbb2a..63d32f0 100644 --- a/ccs/lib/Makefile +++ b/ccs/lib/Makefile @@ -41,3 +41,5 @@ log.c: clean: generalclean rm -rf ccs.h.gch log.c + +-include $(OBJS:.o=.d) diff --git a/ccs/lib/libccs.c b/ccs/lib/libccs.c index 2b9f179..3c1c451 100644 --- a/ccs/lib/libccs.c +++ b/ccs/lib/libccs.c @@ -24,6 +24,7 @@ #include "log.h" /* Libraries should not print - so only use log_dbg */ #include "debug.h" #include "comm_headers.h" +#include "ccs.h" #include diff --git a/cman/cman_tool/Makefile b/cman/cman_tool/Makefile index 48f8cec..dc6f8cf 100644 --- a/cman/cman_tool/Makefile +++ b/cman/cman_tool/Makefile @@ -39,3 +39,5 @@ depends: $(MAKE) -C ../lib all clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/cman/daemon/Makefile b/cman/daemon/Makefile index ff3be15..f139d71 100644 --- a/cman/daemon/Makefile +++ b/cman/daemon/Makefile @@ -48,3 +48,5 @@ depends: clean: generalclean +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) diff --git a/cman/lib/Makefile b/cman/lib/Makefile index fbc4a28..13c6f6e 100644 --- a/cman/lib/Makefile +++ b/cman/lib/Makefile @@ -33,17 +33,21 @@ include $(OBJDIR)/make/clean.mk include $(OBJDIR)/make/install.mk include $(OBJDIR)/make/uninstall.mk +OBJS= $(TARGET).o + CFLAGS += -fPIC CFLAGS += -I${cmanincdir} -I$(S)/../daemon CFLAGS += -I${incdir} -$(TARGET).a: $(TARGET).o +$(TARGET).a: $(OBJS) ${AR} r $@ $^ ${RANLIB} $@ -$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(TARGET).o +$(TARGET).so.${SOMAJOR}.${SOMINOR}: $(OBJS) $(CC) -shared -o $@ -Wl,-soname=$(TARGET).so.$(SOMAJOR) $< ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so ln -sf $(TARGET).so.$(SOMAJOR).$(SOMINOR) $(TARGET).so.$(SOMAJOR) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/cman/qdisk/Makefile b/cman/qdisk/Makefile index 4d3634d..0751601 100644 --- a/cman/qdisk/Makefile +++ b/cman/qdisk/Makefile @@ -58,3 +58,7 @@ depends: $(MAKE) -C ../lib all clean: generalclean + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(SHAREDOBJS:.o=.d) diff --git a/configure b/configure index 21e9dbc..d2db93e 100755 --- a/configure +++ b/configure @@ -318,7 +318,7 @@ if (!$cc) { $cc="gcc"; } if (!$cflags) { - $cflags="-Wall -Wformat=2"; + $cflags="-Wall -Wformat=2 -MMD"; if (!$debug) { $cflags="${cflags} -O2"; } else { diff --git a/dlm/lib/Makefile b/dlm/lib/Makefile index b223df7..d164ec9 100644 --- a/dlm/lib/Makefile +++ b/dlm/lib/Makefile @@ -78,3 +78,7 @@ $(TARGET)_lt.so.${SOMAJOR}.${SOMINOR}: $(TARGET)_lt.po $(CC) $(CFLAGS) -fPIC -D_REENTRANT -c -o $@ $< clean: generalclean + +-include $(TARGET).d +-include $(TARGET)_lt.d +-include $(AISTARGET).d diff --git a/dlm/tool/Makefile b/dlm/tool/Makefile index 59d4602..7a082dc 100644 --- a/dlm/tool/Makefile +++ b/dlm/tool/Makefile @@ -35,3 +35,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/fence/agents/ipmilan/Makefile b/fence/agents/ipmilan/Makefile index 1320d61..78674e5 100644 --- a/fence/agents/ipmilan/Makefile +++ b/fence/agents/ipmilan/Makefile @@ -33,3 +33,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/fence/agents/rackswitch/Makefile b/fence/agents/rackswitch/Makefile index 6a53d6c..01c2b41 100644 --- a/fence/agents/rackswitch/Makefile +++ b/fence/agents/rackswitch/Makefile @@ -32,3 +32,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/fence/agents/rps10/Makefile b/fence/agents/rps10/Makefile index 26c917e..3057ded 100644 --- a/fence/agents/rps10/Makefile +++ b/fence/agents/rps10/Makefile @@ -34,3 +34,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/fence/agents/xvm/Makefile b/fence/agents/xvm/Makefile index 98777b6..c60f44a 100644 --- a/fence/agents/xvm/Makefile +++ b/fence/agents/xvm/Makefile @@ -68,3 +68,8 @@ ${TARGET3}: ${OBJS3} $(CC) -o $@ $^ $(XML_LDFLAGS) clean: generalclean + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(OBJS3:.o=.d) +-include $(SHAREDOBJS:.o=.d) diff --git a/fence/fence_node/Makefile b/fence/fence_node/Makefile index a73b729..3ac1092 100644 --- a/fence/fence_node/Makefile +++ b/fence/fence_node/Makefile @@ -41,3 +41,5 @@ depends: $(MAKE) -C ../fenced agent.o clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/fence/fence_tool/Makefile b/fence/fence_tool/Makefile index 7d59b4b..0c56ed2 100644 --- a/fence/fence_tool/Makefile +++ b/fence/fence_tool/Makefile @@ -41,3 +41,5 @@ depends: $(MAKE) -C ../fenced agent.o clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/fence/fenced/Makefile b/fence/fenced/Makefile index 66da72e..e9e0f54 100644 --- a/fence/fenced/Makefile +++ b/fence/fenced/Makefile @@ -42,3 +42,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_debug/Makefile b/gfs/gfs_debug/Makefile index dd9e91c..67355ed 100644 --- a/gfs/gfs_debug/Makefile +++ b/gfs/gfs_debug/Makefile @@ -40,3 +40,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_edit/Makefile b/gfs/gfs_edit/Makefile index 180c64e..5b24da7 100644 --- a/gfs/gfs_edit/Makefile +++ b/gfs/gfs_edit/Makefile @@ -38,3 +38,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_fsck/Makefile b/gfs/gfs_fsck/Makefile index 6afec81..3c2e299 100644 --- a/gfs/gfs_fsck/Makefile +++ b/gfs/gfs_fsck/Makefile @@ -56,7 +56,6 @@ OBJS= bio.o \ util.o CFLAGS += -D_FILE_OFFSET_BITS=64 -DHELPER_PROGRAM -CFLAGS += -MMD CFLAGS += -I$(S)/../include CFLAGS += -I${incdir} @@ -79,6 +78,6 @@ clean: generalclean ${TARGET1}.pot: $(OBJS:.o=.c) xgettext -C -F --keyword=print_log --keyword=log_debug --keyword=log_info --keyword=_ \ --keyword=log_notice --keyword=log_warn --keyword=log_err --keyword=log_crit \ - --keyword=log_debug --keyword=log_err --keyword=log_print -d - $(OBJS:.o=.c) > ${TARGET1}.pot + --keyword=log_debug --keyword=log_err --keyword=log_print -d - $(OBJS:.o=.c) > ${TARGET1}.pot -include $(OBJS:.o=.d) diff --git a/gfs/gfs_grow/Makefile b/gfs/gfs_grow/Makefile index 59ac438..d3b59d6 100644 --- a/gfs/gfs_grow/Makefile +++ b/gfs/gfs_grow/Makefile @@ -43,3 +43,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_jadd/Makefile b/gfs/gfs_jadd/Makefile index 2d62842..36dfd9f 100644 --- a/gfs/gfs_jadd/Makefile +++ b/gfs/gfs_jadd/Makefile @@ -43,3 +43,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_mkfs/Makefile b/gfs/gfs_mkfs/Makefile index 51a1cb9..ec9ea8f 100644 --- a/gfs/gfs_mkfs/Makefile +++ b/gfs/gfs_mkfs/Makefile @@ -53,3 +53,5 @@ depends: clean: generalclean .PHONY: all ${TARGET1} + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_quota/Makefile b/gfs/gfs_quota/Makefile index 57dd177..434ddc5 100644 --- a/gfs/gfs_quota/Makefile +++ b/gfs/gfs_quota/Makefile @@ -39,3 +39,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gfs/gfs_tool/Makefile b/gfs/gfs_tool/Makefile index 7feb799..766009a 100644 --- a/gfs/gfs_tool/Makefile +++ b/gfs/gfs_tool/Makefile @@ -43,3 +43,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gfs/libgfs/Makefile b/gfs/libgfs/Makefile index bd69517..4195226 100644 --- a/gfs/libgfs/Makefile +++ b/gfs/libgfs/Makefile @@ -52,3 +52,5 @@ ${TARGET}: ${OBJS} clean: generalclean .PHONY: all + +-include $(OBJS:.o=.d) diff --git a/gfs/tests/filecon2/Makefile b/gfs/tests/filecon2/Makefile index 8627b81..4e365d1 100644 --- a/gfs/tests/filecon2/Makefile +++ b/gfs/tests/filecon2/Makefile @@ -11,14 +11,14 @@ ############################################################################### ############################################################################### +TARGETS= filecon2_server filecon2_client + all: $(TARGETS) include ../../../make/defines.mk include $(OBJDIR)/make/cobj.mk include $(OBJDIR)/make/clean.mk -TARGETS= filecon2_server filecon2_client - CFLAGS += -O3 CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 CFLAGS += -I../../include diff --git a/gfs/tests/mmdd/Makefile b/gfs/tests/mmdd/Makefile index ae1a3e0..da1585c 100644 --- a/gfs/tests/mmdd/Makefile +++ b/gfs/tests/mmdd/Makefile @@ -11,16 +11,15 @@ ############################################################################### ############################################################################### +TARGETS= mmdd sfdd + all: $(TARGETS) include ../../../make/defines.mk include $(OBJDIR)/make/clean.mk -TARGETS= mmdd sfdd - CFLAGS += -D_GNU_SOURCE - mmdd.o: mmdd.c $(CC) $(CFLAGS) -D_FILE_OFFSET_BITS=64 -c -o $@ $< @@ -31,3 +30,6 @@ sfdd.o: mmdd.c $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include mmdd.d +-include sfdd.d diff --git a/gfs2/convert/Makefile b/gfs2/convert/Makefile index 231588a..f82f2a4 100755 --- a/gfs2/convert/Makefile +++ b/gfs2/convert/Makefile @@ -41,3 +41,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/gfs2/edit/Makefile b/gfs2/edit/Makefile index 655b8b4..0b84dd3 100644 --- a/gfs2/edit/Makefile +++ b/gfs2/edit/Makefile @@ -46,3 +46,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/gfs2/fsck/Makefile b/gfs2/fsck/Makefile index 5726a9f..26cb0a1 100644 --- a/gfs2/fsck/Makefile +++ b/gfs2/fsck/Makefile @@ -44,7 +44,6 @@ OBJS= eattr.o \ util.o CFLAGS += -D_FILE_OFFSET_BITS=64 -DHELPER_PROGRAM -CFLAGS += -MMD CFLAGS += -I${KERNEL_SRC}/fs/gfs2/ -I${KERNEL_SRC}/include/ CFLAGS += -I$(S)/../include -I$(S)/../libgfs2 CFLAGS += -I${incdir} diff --git a/gfs2/libgfs2/Makefile b/gfs2/libgfs2/Makefile index fb049a9..d6bbcef 100644 --- a/gfs2/libgfs2/Makefile +++ b/gfs2/libgfs2/Makefile @@ -51,3 +51,6 @@ ${TARGET}: ${OBJS} clean: generalclean .PHONY: all + +-include $(OBJS:.o=.d) + diff --git a/gfs2/mkfs/Makefile b/gfs2/mkfs/Makefile index ffd97e5..8b11478 100644 --- a/gfs2/mkfs/Makefile +++ b/gfs2/mkfs/Makefile @@ -51,3 +51,5 @@ depends: clean: generalclean .PHONY: all ${TARGET1} + +-include $(OBJS:.o=.d) diff --git a/gfs2/mount/Makefile b/gfs2/mount/Makefile index 92c04c5..3b01f04 100644 --- a/gfs2/mount/Makefile +++ b/gfs2/mount/Makefile @@ -48,3 +48,7 @@ uninstall: ${UNINSTALL} ${TARGET1} ${TARGET2} ${DESTDIR}/sbin clean: generalclean + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(SHAREDOBJS:.o=.d) diff --git a/gfs2/quota/Makefile b/gfs2/quota/Makefile index abe0c9d..2075ad9 100644 --- a/gfs2/quota/Makefile +++ b/gfs2/quota/Makefile @@ -44,3 +44,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/gfs2/tool/Makefile b/gfs2/tool/Makefile index effcfa9..a70fac9 100644 --- a/gfs2/tool/Makefile +++ b/gfs2/tool/Makefile @@ -49,3 +49,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/gnbd/client/Makefile b/gnbd/client/Makefile index b78a43e..f4437f7 100644 --- a/gnbd/client/Makefile +++ b/gnbd/client/Makefile @@ -49,3 +49,7 @@ depends: $(MAKE) -C ../utils all clean: generalclean + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(SHAREDOBJS:.o=.d) diff --git a/gnbd/server/Makefile b/gnbd/server/Makefile index fa29cdd..3036e85 100644 --- a/gnbd/server/Makefile +++ b/gnbd/server/Makefile @@ -54,3 +54,7 @@ depends: $(MAKE) -C ../utils all clean: generalclean + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(SHAREDOBJS:.o=.d) diff --git a/gnbd/tools/fence_gnbd/Makefile b/gnbd/tools/fence_gnbd/Makefile index 2976bbc..29367c5 100644 --- a/gnbd/tools/fence_gnbd/Makefile +++ b/gnbd/tools/fence_gnbd/Makefile @@ -33,3 +33,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gnbd/tools/gnbd_export/Makefile b/gnbd/tools/gnbd_export/Makefile index 8fede39..ebd0de0 100644 --- a/gnbd/tools/gnbd_export/Makefile +++ b/gnbd/tools/gnbd_export/Makefile @@ -44,3 +44,5 @@ depends: $(MAKE) -C ../../utils all clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gnbd/tools/gnbd_import/Makefile b/gnbd/tools/gnbd_import/Makefile index fb63596..fbcfa73 100644 --- a/gnbd/tools/gnbd_import/Makefile +++ b/gnbd/tools/gnbd_import/Makefile @@ -43,3 +43,5 @@ depends: $(MAKE) -C ../../client monitor_req.o clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/gnbd/utils/Makefile b/gnbd/utils/Makefile index c72dd83..354d720 100644 --- a/gnbd/utils/Makefile +++ b/gnbd/utils/Makefile @@ -11,11 +11,11 @@ ############################################################################### ############################################################################### -TARGETS=member_cman.o \ +OBJS= member_cman.o \ trans.o \ gnbd_utils.o -all: ${TARGETS} +all: ${OBJS} include ../../make/defines.mk include $(OBJDIR)/make/cobj.mk @@ -27,3 +27,5 @@ CFLAGS += -I${cmanincdir} CFLAGS += -I$(S)/../include clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/group/daemon/Makefile b/group/daemon/Makefile index 33f76af..90f199b 100644 --- a/group/daemon/Makefile +++ b/group/daemon/Makefile @@ -39,3 +39,5 @@ ${TARGET}: ${OBJS} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/group/dlm_controld/Makefile b/group/dlm_controld/Makefile index 5887051..9f26a14 100644 --- a/group/dlm_controld/Makefile +++ b/group/dlm_controld/Makefile @@ -47,3 +47,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/group/gfs_controld/Makefile b/group/gfs_controld/Makefile index 40db5a5..2b05312 100644 --- a/group/gfs_controld/Makefile +++ b/group/gfs_controld/Makefile @@ -49,3 +49,5 @@ depends: clean: generalclean .PHONY: all ${TARGET} + +-include $(OBJS:.o=.d) diff --git a/group/lib/Makefile b/group/lib/Makefile index 051164c..25ae3c8 100644 --- a/group/lib/Makefile +++ b/group/lib/Makefile @@ -24,9 +24,12 @@ CFLAGS += -fPIC CFLAGS += -I$(S) -I$(S)/../daemon CFLAGS += -I${incdir} +OBJS= $(TARGET).o -$(TARGET).a: $(TARGET).o +$(TARGET).a: $(OBJS) ${AR} r $@ $^ ${RANLIB} $@ clean: generalclean + +-include $(OBJS:.o=.d) diff --git a/rgmanager/src/clulib/Makefile b/rgmanager/src/clulib/Makefile index 7c005dd..c13edd8 100644 --- a/rgmanager/src/clulib/Makefile +++ b/rgmanager/src/clulib/Makefile @@ -53,3 +53,7 @@ ${TARGET3}: ${OBJS3} ${TARGET1} $(CC) -o $@ $^ $(LDFLAGS) clean: generalclean + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(OBJS3:.o=.d) diff --git a/rgmanager/src/daemons/Makefile b/rgmanager/src/daemons/Makefile index 62904f9..e9297b1 100644 --- a/rgmanager/src/daemons/Makefile +++ b/rgmanager/src/daemons/Makefile @@ -123,3 +123,9 @@ clean: generalclean rm -f tests/*.out* .PHONY: all ${TARGET1} ${TARGET2} ${TARGET3} ${TARGET4} + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(OBJS3:.o=.d) +-include $(OBJS4:.o=.d) +-include $(SHAREDOBJS:.o=.d) diff --git a/rgmanager/src/utils/Makefile b/rgmanager/src/utils/Makefile index e13f8dc..61e22bc 100644 --- a/rgmanager/src/utils/Makefile +++ b/rgmanager/src/utils/Makefile @@ -42,21 +42,26 @@ CMAN_LDFLAGS += -L${cmanlibdir} -lcman NCURSES_LDFLAGS += -L${ncurseslibdir} -lncurses PTHREAD_LDFLAGS += -lpthread +OBJS1= $(TARGET1).o +OBJS2= $(TARGET2).o +OBJS3= $(TARGET3).o +OBJS4= $(TARGET4).o +OBJS5= $(TARGET5).o -${TARGET1}: ${TARGET1:=.o} +${TARGET1}: ${OBJS1} $(CC) -o $@ $^ $(LDFLAGS) -${TARGET2}: ${TARGET2:=.o} +${TARGET2}: ${OBJS2} $(CC) -o $@ $^ $(LDFLAGS) -${TARGET3}: ${TARGET3:=.o} +${TARGET3}: ${OBJS3} $(CC) -o $@ $^ $(LDFLAGS) $(CCS_LDFLAGS) $(CMAN_LDFLAGS) \ $(NCURSES_LDFLAGS) $(PTHREAD_LDFLAGS) -${TARGET4}: ${TARGET4:=.o} +${TARGET4}: ${OBJS4} $(CC) -o $@ $^ $(LDFLAGS) $(CMAN_LDFLAGS) $(PTHREAD_LDFLAGS) -${TARGET5}: ${TARGET5:=.o} +${TARGET5}: ${OBJS5} $(CC) -o $@ $^ $(LDFLAGS) $(CCS_LDFLAGS) ${TARGET6}: @@ -69,3 +74,9 @@ depends: clean: generalclean .PHONY: all ${TARGET1} ${TARGET2} ${TARGET3} ${TARGET4} ${TARGET5} ${TARGET6} + +-include $(OBJS1:.o=.d) +-include $(OBJS2:.o=.d) +-include $(OBJS3:.o=.d) +-include $(OBJS4:.o=.d) +-include $(OBJS5:.o=.d) hooks/post-receive -- Cluster Project From lhh@sourceware.org Mon Mar 24 15:54:00 2008 From: lhh@sourceware.org (lhh@sourceware.org) Date: Mon, 24 Mar 2008 15:54:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-96-g1c340e0 Message-ID: <20080324155436.5615.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1c340e0e7e1a6c0b7402db2ee22e240e25d28728 The branch, master has been updated via 1c340e0e7e1a6c0b7402db2ee22e240e25d28728 (commit) from b83c377a297a79e45cb7a268bdad2680f81ef4df (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1c340e0e7e1a6c0b7402db2ee22e240e25d28728 Author: Lon Hohberger Date: Mon Mar 24 11:41:00 2008 -0400 [cman/qdisk] Fix type pun errors in proc.c ----------------------------------------------------------------------- Summary of changes: cman/qdisk/proc.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cman/qdisk/proc.c b/cman/qdisk/proc.c index f27faa2..5623e7e 100644 --- a/cman/qdisk/proc.c +++ b/cman/qdisk/proc.c @@ -146,11 +146,13 @@ state_str(disk_node_state_t s) void print_status_block(status_block_t *sb) { + time_t timestamp = (time_t)sb->ps_timestamp; + if (sb->ps_state == S_NONE) return; printf("Status block for node %d\n", sb->ps_nodeid); printf("\tLast updated by node %d\n", sb->ps_updatenode); - printf("\tLast updated on %s", ctime((time_t *)&sb->ps_timestamp)); + printf("\tLast updated on %s", ctime((time_t *)×tamp)); printf("\tState: %s\n", state_str(sb->ps_state)); printf("\tFlags: %04x\n", sb->ps_flags); printf("\tScore: %d/%d\n", sb->ps_score, sb->ps_scoremax); @@ -200,13 +202,13 @@ print_qdisk_info(struct devnode *dn) { quorum_header_t *qh = (quorum_header_t *)dn->filter; struct devpath *dp; + time_t timestamp = (time_t)qh->qh_timestamp; for (dp = dn->devpath; dp; dp = dp->next) printf("%s:\n", dp->path); printf("\tMagic: %08x\n", qh->qh_magic); printf("\tLabel: %s\n", qh->qh_cluster); - printf("\tCreated: %s", - ctime((time_t *)&(qh->qh_timestamp))); + printf("\tCreated: %s", ctime(×tamp)); printf("\tHost: %s\n", qh->qh_updatehost); printf("\tKernel Sector Size: %d\n", qh->qh_kernsz); if (qh->qh_version == VERSION_MAGIC_V2) { hooks/post-receive -- Cluster Project From rpeterso@sourceware.org Mon Mar 24 18:13:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Mon, 24 Mar 2008 18:13:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-27-g8f3ec43 Message-ID: <20080324181306.330.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=8f3ec431efff4ce45f8765075e7c65f53d208905 The branch, STABLE2 has been updated via 8f3ec431efff4ce45f8765075e7c65f53d208905 (commit) from b2be4d60359ff6fc01a2ccf9a98850063b8e1da3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8f3ec431efff4ce45f8765075e7c65f53d208905 Author: Bob Peterson Date: Mon Mar 24 09:51:36 2008 -0500 Update to prior commit for bz431945: I forgot that STABLE2 does not have a diaper device. ----------------------------------------------------------------------- Summary of changes: gfs-kernel/src/gfs/proc.c | 12 ++++-------- 1 files changed, 4 insertions(+), 8 deletions(-) diff --git a/gfs-kernel/src/gfs/proc.c b/gfs-kernel/src/gfs/proc.c index b58181c..1c38b0d 100644 --- a/gfs-kernel/src/gfs/proc.c +++ b/gfs-kernel/src/gfs/proc.c @@ -27,7 +27,6 @@ #include "lm.h" #include "proc.h" #include "super.h" -#include "diaper.h" struct list_head gfs_fs_list; struct semaphore gfs_fs_lock; @@ -81,16 +80,14 @@ do_list(char *user_buf, size_t size) char device_id[32]; char *buf; int error = 0; - struct block_device *bdevice; down(&gfs_fs_lock); x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); - bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); - sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), - MINOR(bdevice->bd_dev)); + sprintf(device_id, "%u:%u", MAJOR(sdp->sd_vfs->s_dev), + MINOR(sdp->sd_vfs->s_dev)); x += sprintf(num, "%lu", (unsigned long)sdp) + strlen(device_id) + strlen(sdp->sd_fsname) + 3; @@ -111,9 +108,8 @@ do_list(char *user_buf, size_t size) x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); - bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); - sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), - MINOR(bdevice->bd_dev)); + sprintf(device_id, "%u:%u", MAJOR(sdp->sd_vfs->s_dev), + MINOR(sdp->sd_vfs->s_dev)); x += sprintf(buf + x, "%lu %s %s\n", (unsigned long)sdp, device_id, sdp->sd_fsname); } hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Mon Mar 24 18:13:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 24 Mar 2008 18:13:00 -0000 Subject: conga ./clustermon.spec.in.in ricci/modules/cl ... Message-ID: <20080324181358.890.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-24 18:13:58 Modified files: . : clustermon.spec.in.in ricci/modules/cluster: Makefile Virt.cpp Log message: Jump through the requisite hoops to make this compile properly on arches that don't provide libvirt Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.33&r2=1.18.2.34 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.14.2.5&r2=1.14.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.4&r2=1.1.2.5 From cfeist@sourceware.org Mon Mar 24 21:11:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Mon, 24 Mar 2008 21:11:00 -0000 Subject: Cluster Project branch, RHEL52, created. cmirror_1_1_15-15-gc1f442a Message-ID: <20080324211059.28198.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c1f442a049bc5f7369ff5c88a834dab2e9b09251 The branch, RHEL52 has been created at c1f442a049bc5f7369ff5c88a834dab2e9b09251 (commit) - Log ----------------------------------------------------------------- commit c1f442a049bc5f7369ff5c88a834dab2e9b09251 Author: Lon Hohberger Date: Thu Mar 20 17:25:02 2008 -0400 [cman] Apply missing fix for #315711 commit 1bb513e542a4ca7f3e79f5000b0bb0783a41b0b5 Author: David Teigland Date: Fri Mar 14 10:36:54 2008 -0500 libdlm: fix lvb copying bz 437496 When a program does a lock operation that reads an lvb, libdlm copies the lvb data from a bogus location instead of from the proper offset in the buffer it just read. The location of the lvb data is calculated wrongly due to a missing cast. Signed-off-by: David Teigland commit 1acab71f585b845992e6070d6616644690f4e444 Author: Lon Hohberger Date: Wed Mar 19 15:15:11 2008 -0400 [rgmanager] Update changelog for rhel5 branch commit 4cbc5a146009d8fe648c1817641ad04633478c37 Author: Lon Hohberger Date: Wed Mar 19 15:14:19 2008 -0400 [rgmanager] Fix #432998 Fix a bug causing incorrect return codes during service stop operations commit 8db6a0907ab1c443e9f3c2799ef98a1c069ec41d Merge: e651985b0fc5741396f65845df2d17be05328034 14e702986f37607300cafdf68886daf15c10be38 Author: Lon Hohberger Date: Wed Mar 19 13:55:21 2008 -0400 Merge branch 'RHEL5' of ssh://sources.redhat.com/git/cluster into rhel5 commit 14e702986f37607300cafdf68886daf15c10be38 Author: Bob Peterson Date: Wed Mar 12 10:36:23 2008 -0500 Resolves: bz 435917: GFS2: mkfs.gfs2 default lock protocol differs from man page commit e651985b0fc5741396f65845df2d17be05328034 Merge: f667470748a1968963e0c17f325aadfcbb5c7415 b70ad6fe5a5795a699ad208ab009a4c952e9078f Author: Lon Hohberger Date: Tue Mar 11 14:53:04 2008 -0400 Merge branch 'RHEL5' of ssh://sources.redhat.com/git/cluster into rhel5 commit b70ad6fe5a5795a699ad208ab009a4c952e9078f Author: David Teigland Date: Tue Mar 11 12:18:23 2008 -0500 groupd: purge messages from dead nodes bz 436984 In the fix for bug 258121, 70294dd8b717de89f2d168c0837c011648908558, we began taking nodedown events via the groupd cpg, instead of via the per group cpg. Messages still come in via the per group cpg. I believe that that opened the possibility of processing a message from a node after processing the nodedown for it. In Nate's revolver test, we saw it happen; revolver killed nodes 1,2,3, leaving just node 4: 1205198713 0:default confchg left 3 joined 0 total 1 1205198713 0:default confchg removed node 1 reason 3 1205198713 0:default confchg removed node 2 reason 3 1205198713 0:default confchg removed node 3 reason 3 ... 1205198713 0:default mark_node_started: event not starting 12 from 2 commit f667470748a1968963e0c17f325aadfcbb5c7415 Author: Lon Hohberger Date: Tue Mar 4 17:24:15 2008 -0500 [fence] Make fence_xvmd support reloading of key files on the fly. commit d5e690aa185be4fcaa411f82016c59921a729e5e Author: Lon Hohberger Date: Tue Mar 4 17:31:32 2008 -0500 [CMAN] make qdisk master abdication work in all cases Red Hat bugzilla 430264 commit a02dfd2bcbe018c550ea04895ba4335da8dff4b0 Author: Lon Hohberger Date: Tue Mar 4 11:49:28 2008 -0500 Update changelog commit df967d230a1e7fc023a40bcd30ebea9ac7943e83 Author: Lon Hohberger Date: Tue Mar 4 11:31:33 2008 -0500 Fix permissions commit 6b59b6b4ef29c5b529a16cc09f8a1e4132d0e8d3 Author: Lon Hohberger Date: Tue Mar 4 11:29:42 2008 -0500 Update changelog commit d87228b0155d79a4708b61444e4d6a19256bd098 Author: Lon Hohberger Date: Tue Mar 4 11:29:03 2008 -0500 Add Sybase failover agent commit b5135c44bda382d274e6013ef9cdb6cef969d9bb Author: Lon Hohberger Date: Fri Feb 29 14:15:39 2008 -0500 Fix #435189 - fenced override doesn't allow rgmanager to recover because it doesn't tell cman that fencing was completed. commit 15d12f28f64661dbb6f4f80eae822f2b56e7a5d4 Author: Jonathan Brassow Date: Wed Feb 27 16:29:27 2008 -0600 clogd: bug fixes related to joining/leaving CPGs - Was purging all entries in the cluster queue when one log was leaving... this could mean removing requests associated with other logs - Writing of checkpoint data could be done at the wrong time if the node was still initializing and receiving messages - Could skip a response if the server changed while queueing requests during initialization - spell receive correctly commit 89961b360cee9d425bbb11f17396539c04db25d3 Author: Jonathan Brassow Date: Wed Feb 27 16:23:49 2008 -0600 dm-log-clustered: minor touch-ups - Fix spelling of 'reciev*' - struct vs dereff'ed ptr as sizeof arg commit 44e386b49148a7ab59a0bcc89fa9dab4c9585b37 Author: Ryan McCabe Date: Tue Feb 26 17:32:55 2008 -0500 Fix bz434790 commit 24f615062dc06758ed8598b198b47a3c84857f46 Author: Lon Hohberger Date: Mon Feb 25 16:57:30 2008 -0500 Correct incorrect netmask handling in ip.sh commit 33f356a5e34b00ff0d374bf7046163e9493e06f6 Author: David Teigland Date: Mon Feb 25 09:12:24 2008 -0600 groupd: fix copyright comments commit 61f1219b8350282a41ab4b07ed8c6855e1561d54 Author: David Teigland Date: Fri Feb 22 08:58:29 2008 -0600 groupd: update copyrights Some files were missing copyright headers altogether. commit f390ad642d741e28ae9f04a4db160d7f674bf132 Author: Jonathan Brassow Date: Thu Feb 21 14:45:49 2008 +0000 - couple fixes for checking error codes from openais commit 172f68f3b807636434071c6855e4d4157bcbc96b Author: Jonathan Brassow Date: Wed Feb 13 15:06:23 2008 +0000 - change the way 'is_remote_recovering' works to improve overall performance. Before a mirror issues a write, it must call 'is_remote_recovering' to ensure that another machine will not be recovering the region during the write. This function can dramatically slow things down. One way to increase performance is to note when the mirror is in-sync - then is_remote_recovering can return 0 without having to send the request around the cluster. (This has already been done.) This greatly speeds up I/O during nominal mirror operation. However, I/O during mirror resyncing is still greatly reduced. The problem is that the cluster network is consumed with handling 'is_remote_recovering' calls that it becomes hard to actually do the recovery. The fix is to only allow one is_remote_recovering call to go to the cluster every 1/4 sec. When the call goes up to userspace, it also retrieves info about how far along the resync is. If a request is determined to already be in sync by that info, then the region is not recovering and can safely be answered without having to send the request on to the cluster. This approach has greatly improved both the recovery and nominal throughput. commit 6318cbedf61c79a4721df8ccd0fc13707f4c3b75 Author: Jonathan Brassow Date: Fri Feb 8 14:30:10 2008 +0000 - stop delaying disk log writes - stop placing requests into the startup queue before initial config - added recovering_region to checkpoint data to prevent duplicate region syncing assignment. commit 87e24408eb4ea980d1c5e4da7d49ebfa4447bb8b Author: Jonathan Brassow Date: Fri Feb 8 14:21:04 2008 +0000 - table an event so userspace can respond when a log device failure occurs - other clean-ups commit 15efb1fc98dd7d879967f692fa98ef6a890eea85 Author: Jonathan Brassow Date: Wed Feb 6 23:03:05 2008 +0000 - change verbosity of various messages - fix bug where similtaneous mirror creations could result in checkpoint collisions commit 7edf6457a5e1ae9217a04f82dd816478288b1cbc Author: Jonathan Brassow Date: Tue Feb 5 23:25:51 2008 +0000 - missed an initialization commit d85af3f7a03ecbb3ddcd89aa1f3daf193f92ab93 Author: Jonathan Brassow Date: Tue Feb 5 22:12:54 2008 +0000 - allocate additional transfer struct when necessary - fix ordering of clustered_disk table output - respond to get_sync_count requests when suspended (as required by mirror) commit b82167f76559fa12079fe8a300034f84afbe1c00 Author: Robert Peterson Date: Tue Feb 5 21:12:52 2008 +0000 Resolves: 430154: gfs_tool doesn't recognize GFS file system Forgot to take the & off the ioctl for get_file_meta_quota. commit 64457f506fa251f9a5ff3e7bdf9d66024c06eafa Author: Jonathan Brassow Date: Mon Feb 4 18:27:20 2008 +0000 - change priority of some log statements - fix potential OOB memory op by macro - add reference counting to log... fixes some issues with mirror conversion - plug a memory leak... likely related to bug 383291 commit ce5cfe6f80670838e3df0cad170586847304fdf2 Author: Lon Hohberger Date: Fri Feb 1 17:21:23 2008 +0000 #400211 - make sure we release the lock commit 251ba5da35945b5f6ffefcdb13db2056e259a9b0 Author: Lon Hohberger Date: Fri Feb 1 15:31:05 2008 +0000 Fix double-stop commit 2226054b78e77f4f95e7b0ee0e5d6eff249d61ba Author: Lon Hohberger Date: Fri Feb 1 15:28:52 2008 +0000 Fix erroneous commit to groups.c commit a197368a46383a5f8bc5fd3e088abc412844d19d Author: Lon Hohberger Date: Fri Feb 1 15:17:51 2008 +0000 Allow restart counters to work with central_processing; #400211 / #431130 commit 4e06656e7739aaed138e1163dbc6334ff9f567ed Author: Lon Hohberger Date: Wed Jan 30 20:00:26 2008 +0000 Fix short read handling in read_pipe commit ef0e23c28bd25c7d802ed969f45da72d231f6b81 Author: Lon Hohberger Date: Fri Jan 25 18:09:24 2008 +0000 Fix 430272 commit eed1a6f837d8635e3f4260db8a69a5f9ae9ed65b Author: Jonathan Brassow Date: Fri Jan 25 16:24:47 2008 +0000 - reduce the number of cluster requests. - debugging code that counts requests will be removed later commit 52a189663f30884eb236f7d9dfc6a1720582cbfa Author: Jonathan Brassow Date: Fri Jan 25 16:23:24 2008 +0000 - calling dm_get_device fixes rename bug 205641 - caching extra state in the kernel helps reduce cluster traffic 90%, this improves performance commit 9c7d6e0b99a50751ebda8aff26a4dedc609a2e31 Author: Lon Hohberger Date: Fri Jan 25 16:03:38 2008 +0000 Fix 430220 - -e -m not working commit 4865eb6b7e007d80fdb0630763b46e33019efc3e Author: Chris Feist Date: Thu Jan 24 22:20:23 2008 +0000 Added back in change to description line to make chkconfig work properly. commit 397267a16c1b893e36ce71301da19fc79bd325bd Author: Robert Peterson Date: Thu Jan 24 20:51:46 2008 +0000 Resolves: bz 429633: gfs_tool doesn't recognize GFS file sytem commit cb3a96a832152dcfd86a4adc914885fe79449c5d Author: Benjamin Marzinski Date: Thu Jan 24 20:25:10 2008 +0000 Fix for bz #426291. gfs_glock_dq was traversing the gl_holders list without holding the gl_spin spinlock, this was causing a problem when the list item it was currently looking at got removed from the list. The solution is to not traverse the list, because it is unncessary. Unfortunately, there is also a bug in this section of code, where you can't guarantee that you will not cache a glock held with GL_NOCACHE. Fixing this issue requires significantly more work. commit 57509b47f0d8de7246cdfc7819749fb9ab66a3fa Author: Abhijith Das Date: Thu Jan 24 18:30:17 2008 +0000 fix for bug 430134 - Added functionality to GFS_IOCTL_SUPER to provide metadata of the hidden quota file. This allows the userland tool gfs_quota to perform efficient list operations (bz 430133). commit c03e8ecb351ce83242ba9167ae8332583369d96d Author: Abhijith Das Date: Thu Jan 24 18:29:13 2008 +0000 fix for bug 430133 - We don't run through the entire gfs_quota sparse file to do a list operation anymore. We get the layout of the gfs_quota file on disk and only read quota information off the data blocks that are actually in use. This is the userland (gfs_quota) part of the fix. There is another accompanying gfs-kernel fix (bz 430134) commit 3a560b8df6945ff64485e5de701fb2302f705b3a Author: Lon Hohberger Date: Thu Jan 24 17:00:50 2008 +0000 Unblock signals after fork() so heuristics using signals don't hang commit 0069cfa8d48d29d2fa2ce8e0537acbb54f7cc88f Author: Lon Hohberger Date: Thu Jan 24 00:19:57 2008 +0000 Fix broken device size checking. commit 1c61659150bea193afcd9d58a3ec5a03fe3f2213 Author: Jonathan Brassow Date: Wed Jan 23 21:22:28 2008 +0000 - remember CTR string so if userspace server dies and restarts, we can pick up where we left off. commit 39333e5986bd27400118acaa2375496f1f18b67c Author: Jonathan Brassow Date: Wed Jan 23 21:21:06 2008 +0000 - better cleanup on exit - pull rbtrees in favor of simple list until later commit ba80c59abbbf44f2b961c219899d1c386b590211 Author: Jonathan Brassow Date: Mon Jan 21 20:37:03 2008 +0000 - name change s/clustered_/clustered-/ commit cebd8674e4d5a6db3ac098a5a6441e09919a15e9 Author: Jonathan Brassow Date: Mon Jan 21 20:18:44 2008 +0000 s/LOG_PRINT/LOG_DBG/ too verbose on exit/signals commit bb7bca9ef096650c33fd43c9790bbb008c646261 Author: David Teigland Date: Mon Jan 21 20:17:44 2008 +0000 bz 429546 Fix an alignment problem with ppc64. Things work if we do the byte-swapping on the original structure and then copy it into the final buffer, instead of copying first and then trying to do the byte-swapping at an offset within the send buffer. commit 340dc30da2c1e9031656fd6f23dd8c27f16070c5 Author: Ryan O'Hara Date: Fri Jan 18 23:02:58 2008 +0000 BZ: 373491, 373511, 373531, 373541, 373571, 429033 BZ: 373491, 373511, 373531, 373541, 373571, 429033 - Prevent "reservation conflict" messageswhen scsi_reserve starts. - Leave the fence domain if scsi_reserve fails to register with any device. - Improve logging in scsi_reserve script. - Use "locking_type = 0" for all lvm commands (ie. vgs). - Fix SCSI reservations scripts to handle LVM mirrors and stripes. - Not an error if fence_scsi attempts to remove a non-existent key from a device. commit 013d2758a15930e2c354f87ecfb159259dd20117 Author: Jonathan Brassow Date: Fri Jan 18 21:00:15 2008 +0000 - fix seg fault if there are pending checkpoint requests when a mirror is shutdown. commit 93d2efb28f0a162f062cd5ce4448d7472e9679a6 Author: Jonathan Brassow Date: Fri Jan 18 20:32:09 2008 +0000 - use ${libdir} instead of hardcoded value. commit 308d0faa06ebff0c2b1e125d661965435d7b714f Author: Abhijith Das Date: Fri Jan 18 17:51:41 2008 +0000 fix for bz333961 - adds support for -n and -f mount options commit dbf6471257181141a7d8c7ee9c620b23bc526d1c Author: Jonathan Brassow Date: Fri Jan 18 17:11:07 2008 +0000 - fix compile problems on x86_64 commit 66d9f029a16a42ba318e280627d511f9b7b0fb16 Author: Abhijith Das Date: Fri Jan 18 16:47:14 2008 +0000 lon's patch removes 'Domain-0' check which was breaking xvm because cman starts before xend. patch also allows you to put NODENAME in /etc/sysconfig/cluster commit 13486ef66fec7a4db9315a8ef3c1ab5f7e197796 Author: Lon Hohberger Date: Thu Jan 17 19:38:34 2008 +0000 Add Oracle(R) Database 10g Release 2 resource agent; resolves #349571 commit 83e49e2004c46cf514cfc96e82d5ce04b4d69c32 Author: Patrick Caulfield Date: Thu Jan 17 09:40:11 2008 +0000 Zero namelen when doing an unlock. On 32/64 bit systems it can make a horrible mess otherwise. bz#409221 has the gory details commit b3a9f0bc802476ca6f37de7f0a3ec8a61d4e6bf6 Author: Lon Hohberger Date: Wed Jan 16 19:10:29 2008 +0000 Fix #60 error in #428346 bug commit a486f39608e5f1c5f08d6e98b846d24e8b4cc734 Author: Lon Hohberger Date: Tue Jan 15 22:44:31 2008 +0000 Fix #428346 commit 0a9f56b616e71787b1796bc0ef07ada2e4b159b4 Author: Lon Hohberger Date: Tue Jan 15 22:34:14 2008 +0000 Fix #428346 commit 61a4bde655a4b178b8efeb2a21194d0d0de2c6b6 Author: Jonathan Brassow Date: Tue Jan 15 22:01:18 2008 +0000 - a 'return' instead of a 'goto' was skipping over some key initialization, causing core logged cluster mirrors not to work Bug #385001 commit 853d4bd14516424c056f1a010b0e4a0ae77aef99 Author: Jonathan Brassow Date: Mon Jan 14 22:52:17 2008 +0000 - Several small bug fixes -- More correct method of leaving CPG (on suspend) -- close log file desc after finished using -- fix problem with overlapping recoveries -- clean-up postsuspend so remote requests do not get lost -- missing 'break' statement causing seg fault -- better error checking commit d24e2b841f3c51a02d84d26d22418d97ed867d77 Author: Jonathan Brassow Date: Mon Jan 14 22:46:58 2008 +0000 - clear memory before it is written to. (was causing mirror CTR to fail). commit d282b8ec601bb63a5305bf321b42af3cdbf177d5 Author: David Teigland Date: Mon Jan 14 20:54:29 2008 +0000 fix %llx printf warnings using (unsigned long long) bz 404451 commit baa8c5397377a16612a837c2734b2053cf0bcf24 Author: Jonathan Brassow Date: Fri Jan 11 21:32:55 2008 +0000 - Bug #428448 - HA LVM service fails to relocate when I/O is running Was failing to add new tag when relocating. commit 0b5b98a834cd47d58b937888be700a5e94decf2d Author: Robert Peterson Date: Wed Jan 9 21:30:49 2008 +0000 Resolves: bz 426670: GFS2: man page for gfs2_tool has commented lockdump section commit 2d384093dd21ccb2e5dfb397a42b892f06a7391d Author: Lon Hohberger Date: Tue Jan 8 15:03:01 2008 +0000 Fix build problem reported by Chris Feist commit 2b1871bb4daecc89c8f80f2460a1281888848266 Author: Chris Feist Date: Mon Jan 7 20:10:24 2008 +0000 Include dlm lib directory so we can use the libdlm library. commit 6974b8e41be5bf68af690c24805ba2f5b6ad0c46 Author: Chris Feist Date: Mon Jan 7 19:17:07 2008 +0000 Include dlm directory so we can use libdlm.h commit 3d0ab971d0ac02a1df37fb9e8a3ab430cbbf7996 Author: Jonathan Brassow Date: Fri Jan 4 20:02:50 2008 +0000 - a regression... When tagging at the LV-level, the script should complain if there is more than one LV / VG. commit 7eeec9103485e5b3d646eaae9443ab79fb06be47 Author: Jonathan Brassow Date: Thu Jan 3 20:45:37 2008 +0000 Bug 427378 HA LVM now allows multiple LVs/VG as long as they move together Package builder, note the extra files. commit dfa7b286c2a7bded1cc203f7beb86ba8c11b89d8 Author: Patrick Caulfield Date: Thu Jan 3 16:36:51 2008 +0000 Get rid of redundant totemip_parse() call. This was in a bad place and could cause aisexec stalls and disallowed nodes, particularly at startup. commit be4b9f09b845159f9bb337710afe460fe505bbbc Author: Wendy Cheng Date: Wed Jan 2 18:45:07 2008 +0000 Bugzilla 227892: * Warn people about the RG corruption and request a gfs_fsck * Upon error detection, perform a minimum error data collection commit eaa785472beb780ffc072649047f48fdef6b296e Author: Wendy Cheng Date: Wed Jan 2 15:07:06 2008 +0000 Dmitry Monakhov from OpenVZ linux kernel team reports about wrong locking order in gfs_get_parent(). Patch submitted by Vasily Averin (vvs@sw.ru) under Red Hat bugzilla 400651 commit 471ee4e878a48e34ea1f27862d3cdd27bce2aa8e Author: Patrick Caulfield Date: Wed Jan 2 11:05:33 2008 +0000 Don't know why I bothered coming in to work today commit 930f372ef5e56ae8aa6248f5f667f2cbb2c90c56 Author: Patrick Caulfield Date: Wed Jan 2 11:03:23 2008 +0000 Oops, I didn't mean to commit that last private change commit ef6a518977898bfc4cbb584138660ab049da65e4 Author: Patrick Caulfield Date: Wed Jan 2 10:56:21 2008 +0000 Errorstring fixes from Fabio. commit 296943a2491e79ab5134b9e4716d0f1e4bf8e032 Author: Patrick Caulfield Date: Wed Jan 2 10:02:44 2008 +0000 totempg_ifaces_get() always copies INTERFACE_MAX addresses so make sure we allocate enough space for them all. commit 591a822cb8857be405a9e2dafe6d0613c29aac64 Author: David Teigland Date: Fri Dec 21 18:52:14 2007 +0000 Makefile was missing a couple of the newer man pages commit 6f2b2078977764ab895f8e416f310c08f88314eb Author: Lon Hohberger Date: Wed Dec 19 21:34:02 2007 +0000 Allow soft dependencies when central_processing is enabled commit 6de2ee1e463c4d5c7ab6d2a6751c71863d57b0c9 Author: Lon Hohberger Date: Wed Dec 19 21:33:25 2007 +0000 Allow soft dependencies when central_processing is enabled commit a4d8a28d188cc94fe94154d9c92a62eaf7d562c6 Author: Lon Hohberger Date: Wed Dec 19 21:04:41 2007 +0000 Fix #254111 - when stopping a service using a shared GFS resource, it umounts it even if other services are using it. commit 7acb95cf0b34dcdd74061458ff1bc82b11ea7533 Author: Lon Hohberger Date: Wed Dec 19 20:53:35 2007 +0000 fix typo in clusterfs.sh commit cafb4467773a4340ffe53708c29c1666cb3b7ee4 Author: Lon Hohberger Date: Tue Dec 18 18:24:44 2007 +0000 Add undocumented shuffle function to event-script.txt commit 2009f621668e47e345d1c6acd00e4e4447f7fd57 Author: Lon Hohberger Date: Tue Dec 18 17:54:50 2007 +0000 Fix build commit 919569d266e80c87e09868bacc22a7233c22e033 Author: Lon Hohberger Date: Tue Dec 18 17:52:56 2007 +0000 Merge RIND 0.8.1 + bugfixes from HEAD to RHEL5 branch commit 915e0643ec42d8ef74b33bfba5516414d6655a43 Author: Lon Hohberger Date: Mon Dec 17 20:04:04 2007 +0000 Fix #418541 commit ee59a2957b2ea4754466550c9210d3b7298669ef Author: Ryan O'Hara Date: Tue Dec 11 20:57:24 2007 +0000 BZ 418741 Fix issue with endian conversion that caused problems for mixed architecture nodes on same subnet. Need to correct swap byte ordering of comm_header_t structure before copying into buffer and when dereferencing. commit a398795e395085c69d35fbdefca2e71274982127 Author: Lon Hohberger Date: Mon Dec 10 18:24:12 2007 +0000 Fix type-pun warnings in clustat.c on i386 commit e8b4baf014dda9838157efa37ef3fdf88f09991c Author: Jonathan Brassow Date: Fri Dec 7 17:07:36 2007 +0000 - Bug 384811: RHEL5 cmirror tracker: unable to unload the cmirror kernel module using the init script daemon was not exiting... init script interpretted this as a problem and didn't attempt to rm the module. commit f2b2b92b9a3898b283dafbc2fcb62877feb944bc Author: David Teigland Date: Fri Dec 7 17:05:09 2007 +0000 bz 359271 new plock ownership related stuff commit 58d53dd08b7a10f0021e19bbf146604f3f9df9d4 Author: Jonathan Brassow Date: Thu Dec 6 22:12:21 2007 +0000 - Bug 384901: RHEL5 cmirror tracker: unable to create a --nosync mirror - fix argument counting. commit 3356149cf550a381237fde47367ae10f80cac6c6 Author: Lon Hohberger Date: Thu Dec 6 17:52:32 2007 +0000 Fix format warnings on newer GCC commit 4668e6303cd82e09627dcbb87115447999f6d5db Author: David Teigland Date: Wed Dec 5 22:11:32 2007 +0000 bz 359271 A performance optimization for plocks. This speeds up locks that are repeatedly accessed by processes on a single node. Plocks used by processes on multiple nodes work the same way as before. The optimization is disabled by default, and can be enabled by setting in cluster.conf, or by starting gfs_controld with "-o1". It is disabled by default because enabling it breaks compatibility with previous versions of gfs_controld. If all nodes in the cluster are running this version, then plock_ownership can be enabled. The plock_ownership mode needs extensive testing. This also introduces some minor changes when plock_ownership is disabled, so new testing is also required in that mode. Abhi and I worked on this together. commit 238f143e08b42e9603df02296ea8753ec813d677 Author: Lon Hohberger Date: Wed Dec 5 17:42:11 2007 +0000 Preliminary GFS2 support in clusterfs.sh commit 9f11473652a877e504fe0e28c0bb9f7dd90c1f0b Author: Lon Hohberger Date: Tue Dec 4 21:59:54 2007 +0000 Port force-unmount from RHEL4 branch commit 3cd2dc7d39b34e20a66ef6de04cd65a06afd8923 Author: Lon Hohberger Date: Tue Dec 4 21:09:17 2007 +0000 Changes per fabbione's comments commit 6f002b76ef73ab39e51971a3e3ee0722fcf67cd1 Author: Lon Hohberger Date: Tue Dec 4 20:26:51 2007 +0000 Remove extraneous hunk commit de90b94b1ebdb7a1cadbd2fa18e87897ceaca8ec Author: Lon Hohberger Date: Tue Dec 4 20:24:43 2007 +0000 Make qdiskd work with sector sizes other than 512 bytes. Import patch from Fabio M. Di Nitto to make qdiskd use (node_count - 1) for votes if there's none specified in cluster.conf commit 15f78f3599fa9508555e67b26760e5441c788991 Author: Ryan O'Hara Date: Tue Dec 4 19:28:55 2007 +0000 BZ 323111 Remove permission() checks from xattr ops. commit 8f143fa07d15101781a29fcc239a028562c1aed2 Author: Wendy Cheng Date: Fri Nov 30 21:48:54 2007 +0000 Red Hat bugzilla 244343: GFS supports two modes of locking - lock_nolock for single node filesystem and lock_dlm for cluster mode locking. The gfs lock methods are removed from file operation table for lock_nolock protocol. This would allow VFS to handle posix lock and flock logics just like other in-tree filesystems without duplication. commit c8a172035f47ef35eea9a95f8f6f73581a24ca24 Author: Lon Hohberger Date: Fri Nov 30 19:47:36 2007 +0000 Update ChangeLog commit b273b0e1b67f4d632235e69439fb8e7c5f93f0e4 Author: Lon Hohberger Date: Fri Nov 30 19:47:15 2007 +0000 Make clustat terminal-width dependent, but don't break scripts. commit 322ba2569212d6157c0aa7b24c13b51bd799df05 Author: Lon Hohberger Date: Fri Nov 30 19:44:34 2007 +0000 2007-11-30 Lon Hohberger * src/resources/clusterfs.sh: Retry mount up to 3 times to avoid race condition during another process mounting a GFS volume * src/resources/vm.sh, service.sh: Add defaults for values. Make vm.sh work with more service attrs (max restarts) commit 74df06fec8a15d2b5f5c1fa3a910e28aceeefed4 Author: Robert Peterson Date: Thu Nov 29 16:21:19 2007 +0000 Resolves: bz 325151: GFS2: gfs2_fsck changes to system inodes don't stick commit 61b2fcb34a1b3d402edefb4c82698087303bfe16 Author: David Teigland Date: Thu Nov 29 14:46:41 2007 +0000 [sync from HEAD] clean out some options that were only relevant to rhel4 remove the monitor option which didn't do anything add the dump option to dump the fenced debug buffer (group_tool can still do this, but fence_tool wasn't oddly enough bz 404451 commit 3d2ae8fada788f12a4dbd21ad11c64994ddea118 Author: Jonathan Brassow Date: Wed Nov 28 20:34:22 2007 +0000 - Bug 387601 - If the sync bit is already set, do not increment the sync_count. This can lead to a sync_count > the number of regions. commit 850d03ad0498dbe72180b058cb7da8a6b40fb64f Author: Robert Peterson Date: Wed Nov 28 16:49:06 2007 +0000 Resolves: bz 402971: GFS2: gfs2_edit savemeta doesn't save rindex file. commit e189efbce7adabd50fbc8fe45845749c5d025163 Author: Lon Hohberger Date: Mon Nov 26 21:46:27 2007 +0000 Implement restart counters per #247139 commit aa5d6d32870a7d2a92d39dce382b6227f624e2ac Author: Lon Hohberger Date: Mon Nov 26 21:37:17 2007 +0000 Fix missing changelog entries commit 300fb75408907d4cf1d9c6bb2f7a0d8531f4b43e Author: Lon Hohberger Date: Mon Nov 26 17:02:59 2007 +0000 Ancillary patch to fix another case; bz #327721 commit ea1ac42963edd57a3d3313ee08f86b500685ff07 Author: David Teigland Date: Wed Nov 21 17:50:15 2007 +0000 ASSERT was doing fprintf(stderr) which goes somewhere we don't want when running as a daemon. commit 2936ace6a08bdc639108fc670c4f782343861d6b Author: Patrick Caulfield Date: Tue Nov 20 09:21:51 2007 +0000 Clear out the ports list of a remote node when it goes down. Otherwise we will lose portopened messages when it comes back up. Thanks for lon for testing & patch. bz#327721 commit 8f21fd4b3aeafcaaf8aa1b1d6c53532fd2ff396b Author: Jonathan Brassow Date: Mon Nov 19 18:00:20 2007 +0000 - remove stray 'goto' statement. Fixes issue where server refuses to accept responsibility during some activation scenarios. commit fc4b63a8fa3aff22b0f4c53f70ea849557cb52c6 Author: Lon Hohberger Date: Mon Nov 19 17:28:33 2007 +0000 Ancillary NOCLUSTER mode fixes for fence_xvmd commit 5f3d1afbd46364603e9074497d01c0729a902234 Author: Lon Hohberger Date: Mon Nov 19 17:03:27 2007 +0000 Ancillary NOCLUSTER mode fixes for fence_xvmd commit c8b593576343e6b18e8bb5e0b86e6ae7c4102a98 Author: Robert Peterson Date: Fri Nov 16 23:22:23 2007 +0000 Resolves: bz 382581: GFS2: gfs2_fsck: buffer still held for block commit de4ae3d11f64864193d26d1a22ce9f2ed75676a6 Author: Robert Peterson Date: Fri Nov 16 19:42:35 2007 +0000 Resolves: bz 369771: GFS2: bring RHEL gfs2_edit up to date commit 0cf4555b14a50b55c446fc60beebf3834706ed88 Author: Lon Hohberger Date: Wed Nov 14 18:58:26 2007 +0000 Fix #345871 - make default migration policy live instead of paused commit 6a2badb27a11995066a6a3aa5d30c8e8a182d510 Author: Lon Hohberger Date: Wed Nov 14 18:41:27 2007 +0000 Fix #362351 - make fence_xvmd work in no-cluster mode commit f736f405835f6a7fb9bba8c1bfc937395c08ea0b Author: Robert Peterson Date: Wed Nov 14 17:18:39 2007 +0000 Resolves: bz 352841: GFS2: Evaluate and implement missing gfs2_tool features commit 6a51672daa5802e5171101e75280ed7095ec119b Author: Lon Hohberger Date: Wed Nov 14 17:17:15 2007 +0000 Remove clushutdown man page references from clusvcadm.8; resolves #324151 commit 41e83599940e52cb29bd75a268d07c44b75747b0 Author: Lon Hohberger Date: Wed Nov 14 16:56:50 2007 +0000 Fix #303981 - crash on restart commit c8fead26d1668712a04bf2e03264ef7c7c7ed59d Author: Lon Hohberger Date: Wed Nov 14 16:52:47 2007 +0000 Fix #289501 - make clulog honor rgmanager log levels commit 295a55ed85568cee2ce6151e05878790fbc9f996 Author: Lon Hohberger Date: Wed Nov 14 16:51:20 2007 +0000 Allow ccs_connect to fail correctly if a non-root user calls it; needed for #289501 commit 134b8406db197f4af1687bc78227e678b66a4c1b Author: Lon Hohberger Date: Wed Nov 14 16:37:11 2007 +0000 Fix #317561 - pass 1 commit a004c9f89ddeae9084e1fe74aa542071f3550c21 Author: Lon Hohberger Date: Tue Nov 13 17:38:43 2007 +0000 Ensure service.sh has explicit default values commit 3cffe31bd209099315446f988f635824214bada9 Author: Lon Hohberger Date: Tue Nov 13 17:38:02 2007 +0000 Add self_fence support to RHEL5 branch for clusterfs commit 380244e1c941a7d13a53a0cc1abae07a362afaf7 Author: Robert Peterson Date: Tue Nov 13 17:06:33 2007 +0000 Resolves: bz 364741: GFS2: gfs2_quota doesn't work unless lock table specified commit 5ffa60b04548cb1a7f2f004b68a04e97a6239296 Author: Jonathan Brassow Date: Fri Nov 9 05:47:05 2007 +0000 - omission of stdint.h means failure to compile - other additions to debugging output commit 359ead0ec35c4b61af5c6328002cb022e3c442c8 Author: Jonathan Brassow Date: Thu Nov 8 22:16:53 2007 +0000 - only write the disk log on a 'flush' not every time a mark/clear happens - Add mark request tracking so we don't clear log bits prematurely (and to reduce number of disk writes). - Add priority recovery - regions which are being written to take first priority during recovery - introduction of CPG flow control commit ab8b1bd4bd51b85f6e37a04704f27b2945174a9e Author: Ryan O'Hara Date: Thu Nov 8 18:48:08 2007 +0000 BZ 248715 - Use cluster ID and node ID for key rather than IP address. commit b012f5024733387547996262173d0fa3485a679b Author: Patrick Caulfield Date: Thu Nov 8 09:39:10 2007 +0000 add an explanation of the "cman_tool nodes" states and some detail about the "disallowed" state. bz#323931 commit 0431dd92405a6e6a41b5b441174f1936523849fa Author: Robert Peterson Date: Wed Nov 7 21:15:13 2007 +0000 Resolves: bz 336561: gfs2_tool accepts jdata flag; man page says no commit 177690016e4b304f7d1fd88f1f5ef1191fcf00eb Author: Robert Peterson Date: Wed Nov 7 14:59:28 2007 +0000 Resolves: bz 352581: GFS2: implement gfs2_tool lockdump commit 38691d00ddbc22581d7b9e0f74acd2fcca68c5bb Author: Robert Peterson Date: Tue Nov 6 20:23:59 2007 +0000 Resolves: bz 354201: GFS2: gfs2_tool: unknown mountpoint on some mount points commit a568629a30ff3f2f180c161d70fb123888ec713a Author: Jonathan Brassow Date: Mon Nov 5 22:44:03 2007 +0000 - Fix problem with recovery work assignment (still need to add priority recovery... otherwise, I/O will stall for long periods during mirror resync) - Clean-up checkpointing code and fix a couple bugs there that prevented proper start-up. commit 633f2571ac90841a27a3c7f8004d3452323a8130 Author: Jonathan Brassow Date: Sat Nov 3 18:53:03 2007 +0000 - Found the problem with my logging macros. Locally defined variables were overriding similarly named variables at the larger scope. commit cbd1b0c2a653f944fd4f663932d4c646d7d1de00 Author: Jonathan Brassow Date: Sat Nov 3 18:37:48 2007 +0000 - Addition of disk logging - Add 'is_remote_recovering' function - Checkpoint clean-ups commit 849637236ae9f93debab71d7ad45ce1db1016f3d Author: David Teigland Date: Fri Nov 2 13:27:45 2007 +0000 forgot to cvs add commit 52ce5378cb48a98745ee41ab7fa472fb87369b61 Author: Robert Peterson Date: Tue Oct 30 14:08:33 2007 +0000 Resolves: bz 349601: GFS2 requires straightforward way to determine number of journals commit 590c9fcd0f6e9840e76be6dc5094f9607bfee096 Author: Ryan McCabe Date: Mon Oct 29 17:56:09 2007 +0000 Fix format string bug. commit 0b948d93c6956e722c986f4032f36d062dd731b0 Author: Ryan McCabe Date: Mon Oct 29 17:54:25 2007 +0000 Fix format string bugs. commit ae28ebdeffcf74480e2c88863a65b33956aed6d9 Author: Ryan McCabe Date: Mon Oct 29 17:52:52 2007 +0000 Fix format string bugs commit a8dbe3a8ec8b10f173f09806f46ec1d0bfdd5ae0 Author: David Teigland Date: Fri Oct 26 21:37:14 2007 +0000 remove option about starting deadlock cycle commit 0255586960a1ab2045d25d6385269b05ec6d88be Author: David Teigland Date: Fri Oct 26 21:35:30 2007 +0000 remove -d option for enabling deadlock code commit 322f8a51fe351234812902765a32396cb0501e76 Author: David Teigland Date: Fri Oct 26 21:33:27 2007 +0000 add all the deadlock code from HEAD, and build it into the daemon, but make it impossible to enable commit e16147b43345423256ee7499b404f7506c65c07a Author: David Teigland Date: Fri Oct 26 21:23:49 2007 +0000 xid needs to be unsigned long long #endif on wrong line from last commit commit 4d8151c66d9bbbecc7aac01ace8e31475503d545 Author: David Teigland Date: Fri Oct 26 20:57:55 2007 +0000 sync with HEAD, except deadlock stuff within #if DEADLOCK commit d553572739e6f28151542ba07f013960089dc04f Author: David Teigland Date: Fri Oct 26 20:41:58 2007 +0000 include ctype.h to sync with HEAD commit 4822de1850bd322cc5fd3748cedde8a3a13161dc Author: David Teigland Date: Fri Oct 26 20:34:42 2007 +0000 Improve the dumping of debug logs from daemons. bz 317181 group_tool reads debug logs from groupd, fenced, and gfs_controld. The dumping code in all three daemons is now identical. The other change is that the dumping function terminates the final write with \0, and no longer sends the entire 1MB log buffer if it's not full. (Plus a couple random bits to sync with HEAD) commit f12a34d811ef4720ddd5dc4fa0c64e5a4c5aeac4 Author: Ryan McCabe Date: Fri Oct 26 19:20:43 2007 +0000 Fix 354631 commit c674fb2d155fe9320ffebe4ea692381058234809 Author: Ryan McCabe Date: Fri Oct 26 18:05:42 2007 +0000 Applying patch from Marco Ceci to fix 354421 commit e81385756d9fabfadd808ecd7127e3e3b9ddf6b0 Author: Robert Peterson Date: Thu Oct 25 20:02:51 2007 +0000 Resolves: bz 337961: gfs_grow /mountpoint/ does not work commit 816d4c69b8e12bf7d394ab99ae72cb0913e3cc8f Author: Robert Peterson Date: Thu Oct 25 14:27:54 2007 +0000 Resolves: bz 345501: minor correction to previous commit. commit 7f22ca832ea03fc49f65908aa30c3ee37ff9de6c Author: Robert Peterson Date: Thu Oct 25 14:14:47 2007 +0000 Resolves: bz 345501: GFS2: gfs2 utils uses non-canonicalized names commit 0a5f01add1d890a882454bb30d93a7c46a1a6565 Author: Robert Peterson Date: Wed Oct 24 21:19:48 2007 +0000 Resolves: bug #334481: gfs2_jadd man page refers to non-existent -T option commit 44c3b8f51e689498859bff19ad3fade115e19c5d Author: Robert Peterson Date: Fri Oct 19 15:07:59 2007 +0000 Resolves: bz 291551: gfs2_fsck clears journals without asking. commit 4c10950853270de03dcf85f7ab1e373c51163631 Author: Abhijith Das Date: Wed Oct 17 20:16:44 2007 +0000 fix bz 311591 - make lock_dlm the default lock protocol in mkfs.gfs and mkfs.gfs2 commit a2b446d889e4dfba57ae5d4bc6377ae5111c469d Author: David Teigland Date: Wed Oct 17 19:07:51 2007 +0000 used wrong define, DLM_LOCK_ instead of LKM_ commit 263152e4062ef125e2185c43ae0f8653e8502060 Author: Lon Hohberger Date: Wed Oct 17 18:21:29 2007 +0000 Make fence_xvmd read options from ccs like it should commit 7e83774ddc6440c246ca7c06136c625967499a1e Author: David Teigland Date: Wed Oct 17 18:13:41 2007 +0000 Honour the mode parameter to dlm_create_lockspace() even if the device node was created by udev. commit df3d497195fa6e26021a67e9b645dff95713b98d Author: David Teigland Date: Wed Oct 17 18:10:56 2007 +0000 The output of 'dlm_tool lockdump' could make it appear that a granted lock was still converting because the rqmode reported by the kernel is not reset to IV when a NOQUEUE convert fails. commit a7535d1feb9d7a0dee49f4d2d17889024b4a4535 Author: Ryan O'Hara Date: Fri Oct 12 18:53:57 2007 +0000 Update man page to explain 'cman_tool nodes' filter/format options. commit a2de35ee32fd37aee05fdb121b709be3ac95c6ad Author: Ryan O'Hara Date: Fri Oct 12 18:50:48 2007 +0000 Add ability to format output and filter based on node name. commit da362429f47b73242eb8b11afb8c673188ee5820 Author: Robert Peterson Date: Thu Oct 11 20:32:37 2007 +0000 Resolves: bz 251180: Build time warnings for gfs2 userland tools commit adf482ac91ace7c01ea7564976f5986926d5df79 Author: Robert Peterson Date: Thu Oct 11 16:47:36 2007 +0000 Resolves: bz 295301: Need man page for gfs_edit commit a0f761ddf7763f169324b9fef7c59b019524d953 Author: Robert Peterson Date: Thu Oct 11 16:35:23 2007 +0000 Resolves: bz 240545 (addendum). commit 6b0c9da99352f4f478c2064237ab46612fae3c73 Author: Ryan McCabe Date: Thu Oct 11 05:11:26 2007 +0000 E2BIG is more appropriate than ENOSPC here commit e3bb6009810010245dfc46c4afc68339e28796ea Author: Lon Hohberger Date: Wed Oct 10 16:14:15 2007 +0000 Fix #316871 - fence_xvm using dprintf for debugging causing corruption commit f9117841056dff920b989ca28dddec8516c6d5db Author: Robert Peterson Date: Mon Oct 8 21:39:34 2007 +0000 Resolves: bz 247318 - Need man page for gfs2_edit commit a25a8feba14a1dd59f535a9872db791da2d4bc36 Author: Ryan McCabe Date: Mon Oct 8 20:29:00 2007 +0000 fix 323711 commit 5607fd27cc9941473333104e59c693d8a99d53b6 Author: Lon Hohberger Date: Fri Oct 5 14:20:33 2007 +0000 Fix #315711 - dlm_controld needs to ignore node ID 0 to make qdisk work commit 7768568990da2149a7397c736bcf8655cbf66cb6 Author: Marek 'marx' Grac Date: Wed Oct 3 16:44:15 2007 +0000 Resolves: #250681 - Allow mounting samba share from netfs RA commit 9e3941392f0c5f3c5a615fccc8d451fc9851d6f8 Author: Ryan McCabe Date: Mon Oct 1 16:32:26 2007 +0000 Fix 314091 commit f9526f97a0aecf2cb92f294b5dfd120a53d6315e Author: Patrick Caulfield Date: Fri Sep 28 13:26:14 2007 +0000 Reinstate cman_tool services commit 85c6b40d49114ba452c057fbbbbb1d669ede2e81 Author: Patrick Caulfield Date: Thu Sep 27 09:05:45 2007 +0000 Recalculate quorum when we have a new node's expected_votes. bz#308581 commit 311cf80d36b20f363cac45a86efcbe2a146318e8 Author: Lon Hohberger Date: Tue Sep 25 21:09:23 2007 +0000 Ancillary patch for side case re: #229650 - patch from Simone Gotti. commit cb3c4d932fe13c04111baceddd66e66a9da751bb Author: Robert Peterson Date: Mon Sep 24 23:17:41 2007 +0000 Resolves: bz 304001: GFS2: Filesystems with 1k block size won't mount commit b4d9cc6521a1a4701ab9ca85dfa70345b761e448 Author: Ryan McCabe Date: Fri Sep 21 03:09:04 2007 +0000 fix bz277781 by accepting "nodename" as a synonym for "node" commit 6de818e3046a35a53fd5cd266b1ef5dca11d7e2b Author: Lon Hohberger Date: Tue Sep 18 20:53:17 2007 +0000 Fix #258141 - possible use after free in fenced commit c39561d67f58dfd19038e9298a95ad391bd67ccd Author: Robert Peterson Date: Tue Sep 18 20:24:49 2007 +0000 Resolves: bz 247318: Need man page for gfs2_edit commit effc7867fd6d381ac25b54924e4ba6e997e345aa Author: Robert Peterson Date: Tue Sep 18 18:14:27 2007 +0000 Resolves: bz 291451: gfs2_fsck -n, Bad file descriptor on line 63 of file buf.c (addendum) commit 5231161a06c84cc9de06ac8a0e1d7f20a9c3b2af Author: Abhijith Das Date: Tue Sep 18 16:21:35 2007 +0000 man page changes for new gfs2_quota reset option commit ac643c6fa5835017dfb73d293f8ced1a1ef077a5 Author: Patrick Caulfield Date: Tue Sep 18 16:00:56 2007 +0000 Check quorum device name length against the right size. commit b2b2b9ffe5c2252e34e2fe70c21aaf28d81cad47 Author: Robert Peterson Date: Mon Sep 17 17:23:40 2007 +0000 Resolves: bz 291451: gfs2_fsck -n, Bad file descriptor on line 63 of file buf.c commit 20c72c1d9ab19b6d22441d85e99013350d5ea197 Author: Patrick Caulfield Date: Mon Sep 17 13:59:31 2007 +0000 Document debug sub-command commit 812648b9186b8f105214d6ef33ab3e45d3c360dc Author: Patrick Caulfield Date: Mon Sep 17 13:48:15 2007 +0000 Add option to set the cman debug level. commit 61b4bac4d630f4184ad59b3e5809dd8193cd4ec7 Author: David Teigland Date: Mon Sep 17 13:47:58 2007 +0000 set dirty flag in cman commit 1d7f19b9e4cb156ca57f78d12160a01bb54b1129 Author: Patrick Caulfield Date: Mon Sep 17 13:35:35 2007 +0000 Correctly reduce quorum when a node leaves using "cman_tool leave remove" bz#271701 commit df37aca7728970465caae0730ce00347175a0ecb Author: Patrick Caulfield Date: Mon Sep 17 13:22:31 2007 +0000 Add dirty-flag to RHEL5 branch commit a695c41c61f52b1dfc6f004ae981ac9fb3ad4a00 Author: Robert Peterson Date: Sun Sep 16 17:17:57 2007 +0000 Resolves: bz 287901: GFS2: fsck errors and corruption with files > 945MB The gfs2_fsck program wasn't following enough levels of indirection when walking metadata. commit 19b0095029a1f665f6bb7847fe416fe7f1d8e1bb Author: James Parsons Date: Wed Sep 12 14:54:54 2007 +0000 Minor usage text fix commit 67345ce2ace54d18ec24ae6b0805c3e991cc126f Author: Robert Peterson Date: Tue Sep 11 18:36:54 2007 +0000 Resolves: bz 286211: gfs2_fsck not found by fsck wrapper commit 70294dd8b717de89f2d168c0837c011648908558 Author: David Teigland Date: Fri Sep 7 19:22:08 2007 +0000 Do nodedown events when the confchg for the groupd cpg arrives, instead of when the per-group cpg confchg's arrive. This means all nodes should have agreed ordering on the sequence of confchg's and messages, since all messages go through the groupd cpg. This should fix bz 258121 but I can't reproduce anything like that bug to verify. Also, set oom_adj to avoid being killed for OOM condition. commit d8e8444f6aeb249681a92e28067d0b4c62a465e3 Author: David Teigland Date: Tue Sep 4 19:28:11 2007 +0000 report that a mount fails due to an in-progress unmount commit b994713740be185215ca792e842fbb5bf63a0f92 Author: David Teigland Date: Tue Sep 4 19:27:34 2007 +0000 Reject mount attempts on an fs that's still in the process of unmounting. This regressed 8 months ago due to the bz 218560 changes. commit 8f2fe89378a16fb5b668649256ac4ca9bf2ef9e6 Author: Ryan McCabe Date: Fri Aug 31 14:26:04 2007 +0000 fix 267441: Possible NULL pointer deferences in cman commit 87d04b99dddfbea9140283d7015b7ba550073640 Author: Jonathan Brassow Date: Thu Aug 30 18:26:22 2007 +0000 - kmalloc -> kzalloc commit d627dca5e1d85aa5eac961e764907a9c2607bd12 Author: Ryan O'Hara Date: Thu Aug 30 16:26:42 2007 +0000 BZ 249781 - Fix ccs_tool to return EXIT_SUCCESS for most commands. commit 465e4b84b1714f20cacb858429bb0c9ff0f3e3d3 Author: Lon Hohberger Date: Thu Aug 30 16:03:03 2007 +0000 Fix #229650, pass 3 commit 6fb964b479524fd4db784c32ccd8e4958e207074 Author: Jonathan Brassow Date: Thu Aug 30 15:49:32 2007 +0000 - Updates to make cmirror compile properly against kernel-devel package (which doesn't include dm.h or dm-log.h). commit 7878a47145e614ef5f8bbf44d65c398e57bcb9d3 Author: Abhijith Das Date: Fri Aug 24 06:08:21 2007 +0000 fix for bz253016: userland fixes for gfs2 quota linked list commit ab0db87b9b37e91216d492d5ef7b43e31139e43a Author: Jonathan Brassow Date: Thu Aug 23 20:00:23 2007 +0000 - make updates for cluster mirror RHEL5 commit bb50572763b58885a8a112774ff2a0602a9647c6 Author: Jonathan Brassow Date: Thu Aug 23 19:57:31 2007 +0000 - RHEL5 cluster log server commit e2d82db9d222cfec24bbc40e59c9c1a960324d16 Author: Jonathan Brassow Date: Thu Aug 23 19:54:57 2007 +0000 - RHEL5 cluster mirror module commit 20a1091ceacbe1656bdf9104d49bad7ce927b29c Author: David Teigland Date: Thu Aug 23 14:40:33 2007 +0000 rewording and embellishing some bits related to openais.conf commit c475a6878222ad394a50241acb9154386e0cde91 Author: Patrick Caulfield Date: Thu Aug 23 08:43:29 2007 +0000 Mention the openais.conf parameters that cman overrides. commit af716b6b99b23fc78f8c50408c7a8c00ec9a6317 Author: Patrick Caulfield Date: Wed Aug 22 15:48:03 2007 +0000 Add openais.conf information to man page commit 1ab5fc9c8f64b92ac868e22b7b42a0126e506a48 Author: David Teigland Date: Wed Aug 22 15:13:37 2007 +0000 fix attribute xml format for cluster_id and keyfile commit 4475af84babae6d5a095fdec000bfb91e4087a15 Author: David Teigland Date: Wed Aug 22 14:21:14 2007 +0000 this was missed in the big man page update from HEAD commit 152d621a2e152ebfb37e56fd220a1659b60e1fae Author: David Teigland Date: Wed Aug 22 14:15:22 2007 +0000 add and update man pages for cluster infrastructure commit ca8c0a3c5a7e95dd185ce74d3e1df399d0d20b39 Author: David Teigland Date: Wed Aug 22 13:41:44 2007 +0000 mention group_tool shoud be used instead of cman_tool services commit 448bab828687830276b9a38d9fe515a99357e585 Author: Patrick Caulfield Date: Wed Aug 22 09:34:46 2007 +0000 Update man page for RHEL5 commit ba0612181cdb66a6dcf93aca3a01b77408968045 Author: Ryan McCabe Date: Tue Aug 21 16:39:02 2007 +0000 Fix access beyond allocated memory commit 5abac02033a3899e85a45eb76879800651e1b0ee Author: Abhijith Das Date: Mon Aug 20 21:31:07 2007 +0000 fix for bz253172 - gfs2 init script should not unload any kernel modules commit 867714e827c3f7f04c0a2e338bd35e648544aba2 Author: David Teigland Date: Mon Aug 20 20:48:05 2007 +0000 proper help output for -m option commit 461e7ca39fac9c814315f172e72218a99a5e28c0 Author: David Teigland Date: Mon Aug 20 20:38:37 2007 +0000 the mode (-m) and directory (-d) options were being set but not used in the call to dlm_new_lockspace() commit a1522d652f637442b55ef69d6280e8ef967a2bc7 Author: Robert Peterson Date: Wed Aug 15 22:31:00 2007 +0000 Resolves: bz #240545: gfs2_fsck should behave more like the other fscks. commit 623936ffd9aadca5d7e59a9cd87c5d3af4413918 Author: Lon Hohberger Date: Wed Aug 15 18:41:12 2007 +0000 Fix uninitialized var commit 1623160c0383e27b7ea6adb53be6ef474a6decea Author: James Parsons Date: Wed Aug 8 16:26:36 2007 +0000 bz 251358 - forgot to strip build date for baseline file commit 3e41c5179e367f74808d9b185cc3745bbad9b554 Author: James Parsons Date: Wed Aug 8 15:49:57 2007 +0000 Fix for 251358 commit ea9766fb7ee0bdd0dd2e3b678ef4a23f163984d1 Author: David Teigland Date: Mon Aug 6 19:26:52 2007 +0000 Use strerror() instead of errno in another spot to be more user friendly. commit e51eeca5418f8f40971791c6bdd09bbff904538d Author: Patrick Caulfield Date: Fri Aug 3 10:49:11 2007 +0000 Don't lost the cluster name if it is specified on the command line probably the cause of bz#250688 commit ba48504ffbf840052b6b5cf9b95fe5ea7e92fd60 Author: Patrick Caulfield Date: Fri Aug 3 10:29:02 2007 +0000 Install man pages commit 0196ff3201704036795bc3ab741545c3fab17e3a Author: Patrick Caulfield Date: Fri Aug 3 10:27:53 2007 +0000 Add man pages for libdlm calls. commit bfc73a1b83c80a27ede79356451f4732bb6109d6 Author: Lon Hohberger Date: Thu Aug 2 14:46:52 2007 +0000 Fix #248727, round 2 commit 6e4618fedcdb0e40d697c7bf6a8912e3b5ea1b25 Author: Lon Hohberger Date: Tue Jul 31 17:54:55 2007 +0000 Fix bug #248727 commit c982fa3bfc20d1af876b3b42d5f6d6e121351c74 Author: Lon Hohberger Date: Mon Jul 30 20:37:08 2007 +0000 Fix memory leak. commit 531fbb3591840843d2233b3f3d227dc58d565f68 Author: Lon Hohberger Date: Mon Jul 30 16:14:18 2007 +0000 Fix memory leak in virt.c commit 7eca579b2312bc13a07da5d41432e7636bbd6385 Author: Robert Peterson Date: Thu Jul 26 23:20:59 2007 +0000 Resolves: bug #248423: gfs2_tool can not set data journal flags as specified in the man page. commit 6077575efc3ed3820eea919bd1ae601ef300110b Author: Lon Hohberger Date: Thu Jul 26 20:47:37 2007 +0000 Fix #249758 commit a9d1b1281705e696a445fb920eda9872f1599efc Author: Chris Feist Date: Thu Jul 26 16:36:43 2007 +0000 - Comment out check_sys_fs do to bz#247853, this check should happen after we try to load the module. commit 4d38fcfe901d55e548a8f7e8ef2b39c4da9bef6e Author: Lon Hohberger Date: Tue Jul 24 13:58:47 2007 +0000 Fix minor warnings commit 7d170ac2dc3fbf551a17cc641112cb262e4ec1f4 Author: Lon Hohberger Date: Tue Jul 24 13:53:08 2007 +0000 Fix #249314, #247291, #249314 commit 87eebe0b5c75c595d90c9969e5d64c2debc2c057 Author: Robert Peterson Date: Fri Jul 20 21:01:35 2007 +0000 Resolves: bz #247591: Make default journal size for gfs2 128M commit b4312b2a184cdb0e2aea690525e6dab1f53abc3e Author: Abhijith Das Date: Thu Jul 19 22:21:50 2007 +0000 Fix for bz248177: We delete the old /etc/mtab entry and add a new one during remount. Any changes made to the mount options using remount are reflected in /etc/mtab now. commit dbff4108e048e40a6182f875824c91ce3e929c1d Author: David Teigland Date: Thu Jul 19 20:43:24 2007 +0000 add lockdump and -m to set mode of dlm device (sync with HEAD) commit 993d558216d8d3c1f6b7996d0b9ffc6e7cb5c609 Author: David Teigland Date: Thu Jul 19 20:23:16 2007 +0000 clean up warnings, report more precise plock times (sync with HEAD) commit 3cae2b4daaeef73347c0add12a9a69aa38bc344a Author: David Teigland Date: Thu Jul 19 20:22:08 2007 +0000 more helpful error reporting (sync with HEAD) commit a7a83e0299dc6e1e55d38248d3a26ea1e00f7447 Author: Ryan McCabe Date: Tue Jul 17 16:09:59 2007 +0000 Fix 248048: xen network workaround not enabled when additional params are given to network-bridge script commit 4603e9d64b6172d6e012bd3c7aa6d61ab3329ba7 Author: Ryan O'Hara Date: Thu Jul 12 15:49:27 2007 +0000 Fix bug where mkfs always exits with EXIT_FAILURE. commit fd6771e0b1cab053be72f9bb7e503be563bb626f Author: Marek 'marx' Grac Date: Thu Jul 12 11:23:16 2007 +0000 Resolves: #245178 - install RA for named (agent already in CVS) commit 9ca6ff926f6017fa7347c0f66498848cc70390b9 Author: Robert Peterson Date: Wed Jul 11 21:58:53 2007 +0000 Resolves: bz #241096: GFS: bug in gfs truncate commit 11ece1e1498bf5285765db34c438304fee090393 Author: Lon Hohberger Date: Wed Jul 11 19:35:06 2007 +0000 Fix #247154 / #247866 commit 95533606950678d6ea3a4e40473d513690957fea Author: James Parsons Date: Wed Jul 11 06:37:14 2007 +0000 Fix for bz238106 - new firmware version delta ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From teigland@sourceware.org Mon Mar 24 21:21:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 24 Mar 2008 21:21:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-16-g55dca01 Message-ID: <20080324212118.1233.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=55dca012f902c090df399b2dc91cfa86d13f2e90 The branch, RHEL5 has been updated via 55dca012f902c090df399b2dc91cfa86d13f2e90 (commit) from c1f442a049bc5f7369ff5c88a834dab2e9b09251 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 55dca012f902c090df399b2dc91cfa86d13f2e90 Author: Joel Becker Date: Wed Mar 19 16:08:49 2008 -0500 libdlm: Don't pass LKF_WAIT to the kernel libdlm is passing LKF_WAIT to the kernel. In the kernel, the unlock path strictly audits flags, and errors on this unknown (to the kernel) flag. The correct answer is to keep the flag in userspace. Signed-off-by: Joel Becker Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 876c16e..0612d09 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -754,7 +754,7 @@ static int ls_lock_v5(dlm_lshandle_t ls, req->cmd = DLM_USER_LOCK; req->i.lock.mode = mode; - req->i.lock.flags = flags; + req->i.lock.flags = (flags & ~LKF_WAIT); req->i.lock.lkid = lksb->sb_lkid; req->i.lock.parent = parent; req->i.lock.lksb = lksb; @@ -822,7 +822,7 @@ static int ls_lock_v6(dlm_lshandle_t ls, req->cmd = DLM_USER_LOCK; req->i.lock.mode = mode; - req->i.lock.flags = flags; + req->i.lock.flags = (flags & ~LKF_WAIT); req->i.lock.lkid = lksb->sb_lkid; req->i.lock.parent = parent; req->i.lock.lksb = lksb; @@ -1014,7 +1014,7 @@ static int ls_unlock_v5(struct dlm_ls_info *lsinfo, uint32_t lkid, set_version_v5(&req); req.cmd = DLM_USER_UNLOCK; req.i.lock.lkid = lkid; - req.i.lock.flags = flags; + req.i.lock.flags = (flags & ~LKF_WAIT); req.i.lock.lksb = lksb; req.i.lock.castparam = astarg; /* DLM_USER_UNLOCK will default to existing completion AST */ @@ -1036,7 +1036,7 @@ static int ls_unlock_v6(struct dlm_ls_info *lsinfo, uint32_t lkid, req.cmd = DLM_USER_UNLOCK; req.i.lock.namelen = 0; req.i.lock.lkid = lkid; - req.i.lock.flags = flags; + req.i.lock.flags = (flags & ~LKF_WAIT); req.i.lock.lksb = lksb; req.i.lock.castparam = astarg; /* DLM_USER_UNLOCK will default to existing completion AST */ hooks/post-receive -- Cluster Project From teigland@sourceware.org Mon Mar 24 21:27:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 24 Mar 2008 21:27:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-17-gd3f69f5 Message-ID: <20080324212727.6142.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=d3f69f52ce9c48a7abd4fb89efc3897aac9bb1c4 The branch, RHEL5 has been updated via d3f69f52ce9c48a7abd4fb89efc3897aac9bb1c4 (commit) from 55dca012f902c090df399b2dc91cfa86d13f2e90 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d3f69f52ce9c48a7abd4fb89efc3897aac9bb1c4 Author: David Teigland Date: Thu Mar 13 12:14:22 2008 -0500 dlm_tool: print correct rq mode in lockdump The rq mode in a lockdump was incorrectly showing up as NL for granted locks instead of IV (invalid). Signed-off-by: David Teigland ----------------------------------------------------------------------- Summary of changes: dlm/tool/main.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dlm/tool/main.c b/dlm/tool/main.c index 6039812..1d1fc8e 100644 --- a/dlm/tool/main.c +++ b/dlm/tool/main.c @@ -29,6 +29,8 @@ #include "dlm_controld.h" #endif +#define LKM_IVMODE -1 + #define OPTION_STRING "MhVvd:m:" #define OP_JOIN 1 @@ -373,14 +375,14 @@ void do_lockdump(char *name) continue; } - /* A hack because dlm-kernel doesn't set rqmode back to NL when + /* A hack because dlm-kernel doesn't set rqmode back to IV when a NOQUEUE convert fails, which means in a lockdump it looks like a granted lock is still converting since rqmode is not - NL. (does it make sense to include status in the output, + IV. (does it make sense to include status in the output, e.g. G,C,W?) */ if (status == DLM_LKSTS_GRANTED) - rqmode = LKM_NLMODE; + rqmode = LKM_IVMODE; printf("id %08x gr %s rq %s pid %u master %d \"%s\"\n", id, mode_str(grmode), mode_str(rqmode), hooks/post-receive -- Cluster Project From teigland@sourceware.org Mon Mar 24 21:28:00 2008 From: teigland@sourceware.org (teigland@sourceware.org) Date: Mon, 24 Mar 2008 21:28:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-18-g0484ef9 Message-ID: <20080324212846.6577.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=0484ef93e8d09313f8f110d23c2a6a6b4aca2f60 The branch, RHEL5 has been updated via 0484ef93e8d09313f8f110d23c2a6a6b4aca2f60 (commit) from d3f69f52ce9c48a7abd4fb89efc3897aac9bb1c4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 0484ef93e8d09313f8f110d23c2a6a6b4aca2f60 Author: Christine Caulfield Date: Thu Mar 13 16:44:00 2008 +0000 [DLM] Don't segfault if lvbptr is NULL Calling dlm_lock* with LKF_VALBLK and sb_lvbptr set to NULL could cause libdlm to segfault. Now it returns -1/EINVAL Signed-off-by: Christine Caulfield ----------------------------------------------------------------------- Summary of changes: dlm/lib/libdlm.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/dlm/lib/libdlm.c b/dlm/lib/libdlm.c index 0612d09..2bdbb0f 100644 --- a/dlm/lib/libdlm.c +++ b/dlm/lib/libdlm.c @@ -889,6 +889,11 @@ static int ls_lock(dlm_lshandle_t ls, return -1; } + if (flags & LKF_VALBLK && !lksb->sb_lvbptr) { + errno = EINVAL; + return -1; + } + if (kernel_version.version[0] == 5) return ls_lock_v5(ls, mode, lksb, flags, name, namelen, parent, astaddr, astarg, bastaddr); hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Mon Mar 24 23:19:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 24 Mar 2008 23:19:00 -0000 Subject: conga ./conga.spec.in.in luci/plone-custom/man ... Message-ID: <20080324231853.7079.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-24 23:18:53 Modified files: . : conga.spec.in.in luci/plone-custom: manage_inactive.js luci/site/luci/Extensions: LuciZope.py LuciZopeAsync.py luci/site/luci/var: Data.fs Log message: - Fix bz437398 (When Luci session times out a re-login is thought to be a logout.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.74&r2=1.45.2.75 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/manage_inactive.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.6&r2=1.1.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.30&r2=1.15.2.31 From rmccabe@sourceware.org Mon Mar 24 23:22:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Mon, 24 Mar 2008 23:22:00 -0000 Subject: conga/luci plone-custom/manage_inactive.js sit ... Message-ID: <20080324232211.8790.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-24 23:22:11 Modified files: luci/plone-custom: manage_inactive.js luci/site/luci/Extensions: LuciZope.py LuciZopeAsync.py luci/site/luci/var: Data.fs Log message: Forward port fixes from RHEL5 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/manage_inactive.js.diff?cvsroot=cluster&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&r1=1.31&r2=1.32 From rmccabe@sourceware.org Tue Mar 25 01:27:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 25 Mar 2008 01:27:00 -0000 Subject: conga ./Makefile ./autogen.sh ./configure ./do ... Message-ID: <20080325012721.4921.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL4 Changes by: rmccabe@sourceware.org 2008-03-25 01:27:20 Modified files: . : Makefile autogen.sh configure download_files luci : ChangeLog Makefile configure load_site.py pack.py luci/cluster : Makefile clu_portlet_fetcher fence_device.js form-chooser form-macros index_html portlet_cluconfig portlet_cluconfig_macro resource-form-macros resource_form_handlers.js validate_config_fence.js validate_config_general.js validate_config_gulm.js validate_config_multicast.js validate_config_qdisk.js validate_create_gulm.js validate_fdom.js validate_fence.js validate_xvm_key.js luci/conga_ssl : Makefile SSLClient.cpp SSLClient.h conga_ssl_lib.cpp setup.py luci/docs : Makefile config_rhel5 user_manual.html luci/homebase : Makefile form-chooser form-macros homebase_common.js index_html validate_cluster_add.js validate_cluster_add_initial.js validate_perm.js validate_sys_add.js validate_sys_remove.js validate_user_add.js validate_user_del.js luci/init.d : Makefile luci luci/logs : Makefile index_html luci/make : defines.mk.in luci/plone-custom: Makefile README conga.js conga_ajax.js failsafe_login_form.cpt footer global_personalbar login_form.cpt login_form_validate.vpy login_success main_template portlet_login luci/site : Makefile luci/site/luci/Extensions: FenceHandler.py HelperFunctions.py LuciClusterActions.py LuciClusterInfo.py LuciDB.py LuciSyslog.py LuciZope.py LuciZopeAsync.py LuciZopeClusterPortal.py LuciZopeExternal.py LuciZopePerm.py PropsObject.py ResourceHandler.py RicciQueries.py StorageReport.py Variable.py cluster_adapters.py conga_constants.py conga_ssl.py conga_storage_constants.py homebase_adapters.py ricci_communicator.py ricci_defines.py storage_adapters.py luci/site/luci/Extensions/ClusterModel: Apache.py BaseResource.py Cluster.py ClusterNode.py ClusterNodes.py Clusterfs.py Cman.py Device.py FailoverDomain.py FailoverDomainNode.py FailoverDomains.py Fence.py FenceDaemon.py FenceDevice.py FenceDevices.py FenceXVMd.py Fs.py Gulm.py Heuristic.py Ip.py LVM.py Lockserver.py Method.py ModelBuilder.py Multicast.py MySQL.py NFSClient.py NFSExport.py Netfs.py OpenLDAP.py Postgres8.py QuorumD.py RefObject.py Resources.py Rm.py SAPDatabase.py SAPInstance.py Samba.py Script.py Service.py TagObject.py Tomcat5.py Totem.py Vm.py luci/site/luci/Products/ManagedSystem: ManagedSystem.py __init__.py luci/site/luci/Products/ManagedSystem/skins: managedsystem_edit_form.cpt managedsystem_view.pt luci/site/luci/bin: runzope.in luci/site/luci/etc: zope.conf.in luci/storage : Makefile cache_report check-batch clu_portlet_fetcher form-chooser form-macros index_html mappings_macros mappings_provider portlet_cluconfig portlet_cluconfig_macro validate_html luci/sysconfig : Makefile luci luci/test : cleaner.py conga_Helpers.py luci/utils : Makefile luci_admin luci_cleanup luci_manage ricci : Changelog Makefile TODO configure ricci/common : ClientSocket.cpp Except.cpp File.cpp Logger.cpp Makefile Module.cpp Network.cpp Random.cpp ServerSocket.cpp Socket.cpp Thread.cpp Time.cpp Variable.cpp XML.cpp daemon_init.c executils.cpp executils_test.cpp signals.c utils.cpp ricci/docs : cluster_api.html logging_api.html modules.html modules_common.html reboot_api.html ricci_api.html rpm_api.html service_api.html storage-bd_template.html storage-bds.html storage-content.html storage-content_template.html storage-mapper_template.html storage-mappers.html storage_api.html variables.html ricci/include : APIerror.h Except.h File.h Logger.h Module.h Mutex.h Network.h Random.h Socket.h String.h Thread.h Time.h Variable.h XML.h XML_tags.h array_auto_ptr.h counting_auto_ptr.cpp counting_auto_ptr.h executils.h executils_test.h shred_allocator.h signals.h utils.h ricci/init.d : Makefile ricci ricci/make : defines.mk.in ricci/modules : Makefile ricci/modules/cluster: ClusterConf.cpp ClusterConf.h ClusterModule.cpp ClusterModule.h ClusterStatus.cpp ClusterStatus.h Clusvcadm.cpp Clusvcadm.h Fence.cpp Fence.h Makefile NoServiceManager.h Virt.cpp Virt.h main.cpp ricci/modules/cluster/clumon: Makefile README.cim README.snmpd ricci/modules/cluster/clumon/init.d: Makefile modclusterd ricci/modules/cluster/clumon/man: Makefile ricci/modules/cluster/clumon/src: Makefile ricci/modules/cluster/clumon/src/cim-provider: Makefile ricci/modules/cluster/clumon/src/common: ClusterMonitor.cpp Makefile Node.cpp Service.cpp ricci/modules/cluster/clumon/src/daemon: Communicator.cpp Communicator.h Makefile Monitor.cpp Monitor.h Peer.cpp Peer.h main.cpp ricci/modules/cluster/clumon/src/include: Cluster.h ClusterMonitor.h clumond_globals.h ricci/modules/cluster/clumon/src/snmp-agent: Makefile ricci/modules/log: LogParser.cpp LogParser.h LoggingModule.cpp LoggingModule.h Makefile main.cpp ricci/modules/rpm: Makefile PackageHandler.cpp PackageHandler.h RpmModule.cpp RpmModule.h main.cpp ricci/modules/service: Makefile ServiceManager.cpp ServiceManager.h ServiceModule.cpp ServiceModule.h main.cpp ricci/modules/storage: BD.cpp BD.h BDFactory.cpp BDFactory.h ClusterNotQuorateError.h ClusterNotRunningError.h ClvmdError.h Content.cpp Content.h ContentExtendedPartition.cpp ContentExtendedPartition.h ContentFS.cpp ContentFS.h ContentFactory.cpp ContentFactory.h ContentNone.cpp ContentNone.h ContentUnusable.cpp ContentUnusable.h ExtendedFS.cpp ExtendedFS.h FSController.cpp FSController.h FileMagic.cpp FileMagic.h GFS1.cpp GFS1.h GFS2.cpp GFS2.h HD.cpp HD.h LV.cpp LV.h LVM.cpp LVM.h LVMClusterLockingError.h MDRaid.cpp MDRaid.h MDRaidSource.cpp MDRaidSource.h MDRaidTarget.cpp MDRaidTarget.h Makefile Mapper.cpp Mapper.h MapperFactory.cpp MapperFactory.h MapperSource.cpp MapperSource.h MidAir.h MountHandler.cpp MountHandler.h PTSource.cpp PTSource.h PV.cpp PV.h Partition.cpp Partition.h PartitionTable.cpp PartitionTable.h Props.cpp Props.h StorageModule.cpp StorageModule.h SwapFS.cpp SwapFS.h System.cpp System.h UMountError.h UnsupportedFS.cpp UnsupportedFS.h VG.cpp VG.h ValidationError.h defines.h gfs_ondisk.h main.cpp mdadm_wrapper.cpp mdadm_wrapper.h parted_wrapper.cpp parted_wrapper.h ricci/pam.d : Makefile ricci/ricci : Auth.cpp Auth.h ClientInstance.cpp ClientInstance.h DBusController.cpp DBusController.h Makefile QueueLocker.cpp QueueLocker.h RebootModule.cpp RebootModule.h Ricci.cpp Ricci.h RicciWorker.cpp RicciWorker.h SSLInstance.cpp SSLInstance.h Server.cpp Server.h dbus_test.cpp main.cpp ricci_defines.h ricci/test : PropsObject.py Variable.py add_sources_renderer.py auth_page.py bd_remove_renderer.py bd_renderer.py communicator.py content_renderer.py dispatcher.py host_selection.py main_page.py mapper_renderer.py new_mapper_renderer.py new_target_renderer.py props_renderer.py ricci/test_suite: README SSLClient_send_to_ricci send_to_ricci Added files: luci/cluster : busy_wait-macro cluster_config-macros cluster_svc-macros fdom-macros fence-macros system_svc-macros validate_sys_svc.js luci/plone-custom: 100wait.gif 16services.png arrow_down.png arrow_right.png black_bar_40.png black_right_end_40.png blue_bar_40.png blue_cap_40.png blue_right_end_40.png clusterbanner.png clusterportlet.css configured.png conga_storage.css cursor-disabled.png fDom.png icon_bd_LV.png icon_bd_LV_snapshot.png icon_bd_crypto.png icon_bd_ide.png icon_bd_multipath.png icon_bd_net.png icon_bd_partition.png icon_bd_raid.png icon_bd_scsi.png icon_content_FS.png icon_content_PV.png icon_mapper_PT.png icon_mapper_VG.png icon_mapper_crypto.png icon_mapper_multipath.png icon_mapper_raid.png installed.png joined.png luci.css manage_inactive.js node_active.png node_inactive.png node_unknown.png notstarted.png rebooted.png red_bar_40.png red_cap_40.png red_right_end_40.png selection_1px_40.png selection_bar_40.png selection_left_end_40.png selection_right_end_40.png small_fdom.png small_node_active.png small_node_inactive.png small_node_unknown.png small_svc.png small_svc_stopped.png snapshot.gif spinner.gif storage_svs.css storage_tree.css storage_validation.css svc_reload.png svc_reload_active.png svc_reload_disabled.png svc_start.png svc_start_active.png svc_start_disabled.png svc_stop.png svc_stop_active.png svc_stop_disabled.png sys_svc.css tree_bullet.gif tree_closed.gif tree_opened.gif tree_transparent.gif update_hostinfo.js validate_auth.js x.png luci/site/luci/Extensions: LuciValidation.py system_adapters.py luci/site/luci/Extensions/ClusterModel: Altname.py FenceDeviceAttr.py OracleDB.py SybaseASE.py luci/storage : cylinder_select.js popup_log.js storage_async.js storage_content.js storage_probing.js storage_svs.js storage_utils.js storage_validation.js ricci/common : .cvsignore sys_util.c sys_util.h ricci/modules/cluster: .cvsignore ricci/modules/cluster/clumon/src/cim-provider: .cvsignore ricci/modules/cluster/clumon/src/common: .cvsignore ricci/modules/cluster/clumon/src/daemon: .cvsignore ricci/modules/cluster/clumon/src/snmp-agent: .cvsignore ricci/modules/log: .cvsignore ricci/modules/rpm: .cvsignore ricci/modules/service: .cvsignore ricci/modules/storage: .cvsignore ricci/ricci : .cvsignore ricci/test_suite: .cvsignore ricci/test_suite/storage: fstab_add.xml fstab_del.xml get_fs_group_members.xml mount_fs.xml umount_fs.xml umount_fs_bydev.xml Removed files: luci/cluster : 100wait.gif 16services.png arrow_down.png arrow_right.png clusterportlet.css configured.png fDom.png installed.png joined.png node_active.png node_inactive.png node_unknown.png notstarted.png rebooted.png small_fdom.png small_node_active.png small_node_inactive.png small_node_unknown.png small_svc.png small_svc_stopped.png luci/homebase : luci_homebase.css x.png luci/site/luci/Extensions/ClusterModel: GeneralError.py luci/storage : 100wait.gif black_bar_40.png black_right_end_40.png blue_bar_40.png blue_cap_40.png blue_right_end_40.png icon_bd_LV.png icon_bd_LV_snapshot.png icon_bd_crypto.png icon_bd_ide.png icon_bd_multipath.png icon_bd_net.png icon_bd_partition.png icon_bd_raid.png icon_bd_scsi.png icon_content_FS.png icon_content_PV.png icon_mapper_PT.png icon_mapper_VG.png icon_mapper_crypto.png icon_mapper_multipath.png icon_mapper_raid.png red_bar_40.png red_cap_40.png red_right_end_40.png selection_1px_40.png selection_bar_40.png selection_left_end_40.png selection_right_end_40.png snapshot.gif tree_bullet.gif tree_closed.gif tree_opened.gif tree_transparent.gif Log message: Merge fixes from RHEL5 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.12.2.2&r2=1.12.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/autogen.sh.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.4.1&r2=1.5.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/configure.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/download_files.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.4&r2=1.5.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/ChangeLog.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.22.2.2&r2=1.22.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/configure.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/load_site.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.15.2.1&r2=1.15.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/pack.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/busy_wait-macro.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.7.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fdom-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/system_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_sys_svc.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/clu_portlet_fetcher.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fence_device.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11.2.1&r2=1.11.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.16.2.2&r2=1.16.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.176.2.22&r2=1.176.2.23 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/index_html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.30.2.3&r2=1.30.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/portlet_cluconfig.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/portlet_cluconfig_macro.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.31.2.7&r2=1.31.2.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.29.2.6&r2=1.29.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_fence.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_general.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_gulm.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_multicast.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.3&r2=1.3.4.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_config_qdisk.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.3&r2=1.5.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_create_gulm.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fdom.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.2&r2=1.3.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_fence.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.4&r2=1.3.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/validate_xvm_key.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/100wait.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/16services.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/arrow_down.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/arrow_right.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/clusterportlet.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/configured.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/fDom.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/installed.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/joined.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/notstarted.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/rebooted.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_fdom.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_svc.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/small_svc_stopped.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.3&r2=1.2.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/SSLClient.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/conga_ssl_lib.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.3&r2=1.2.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/conga_ssl/setup.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/config_rhel5.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/docs/user_manual.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.16.2.1&r2=1.16.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11&r2=1.11.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.55.2.3&r2=1.55.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/homebase_common.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.16.2.2&r2=1.16.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/index_html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.21.2.1&r2=1.21.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.2&r2=1.7.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_cluster_add_initial.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_perm.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_add.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_sys_remove.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_add.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/validate_user_del.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/luci_homebase.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.37.2.3&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/homebase/x.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/init.d/luci.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.14.2.1&r2=1.14.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/logs/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/logs/index_html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/make/defines.mk.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/100wait.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/16services.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/arrow_down.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/arrow_right.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/black_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/black_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/blue_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/blue_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/blue_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterbanner.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/clusterportlet.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/configured.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_storage.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/cursor-disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/fDom.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_LV.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_LV_snapshot.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_ide.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_net.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_partition.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_bd_scsi.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_content_FS.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_content_PV.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_PT.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_VG.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/icon_mapper_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/installed.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/joined.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/luci.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/manage_inactive.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/notstarted.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/rebooted.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/red_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/red_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/red_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_1px_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_left_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/selection_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_fdom.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_node_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_node_inactive.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_node_unknown.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_svc.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/small_svc_stopped.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/snapshot.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/spinner.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/storage_svs.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/storage_tree.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/storage_validation.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_reload.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_reload_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_reload_disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_start.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_start_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_start_disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_stop.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_stop_active.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/svc_stop_disabled.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.6.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/sys_svc.css.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_bullet.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_closed.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_opened.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/tree_transparent.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/update_hostinfo.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/validate_auth.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/x.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/README.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/conga_ajax.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/failsafe_login_form.cpt.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/footer.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/global_personalbar.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form.cpt.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_form_validate.vpy.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/login_success.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/main_template.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/plone-custom/portlet_login.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9&r2=1.9.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.12.2.1&r2=1.12.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.9.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/system_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/FenceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.17.2.6&r2=1.17.2.7 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/HelperFunctions.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterActions.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.3&r2=1.4.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.10.2.3&r2=1.10.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciDB.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.2.2&r2=1.6.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciSyslog.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11.2.1&r2=1.11.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZope.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.2&r2=1.4.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeAsync.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeClusterPortal.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopeExternal.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=1.3.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciZopePerm.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/PropsObject.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/RicciQueries.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.2&r2=1.7.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/StorageReport.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.22.2.3&r2=1.22.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/Variable.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/cluster_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.227.2.25&r2=1.227.2.26 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.36.2.4&r2=1.36.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_ssl.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/conga_storage_constants.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.4.1&r2=1.8.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/homebase_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.48.2.3&r2=1.48.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_communicator.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.24.2.2&r2=1.24.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_defines.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/storage_adapters.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.1&r2=1.9.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Altname.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDeviceAttr.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OracleDB.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SybaseASE.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Apache.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/BaseResource.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cluster.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNode.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ClusterNodes.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Clusterfs.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Cman.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Device.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.2.1&r2=1.4.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomain.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomainNode.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FailoverDomains.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fence.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDaemon.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevice.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceDevices.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/FenceXVMd.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Fs.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Gulm.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Heuristic.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Ip.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/LVM.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Lockserver.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Method.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.4&r2=1.5.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Multicast.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/MySQL.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/NFSClient.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/NFSExport.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Netfs.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/OpenLDAP.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Postgres8.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/QuorumD.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/RefObject.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Resources.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Rm.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SAPDatabase.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/SAPInstance.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Samba.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Script.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Service.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/TagObject.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Tomcat5.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Totem.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/Vm.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=1.2.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ClusterModel/GeneralError.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.2.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/ManagedSystem.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/__init__.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_edit_form.cpt.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Products/ManagedSystem/skins/managedsystem_view.pt.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/bin/runzope.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/etc/zope.conf.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cylinder_select.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/popup_log.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_async.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_content.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_probing.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_svs.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_utils.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/storage_validation.js.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/cache_report.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/check-batch.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/clu_portlet_fetcher.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-chooser.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.4.1&r2=1.5.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.20.2.3&r2=1.20.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/index_html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.4.1&r2=1.7.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_macros.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/mappings_provider.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/portlet_cluconfig_macro.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/validate_html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/100wait.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/black_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/black_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/blue_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_LV.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_LV_snapshot.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_ide.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_net.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_partition.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_bd_scsi.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_content_FS.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_content_PV.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_PT.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_VG.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_crypto.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_multipath.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/icon_mapper_raid.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_cap_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/red_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_1px_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_bar_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_left_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/selection_right_end_40.png.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/snapshot.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_bullet.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_closed.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_opened.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/tree_transparent.gif.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=NONE http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/sysconfig/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/sysconfig/luci.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/cleaner.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.2&r2=1.1.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/test/conga_Helpers.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.10.2.4&r2=1.10.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_admin.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.52.2.3&r2=1.52.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_cleanup.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.2&r2=1.4.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/utils/luci_manage.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Changelog.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11.4.1&r2=1.11.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/TODO.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/configure.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9&r2=1.9.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ClientSocket.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.2&r2=1.4.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Except.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/File.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Logger.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.2&r2=1.7.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Module.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.4.1&r2=1.5.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Network.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Random.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/ServerSocket.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Socket.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Thread.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Time.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Variable.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/XML.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.1&r2=1.7.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/daemon_init.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.4.2&r2=1.7.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils_test.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/signals.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/utils.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/cluster_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.3&r2=1.4.4.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/logging_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/modules.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/modules_common.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/reboot_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/ricci_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/rpm_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/service_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.2&r2=1.1.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-bd_template.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-bds.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-content.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-content_template.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-mapper_template.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-mappers.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage_api.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.2.1&r2=1.6.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/variables.html.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/APIerror.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Except.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/File.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Logger.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Module.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Mutex.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Network.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Random.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Socket.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/String.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Thread.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Time.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/Variable.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/XML.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/XML_tags.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/array_auto_ptr.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/counting_auto_ptr.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/executils.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/executils_test.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/shred_allocator.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/signals.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/include/utils.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/ricci.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.10.2.1&r2=1.10.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/make/defines.mk.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.4.1&r2=1.6.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.4.1&r2=1.5.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.1&r2=1.9.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterConf.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.2.2&r2=1.6.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterModule.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.16.2.3&r2=1.16.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/ClusterStatus.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.2.5&r2=1.8.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Clusvcadm.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Fence.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.15.2.2&r2=1.15.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/NoServiceManager.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/Virt.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/README.cim.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/README.snmpd.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/modclusterd.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/man/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/ClusterMonitor.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Node.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/common/Service.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Communicator.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Communicator.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.4.1&r2=1.6.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.13.2.3&r2=1.13.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Monitor.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.4.2&r2=1.5.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Peer.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/Peer.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/daemon/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4.4.1&r2=1.4.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/Cluster.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.4.1&r2=1.6.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/ClusterMonitor.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/include/clumond_globals.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.2&r2=1.3.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.2.1&r2=1.8.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7&r2=1.7.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11.2.3&r2=1.11.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.3&r2=1.7.2.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BD.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BD.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BDFactory.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BDFactory.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotQuorateError.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotRunningError.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClvmdError.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.4.1&r2=1.2.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Content.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Content.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentExtendedPartition.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentExtendedPartition.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFactory.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFactory.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentNone.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentNone.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentUnusable.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentUnusable.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7&r2=1.7.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS1.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.1&r2=1.3.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS1.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS2.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3.4.2&r2=1.3.4.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS2.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/HD.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/HD.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.2&r2=1.7.2.3 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11.2.1&r2=1.11.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVMClusterLockingError.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.4.1&r2=1.1.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaid.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7&r2=1.7.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaid.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidSource.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidSource.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidTarget.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidTarget.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.12&r2=1.12.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperFactory.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperFactory.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperSource.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperSource.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MidAir.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.1&r2=1.5.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Props.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Props.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UMountError.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UnsupportedFS.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UnsupportedFS.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.9.2.4&r2=1.9.2.5 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ValidationError.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/defines.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6.4.1&r2=1.6.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/gfs_ondisk.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/mdadm_wrapper.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/mdadm_wrapper.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8.4.3&r2=1.8.4.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/pam.d/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Auth.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Auth.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7&r2=1.7.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/DBusController.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.15&r2=1.15.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/DBusController.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.19&r2=1.19.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/QueueLocker.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/QueueLocker.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RebootModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RebootModule.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.22.2.1&r2=1.22.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.11&r2=1.11.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/RicciWorker.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.6&r2=1.6.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.7.2.1&r2=1.7.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5&r2=1.5.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.4.1&r2=1.5.4.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/dbus_test.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.4&r2=1.4.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ricci_defines.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.8&r2=1.8.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/PropsObject.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/Variable.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/add_sources_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/auth_page.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/bd_remove_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/bd_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/communicator.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.3&r2=1.3.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/content_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/dispatcher.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/host_selection.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/main_page.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/mapper_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/new_mapper_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/new_target_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2&r2=1.2.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/props_renderer.py.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/.cvsignore.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/README.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/SSLClient_send_to_ricci.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.1&r2=1.1.2.2 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/send_to_ricci.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1&r2=1.1.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/fstab_add.xml.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/fstab_del.xml.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/get_fs_group_members.xml.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.2.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/mount_fs.xml.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/umount_fs.xml.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/umount_fs_bydev.xml.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 From fabbione@sourceware.org Tue Mar 25 04:01:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Tue, 25 Mar 2008 04:01:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-97-ge2d5851 Message-ID: <20080325040110.27845.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=e2d5851746943491c9c90bd881669ee70d8caed3 The branch, master has been updated via e2d5851746943491c9c90bd881669ee70d8caed3 (commit) from 1c340e0e7e1a6c0b7402db2ee22e240e25d28728 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e2d5851746943491c9c90bd881669ee70d8caed3 Author: Bob Peterson Date: Mon Mar 24 09:51:36 2008 -0500 Update to prior commit for bz431945: I forgot that STABLE2 does not have a diaper device. ----------------------------------------------------------------------- Summary of changes: gfs-kernel/src/gfs/proc.c | 12 ++++-------- 1 files changed, 4 insertions(+), 8 deletions(-) diff --git a/gfs-kernel/src/gfs/proc.c b/gfs-kernel/src/gfs/proc.c index b58181c..1c38b0d 100644 --- a/gfs-kernel/src/gfs/proc.c +++ b/gfs-kernel/src/gfs/proc.c @@ -27,7 +27,6 @@ #include "lm.h" #include "proc.h" #include "super.h" -#include "diaper.h" struct list_head gfs_fs_list; struct semaphore gfs_fs_lock; @@ -81,16 +80,14 @@ do_list(char *user_buf, size_t size) char device_id[32]; char *buf; int error = 0; - struct block_device *bdevice; down(&gfs_fs_lock); x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); - bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); - sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), - MINOR(bdevice->bd_dev)); + sprintf(device_id, "%u:%u", MAJOR(sdp->sd_vfs->s_dev), + MINOR(sdp->sd_vfs->s_dev)); x += sprintf(num, "%lu", (unsigned long)sdp) + strlen(device_id) + strlen(sdp->sd_fsname) + 3; @@ -111,9 +108,8 @@ do_list(char *user_buf, size_t size) x = 0; for (tmp = gfs_fs_list.next; tmp != &gfs_fs_list; tmp = tmp->next) { sdp = list_entry(tmp, struct gfs_sbd, sd_list); - bdevice = gfs_diaper_2real(sdp->sd_vfs->s_bdev); - sprintf(device_id, "%u:%u", MAJOR(bdevice->bd_dev), - MINOR(bdevice->bd_dev)); + sprintf(device_id, "%u:%u", MAJOR(sdp->sd_vfs->s_dev), + MINOR(sdp->sd_vfs->s_dev)); x += sprintf(buf + x, "%lu %s %s\n", (unsigned long)sdp, device_id, sdp->sd_fsname); } hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Tue Mar 25 17:12:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 25 Mar 2008 17:12:00 -0000 Subject: conga conga.spec.in.in download_files Plone-2. ... Message-ID: <20080325171218.11450.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL4 Changes by: rmccabe@sourceware.org 2008-03-25 17:12:18 Modified files: . : conga.spec.in.in download_files Added files: . : Plone-2.5.5-CMFPlone.patch Removed files: . : Plone-2.5.3-final_CMFPlone.patch Log message: Upgrade Plone to the version we use in RHEL5 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Plone-2.5.5-CMFPlone.patch.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.67.2.20&r2=1.67.2.21 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/download_files.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.5.2.5&r2=1.5.2.6 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/Plone-2.5.3-final_CMFPlone.patch.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.2.2.1&r2=NONE From rpeterso@sourceware.org Tue Mar 25 18:32:00 2008 From: rpeterso@sourceware.org (rpeterso@sourceware.org) Date: Tue, 25 Mar 2008 18:32:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-19-g22b442e Message-ID: <20080325183246.29513.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=22b442ed10069372d306e7f0fd162cf5387c5211 The branch, RHEL4 has been updated via 22b442ed10069372d306e7f0fd162cf5387c5211 (commit) from 9d2d37ee3db933f01c8e5021d6d6a5897d5fe017 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 22b442ed10069372d306e7f0fd162cf5387c5211 Author: Bob Peterson Date: Tue Mar 25 13:33:48 2008 -0500 Resolves: bz 435469: gfs_tool: Cannot allocate memory ----------------------------------------------------------------------- Summary of changes: gfs/gfs_tool/df.c | 2 +- gfs/gfs_tool/tune.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gfs/gfs_tool/df.c b/gfs/gfs_tool/df.c index f385ea7..2d1030c 100644 --- a/gfs/gfs_tool/df.c +++ b/gfs/gfs_tool/df.c @@ -33,7 +33,7 @@ struct file_lock { int x; }; #include "gfs_tool.h" -#define SIZE (65536) +#define SIZE (4096) /** * do_df_one - print out information about one filesystem diff --git a/gfs/gfs_tool/tune.c b/gfs/gfs_tool/tune.c index 8b152cb..1e8bc1a 100644 --- a/gfs/gfs_tool/tune.c +++ b/gfs/gfs_tool/tune.c @@ -29,7 +29,7 @@ #include "gfs_tool.h" -#define SIZE (65536) +#define SIZE (4096) /** * get_tune - print out the current tuneable parameters for a filesystem hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Tue Mar 25 20:03:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Tue, 25 Mar 2008 20:03:00 -0000 Subject: conga/ricci/modules/storage Makefile Message-ID: <20080325200347.12229.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-25 20:03:47 Modified files: ricci/modules/storage: Makefile Log message: compensate for build system weirdness. library isn't currently used, anyway Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.12.2.2&r2=1.12.2.3 From fabbione@sourceware.org Wed Mar 26 06:26:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 26 Mar 2008 06:26:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-98-gabf5d4d Message-ID: <20080326062646.25703.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=abf5d4d8a61b28ee786b94436c6f82ee484f7fc7 The branch, master has been updated via abf5d4d8a61b28ee786b94436c6f82ee484f7fc7 (commit) from e2d5851746943491c9c90bd881669ee70d8caed3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit abf5d4d8a61b28ee786b94436c6f82ee484f7fc7 Author: Fabio M. Di Nitto Date: Wed Mar 26 07:25:36 2008 +0100 [BUILD] Fix man page install permission Man pages were installed -m755 that is wrong. Install them as -m644 as it should be. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: make/man.mk | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/make/man.mk b/make/man.mk index 14da4a7..5cfbadd 100644 --- a/make/man.mk +++ b/make/man.mk @@ -4,7 +4,7 @@ install: for i in ${TARGET}; do \ p=`echo $$i | sed -e 's#.*\.##g'`; \ install -d ${mandir}/man$$p; \ - install $(S)/$$i ${mandir}/man$$p; \ + install -m644 $(S)/$$i ${mandir}/man$$p; \ done uninstall: hooks/post-receive -- Cluster Project From fabbione@sourceware.org Wed Mar 26 06:31:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 26 Mar 2008 06:31:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-28-g759c998 Message-ID: <20080326063112.26966.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=759c998c8c9f851da69aa38d84a3fc6d382af47f The branch, STABLE2 has been updated via 759c998c8c9f851da69aa38d84a3fc6d382af47f (commit) from 8f3ec431efff4ce45f8765075e7c65f53d208905 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 759c998c8c9f851da69aa38d84a3fc6d382af47f Author: Fabio M. Di Nitto Date: Wed Mar 26 07:25:36 2008 +0100 [BUILD] Fix man page install permission Man pages were installed -m755 that is wrong. Install them as -m644 as it should be. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: make/man.mk | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/make/man.mk b/make/man.mk index 14da4a7..5cfbadd 100644 --- a/make/man.mk +++ b/make/man.mk @@ -4,7 +4,7 @@ install: for i in ${TARGET}; do \ p=`echo $$i | sed -e 's#.*\.##g'`; \ install -d ${mandir}/man$$p; \ - install $(S)/$$i ${mandir}/man$$p; \ + install -m644 $(S)/$$i ${mandir}/man$$p; \ done uninstall: hooks/post-receive -- Cluster Project From jbrassow@sourceware.org Wed Mar 26 14:25:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 26 Mar 2008 14:25:00 -0000 Subject: Cluster Project branch, RHEL4, updated. gfs-kernel_2_6_9_76-20-g2114f9e Message-ID: <20080326142500.32633.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=2114f9e99321008beef4cc18bcbe4aa8712015f9 The branch, RHEL4 has been updated via 2114f9e99321008beef4cc18bcbe4aa8712015f9 (commit) from 22b442ed10069372d306e7f0fd162cf5387c5211 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2114f9e99321008beef4cc18bcbe4aa8712015f9 Author: Jonathan Brassow Date: Wed Mar 26 09:02:53 2008 -0500 rgmanager/lvm.sh: Fix for bug 438997 Missing VG name parameter to 'vgchange --deltag' call caused tag to be remove from all VGs, not just the intended one. Thanks to Simone Gotti for the patch. ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/lvm_by_vg.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/resources/lvm_by_vg.sh b/rgmanager/src/resources/lvm_by_vg.sh index e97f9b9..b1840a1 100755 --- a/rgmanager/src/resources/lvm_by_vg.sh +++ b/rgmanager/src/resources/lvm_by_vg.sh @@ -56,7 +56,7 @@ function strip_tags for i in `vgs --noheadings -o tags $OCF_RESKEY_vg_name | sed s/","/" "/g`; do ocf_log info "Stripping tag, $i" - vgchange --deltag $i + vgchange --deltag $i $OCF_RESKEY_vg_name done if [ ! -z `vgs -o tags --noheadings $OCF_RESKEY_vg_name` ]; then @@ -93,6 +93,7 @@ function vg_status local i local dev local readdev + local my_name=$(local_node_name) # # Check that all LVs are active hooks/post-receive -- Cluster Project From jbrassow@sourceware.org Wed Mar 26 14:27:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 26 Mar 2008 14:27:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-19-gfd9a026 Message-ID: <20080326142716.2253.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=fd9a026fe08393ef7f561bb28db1815cf160d15f The branch, RHEL5 has been updated via fd9a026fe08393ef7f561bb28db1815cf160d15f (commit) from 0484ef93e8d09313f8f110d23c2a6a6b4aca2f60 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit fd9a026fe08393ef7f561bb28db1815cf160d15f Author: Jonathan Brassow Date: Wed Mar 26 09:05:43 2008 -0500 rgmanager/lvm.sh: Fix bug 438816 Missing VG name parameter to 'vgchange --deltag' call caused tag to be remove from all VGs, not just the intended one. Thanks to Simone Gotti for the patch. ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/lvm_by_vg.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/resources/lvm_by_vg.sh b/rgmanager/src/resources/lvm_by_vg.sh index e97f9b9..b1840a1 100755 --- a/rgmanager/src/resources/lvm_by_vg.sh +++ b/rgmanager/src/resources/lvm_by_vg.sh @@ -56,7 +56,7 @@ function strip_tags for i in `vgs --noheadings -o tags $OCF_RESKEY_vg_name | sed s/","/" "/g`; do ocf_log info "Stripping tag, $i" - vgchange --deltag $i + vgchange --deltag $i $OCF_RESKEY_vg_name done if [ ! -z `vgs -o tags --noheadings $OCF_RESKEY_vg_name` ]; then @@ -93,6 +93,7 @@ function vg_status local i local dev local readdev + local my_name=$(local_node_name) # # Check that all LVs are active hooks/post-receive -- Cluster Project From mgrac@sourceware.org Wed Mar 26 15:02:00 2008 From: mgrac@sourceware.org (mgrac@sourceware.org) Date: Wed, 26 Mar 2008 15:02:00 -0000 Subject: cluster/fence/agents/lib Message-ID: <20080326150252.19062.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: cluster Changes by: mgrac@sourceware.org 2008-03-26 15:02:52 cluster/fence/agents/lib Update of /cvs/cluster/cluster/fence/agents/lib In directory sourceware.org:/tmp/cvs-serv19053/lib Log Message: Directory /cvs/cluster/cluster/fence/agents/lib added to the repository --> Using per-directory sticky tag `HEAD' From cfeist@sourceware.org Wed Mar 26 19:07:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 26 Mar 2008 19:07:00 -0000 Subject: Cluster Project tag, cman_2_0_81, created. cmirror_1_1_15-15-gc1f442a Message-ID: <20080326190725.3413.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=c1f442a049bc5f7369ff5c88a834dab2e9b09251 The tag, cman_2_0_81 has been created at c1f442a049bc5f7369ff5c88a834dab2e9b09251 (commit) - Log ----------------------------------------------------------------- commit c1f442a049bc5f7369ff5c88a834dab2e9b09251 Author: Lon Hohberger Date: Thu Mar 20 17:25:02 2008 -0400 [cman] Apply missing fix for #315711 ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 26 19:07:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 26 Mar 2008 19:07:00 -0000 Subject: Cluster Project tag, rgmanager_2_0_37, created. cmirror_1_1_15-13-g1acab71 Message-ID: <20080326190728.3754.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1acab71f585b845992e6070d6616644690f4e444 The tag, rgmanager_2_0_37 has been created at 1acab71f585b845992e6070d6616644690f4e444 (commit) - Log ----------------------------------------------------------------- commit 1acab71f585b845992e6070d6616644690f4e444 Author: Lon Hohberger Date: Wed Mar 19 15:15:11 2008 -0400 [rgmanager] Update changelog for rhel5 branch ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From cfeist@sourceware.org Wed Mar 26 19:07:00 2008 From: cfeist@sourceware.org (cfeist@sourceware.org) Date: Wed, 26 Mar 2008 19:07:00 -0000 Subject: Cluster Project tag, cmirror-kernel_2_6_9_39, created. gfs-kernel_2_6_9_76-9-g8c6094c Message-ID: <20080326190727.3693.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=8c6094c0c5d457c9572ff386c5b53f075ce54f9c The tag, cmirror-kernel_2_6_9_39 has been created at 8c6094c0c5d457c9572ff386c5b53f075ce54f9c (commit) - Log ----------------------------------------------------------------- commit 8c6094c0c5d457c9572ff386c5b53f075ce54f9c Author: Jonathan Brassow Date: Thu Mar 20 10:37:50 2008 -0500 dm-cmirror.ko: change a blocking I/O to async I/O Sometimes, the mirror subdevices get suspended before the log server suspends. This can lead to the server issuing I/O requests on devices that are suspended. If it waits for the I/O to complete, it could wait indefinitly. Now there is a timeout in place for the I/O, which should prevent the server from getting stuck. ----------------------------------------------------------------------- hooks/post-receive -- Cluster Project From jbrassow@sourceware.org Wed Mar 26 19:24:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Wed, 26 Mar 2008 19:24:00 -0000 Subject: Cluster Project branch, RHEL5, updated. cmirror_1_1_15-25-g5cd4597 Message-ID: <20080326192404.13595.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=5cd4597c0fd297414389f5cab77a115425570d8a The branch, RHEL5 has been updated via 5cd4597c0fd297414389f5cab77a115425570d8a (commit) via 8a08d3be6b94a2cb9691e908f230ae6add29ccef (commit) via 2200d92f9ebc30fca8f4107929fc4707b57bcebd (commit) via c749f5d08a8145308a98c551facfde0e4b80062c (commit) via 5c25534a1de557083aba092c76a7f3e380c4b108 (commit) via 492c4e3df027d04b3cc431807cc439979816f351 (commit) from fd9a026fe08393ef7f561bb28db1815cf160d15f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5cd4597c0fd297414389f5cab77a115425570d8a Merge: 8a08d3be6b94a2cb9691e908f230ae6add29ccef fd9a026fe08393ef7f561bb28db1815cf160d15f Author: Jonathan Brassow Date: Wed Mar 26 14:13:17 2008 -0500 Merge branch 'RHEL5' of ssh://jbrassow@sources.redhat.com/git/cluster into rhel5 commit 8a08d3be6b94a2cb9691e908f230ae6add29ccef Merge: 2200d92f9ebc30fca8f4107929fc4707b57bcebd 0484ef93e8d09313f8f110d23c2a6a6b4aca2f60 Author: Jonathan Brassow Date: Wed Mar 26 08:48:18 2008 -0500 Merge branch 'RHEL5' of ssh://jbrassow@sources.redhat.com/git/cluster into rhel5 commit 2200d92f9ebc30fca8f4107929fc4707b57bcebd Author: Jonathan Brassow Date: Mon Mar 24 16:09:52 2008 -0500 clogd: do not process requests after calling cpg_leave commit c749f5d08a8145308a98c551facfde0e4b80062c Author: Jonathan Brassow Date: Wed Mar 5 16:11:28 2008 -0600 clogd: split cpg_config_callback into two functions Easier to read/debug shorter functions cpg_config_callback now calls either cpg_join_callback or cpg_leave_callback commit 5c25534a1de557083aba092c76a7f3e380c4b108 Author: Jonathan Brassow Date: Wed Mar 5 10:22:03 2008 -0600 clogd: remove various debugging statements commit 492c4e3df027d04b3cc431807cc439979816f351 Author: Jonathan Brassow Date: Thu Feb 28 14:57:43 2008 -0600 clogd: small clean-ups - pull some debug statements - check for more errors (like short reads) when recv'ing from kernel ----------------------------------------------------------------------- Summary of changes: cmirror/src/clogd.c | 4 + cmirror/src/cluster.c | 345 ++++++++++++++++++++++++++--------------------- cmirror/src/functions.c | 86 +++++++++--- cmirror/src/functions.h | 1 + cmirror/src/local.c | 48 +++---- cmirror/src/queues.c | 29 ++++- 6 files changed, 315 insertions(+), 198 deletions(-) diff --git a/cmirror/src/clogd.c b/cmirror/src/clogd.c index 416084f..114c711 100644 --- a/cmirror/src/clogd.c +++ b/cmirror/src/clogd.c @@ -127,6 +127,9 @@ static void process_signal(int sig){ queue_status(1); log_status(1); return; + case SIGUSR2: + log_validate(); + return; default: LOG_PRINT("Unknown signal received... ignoring"); return; @@ -234,6 +237,7 @@ static void daemonize(void) signal(SIGHUP, &sig_handler); signal(SIGPIPE, SIG_IGN); signal(SIGUSR1, &sig_handler); + signal(SIGUSR2, &sig_handler); sigemptyset(&signal_mask); signal_received = 0; } diff --git a/cmirror/src/cluster.c b/cmirror/src/cluster.c index 27077ae..504ee58 100644 --- a/cmirror/src/cluster.c +++ b/cmirror/src/cluster.c @@ -46,6 +46,9 @@ struct checkpoint_data { struct checkpoint_data *next; }; +#define INVALID 0 +#define VALID 1 +#define LEAVING 2 struct clog_cpg { struct list_head list; @@ -54,7 +57,7 @@ struct clog_cpg { struct cpg_name name; /* Are we the first, or have we received checkpoint? */ - int valid; + int state; int free_me; struct queue *startup_queue; @@ -251,7 +254,7 @@ static struct checkpoint_data *prepare_checkpoint(struct clog_cpg *entry, new->requester = cp_requester; strncpy(new->uuid, entry->name.value, entry->name.length); - if (entry->valid) { + if (entry->state == VALID) { new->bitmap_size = push_state(entry->name.value, "clean_bits", &new->clean_bits); if (new->bitmap_size <= 0) { @@ -282,9 +285,8 @@ static struct checkpoint_data *prepare_checkpoint(struct clog_cpg *entry, } } else { /* - * We can store bitmaps yet, because the log is not - * valid yet. The new machine will have to ask - * specifically for a new checkpoint. + * We can't store bitmaps yet, because the log is not + * valid yet. */ LOG_ERROR("Forced to refuse checkpoint for nodeid %u - log not valid yet", new->requester); @@ -743,14 +745,14 @@ static void cpg_message_callback(cpg_handle_t handle, struct cpg_name *gname, if (tfr->request_type == DM_CLOG_CHECKPOINT_READY) { if (my_cluster_id == tfr->originator) { /* Redundant checkpoints ignored if match->valid */ - if (import_checkpoint(match, match->valid)) { + if (import_checkpoint(match, (match->state != INVALID))) { LOG_ERROR("Failed to import checkpoint"); /* Could we retry? */ goto out; - } else if (!match->valid) { + } else if (match->state == INVALID) { LOG_DBG("[%s] Checkpoint data received. Log is now valid", SHORT_UUID(match->name.value)); - match->valid = 1; + match->state = VALID; while ((startup_tfr = queue_remove(match->startup_queue))) { if (startup_tfr->request_type == DM_CLOG_CONFIG_CHANGE) { @@ -817,7 +819,14 @@ static void cpg_message_callback(cpg_handle_t handle, struct cpg_name *gname, } else { tfr->originator = nodeid; - if (!match->valid) { + if (match->state == LEAVING) { + LOG_ERROR("[%s] Ignoring %s from %u. Reason: I'm leaving", + SHORT_UUID(tfr->uuid), RQ_TYPE(tfr->request_type), + tfr->originator); + goto out; + } + + if (match->state == INVALID) { LOG_DBG("Log not valid yet, storing request"); startup_tfr = queue_remove(free_queue); if (!startup_tfr) { @@ -850,9 +859,11 @@ out: strerror(-r)); LOG_ERROR("[%s] Response : %s", SHORT_UUID(tfr->uuid), (response) ? "YES" : "NO"); - LOG_ERROR("[%s] Originator: %u", SHORT_UUID(tfr->uuid), tfr->originator); + LOG_ERROR("[%s] Originator: %u", + SHORT_UUID(tfr->uuid), tfr->originator); if (response) - LOG_ERROR("[%s] Responder : %u", SHORT_UUID(tfr->uuid), nodeid); + LOG_ERROR("[%s] Responder : %u", + SHORT_UUID(tfr->uuid), nodeid); LOG_ERROR("HISTORY::"); for (i = 0; i < DEBUGGING_HISTORY; i++) { @@ -867,8 +878,10 @@ out: int len; idx++; idx = idx % DEBUGGING_HISTORY; - len = sprintf(debugging[idx], "SEQ#=%llu, UUID=%s, TYPE=%s, ORIG=%u, RESP=%s", - (unsigned long long)tfr->seq, SHORT_UUID(tfr->uuid), + len = sprintf(debugging[idx], + "SEQ#=%llu, UUID=%s, TYPE=%s, ORIG=%u, RESP=%s", + (unsigned long long)tfr->seq, + SHORT_UUID(tfr->uuid), RQ_TYPE(tfr->request_type), tfr->originator, (response) ? "YES" : "NO"); if (response) @@ -876,186 +889,215 @@ out: } } -static void cpg_config_callback(cpg_handle_t handle, struct cpg_name *gname, - struct cpg_address *member_list, int member_list_entries, - struct cpg_address *left_list, int left_list_entries, - struct cpg_address *joined_list, int joined_list_entries) +static void cpg_join_callback(struct clog_cpg *match, + struct cpg_address *joined, + struct cpg_address *member_list, + int member_list_entries) { - int i, j, fd; + int i; int my_pid = getpid(); - int found = 0; - struct clog_cpg *match, *tmp; - uint32_t lowest = 0xDEAD; - - memberz = member_list_entries; - - LOG_DBG("****** CPG config callback **[%s]**", - SHORT_UUID(gname->value)); + uint32_t lowest = match->lowest_id; + struct clog_tfr *tfr; - LOG_DBG("* JOINING (%d):", joined_list_entries); - for (i = 0; i < joined_list_entries; i++) - LOG_DBG("* nodeid: %d, pid: %d", - joined_list[i].nodeid, joined_list[i].pid); + /* Assign my_cluster_id */ + if ((my_cluster_id == 0xDEAD) && (joined->pid == my_pid)) + my_cluster_id = joined->nodeid; - LOG_DBG("* MEMBERS (%d):", member_list_entries); - for (i = 0; i < member_list_entries; i++) - LOG_DBG("* nodeid: %d, pid: %d", - member_list[i].nodeid, member_list[i].pid); + /* Am I the very first to join? */ + if (member_list_entries == 1) { + match->lowest_id = joined->nodeid; + match->state = VALID; + } - LOG_DBG("* LEAVING (%d):", left_list_entries); - for (i = 0; i < left_list_entries; i++) - LOG_DBG("* nodeid: %d, pid: %d", - left_list[i].nodeid, left_list[i].pid); + /* If I am part of the joining list, I do not send checkpoints */ + if (joined->nodeid == my_cluster_id) + goto out; - LOG_DBG("*****************************************"); + LOG_DBG("Joining node, %u needs checkpoint", joined->nodeid); - list_for_each_entry_safe(match, tmp, &clog_cpg_list, list) { - LOG_DBG("Given handle: %llu", (unsigned long long)handle); - LOG_DBG(" hanlde: %llu", (unsigned long long)match->handle); - LOG_DBG("Given name : %s", gname->value); - LOG_DBG(" name : %s", match->name.value); - if (match->handle == handle) { - LOG_DBG("MATCH"); - found = 1; - break; - } - LOG_DBG("NOT A MATCH"); + /* + * FIXME: remove checkpoint_requesters/checkpoints_needed, and use + * the startup_queue interface exclusively + */ + if (queue_empty(match->startup_queue)) { + match->checkpoint_requesters[match->checkpoints_needed++] = joined->nodeid; + goto out; } - if (!found) { - LOG_ERROR("Unable to find match for CPG config callback"); - goto out; + tfr = queue_remove(free_queue); + if (!tfr) { + LOG_PRINT("cpg_config_callback: " + "Preallocated transfer structs exhausted"); + tfr = malloc(DM_CLOG_TFR_SIZE); + if (!tfr) { + LOG_ERROR("cpg_config_callback: " + "Unable to allocate transfer structs"); + LOG_ERROR("cpg_config_callback: " + "Unable to perform checkpoint"); + goto out; + } } + tfr->request_type = DM_CLOG_CONFIG_CHANGE; + tfr->originator = joined->nodeid; + queue_add_tail(tfr, match->startup_queue); - lowest = match->lowest_id; - /* Am I leaving? */ - for (i = 0; i < left_list_entries; i++) - if (my_cluster_id == left_list[i].nodeid) { - struct list_head l, *p, *n; - struct clog_tfr *tfr; +out: + /* Find the lowest_id, i.e. the server */ + match->lowest_id = member_list[0].nodeid; + for (i = 0; i < member_list_entries; i++) + if (match->lowest_id > member_list[i].nodeid) + match->lowest_id = member_list[i].nodeid; - INIT_LIST_HEAD(&l); + if (lowest == 0xDEAD) + LOG_DBG("[%s] Server change -> %u (%u %s)", + SHORT_UUID(match->name.value), match->lowest_id, + joined->nodeid, (member_list_entries == 1) ? + "is first to join" : "joined"); + else if (lowest != match->lowest_id) + LOG_DBG("[%s] Server change %u -> %u (%u joined)", + SHORT_UUID(match->name.value), lowest, + match->lowest_id, joined->nodeid); + else + LOG_DBG("[%s] Server unchanged at %u (%u joined)", + SHORT_UUID(match->name.value), + lowest, joined->nodeid); +} - LOG_DBG("Finalizing leave..."); - list_del_init(&match->list); +static void cpg_leave_callback(struct clog_cpg *match, + struct cpg_address *left, + struct cpg_address *member_list, + int member_list_entries) +{ + int i, fd; + struct list_head l, *p, *n; + uint32_t lowest = match->lowest_id; + struct clog_tfr *tfr; - cpg_fd_get(match->handle, &fd); - links_unregister(fd); + INIT_LIST_HEAD(&l); - cluster_postsuspend(match->name.value); + /* Am I leaving? */ + if (my_cluster_id == left->nodeid) { + LOG_DBG("Finalizing leave..."); + list_del_init(&match->list); - queue_remove_all(&l, cluster_queue); + cpg_fd_get(match->handle, &fd); + links_unregister(fd); - list_for_each_safe(p, n, &l) { - list_del_init(p); - tfr = (struct clog_tfr *)p; + cluster_postsuspend(match->name.value); - if (tfr->request_type == DM_CLOG_POSTSUSPEND) - kernel_send(tfr); - else if (!strcmp(match->name.value, tfr->uuid)) - queue_add(tfr, free_queue); - else - queue_add(tfr, cluster_queue); - } + queue_remove_all(&l, cluster_queue); - cpg_finalize(match->handle); + list_for_each_safe(p, n, &l) { + list_del_init(p); + tfr = (struct clog_tfr *)p; - if (match->startup_queue->count) { - LOG_ERROR("%d startup items remain in cluster log", - match->startup_queue->count); - while (!queue_empty(match->startup_queue)) { - tfr = queue_remove(match->startup_queue); - queue_add(tfr, free_queue); - } + /* Leave in the cluster_queue if not of this log */ + if (strcmp(match->name.value, tfr->uuid)) { + queue_add(tfr, cluster_queue); + continue; } - free(match->startup_queue); - match->free_me = 1; - match->lowest_id = 0xDEAD; + if (tfr->request_type == DM_CLOG_POSTSUSPEND) + kernel_send(tfr); + else + queue_add(tfr, free_queue); + } - goto out; - } + cpg_finalize(match->handle); - /* Am I the very first to join? */ - if (!left_list_entries && - (member_list_entries == 1) && (joined_list_entries == 1) && - (member_list[0].nodeid == joined_list[0].nodeid)) { - match->lowest_id = my_cluster_id = joined_list[0].nodeid; - match->valid = 1; - goto out; - } - - /* Assign my_cluster_id */ - if (my_cluster_id == 0xDEAD) { - for (i = 0; i < joined_list_entries; i++) { - LOG_DBG("My pid = %d\t\t[%u/%d]", my_pid, - joined_list[i].nodeid, joined_list[i].pid); - if (joined_list[i].pid == my_pid) { - if (my_cluster_id != 0xDEAD) { - LOG_ERROR("Unable to determine my cluster id. Killing myself."); - exit(1); - } - my_cluster_id = joined_list[i].nodeid; - LOG_DBG("Setting my cluster id: %u", my_cluster_id); + if (match->startup_queue->count) { + LOG_ERROR("%d startup items remain in cluster log", + match->startup_queue->count); + while (!queue_empty(match->startup_queue)) { + tfr = queue_remove(match->startup_queue); + queue_add(tfr, free_queue); } } - } - if (member_list_entries) - match->lowest_id = member_list[0].nodeid; - else + free(match->startup_queue); + match->free_me = 1; match->lowest_id = 0xDEAD; + match->state = INVALID; + } + /* Find the lowest_id, i.e. the server */ + if (!member_list_entries) { + match->lowest_id = 0xDEAD; + LOG_DBG("[%s] Server change %u -> " + "(%u is last to leave)", + SHORT_UUID(match->name.value), left->nodeid, + left->nodeid); + return; + } + + match->lowest_id = member_list[0].nodeid; for (i = 0; i < member_list_entries; i++) if (match->lowest_id > member_list[i].nodeid) match->lowest_id = member_list[i].nodeid; - /* - * If I am part of the joining list, I do not send checkpoints - * FIXME: What are the cases where multiple nodes can join? - */ - for (i = 0; i < joined_list_entries; i++) - if (joined_list[i].nodeid == my_cluster_id) - goto out; + if (lowest != match->lowest_id) { + LOG_DBG("[%s] Server change %u -> %u (%u left)", + SHORT_UUID(match->name.value), lowest, + match->lowest_id, left->nodeid); - for (i = 0, j = match->checkpoints_needed; i < joined_list_entries; i++) { - struct clog_tfr *tfr; - LOG_DBG("Joining node, %u needs checkpoint", joined_list[i].nodeid); + list_for_each_safe(p, n, &cluster_queue->list) { + tfr = (struct clog_tfr *)p; - if (queue_empty(match->startup_queue)) { - match->checkpoint_requesters[match->checkpoints_needed++] = joined_list[i].nodeid; - continue; + /* + * Don't resend DM_CLOG_POSTSUSPEND request, it will + * be handled when we get our own config leave + */ + if (!strcmp(match->name.value, tfr->uuid) && + (tfr->request_type != DM_CLOG_POSTSUSPEND)){ + LOG_ERROR("[%s] Resending %s from %u due to new server", + SHORT_UUID(match->name.value), + RQ_TYPE(tfr->request_type), + tfr->originator); + if (cluster_send(tfr)) + LOG_ERROR("Failed resend"); + } } + } else + LOG_DBG("[%s] Server unchanged at %u (%u left)", + SHORT_UUID(match->name.value), lowest, left->nodeid); - tfr = queue_remove(free_queue); - if (!tfr) { - LOG_PRINT("cpg_config_callback: Preallocated transfer structs exhausted"); - tfr = malloc(DM_CLOG_TFR_SIZE); - if (!tfr) { - LOG_ERROR("cpg_config_callback: Unable to allocate transfer structs"); - LOG_ERROR("cpg_config_callback: Unable to perform checkpoint"); - return; - } +} + +static void cpg_config_callback(cpg_handle_t handle, struct cpg_name *gname, + struct cpg_address *member_list, + int member_list_entries, + struct cpg_address *left_list, + int left_list_entries, + struct cpg_address *joined_list, + int joined_list_entries) +{ + struct clog_cpg *match, *tmp; + int found = 0; + + memberz = member_list_entries; + + list_for_each_entry_safe(match, tmp, &clog_cpg_list, list) + if (match->handle == handle) { + found = 1; + break; } - tfr->request_type = DM_CLOG_CONFIG_CHANGE; - tfr->originator = joined_list[i].nodeid; - queue_add_tail(tfr, match->startup_queue); + + if (!found) { + LOG_ERROR("Unable to find match for CPG config callback"); + return; } -out: - if (lowest != match->lowest_id) - LOG_DBG("[%s] Server change %u -> %u (%u %s)", - SHORT_UUID(match->name.value), - lowest, match->lowest_id, - (joined_list_entries) ? joined_list[0].nodeid : left_list[0].nodeid, - (joined_list_entries && (member_list_entries == 1)) ? - "is first to join" : (joined_list_entries) ? "joined" : "left"); + if ((joined_list_entries + left_list_entries) > 1) + LOG_ERROR("[%s] More than one node joining/leaving", + SHORT_UUID(match->name.value)); + + if (joined_list_entries) + cpg_join_callback(match, joined_list, + member_list, member_list_entries); else - LOG_DBG("[%s] Server unchanged at %u (%u %s)", - SHORT_UUID(match->name.value), lowest, - (joined_list_entries) ? joined_list[0].nodeid : left_list[0].nodeid, - (joined_list_entries) ? "joined" : "left"); + cpg_leave_callback(match, left_list, + member_list, member_list_entries); if (joined_list_entries && (joined_list[0].nodeid == my_cluster_id)) doit = 25; @@ -1137,6 +1179,7 @@ int destroy_cluster_cpg(char *str) if (r != CPG_OK) LOG_ERROR("Error leaving CPG!"); break; + del->state = LEAVING; } return 0; diff --git a/cmirror/src/functions.c b/cmirror/src/functions.c index a4c06cf..9756136 100644 --- a/cmirror/src/functions.c +++ b/cmirror/src/functions.c @@ -1212,6 +1212,16 @@ static int clog_set_region_sync(struct clog_tfr *tfr) SHORT_UUID(lc->uuid), (unsigned long long)lc->sync_count, (unsigned long long)pkg->region, tfr->originator); } + + if (lc->sync_count != count_bits32(lc->sync_bits, lc->bitset_uint32_count)) { + unsigned long long reset = count_bits32(lc->sync_bits, lc->bitset_uint32_count); + + LOG_ERROR("[%s] sync_count(%llu) does not match bitmap count(%llu)", + SHORT_UUID(lc->uuid), (unsigned long long)lc->sync_count, reset); + LOG_ERROR("[%s] Resetting sync_count = %llu", SHORT_UUID(lc->uuid), reset); + lc->sync_count = reset; + } + tfr->data_size = 0; return 0; @@ -1511,25 +1521,32 @@ int do_request(struct clog_tfr *tfr, int server) return 0; } -static void print_bits(char *buf, int size) +static void print_bits(char *buf, int size, int print) { -#ifdef DEBUG int i; char outbuf[128]; memset(outbuf, 0, sizeof(outbuf)); + for (i = 0; i < size; i++) { if (!(i % 16)) { - if (outbuf[0] != '\0') - LOG_DBG("%s", outbuf); + if (outbuf[0] != '\0') { + if (print) + LOG_PRINT("%s", outbuf); + else + LOG_DBG("%s", outbuf); + } memset(outbuf, 0, sizeof(outbuf)); sprintf(outbuf, "[%3d - %3d]", i, i+15); } sprintf(outbuf + strlen(outbuf), " %.2X", (unsigned char)buf[i]); } - if (outbuf[0] != '\0') - LOG_DBG("%s", outbuf); -#endif + if (outbuf[0] != '\0') { + if (print) + LOG_PRINT("%s", outbuf); + else + LOG_DBG("%s", outbuf); + } } /* int store_bits(const char *uuid, const char *which, char **buf)*/ @@ -1566,12 +1583,14 @@ int push_state(const char *uuid, const char *which, char **buf) if (!strncmp(which, "sync_bits", 9)) { memcpy(*buf, lc->sync_bits, bitset_size); - LOG_DBG("[%s] storing sync_bits:", SHORT_UUID(lc->uuid)); - print_bits(*buf, bitset_size); + LOG_DBG("[%s] storing sync_bits (sync_count = %llu):", + SHORT_UUID(uuid), (unsigned long long) + count_bits32(lc->sync_bits, lc->bitset_uint32_count)); + print_bits(*buf, bitset_size, 0); } else if (!strncmp(which, "clean_bits", 9)) { memcpy(*buf, lc->clean_bits, bitset_size); LOG_DBG("[%s] storing clean_bits:", SHORT_UUID(lc->uuid)); - print_bits(*buf, bitset_size); + print_bits(*buf, bitset_size, 0); } return bitset_size; @@ -1610,13 +1629,15 @@ int pull_state(const char *uuid, const char *which, char *buf, int size) if (!strncmp(which, "sync_bits", 9)) { lc->resume_override += 1; memcpy(lc->sync_bits, buf, bitset_size); - LOG_DBG("[%s] loading sync_bits:", SHORT_UUID(lc->uuid)); - print_bits((char *)lc->sync_bits, bitset_size); + LOG_DBG("[%s] loading sync_bits (sync_count = %llu):", + SHORT_UUID(lc->uuid),(unsigned long long) + count_bits32(lc->sync_bits, lc->bitset_uint32_count)); + print_bits((char *)lc->sync_bits, bitset_size, 0); } else if (!strncmp(which, "clean_bits", 9)) { lc->resume_override += 2; memcpy(lc->clean_bits, buf, bitset_size); LOG_DBG("[%s] loading clean_bits:", SHORT_UUID(lc->uuid)); - print_bits((char *)lc->clean_bits, bitset_size); + print_bits((char *)lc->clean_bits, bitset_size, 0); } return 0; @@ -1647,12 +1668,12 @@ int log_status(int output_wanted) lc = list_entry(l, struct log_c, list); if (output_wanted) { LOG_PRINT("%s", lc->uuid); - LOG_DBG("sync_bits:"); + LOG_PRINT("sync_bits:"); print_bits((char *)lc->sync_bits, - lc->bitset_uint32_count * sizeof(*lc->sync_bits)); - LOG_DBG("clean_bits:"); + lc->bitset_uint32_count * sizeof(*lc->sync_bits), 1); + LOG_PRINT("clean_bits:"); print_bits((char *)lc->clean_bits, - lc->bitset_uint32_count * sizeof(*lc->clean_bits)); + lc->bitset_uint32_count * sizeof(*lc->clean_bits), 1); } } if (output_wanted) @@ -1662,14 +1683,37 @@ int log_status(int output_wanted) lc = list_entry(l, struct log_c, list); if (output_wanted) { LOG_PRINT("%s", lc->uuid); - LOG_DBG("sync_bits:"); + LOG_PRINT("sync_bits:"); print_bits((char *)lc->sync_bits, - lc->bitset_uint32_count * sizeof(*lc->sync_bits)); - LOG_DBG("clean_bits:"); + lc->bitset_uint32_count * sizeof(*lc->sync_bits), 1); + LOG_PRINT("clean_bits:"); print_bits((char *)lc->clean_bits, - lc->bitset_uint32_count * sizeof(*lc->clean_bits)); + lc->bitset_uint32_count * sizeof(*lc->clean_bits), 1); } } return found; } +int log_validate(void) +{ + struct list_head *l; + struct log_c *lc; + uint64_t r; + + __list_for_each(l, &log_list) { + lc = list_entry(l, struct log_c, list); + LOG_PRINT("Validating %s::", SHORT_UUID(lc->uuid)); + r = find_next_zero_bit(lc->sync_bits, lc->region_count, 0); + LOG_PRINT(" lc->region_count = %llu", + (unsigned long long)lc->region_count); + LOG_PRINT(" lc->sync_count = %llu", + (unsigned long long)lc->sync_count); + LOG_PRINT(" next zero bit = %llu", + (unsigned long long)r); + if (r >= lc->region_count) { + LOG_PRINT("ADJUSTING SYNC_COUNT"); + lc->sync_count = lc->region_count; + } + } + return 0; +} diff --git a/cmirror/src/functions.h b/cmirror/src/functions.h index b793511..f24d411 100644 --- a/cmirror/src/functions.h +++ b/cmirror/src/functions.h @@ -20,4 +20,5 @@ int pull_state(const char *uuid, const char *which, char *buf, int size); int log_get_state(struct clog_tfr *tfr); int log_status(int); +int log_validate(void); #endif /* __CLOG_FUNCTIONS_DOT_H__ */ diff --git a/cmirror/src/local.c b/cmirror/src/local.c index 93a99a8..b6aa0af 100644 --- a/cmirror/src/local.c +++ b/cmirror/src/local.c @@ -19,48 +19,54 @@ static int cn_fd; /* Connector (netlink) socket fd */ static int kernel_recv_helper(void *data, int in_size) { - int r; + int len; struct cn_msg *msg; unsigned char buf[2048]; - ENTER(); - /* FIXME: get rid of buf and use passed in 'data' */ memset(buf, 0, sizeof(buf)); - r = recv(cn_fd, buf, sizeof(buf), 0); - if (r < 0) { + len = recv(cn_fd, buf, sizeof(buf), 0); + if (len < 0) { LOG_ERROR("Failed to recv message from kernel"); - r = -errno; - goto out; + return -errno; } switch (((struct nlmsghdr *)buf)->nlmsg_type) { case NLMSG_ERROR: LOG_ERROR("Unable to recv message from kernel: NLMSG_ERROR"); - r = -EBADE; - break; + return -EBADE; case NLMSG_DONE: msg = (struct cn_msg *) NLMSG_DATA((struct nlmsghdr *)buf); + len -= sizeof(struct nlmsghdr); + + if (len < sizeof(struct cn_msg)) { + LOG_ERROR("Incomplete request from kernel received"); + return -EBADE; + } + if (msg->len > in_size) { LOG_ERROR("Not enough space to receive kernel request (%d/%d)", msg->len, in_size); return -EBADE; } + if (!msg->len) LOG_ERROR("Zero length message received"); + len -= sizeof(struct cn_msg); + + if (len < msg->len) + LOG_ERROR("len = %d, msg->len = %d", len, msg->len); + memcpy(data, msg->data, msg->len); - r = 0; break; default: LOG_ERROR("Unknown nlmsg_type"); - r = -EBADE; - break; + return -EBADE; } -out: - EXIT(); - return r; + + return 0; } /* @@ -77,7 +83,6 @@ static int kernel_recv(struct clog_tfr **tfr) { int r = 0; - ENTER(); /* * A failure to allocate space means the request is lost * The kernel must retry @@ -99,7 +104,6 @@ static int kernel_recv(struct clog_tfr **tfr) *tfr = NULL; } - EXIT(); return (r == -EAGAIN) ? 0 : r; } @@ -110,7 +114,6 @@ static int kernel_send_helper(void *data, int out_size) struct cn_msg *msg; unsigned char buf[2048]; - ENTER(); memset(buf, 0, sizeof(buf)); nlh = (struct nlmsghdr *)buf; @@ -130,12 +133,9 @@ static int kernel_send_helper(void *data, int out_size) r = send(cn_fd, nlh, NLMSG_LENGTH(out_size + sizeof(struct cn_msg)), 0); /* FIXME: do better error processing */ if (r <= 0) - r = -EBADE; - else - r = 0; + return -EBADE; - EXIT(); - return r; + return 0; } /* @@ -153,7 +153,6 @@ static int do_local_work(void *data) int r; struct clog_tfr *tfr = NULL; - ENTER(); r = kernel_recv(&tfr); if (r) return r; @@ -243,7 +242,6 @@ static int do_local_work(void *data) tfr->error = r; } - EXIT(); return r; } diff --git a/cmirror/src/queues.c b/cmirror/src/queues.c index 0bf1aee..eeab79f 100644 --- a/cmirror/src/queues.c +++ b/cmirror/src/queues.c @@ -1,6 +1,8 @@ #include #include +#include + #include "queues.h" #include "common.h" #include "logging.h" @@ -184,7 +186,12 @@ struct clog_tfr *queue_remove(struct queue *q) tfr = (struct clog_tfr *)q->list.next; list_del_init((struct list_head *)&tfr->private); q->count--; - +/* + if (q == cluster_queue) + LOG_ERROR("[%s] remove %s %llu", + SHORT_UUID(tfr->uuid), RQ_TYPE(tfr->request_type), + (unsigned long long)tfr->seq); +*/ return tfr; } @@ -219,6 +226,12 @@ struct clog_tfr *queue_remove_match(struct queue *q, list_del_init(p); q->count--; +/* + if (q == cluster_queue) + LOG_ERROR("[%s] remove match %s %llu", + SHORT_UUID(tfr->uuid), RQ_TYPE(tfr->request_type), + (unsigned long long)tfr->seq); +*/ return tfr; } } @@ -236,6 +249,20 @@ struct clog_tfr *queue_remove_match(struct queue *q, */ void queue_remove_all(struct list_head *l, struct queue *q) { +/* + struct clog_tfr *tfr; + struct list_head *p, *n; + + if (q == cluster_queue) { + LOG_ERROR("[--] remove all"); + list_for_each_safe(p, n, &q->list) { + tfr = (struct clog_tfr *)p; + LOG_ERROR(" [%s] %s %llu", + SHORT_UUID(tfr->uuid), RQ_TYPE(tfr->request_type), + (unsigned long long)tfr->seq); + } + } +*/ list_splice_init(&q->list, l); q->count = 0; } hooks/post-receive -- Cluster Project From fabbione@sourceware.org Wed Mar 26 20:22:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 26 Mar 2008 20:22:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-99-gb08be99 Message-ID: <20080326202235.15733.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b08be99c3a37ff4aeeb309d0c03ecce9f04904ab The branch, master has been updated via b08be99c3a37ff4aeeb309d0c03ecce9f04904ab (commit) from abf5d4d8a61b28ee786b94436c6f82ee484f7fc7 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b08be99c3a37ff4aeeb309d0c03ecce9f04904ab Author: Jonathan Brassow Date: Wed Mar 26 09:05:43 2008 -0500 rgmanager/lvm.sh: Fix bug 438816 Missing VG name parameter to 'vgchange --deltag' call caused tag to be remove from all VGs, not just the intended one. Thanks to Simone Gotti for the patch. ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/lvm_by_vg.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/resources/lvm_by_vg.sh b/rgmanager/src/resources/lvm_by_vg.sh index e97f9b9..b1840a1 100755 --- a/rgmanager/src/resources/lvm_by_vg.sh +++ b/rgmanager/src/resources/lvm_by_vg.sh @@ -56,7 +56,7 @@ function strip_tags for i in `vgs --noheadings -o tags $OCF_RESKEY_vg_name | sed s/","/" "/g`; do ocf_log info "Stripping tag, $i" - vgchange --deltag $i + vgchange --deltag $i $OCF_RESKEY_vg_name done if [ ! -z `vgs -o tags --noheadings $OCF_RESKEY_vg_name` ]; then @@ -93,6 +93,7 @@ function vg_status local i local dev local readdev + local my_name=$(local_node_name) # # Check that all LVs are active hooks/post-receive -- Cluster Project From fabbione@sourceware.org Wed Mar 26 20:32:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Wed, 26 Mar 2008 20:32:00 -0000 Subject: Cluster Project branch, STABLE2, updated. cluster-2.02.00-29-g1ab4aee Message-ID: <20080326203204.20394.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=1ab4aee93103fde81451e3a435944615e36093de The branch, STABLE2 has been updated via 1ab4aee93103fde81451e3a435944615e36093de (commit) from 759c998c8c9f851da69aa38d84a3fc6d382af47f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 1ab4aee93103fde81451e3a435944615e36093de Author: Jonathan Brassow Date: Wed Mar 26 09:05:43 2008 -0500 rgmanager/lvm.sh: Fix bug 438816 Missing VG name parameter to 'vgchange --deltag' call caused tag to be remove from all VGs, not just the intended one. Thanks to Simone Gotti for the patch. ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/lvm_by_vg.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/resources/lvm_by_vg.sh b/rgmanager/src/resources/lvm_by_vg.sh index e97f9b9..b1840a1 100755 --- a/rgmanager/src/resources/lvm_by_vg.sh +++ b/rgmanager/src/resources/lvm_by_vg.sh @@ -56,7 +56,7 @@ function strip_tags for i in `vgs --noheadings -o tags $OCF_RESKEY_vg_name | sed s/","/" "/g`; do ocf_log info "Stripping tag, $i" - vgchange --deltag $i + vgchange --deltag $i $OCF_RESKEY_vg_name done if [ ! -z `vgs -o tags --noheadings $OCF_RESKEY_vg_name` ]; then @@ -93,6 +93,7 @@ function vg_status local i local dev local readdev + local my_name=$(local_node_name) # # Check that all LVs are active hooks/post-receive -- Cluster Project From fabbione@sourceware.org Thu Mar 27 06:42:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Thu, 27 Mar 2008 06:42:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-100-gb593d15 Message-ID: <20080327064207.22090.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=b593d15ea42423440da2e6fdaf2bb9754d03632b The branch, master has been updated via b593d15ea42423440da2e6fdaf2bb9754d03632b (commit) from b08be99c3a37ff4aeeb309d0c03ecce9f04904ab (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b593d15ea42423440da2e6fdaf2bb9754d03632b Author: Fabio M. Di Nitto Date: Thu Mar 27 07:39:46 2008 +0100 [CMAN] Fix config handling Some objects were not relocated properly and it was breaking logging among other bits. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/daemon/ais.c | 6 +++++- cman/daemon/cman-preconfig.c | 12 ++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cman/daemon/ais.c b/cman/daemon/ais.c index f23ca06..e11131b 100644 --- a/cman/daemon/ais.c +++ b/cman/daemon/ais.c @@ -64,6 +64,7 @@ int num_interfaces; uint64_t incarnation; int num_ais_nodes; extern unsigned int config_version; +static unsigned int cluster_parent_handle; static int startup_pipe; static unsigned int debug_mask; @@ -177,7 +178,10 @@ static int cman_exec_init_fn(struct objdb_iface_ver0 *objdb) /* Get our config variables */ objdb->object_find_reset(OBJECT_PARENT_HANDLE); - if (objdb->object_find(OBJECT_PARENT_HANDLE, "cman", strlen("cman"), &object_handle) == 0) + objdb->object_find(OBJECT_PARENT_HANDLE, + "cluster", strlen("cluster"), &cluster_parent_handle); + + if (objdb->object_find(cluster_parent_handle, "cman", strlen("cman"), &object_handle) == 0) { objdb_get_int(objdb, object_handle, "quorum_dev_poll", &quorumdev_poll); objdb_get_int(objdb, object_handle, "shutdown_timeout", &shutdown_timeout); diff --git a/cman/daemon/cman-preconfig.c b/cman/daemon/cman-preconfig.c index c45cc0e..b3dc805 100644 --- a/cman/daemon/cman-preconfig.c +++ b/cman/daemon/cman-preconfig.c @@ -616,15 +616,15 @@ static void add_cman_overrides(struct objdb_iface_ver0 *objdb) } /* Make sure mainconfig doesn't stomp on our logging options */ - if (objdb->object_find(cluster_parent_handle, + if (objdb->object_find(OBJECT_PARENT_HANDLE, "logging", strlen("logging"), &object_handle)) { - objdb->object_create(cluster_parent_handle, &object_handle, + objdb->object_create(OBJECT_PARENT_HANDLE, &object_handle, "logging", strlen("logging")); } - objdb->object_find_reset(cluster_parent_handle); - if (objdb->object_find(cluster_parent_handle, + objdb->object_find_reset(OBJECT_PARENT_HANDLE); + if (objdb->object_find(OBJECT_PARENT_HANDLE, "logging", strlen("logging"), &object_handle) == 0) { unsigned int logger_object_handle; @@ -650,8 +650,8 @@ static void add_cman_overrides(struct objdb_iface_ver0 *objdb) } /* Don't run under user "ais" */ - objdb->object_find_reset(cluster_parent_handle); - if (objdb->object_find(cluster_parent_handle, "aisexec", strlen("aisexec"), &object_handle) == 0) + objdb->object_find_reset(OBJECT_PARENT_HANDLE); + if (objdb->object_find(OBJECT_PARENT_HANDLE, "aisexec", strlen("aisexec"), &object_handle) == 0) { objdb->object_key_create(object_handle, "user", strlen("user"), "root", strlen("root") + 1); hooks/post-receive -- Cluster Project From jbrassow@sourceware.org Thu Mar 27 19:00:00 2008 From: jbrassow@sourceware.org (jbrassow@sourceware.org) Date: Thu, 27 Mar 2008 19:00:00 -0000 Subject: Cluster Project branch, RHEL52, updated. cmirror_1_1_15-16-g5646af6 Message-ID: <20080327190025.1335.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=5646af65c370043448f7b7f7574e9a053c2bb31e The branch, RHEL52 has been updated via 5646af65c370043448f7b7f7574e9a053c2bb31e (commit) from c1f442a049bc5f7369ff5c88a834dab2e9b09251 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5646af65c370043448f7b7f7574e9a053c2bb31e Author: Jonathan Brassow Date: Wed Mar 26 09:09:08 2008 -0500 rgmanager/lvm.sh: Fix Bug 438816 Missing VG name parameter to 'vgchange --deltag' call caused tag to be remove from all VGs, not just the intended one. Thanks to Simone Gotti for the patch. ----------------------------------------------------------------------- Summary of changes: rgmanager/src/resources/lvm_by_vg.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/rgmanager/src/resources/lvm_by_vg.sh b/rgmanager/src/resources/lvm_by_vg.sh index e97f9b9..b1840a1 100755 --- a/rgmanager/src/resources/lvm_by_vg.sh +++ b/rgmanager/src/resources/lvm_by_vg.sh @@ -56,7 +56,7 @@ function strip_tags for i in `vgs --noheadings -o tags $OCF_RESKEY_vg_name | sed s/","/" "/g`; do ocf_log info "Stripping tag, $i" - vgchange --deltag $i + vgchange --deltag $i $OCF_RESKEY_vg_name done if [ ! -z `vgs -o tags --noheadings $OCF_RESKEY_vg_name` ]; then @@ -93,6 +93,7 @@ function vg_status local i local dev local readdev + local my_name=$(local_node_name) # # Check that all LVs are active hooks/post-receive -- Cluster Project From rmccabe@sourceware.org Fri Mar 28 01:15:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 28 Mar 2008 01:15:00 -0000 Subject: conga ./clustermon.spec.in.in make/version.in Message-ID: <20080328011516.9443.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Branch: RHEL5 Changes by: rmccabe@sourceware.org 2008-03-28 01:15:16 Modified files: . : clustermon.spec.in.in make : version.in Log message: Fix bz439186 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.18.2.34&r2=1.18.2.35 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.35&r2=1.21.2.36 From rmccabe@sourceware.org Fri Mar 28 01:17:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 28 Mar 2008 01:17:00 -0000 Subject: conga ./clustermon.spec.in.in ./ricci.spec.in. ... Message-ID: <20080328011712.9965.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-28 01:17:12 Modified files: . : clustermon.spec.in.in ricci.spec.in.in make : version.in Log message: Fix bz433678 Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/clustermon.spec.in.in.diff?cvsroot=cluster&r1=1.40&r2=1.41 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/make/version.in.diff?cvsroot=cluster&r1=1.35&r2=1.36 From rmccabe@sourceware.org Fri Mar 28 01:18:00 2008 From: rmccabe@sourceware.org (rmccabe@sourceware.org) Date: Fri, 28 Mar 2008 01:18:00 -0000 Subject: conga ricci.spec.in.in Message-ID: <20080328011851.10313.qmail@sourceware.org> CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe@sourceware.org 2008-03-28 01:18:51 Modified files: . : ricci.spec.in.in Log message: date ordering Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.8&r2=1.9 From fabbione@sourceware.org Fri Mar 28 04:53:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 28 Mar 2008 04:53:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-101-g52d85c3 Message-ID: <20080328045345.1331.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=52d85c30227993e5ae60c8846eef3baf42c279d5 The branch, master has been updated via 52d85c30227993e5ae60c8846eef3baf42c279d5 (commit) from b593d15ea42423440da2e6fdaf2bb9754d03632b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 52d85c30227993e5ae60c8846eef3baf42c279d5 Author: Fabio M. Di Nitto Date: Fri Mar 28 05:52:34 2008 +0100 [CMAN] Do not duplicate entries in the objdb A dump-db did show duplicate entries of logging and totem because we were not looking for previous entries correctly. Make sure to reset to the proper handle before searching. Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/daemon/cman-preconfig.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cman/daemon/cman-preconfig.c b/cman/daemon/cman-preconfig.c index b3dc805..ba114bc 100644 --- a/cman/daemon/cman-preconfig.c +++ b/cman/daemon/cman-preconfig.c @@ -127,10 +127,11 @@ static int add_ifaddr(struct objdb_iface_ver0 *objdb, char *mcast, char *ifaddr, return -1; } - if (objdb->object_find(OBJECT_PARENT_HANDLE, + objdb->object_find_reset(OBJECT_PARENT_HANDLE); + if (objdb->object_find(OBJECT_PARENT_HANDLE, "totem", strlen("totem"), &totem_object_handle)) { - objdb->object_create(OBJECT_PARENT_HANDLE, &totem_object_handle, + objdb->object_create(OBJECT_PARENT_HANDLE, &totem_object_handle, "totem", strlen("totem")); } @@ -616,6 +617,7 @@ static void add_cman_overrides(struct objdb_iface_ver0 *objdb) } /* Make sure mainconfig doesn't stomp on our logging options */ + objdb->object_find_reset(OBJECT_PARENT_HANDLE); if (objdb->object_find(OBJECT_PARENT_HANDLE, "logging", strlen("logging"), &object_handle)) { hooks/post-receive -- Cluster Project From fabbione@sourceware.org Fri Mar 28 05:40:00 2008 From: fabbione@sourceware.org (fabbione@sourceware.org) Date: Fri, 28 Mar 2008 05:40:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-102-g4a5cd1e Message-ID: <20080328054012.8161.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=4a5cd1e6a072618e0700bb0aabc73813fd49bbae The branch, master has been updated via 4a5cd1e6a072618e0700bb0aabc73813fd49bbae (commit) from 52d85c30227993e5ae60c8846eef3baf42c279d5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4a5cd1e6a072618e0700bb0aabc73813fd49bbae Author: Fabio M. Di Nitto Date: Fri Mar 28 06:39:45 2008 +0100 [CMAN] qdisk: add credits to Joel Signed-off-by: Fabio M. Di Nitto ----------------------------------------------------------------------- Summary of changes: cman/qdisk/scandisk.c | 4 ++++ cman/qdisk/scandisk.h | 4 ++++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/cman/qdisk/scandisk.c b/cman/qdisk/scandisk.c index f4f7e0d..6e04e1e 100644 --- a/cman/qdisk/scandisk.c +++ b/cman/qdisk/scandisk.c @@ -4,6 +4,10 @@ ** Copyright (C) 2008 Fabio M. Di Nitto . ** All rights reserved. ** +** Original design by: +** Joel Becker +** Fabio M. Di Nitto +** ** This copyrighted material is made available to anyone wishing to use, ** modify, copy, or redistribute it subject to the terms and conditions ** of the GNU General Public License v.2. diff --git a/cman/qdisk/scandisk.h b/cman/qdisk/scandisk.h index b103a3c..35b74c0 100644 --- a/cman/qdisk/scandisk.h +++ b/cman/qdisk/scandisk.h @@ -4,6 +4,10 @@ ** Copyright (C) 2008 Fabio M. Di Nitto . ** All rights reserved. ** +** Original design by: +** Joel Becker +** Fabio M. Di Nitto +** ** This copyrighted material is made available to anyone wishing to use, ** modify, copy, or redistribute it subject to the terms and conditions ** of the GNU General Public License v.2. hooks/post-receive -- Cluster Project From jparsons@sourceware.org Fri Mar 28 15:11:00 2008 From: jparsons@sourceware.org (jparsons@sourceware.org) Date: Fri, 28 Mar 2008 15:11:00 -0000 Subject: Cluster Project branch, RHEL52, updated. cmirror_1_1_15-17-g5117298 Message-ID: <20080328151135.31111.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=5117298a37806feea827b4cd4bf44040484aa361 The branch, RHEL52 has been updated via 5117298a37806feea827b4cd4bf44040484aa361 (commit) from 5646af65c370043448f7b7f7574e9a053c2bb31e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 5117298a37806feea827b4cd4bf44040484aa361 Author: jparsons Date: Fri Mar 28 03:21:55 2008 -0400 Adds APC snmp fence agent into distribution. This commit includes fence_apc_snmp in the fence package, and also places the apc mib file in /usr/share/snmp/mibs. ----------------------------------------------------------------------- Summary of changes: fence/agents/{apc => apc_snmp}/Makefile | 12 +- fence/agents/apc_snmp/fence_apc_snmp.py | 463 ++++++++++++++++++++++++ fence/agents/{apc => apc_snmp}/powernet369.mib | 0 fence/configure | 7 + fence/make/defines.mk.input | 4 + 5 files changed, 483 insertions(+), 3 deletions(-) copy fence/agents/{apc => apc_snmp}/Makefile (86%) create mode 100755 fence/agents/apc_snmp/fence_apc_snmp.py copy fence/agents/{apc => apc_snmp}/powernet369.mib (100%) diff --git a/fence/agents/apc/Makefile b/fence/agents/apc_snmp/Makefile similarity index 86% copy from fence/agents/apc/Makefile copy to fence/agents/apc_snmp/Makefile index c33350a..29a0df7 100644 --- a/fence/agents/apc/Makefile +++ b/fence/agents/apc_snmp/Makefile @@ -11,15 +11,16 @@ ############################################################################### ############################################################################### -SOURCE= fence_apc.py -TARGET= fence_apc +SOURCE= fence_apc_snmp.py +TARGET= fence_apc_snmp +RESOURCE= powernet369.mib top_srcdir=../.. include ${top_srcdir}/make/defines.mk all: $(TARGET) -fence_apc: fence_apc.py +fence_apc_snmp: fence_apc_snmp.py : > $(TARGET) awk "{print}(\$$1 ~ /#BEGIN_VERSION_GENERATION/){exit 0}" $(SOURCE) >> $(TARGET) echo "FENCE_RELEASE_NAME=\"${RELEASE}\";" >> $(TARGET) @@ -34,5 +35,10 @@ install: all fi install -m755 ${TARGET} ${sbindir} + if [ ! -d ${mibdir} ]; then \ + install -d ${mibdir}; \ + fi + install -m755 ${RESOURCE} ${mibdir} + clean: rm -f $(TARGET) diff --git a/fence/agents/apc_snmp/fence_apc_snmp.py b/fence/agents/apc_snmp/fence_apc_snmp.py new file mode 100755 index 0000000..9fd0c14 --- /dev/null +++ b/fence/agents/apc_snmp/fence_apc_snmp.py @@ -0,0 +1,463 @@ +#!/usr/bin/python + +############################################################################# +############################################################################# +## +## Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. +## Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. +## +## This copyrighted material is made available to anyone wishing to use, +## modify, copy, or redistribute it subject to the terms and conditions +## of the GNU General Public License v.2. +## +############################################################################# +## This APC Fence script uses snmp to control the APC power +## switch. This script requires that net-snmp-utils be installed +## on all nodes in the cluster, and that the powernet369.mib file be +## located in /usr/share/snmp/mibs/ +############################################################################# +############################################################################# + + + +import getopt, sys +import os +import datetime +import select +import signal +from glob import glob + +#BEGIN_VERSION_GENERATION +FENCE_RELEASE_NAME="" +REDHAT_COPYRIGHT="" +BUILD_DATE="" +#END_VERSION_GENERATION + +POWER_ON="outletOn" +POWER_OFF="outletOff" +POWER_REBOOT="outletReboot" + + +# oid defining fence device +oid_sysObjectID = '.1.3.6.1.2.1.1.2.0' + + + +class SNMP: + def __init__(self, params): + self.hostname = params['ipaddr'] + self.udpport = params['udpport'] + self.community = params['community'] + + def get(self, oid): + args = ['/usr/bin/snmpget'] + args.append('-Oqn') + args.append('-v') + args.append('1') + args.append('-c') + args.append(self.community) + args.append('-m') + args.append('ALL') + args.append(self.hostname + ':' + self.udpport) + args.append(oid) + strr, code = execWithCaptureStatus("/usr/bin/snmpget", args) + if code: + raise Exception, 'snmpget failed' + l = strr.strip().split() + return l[0], ' '.join(l[1:]) + + def set_int(self, oid, value): + args = ['/usr/bin/snmpset'] + args.append('-Oqn') + args.append('-v') + args.append('1') + args.append('-c') + args.append(self.community) + args.append('-m') + args.append('ALL') + args.append(self.hostname + ':' + self.udpport) + args.append(oid) + args.append('i') + args.append(str(value)) + strr,code = execWithCaptureStatus("/usr/bin/snmpset", args) + if code: + raise Exception, 'snmpset failed' + + def walk(self, oid): + args = ['/usr/bin/snmpwalk'] + args.append('-Oqn') + args.append('-v') + args.append('1') + args.append('-c') + args.append(self.community) + args.append('-m') + args.append('ALL') + args.append(self.hostname + ':' + self.udpport) + args.append(oid) + strr,code = execWithCaptureStatus("/usr/bin/snmpwalk", args) + if code: + raise Exception, 'snmpwalk failed' + lines = strr.strip().splitlines() + ret = [] + for line in lines: + l = line.strip().split() + ret.append((l[0], ' '.join(l[1:]).strip('"'))) + return ret + + + +class FenceAgent: + + def __init__(self, params): + self.snmp = SNMP(params) + + def resolve_outlet(self): + raise Exception, 'resolve_outlet() not implemented' + + def status(self): + oid = self.status_oid % self.resolve_outlet() + dummy, stat = self.snmp.get(oid) + if stat == self.state_on: + return 'on' + elif stat == self.state_off: + return 'off' + else: + raise Exception, 'invalid status ' + stat + + def power_off(self): + oid = self.control_oid % self.resolve_outlet() + self.snmp.set_int(oid, self.turn_off) + + def power_on(self): + oid = self.control_oid % self.resolve_outlet() + self.snmp.set_int(oid, self.turn_on) + + + + + + + + +class MasterSwitch(FenceAgent): + + def __init__(self, params): + FenceAgent.__init__(self, params) + + self.status_oid = '.1.3.6.1.4.1.318.1.1.12.3.5.1.1.4.%s' + self.control_oid = '.1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.%s' + self.outlet_table_oid = '.1.3.6.1.4.1.318.1.1.12.3.5.1.1.2' + + self.state_on = '1' + self.state_off = '2' + + self.turn_on = '1' + self.turn_off = '2' + + self.port = params['port'] + + def resolve_outlet(self): + outlet = None + try: + outlet = str(int(self.port)) + except: + table = self.snmp.walk(self.outlet_table_oid) + for row in table: + if row[1] == self.port: + t = row[0].strip().split('.') + outlet = t[len(t)-1] + if outlet == None: + raise Exception, 'unable to resolve ' + self.port + else: + self.port = outlet + return outlet + + +class MasterSwitchPlus(FenceAgent): + def __init__(self, params): + FenceAgent.__init__(self, params) + + self.status_oid = '.1.3.6.1.4.1.318.1.1.6.7.1.1.5.%s.1.%s' + self.control_oid = '.1.3.6.1.4.1.318.1.1.6.5.1.1.5.%s.1.%s' + self.outlet_table_oid = '.1.3.6.1.4.1.318.1.1.6.7.1.1.4' + + self.state_on = '1' + self.state_off = '2' + + self.turn_on = '1' + self.turn_off = '3' + + try: + self.switch = params['switch'] + except: + self.switch = '' + self.port = params['port'] + + def resolve_outlet(self): + switch = None + outlet = None + try: + switch = str(int(self.switch)) + outlet = str(int(self.port)) + except: + table = self.snmp.walk(self.outlet_table_oid) + for row in table: + if row[1] == self.port: + t = row[0].strip().split('.') + outlet = t[len(t)-1] + switch = t[len(t)-3] + if outlet == None: + raise Exception, 'unable to resolve ' + self.port + else: + self.switch = switch + self.port = outlet + return (switch, outlet) + + + + + + +def usage(): + print "Usage:" + print "" + print "Options:" + print " -h Usage" + print " -a IP address or hostname of fence device" + print " -u UDP port to use (default 161)" + print " -c SNMP community (default 'private')" + print " -n Outlet name/number to act on" + print " -o Action: Reboot (default), On, Off and Status" + print " -v Verbose mode - write to /tmp/apclog" + print " -V Version" + + sys.exit(0) + + + +file_log = None +def set_logging(verbose): + global file_log + if verbose: + file_log = open('/tmp/apclog', 'a') + file_log.write('\n----------- ') + file_log.write(datetime.datetime.today().ctime()) + file_log.write(' -----------\n') +def log(msg, error=False): + global file_log + if msg.rfind('\n') != len(msg)-1: + msg += '\n' + if file_log != None: + file_log.write(msg) + if error: + o = sys.stderr + else: + o = sys.stdout + o.write(msg) + + + +def main(): + try: + main2() + return 0 + except Exception, e: + log(str(e), True) + sys.exit(1) +def main2(): + + agents_dir = {'.1.3.6.1.4.1.318.1.3.4.5' : MasterSwitch, + '.1.3.6.1.4.1.318.1.3.4.4' : MasterSwitchPlus} + + verbose = False + params = {} + + if len(sys.argv) > 1: + try: + opts, args = getopt.getopt(sys.argv[1:], "ha:u:c:n:o:vV", ["help", "output="]) + except getopt.GetoptError: + usage() + sys.exit(2) + + for o, a in opts: + o = o.strip() + a = a.strip() + if o == "-v": + verbose = True + if o == "-V": + print "%s\n" % FENCE_RELEASE_NAME + print "%s\n" % REDHAT_COPYRIGHT + print "%s\n" % BUILD_DATE + sys.exit(0) + if o in ("-h", "--help"): + usage() + sys.exit(0) + if o == "-a": + params['ipaddr'] = a + if o == "-u": + params['udpport'] = a + if o == "-c": + params['community'] = a + if o == "-n": + switch = '' + port = a + if ':' in port: + idx = port.find(':') + switch = port[:idx] + port = port[idx+1:] + params['switch'] = switch + params['port'] = port + if o == "-o": + params['option'] = a.lower() + + else: #Get opts from stdin + for line in sys.stdin: + val = line.strip().split("=") + if len(val) == 2: + o = val[0].strip().lower() + a = val[1].strip() + if o == 'verbose': + if a.lower() == 'on' or a.lower() == 'true' or a == '1': + verbose = True + else: + params[o] = a + + + set_logging(verbose) + + + ### validation ### + + try: + if params['ipaddr'] == '': + raise Exception, 'missing ipadddr' + except: + log("FENCE: Missing ipaddr param for fence_apc_snmp...exiting", True) + sys.exit(1) + if 'udpport' not in params: + params['udpport'] = '161' + try: + t = int(params['udpport']) + if t >= 65536 or t < 0: + raise Exception, 'invalid udpport' + except: + log("FENCE: Invalid udpport for fence_apc_snmp...exiting", True) + sys.exit(1) + if 'community' not in params: + params['community'] = 'private' + try: + port = params['port'] + if len(port) == 0: + raise Exception, 'missing port' + except: + log("FENCE: Missing port param for fence_apc_snmp...exiting", True) + sys.exit(1) + if 'switch' not in params: + params['switch'] = '' + try: + act = params['option'].lower() + if act in ['on', 'off', 'reboot', 'status']: + params['option'] = act + else: + usage() + sys.exit(3) + except: + params['option'] = 'reboot' + + ### End of validation ### + + if verbose: + log('called with ' + str(params)) + + agent = None + dummy, sys_id = SNMP(params).get(oid_sysObjectID) + if sys_id not in agents_dir: + log('Fence device with \'oid_sysObjectID=' + sys_id + '\' is not supported', True) + sys.exit(1) + agent = agents_dir[sys_id](params) + + if params['option'] == 'status': + log('Outlet "%s" - %s is %s' % (params['port'], + str(agent.resolve_outlet()), + agent.status())) + elif params['option'] == 'on': + agent.power_on() + if agent.status() != 'on': + raise Exception, 'Error turning outlet on' + elif params['option'] == 'off': + agent.power_off() + if agent.status() != 'off': + raise Exception, 'Error turning outlet off' + elif params['option'] == 'reboot': + agent.power_off() + if agent.status() != 'off': + raise Exception, 'Error turning outlet off' + agent.power_on() + if agent.status() != 'on': + raise Exception, 'Error turning outlet on' + else: + print 'nothing to do' + sys.exit(1) + pass + + + +def execWithCaptureStatus(command, argv, searchPath = 0, root = '/', stdin = 0, + catchfd = 1, closefd = -1): + + if not os.access (root + command, os.X_OK): + raise Exception, command + " cannot be run" + + (read, write) = os.pipe() + + childpid = os.fork() + if (not childpid): + if (root and root != '/'): os.chroot (root) + if isinstance(catchfd, tuple): + for fd in catchfd: + os.dup2(write, fd) + else: + os.dup2(write, catchfd) + os.close(write) + os.close(read) + + if closefd != -1: + os.close(closefd) + + if stdin: + os.dup2(stdin, 0) + os.close(stdin) + + if (searchPath): + os.execvp(command, argv) + else: + os.execv(command, argv) + + sys.exit(1) + + os.close(write) + + rc = "" + s = "1" + while (s): + select.select([read], [], []) + s = os.read(read, 1000) + rc = rc + s + + os.close(read) + + try: + (pid, status) = os.waitpid(childpid, 0) + except OSError, (errno, msg): + print __name__, "waitpid:", msg + + if os.WIFEXITED(status) and (os.WEXITSTATUS(status) == 0): + status = os.WEXITSTATUS(status) + else: + status = -1 + + return (rc, status) + +if __name__ == "__main__": + ret = main() + sys.exit(ret) diff --git a/fence/agents/apc/powernet369.mib b/fence/agents/apc_snmp/powernet369.mib similarity index 100% copy from fence/agents/apc/powernet369.mib copy to fence/agents/apc_snmp/powernet369.mib diff --git a/fence/configure b/fence/configure index 97d27e1..c40d098 100755 --- a/fence/configure +++ b/fence/configure @@ -33,6 +33,7 @@ $ret = 0; mandir => \$mandir, prefix => \$prefix, sbindir => \$sbindir, + mibdir => \$mibdir, initdir => \$initdir, enable_xen => \$enable_xen, verbose => \$verbose @@ -49,6 +50,7 @@ $err = &GetOptions (\%options, 'mandir=s', 'prefix=s', 'sbindir=s', + 'mibdir=s', 'initdir=s', 'sharedir=s', 'enable_xen', @@ -75,6 +77,7 @@ if ($help || !$err) { print "--mandir=\tthe base directory for man pages. (Default: /usr/share/man)\n"; print "--prefix=\tthe base directory to install into. (Default: /)\n"; print "--sbindir=\tthe base directory for system binaries. (Default: /sbin)\n"; + print "--mibdir=\tthe base directory for snmp MIB files. (Default: /usr/share/snmp/mibs)\n"; print "--initdir=\tthe base directory for init scripts. (Default: /etc/init.d)\n"; print "--sharedir=\tthe base directory for misc cluster files. (Default: /usr/share/cluster)\n"; print "--enable_xen\t\tEnable building of Xen-specific pieces\n"; @@ -108,6 +111,9 @@ if (!$mandir) { if (!$sbindir) { $sbindir="${prefix}/sbin"; } +if (!$mibdir) { + $mibdir="${prefix}/usr/share/snmp/mibs"; +} if (!$initdir) { $initdir="${prefix}/etc/init.d"; } @@ -135,6 +141,7 @@ while () { $_ =~ s/\@CCSLIBDIR\@/$ccslibdir/; $_ =~ s/\@MANDIR\@/$mandir/; $_ =~ s/\@SBINDIR\@/$sbindir/; + $_ =~ s/\@MIBDIR\@/$mibdir/; $_ =~ s/\@INITDIR\@/$initdir/; $_ =~ s/\@SHAREDIR\@/$sharedir/; $_ =~ s/\@ENABLE_XEN\@/$enable_xen/; diff --git a/fence/make/defines.mk.input b/fence/make/defines.mk.input index d19acf2..b270dea 100644 --- a/fence/make/defines.mk.input +++ b/fence/make/defines.mk.input @@ -22,6 +22,10 @@ ccsincdir ?= ${DESTDIR}@CCSINCDIR@ enable_xen ?= @ENABLE_XEN@ initdir ?= ${DESTDIR}/@INITDIR@ +# MIB directory used by apc snmp agent +mibdir ?= ${DESTDIR}/@MIBDIR@ + + # Where's the kernel? KERNEL_SRC = @KERNEL_SRC@ hooks/post-receive -- Cluster Project From mgrac@sourceware.org Fri Mar 28 15:18:00 2008 From: mgrac@sourceware.org (mgrac@sourceware.org) Date: Fri, 28 Mar 2008 15:18:00 -0000 Subject: Cluster Project branch, master, updated. gfs-kernel_0_1_22-103-g2c60edd Message-ID: <20080328151852.4133.qmail@sourceware.org> This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Cluster Project". http://sources.redhat.com/git/gitweb.cgi?p=cluster.git;a=commitdiff;h=2c60eddf3d7bedfd452c9583a7e957103e1eaa16 The branch, master has been updated via 2c60eddf3d7bedfd452c9583a7e957103e1eaa16 (commit) from 4a5cd1e6a072618e0700bb0aabc73813fd49bbae (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2c60eddf3d7bedfd452c9583a7e957103e1eaa16 Author: Marek 'marx' Grac Date: Fri Mar 28 16:11:31 2008 +0100 fence/agents: New fencings agents There are new fencing agents based on a new library. They need a 'pexpect' package. If it is possible there is support for both telnet and ssh. In this patch there are agents for: APC, BladeCenter, Drac 5, ILo and WTI. It is possible that backward compatibility is broken (to be fixed). ----------------------------------------------------------------------- Summary of changes: fence/agents/apc/apc.py | 94 ++++++++++ fence/agents/bladecenter/bladecenter.py | 84 +++++++++ fence/agents/drac/drac5.py | 72 ++++++++ fence/agents/ilo/ilo.py | 71 +++++++ fence/agents/lib/fencing.py | 303 +++++++++++++++++++++++++++++++ fence/agents/wti/wti-ips.py | 100 ++++++++++ fence/agents/wti/wti-rsm.py | 87 +++++++++ 7 files changed, 811 insertions(+), 0 deletions(-) create mode 100755 fence/agents/apc/apc.py create mode 100755 fence/agents/bladecenter/bladecenter.py create mode 100755 fence/agents/drac/drac5.py create mode 100755 fence/agents/ilo/ilo.py create mode 100644 fence/agents/lib/fencing.py create mode 100755 fence/agents/wti/wti-ips.py create mode 100755 fence/agents/wti/wti-rsm.py diff --git a/fence/agents/apc/apc.py b/fence/agents/apc/apc.py new file mode 100755 index 0000000..d502d5a --- /dev/null +++ b/fence/agents/apc/apc.py @@ -0,0 +1,94 @@ +#!/usr/bin/python + +## +## Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. +## +## The Following Agent Has Been Tested On: +## +## Model Firmware +## +---------------------------------------------+ +## AP7951 AOS v2.7.0, PDU APP v2.7.3 +## +## @note: ssh is very slow on AP7951 device +##### + +import sys, re, pexpect +sys.path.append("../lib/") +from fencing import * + +def get_power_status(conn, options): + result = "" + try: + conn.send("1\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + conn.send("2\r\n") + while 1 == conn.log_expect(options, [ options["-c"], "Press " ], SHELL_TIMEOUT): + result += conn.before + conn.send("\r\n") + result += conn.before + conn.send(chr(03)) + conn.log_expect(options, "- Logout", SHELL_TIMEOUT) + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + except pexpect.EOF: + fail(EC_CONNECTION_LOST) + except pexpect.TIMEOUT: + fail(EC_TIMED_OUT) + + status = re.compile("\s*"+options["-n"]+"-.*(ON|OFF)", re.IGNORECASE).search(result).group(1) + return status.lower().strip() + +def set_power_status(conn, options): + action = { + 'on' : "1", + 'off': "2" + }[options["-o"]] + + try: + conn.send("1\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + conn.send("2\r\n") + while 1 == conn.log_expect(options, [ options["-c"], "Press " ], SHELL_TIMEOUT): + conn.send("\r\n") + conn.send(options["-n"]+"\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + conn.send(action+"\r\n") + conn.log_expect(options, "Enter 'YES' to continue or to cancel :", SHELL_TIMEOUT) + conn.send("YES\r\n") + conn.log_expect(options, "Press to continue...", SHELL_TIMEOUT) + conn.send("\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + conn.send(chr(03)) + conn.log_expect(options, "- Logout", SHELL_TIMEOUT) + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + except pexcept.EOF: + fail(EC_CONNECTION_LOST) + except pexcept.TIMEOUT: + fail(EC_TIMED_OUT) + +def main(): + device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug", + "action", "ipaddr", "login", "passwd", "passwd_script", + "secure", "port" ] + + options = check_input(device_opt, process_input(device_opt)) + + ## + ## Fence agent specific defaults + ##### + if 0 == options.has_key("-c"): + options["-c"] = "\n>" + + ## + ## Operate the fencing device + #### + conn = fence_login(options) + fence_action(conn, options, set_power_status, get_power_status) + + ## + ## Logout from system + ###### + conn.sendline("4") + conn.close() + +if __name__ == "__main__": + main() diff --git a/fence/agents/bladecenter/bladecenter.py b/fence/agents/bladecenter/bladecenter.py new file mode 100755 index 0000000..17b1a8e --- /dev/null +++ b/fence/agents/bladecenter/bladecenter.py @@ -0,0 +1,84 @@ +#!/usr/bin/python + +## +## Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. +## +## The Following Agent Has Been Tested On: +## +## Model Firmware +## +--------------------+---------------------------+ +## (1) Main application BRET85K, rev 16 +## Boot ROM BRBR67D, rev 16 +## Remote Control BRRG67D, rev 16 +## +##### + +import sys, re, pexpect +sys.path.append("../lib/") +from fencing import * + +def get_power_status(conn, options): + try: + node_cmd = "system:blade\[" + options["-n"] + "\]>" + + conn.send("env -T system:blade[" + options["-n"] + "]\r\n") + conn.log_expect(options, node_cmd, SHELL_TIMEOUT) + conn.send("power -state\r\n") + conn.log_expect(options, node_cmd, SHELL_TIMEOUT) + status = conn.before.splitlines()[-1] + conn.send("env -T system\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + except pexpect.EOF: + fail(EC_CONNECTION_LOST) + except pexpect.TIMEOUT: + fail(EC_TIMED_OUT) + + return status.lower().strip() + +def set_power_status(conn, options): + action = { + 'on' : "powerup", + 'off': "powerdown" + }[options["-o"]] + + try: + node_cmd = "system:blade\[" + options["-n"] + "\]>" + + conn.send("env -T system:blade[" + options["-n"] + "]\r\n") + conn.log_expect(options, node_cmd, SHELL_TIMEOUT) + conn.send("power -"+options["-o"]+"\r\n") + conn.log_expect(options, node_cmd, SHELL_TIMEOUT) + conn.send("env -T system\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + except pexcept.EOF: + fail(EC_CONNECTION_LOST) + except pexcept.TIMEOUT: + fail(EC_TIMED_OUT) + +def main(): + device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug", + "action", "ipaddr", "login", "passwd", "passwd_script", + "cmd_prompt", "secure", "plug_no" ] + + options = check_input(device_opt, process_input(device_opt)) + + ## + ## Fence agent specific defaults + ##### + if 0 == options.has_key("-c"): + options["-c"] = "system>" + + ## + ## Operate the fencing device + ###### + conn = fence_login(options) + fence_action(conn, options, set_power_status, get_power_status) + + ## + ## Logout from system + ###### + conn.send("exit\r\n") + conn.close() + +if __name__ == "__main__": + main() diff --git a/fence/agents/drac/drac5.py b/fence/agents/drac/drac5.py new file mode 100755 index 0000000..d967b64 --- /dev/null +++ b/fence/agents/drac/drac5.py @@ -0,0 +1,72 @@ +#!/usr/bin/python + +## +## Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. +## +## The Following Agent Has Been Tested On: +## +## DRAC Version Firmware +## +-----------------+---------------------------+ +## DRAC 5 1.0 (Build 06.05.12) +## DRAC 5 1.21 (Build 07.05.04) +## +## @note: drac_version, modulename were removed +##### + +import sys, re, pexpect +sys.path.append("../lib/") +from fencing import * + +def get_power_status(conn, options): + try: + conn.sendline("racadm serveraction powerstatus") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + except pexpect.EOF: + fail(EC_CONNECTION_LOST) + except pexpect.TIMEOUT: + fail(EC_TIMED_OUT) + + status = re.compile("Server power status: (.*)", re.IGNORECASE).search(conn.before).group(1) + return status.lower().strip() + +def set_power_status(conn, options): + action = { + 'on' : "powerup", + 'off': "powerdown" + }[options["-o"]] + + try: + conn.sendline("racadm serveraction " + action) + conn.log_expect(options, options["-c"], POWER_TIMEOUT) + except pexcept.EOF: + fail(EC_CONNECTION_LOST) + except pexcept.TIMEOUT: + fail(EC_TIMED_OUT) + +def main(): + device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug", + "action", "ipaddr", "login", "passwd", "passwd_script", + "cmd_prompt", "secure" ] + + options = check_input(device_opt, process_input(device_opt)) + + ## + ## Fence agent specific defaults + ##### + if 0 == options.has_key("-c"): + options["-c"] = "\$" + + ## + ## Operate the fencing device + ###### + conn = fence_login(options) + fence_action(conn, options, set_power_status, get_power_status) + + ## + ## Logout from system + ###### + conn.sendline("exit") + conn.close() + +if __name__ == "__main__": + main() diff --git a/fence/agents/ilo/ilo.py b/fence/agents/ilo/ilo.py new file mode 100755 index 0000000..761501e --- /dev/null +++ b/fence/agents/ilo/ilo.py @@ -0,0 +1,71 @@ +#!/usr/bin/python + +## +## Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. +## +## The Following Agent Has Been Tested On: +## +## iLO Version +## +---------------------------------------------+ +## iLO Advanced 1.91 +## +## @note: We can't use conn.sendline because we need to send CR/LF +##### + +import sys, re, pexpect +sys.path.append("../lib/") +from fencing import * + +def get_power_status(conn, options): + try: + conn.send("POWER\r\n") + conn.log_expect(options, options["-c"], SHELL_TIMEOUT) + except pexpect.EOF: + fail(EC_CONNECTION_LOST) + except pexpect.TIMEOUT: + fail(EC_TIMED_OUT) + + status = re.compile("server power is currently: (.*)", re.IGNORECASE).search(conn.before).group(1) + return status.lower().strip() + +def set_power_status(conn, options): + action = { + 'on' : "powerup", + 'off': "powerdown" + }[options["-o"]] + + try: + conn.send("power " + options["-o"] + "\r\n") + conn.log_expect(options, options["-c"], POWER_TIMEOUT) + except pexcept.EOF: + fail(EC_CONNECTION_LOST) + except pexcept.TIMEOUT: + fail(EC_TIMED_OUT) + +def main(): + device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug", + "action", "ipaddr", "login", "passwd", "passwd_script", + "secure" ] + + options = check_input(device_opt, process_input(device_opt)) + + ## + ## Fence agent specific defaults + ##### + if 0 == options.has_key("-c"): + options["-c"] = "hpiLO->" + + ## + ## Operate the fencing device + #### + conn = fence_login(options) + fence_action(conn, options, set_power_status, get_power_status) + + ## + ## Logout from system + ###### + conn.send("quit\r\n") + conn.close() + +if __name__ == "__main__": + main() diff --git a/fence/agents/lib/fencing.py b/fence/agents/lib/fencing.py new file mode 100644 index 0000000..56c89a7 --- /dev/null +++ b/fence/agents/lib/fencing.py @@ -0,0 +1,303 @@ +#!/usr/bin/python + +## +## Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. +## +##### +import sys, getopt, time, os +import pexpect, re +import telnetlib + +POWER_TIMEOUT = 20 +SHELL_TIMEOUT = 3 +LOGIN_TIMEOUT = 5 + +LOG_MODE_VERBOSE = 100 +LOG_MODE_QUIET = 0 + +EC_BAD_ARGS = 2 +EC_LOGIN_DENIED = 3 +EC_CONNECTION_LOST = 4 +EC_TIMED_OUT = 5 +EC_WAITING_ON = 6 +EC_WAITING_OFF = 7 + +all_opt = { + "help" : { + "getopt" : "h", + "help" : "-h Display this help and exit", + "order" : 54 }, + "version" : { + "getopt" : "V", + "help" : "-V Output version information and exit", + "order" : 53 }, + "quiet" : { + "getopt" : "q", + "help" : "-q Quiet mode", + "order" : 50 }, + "verbose" : { + "getopt" : "v", + "help" : "-v Verbose mode", + "order" : 51 }, + "debug" : { + "getopt" : "D:", + "help" : "-D Debugging to output file", + "order" : 52 }, + "agent" : { + "getopt" : "", + "help" : "", + "order" : 1 }, + "action" : { + "getopt" : "o:", + "help" : "-o Action: reboot (default), off or on", + "order" : 1 }, + "ipaddr" : { + "getopt" : "a:", + "help" : "-a IP address or hostname of fencing device", + "order" : 1 }, + "login" : { + "getopt" : "l:", + "help" : "-l Login name", + "order" : 1 }, + "passwd" : { + "getopt" : "p:", + "help" : "-p Login password", + "order" : 1 }, + "passwd_script" : { + "getopt" : "S:", + "help" : "-S