[Cluster-devel] conga/ricci Changelog configure ricci.spec.in. ...
rmccabe at sourceware.org
rmccabe at sourceware.org
Tue Sep 11 02:45:53 UTC 2007
CVSROOT: /cvs/cluster
Module name: conga
Changes by: rmccabe at sourceware.org 2007-09-11 02:45:29
Modified files:
ricci : Changelog configure ricci.spec.in.in
ricci/common : Logger.cpp daemon_init.c executils_test.cpp
signals.c
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/init.d : ricci
ricci/make : defines.mk.in
ricci/modules/cluster/clumon: README.cim README.snmpd
REDHAT-CLUSTER-MIB REDHAT-MIB
RedHat_ClusterSchema.mof
ricci/modules/cluster/clumon/init.d: modclusterd
ricci/modules/cluster/clumon/src/cim-provider:
ClusterProvider.cpp
ClusterProvider.h
ClusterProviderMain.cpp
SmartHandler.h
clusterCIM_test.cpp
ricci/modules/cluster/clumon/src/snmp-agent: clusterMIB.cpp
clusterMIB.h
clusterMonitorSnmp.cpp
clusterMonitorSnmp.h
nodesMIB.cpp
nodesMIB.h
nodesMIB_access.cpp
nodesMIB_access.h
nodesMIB_checkfns.cpp
nodesMIB_checkfns.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.cpp
servicesMIB_checkfns.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 main.cpp
ricci/modules/rpm: PackageHandler.cpp PackageHandler.h
RpmModule.cpp RpmModule.h main.cpp
ricci/modules/service: 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
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/ricci : main.cpp
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
Log message:
Whitespace cleanup.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/Changelog.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/configure.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci.spec.in.in.diff?cvsroot=cluster&r1=1.13&r2=1.14
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Logger.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/daemon_init.c.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/executils_test.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/signals.c.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/cluster_api.html.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/logging_api.html.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/modules.html.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/modules_common.html.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/reboot_api.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/ricci_api.html.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/rpm_api.html.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/service_api.html.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-bd_template.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-bds.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-content.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-content_template.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-mapper_template.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage-mappers.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage_api.html.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/variables.html.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/init.d/ricci.diff?cvsroot=cluster&r1=1.11&r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/make/defines.mk.in.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/README.cim.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/README.snmpd.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/REDHAT-CLUSTER-MIB.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/REDHAT-MIB.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/RedHat_ClusterSchema.mof.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/init.d/modclusterd.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.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/ClusterProvider.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProviderMain.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/SmartHandler.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/cim-provider/clusterCIM_test.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.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/clusterMIB.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_columns.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_enums.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.cpp.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_columns.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_enums.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LogParser.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/LoggingModule.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/log/main.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.14&r2=1.15
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/main.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceManager.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/ServiceModule.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/service/main.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BD.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BD.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BDFactory.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/BDFactory.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotQuorateError.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClusterNotRunningError.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ClvmdError.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Content.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Content.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentExtendedPartition.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentExtendedPartition.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFS.h.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFactory.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentFactory.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentNone.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentNone.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentUnusable.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ContentUnusable.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FSController.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS1.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS1.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS2.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/GFS2.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/HD.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/HD.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.cpp.diff?cvsroot=cluster&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.h.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVMClusterLockingError.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaid.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaid.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidSource.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidSource.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidTarget.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MDRaidTarget.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Mapper.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperFactory.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperFactory.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperSource.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MapperSource.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MidAir.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/MountHandler.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PTSource.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.cpp.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Partition.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PartitionTable.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Props.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Props.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/System.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UMountError.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UnsupportedFS.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/UnsupportedFS.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.cpp.diff?cvsroot=cluster&r1=1.13&r2=1.14
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ValidationError.h.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/defines.h.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/gfs_ondisk.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/main.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/mdadm_wrapper.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/mdadm_wrapper.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.cpp.diff?cvsroot=cluster&r1=1.11&r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/parted_wrapper.h.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/main.cpp.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/PropsObject.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/Variable.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/add_sources_renderer.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/auth_page.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/bd_remove_renderer.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/bd_renderer.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/communicator.py.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/content_renderer.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/dispatcher.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/host_selection.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/main_page.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/mapper_renderer.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/new_mapper_renderer.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/new_target_renderer.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test/props_renderer.py.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/README.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/SSLClient_send_to_ricci.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/send_to_ricci.diff?cvsroot=cluster&r1=1.1&r2=1.2
--- conga/ricci/Changelog 2006/08/22 17:32:06 1.4
+++ conga/ricci/Changelog 2007/09/11 02:45:26 1.5
@@ -1,15 +1,15 @@
-2006-08-18 Stanko Kupcevic <kupcevic at redhat.com>
+2006-08-18 Stanko Kupcevic <kupcevic at redhat.com>
* Don't auto-start ricci after installation, do it manually
- * storage module: use `pvdisplay -c` if `pvs` fails
- (`pvs` will fail if one of hard drives is not readable,
+ * storage module: use `pvdisplay -c` if `pvs` fails
+ (`pvs` will fail if one of hard drives is not readable,
while `pvdisplay -c` will give incomplete but usefull info)
* shred strings
-2006-07-17 Stanko Kupcevic <kupcevic at redhat.com>
+2006-07-17 Stanko Kupcevic <kupcevic at redhat.com>
* common/executils.cpp: clear stdout/stderr buffers before executing external commands
-2006-07-12 Stanko Kupcevic <kupcevic at redhat.com>
+2006-07-12 Stanko Kupcevic <kupcevic at redhat.com>
* ricci: unauthenticate() should always succeed
* storage module: remove snapshot_usage from state_ind (snapshot usage shouldn't affect state_ind)
--- conga/ricci/configure 2006/11/17 00:31:50 1.9
+++ conga/ricci/configure 2007/09/11 02:45:26 1.10
@@ -28,7 +28,7 @@
LIBDIR_SED=\\/lib
X86_64_TMP=`uname -a | grep x86_64`
-if [ "$X86_64_TMP" ]; then
+if [ "$X86_64_TMP" ]; then
LIBDIR_SED=\\/lib64
fi
@@ -46,7 +46,7 @@
# D-BUS version
DBUS_VERSION=`pkg-config --modversion dbus-1 2>/dev/null`
-if [ -z "$DBUS_VERSION" ] ; then
+if [ -z "$DBUS_VERSION" ] ; then
echo "D-BUS required, but I am unable to locate it. Is it installed?"
rm -f $MAKE_DEFINES
exit 1
@@ -55,12 +55,12 @@
VERSIONS=(`echo $DBUS_VERSION | sed -e s,^\\\\\([0123456789]*\\\\\)\.\\\\\([0123456789]*\\\\\).*,\\\1\ \\\2, 2>/dev/null`)
DBUS_MAJOR_VERSION=${VERSIONS[0]}
DBUS_MINOR_VERSION=${VERSIONS[1]}
- if [ -z "$DBUS_MAJOR_VERSION" ] ; then
+ if [ -z "$DBUS_MAJOR_VERSION" ] ; then
echo "; failed extraction of major D-BUS version"
rm -f $MAKE_DEFINES
exit 1
fi
- if [ -z "$DBUS_MINOR_VERSION" ] ; then
+ if [ -z "$DBUS_MINOR_VERSION" ] ; then
echo "; failed extraction of minor D-BUS version"
rm -f $MAKE_DEFINES
exit 1
--- conga/ricci/ricci.spec.in.in 2007/01/18 03:02:38 1.13
+++ conga/ricci/ricci.spec.in.in 2007/09/11 02:45:26 1.14
@@ -174,7 +174,7 @@
Summary: ricci-modstorage summary
Requires: /bin/bash
Requires: oddjob libxml2 openssl
-Requires: parted
+Requires: parted
Provides: ricci-modstorage
Conflicts: ricci-storage
--- conga/ricci/common/Logger.cpp 2007/09/11 00:26:52 1.5
+++ conga/ricci/common/Logger.cpp 2007/09/11 02:45:26 1.6
@@ -31,7 +31,7 @@
#include <sys/types.h>
#include <sys/stat.h>
-extern "C" {
+extern "C" {
#include "sys_util.h"
}
@@ -124,7 +124,7 @@
p = strchr(cur_time, '\n');
if (p != NULL)
- *p = '\0';
+ *p = '\0';
if (_fd > 2 && _domain_c != NULL) {
ret = snprintf(buf, sizeof(buf), "%s %s: %s\n",
--- conga/ricci/common/daemon_init.c 2007/08/31 04:57:37 1.2
+++ conga/ricci/common/daemon_init.c 2007/09/11 02:45:26 1.3
@@ -14,18 +14,18 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/** @file
* daemon_init function, does sanity checks and calls daemon().
*
- * $Id: daemon_init.c,v 1.2 2007/08/31 04:57:37 rmccabe Exp $
+ * $Id: daemon_init.c,v 1.3 2007/09/11 02:45:26 rmccabe Exp $
*
* Author: Jeff Moyer <moyer at mclinux.com>
*/
/*
- * TODO: Clean this up so that only one function constructs the
+ * TODO: Clean this up so that only one function constructs the
* pidfile /var/run/loggerd.PID, and perhaps only one function
* forms the /proc/PID/ path.
*
--- conga/ricci/common/executils_test.cpp 2006/08/10 22:53:07 1.2
+++ conga/ricci/common/executils_test.cpp 2007/09/11 02:45:26 1.3
@@ -41,34 +41,34 @@
main(int argc, char** argv)
{
// set_logger(counting_auto_ptr<Logger>(new Logger(1, "executils_test", LogExecute)));
-
+
map<String, vector<String> > oracle;
oracle["/bin/cat"] = vector<String>(1, "/etc/cluster/cluster.conf");
oracle["/sbin/magma_tool"] = vector<String>(1, "members");
oracle["/usr/sbin/clustat"] = vector<String>(1, "-x");
oracle["/sbin/ifconfig"] = vector<String>();
// oracle["/bin/sleep"] = vector<String>(1, "4");
-
+
setup_signal(SIGUSR1, nothing);
setup_signal(SIGUSR2, nothing_2);
-
+
pid = getpid();
-
+
Killer killer;
killer.start();
-
+
while (true) {
for (map<String, vector<String> >::iterator iter = oracle.begin();
iter != oracle.end();
iter++) {
String out, err;
int status;
-
+
execute(iter->first, iter->second, out, err, status);
-
+
// cout << iter->first << ":" << endl;
// cout << out << endl << endl << err << endl << endl;
-
+
MutexLocker l(mutex);
running = true;
}
@@ -77,11 +77,11 @@
}
-void
+void
nothing(int)
{}
-void
+void
nothing_2(int)
{
poll(NULL, 0, rand() % 20);
@@ -92,15 +92,15 @@
Killer::run()
{
int time_to_check = time_sec() + 10;
-
+
srand(time_sec());
while (!shouldStop()) {
kill(pid, SIGUSR2);
poll(NULL, 0, rand() % 117 + 20);
-
+
kill(pid, SIGUSR1);
poll(NULL, 0, rand() % 43 + 20);
-
+
MutexLocker l(mutex);
if (time_sec() > time_to_check) {
if (!::running) {
--- conga/ricci/common/signals.c 2007/08/31 04:57:37 1.2
+++ conga/ricci/common/signals.c 2007/09/11 02:45:26 1.3
@@ -55,7 +55,7 @@
sigemptyset(&set);
sigaddset(&set, sig);
-
+
return (sigprocmask(SIG_BLOCK, &set, NULL));
}
@@ -73,7 +73,7 @@
sigemptyset(&set);
sigaddset(&set, sig);
-
+
return (sigprocmask(SIG_UNBLOCK, &set, NULL));
}
--- conga/ricci/docs/cluster_api.html 2007/03/10 04:57:47 1.7
+++ conga/ricci/docs/cluster_api.html 2007/09/11 02:45:26 1.8
@@ -8,15 +8,15 @@
<META NAME="CHANGED" CONTENT="20060620;15340700">
</HEAD>
<BODY LANG="en-US" DIR="LTR">
-<P>Cluster module manages Red Hat Cluster Suite.
+<P>Cluster module manages Red Hat Cluster Suite.
</P>
-<P>Module name: âclusterâ
+<P>Module name: âclusterâ
</P>
<P>Module version: 1.0</P>
<P>See <A HREF="modules_common.html">Modules - Common API</A> for
-general module description.
+general module description.
</P>
-<P>Functions:
+<P>Functions:
</P>
<UL>
<LI><P>APIs</P>
@@ -42,7 +42,7 @@
<P ALIGN=LEFT>Input variables:<BR>- âcluster.confâ (XML) â
required<BR>- âpropagateâ (boolean) â optional, defaults to
âfalseâ</P>
- <P ALIGN=LEFT>No output variables.
+ <P ALIGN=LEFT>No output variables.
</P>
<P ALIGN=LEFT>On failure:<BR>- No special errors defined, only
generic ones might get returned.</P>
@@ -51,7 +51,7 @@
<UL>
<P>Retrieve cluster status. If node is not configured to be a part
of cluster, empty <cluster/> tag will be returned.</P>
- <P>No input variables.
+ <P>No input variables.
</P>
<P>Output variables:<BR>- âstatusâ (XML) â status of cluster,
nodes and services.<BR>eg: <BR><cluster minQuorum="1"
@@ -75,7 +75,7 @@
<P>Start service âservicenameâ. If ânodenameâ is specified,
service is started on that node, otherwise it will be started on a
node chosen by service manager. <BR>If service was not running, it
- is started. If it was running, it is relocated to ânodenameâ.
+ is started. If it was running, it is relocated to ânodenameâ.
</P>
<P>Input variables:<BR>- âservicenameâ (string) â name of
service to manipulate<BR>- ânodenameâ (string) â optional
@@ -89,7 +89,7 @@
<P>Migrate the virtual service âservicenameâ to cluster node ânodename.â To migrate the virtual service, it must be started, and xend must be running and configured to allow live migration on both its current node and on ânodename.â If the service is not started, it will be started on ânodename.â
</P>
<P>Input variables:<BR>- âservicenameâ (string) â name of
- the virtual service to migrate.<BR>- ânodenameâ (string) â
+ the virtual service to migrate.<BR>- ânodenameâ (string) â
name of node to which the virtual service is to be migrated.</P>
<P>No output variables.</P>
<P>On failure:<BR>- 1 â service manager is not running on this
@@ -110,7 +110,7 @@
<UL>
<P>Restart service âservicenameâ on node it is currently
running. If service is not running, it will be started on a node
- chosen by service manager.
+ chosen by service manager.
</P>
<P>Input variables:<BR>- âservicenameâ (string) â name of
service to manipulate</P>
@@ -118,7 +118,7 @@
<P>On failure:<BR>- 1 â service manager is not running on this
managed system<BR>- generic ones</P>
</UL>
- <LI><P>start_node
+ <LI><P>start_node
</P>
<UL>
<P>Start cluster infrastructure on this node (also, enable daemons'
@@ -127,7 +127,7 @@
<P>Input variables:<BR>- âcluster_startupâ (boolean) â
optional, default âfalseâ, cluster is starting up (wait for all
to come up, then start services â avoid fencing on startup)</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P>On failure:<BR>- No special errors defined, only generic ones
might get returned.</P>
@@ -143,15 +143,15 @@
bounce services around)
<BR>- âpurge_confâ (boolean) â
optional, default âfalseâ, delete cluster.conf; start_node() cannot be called any more, without calling set_cluster.conf() first
- <P>No output variables.
+ <P>No output variables.
</P>
<P>On failure:<BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
<LI><P>fence_node</P>
<UL>
- <P>Fence node ânodenameâ.
+ <P>Fence node ânodenameâ.
</P>
<P>Input variables:<BR>- nodename (string) â name of node to
fence</P>
--- conga/ricci/docs/logging_api.html 2006/06/05 19:54:40 1.2
+++ conga/ricci/docs/logging_api.html 2007/09/11 02:45:26 1.3
@@ -9,14 +9,14 @@
</HEAD>
<BODY LANG="en-US" DIR="LTR">
<P>Log module retrieves log entries from system-wide log facilities,
-or specified log files.
+or specified log files.
</P>
-<P>Module name: âlogâ
+<P>Module name: âlogâ
</P>
-<P>Module version: 1.0
+<P>Module version: 1.0
</P>
<P>See <A HREF="modules_common.html">Modules - Common API</A> for
-general module description.
+general module description.
</P>
<P ALIGN=LEFT>Module parses log files based on following criteria:<BR>
- what log files (defaults to /var/log/messages and /var/log/syslog)<BR>
@@ -37,7 +37,7 @@
these tags. <BR>For example, ccsd log entry will get assigned âccsdâ
and âclusterâ tags; GFS entries will get âgfsâ, âstorageâ
and âclusterâ tags; dlm entries will get âdlmâ, âclusterâ
-and âkernelâ tags, ...
+and âkernelâ tags, ...
</P>
<P>Defined tag groups: <BR>- âclusterâ - matches all log entries
from Cluster Suite (includes âcluster service managerâ, cman,
@@ -47,7 +47,7 @@
Linux Virtual Server: ipvs, ipvsadm, piranha, ...<BR>- âstorageâ
- matches all log entries about storage <BR>- âselinuxâ - matches
selinux log entries (audit, pam_*, selinux)</P>
-<P>Log entry format:
+<P>Log entry format:
</P>
<P><logentry domain="what it is about" pid=âprocess
IDâ age="age in seconds" msg="log message"><BR><match
@@ -61,23 +61,23 @@
was successfully matched against (there could be multiple, eg. if
search was performed on âkernelâ and âclusterâ, dlm log will
be matched against both â could be used by UI to group or to find
-intersections within result â eg. âclusterâ and âkernelâ).
+intersections within result â eg. âclusterâ and âkernelâ).
</P>
<P><BR><BR>
</P>
-<P>Functions:
+<P>Functions:
</P>
<UL>
- <LI><P>APIs
+ <LI><P>APIs
</P>
<UL>
<P>Get supported API versions. See <A HREF="modules_common.html">Modules
- - Common API</A> for description.
+ - Common API</A> for description.
</P>
</UL>
</UL>
<UL>
- <LI><P>get
+ <LI><P>get
</P>
<UL>
<P ALIGN=LEFT>Retrieve union of matching log entries that are at
@@ -87,7 +87,7 @@
optionally, specified using âpathsâ variable. Files rotated by
logrotate are picked up automatically, eg. if /var/log/cron was
specified, /var/log/cron.1 2 3 ... will get picked up
- automatically.
+ automatically.
</P>
<P>Input variables: <BR>- âageâ (int) â maximum age, in
seconds, of log entries to retrieve <BR>- âtagsâ (list_str) â
@@ -98,18 +98,18 @@
Directories are searched recursively. Relative and non-existent
paths are discarded. If not specified, or empty, /var/log/messages
and /var/log/syslog are processed (along with .1 .2 .3 ...
- extensions).
+ extensions).
</P>
<P ALIGN=LEFT>Output variables: <BR>- âlog_entriesâ (list_xml)
â list of matching entries (see above for <logentry/>
- format)
+ format)
</P>
<P ALIGN=LEFT>On failure: <BR>- No special errors defined, only
- generic ones might get returned
+ generic ones might get returned
</P>
</UL>
</UL>
<P ALIGN=LEFT><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/modules.html 2007/02/05 20:08:28 1.5
+++ conga/ricci/docs/modules.html 2007/09/11 02:45:26 1.6
@@ -9,7 +9,7 @@
</HEAD>
<BODY LANG="en-US" DIR="LTR">
<P><A HREF="modules_common.html">Modules Common</A> - Common Module
-Format and API
+Format and API
</P>
<P>Management Modules:</P>
<UL>
@@ -27,7 +27,7 @@
ATA-raid, iSCSI targets, dm-crypt, md-crypt, filesystems, their
properties, mounts, ...</P>
<LI><P><A HREF="logging_api.html">Log Module</A> â Retrieves log
- entries from system-wide log facilities, or specified log files.
+ entries from system-wide log facilities, or specified log files.
</P>
<LI><P><A HREF="reboot_api.html">Reboot module</A> â Allows system
reboot</P>
--- conga/ricci/docs/modules_common.html 2006/04/12 22:41:20 1.2
+++ conga/ricci/docs/modules_common.html 2007/09/11 02:45:26 1.3
@@ -12,7 +12,7 @@
<response/>. <BR>In case of API error, <API_error/> is
returned. <API_error/> will have âdescriptionâ attribute.
<API_error/> will also have a variable âAPIsâ (list_str)
-attached to it, to ease debugging.
+attached to it, to ease debugging.
</P>
<P><request/> has a <function_call/> and âAPI_versionâ
(required) and âsequenceâ (optional) attributes. âsequenceâ
@@ -26,7 +26,7 @@
<A HREF="variables.html">Variables</A> for <var/> description.</P>
<P ALIGN=LEFT><function_response/>:<BR><function_response/>
will have âfunction_nameâ attribute, and returned <var/>s
-attached to it. Variables are defined by respective function calls.
+attached to it. Variables are defined by respective function calls.
</P>
<P ALIGN=LEFT>There will always be a âsuccessâ (boolean) variable
in <function_response/>, besides function return values. <BR>If
@@ -37,7 +37,7 @@
respective module functions; exception is generic_error (-1) which
covers all other errors. <BR>Error descriptions are human readable
descriptions of error; exception is generic error whose description
-might be too primitive for end-user consumption.
+might be too primitive for end-user consumption.
</P>
<P><BR><BR>
</P>
@@ -45,14 +45,14 @@
<UL>
<LI><P>APIs</P>
<UL>
- <P>Retrieve list of supported API versions.
+ <P>Retrieve list of supported API versions.
</P>
- <P>No input variables.
+ <P>No input variables.
</P>
<P ALIGN=LEFT>Output variables: <BR>- âAPIsâ (list_str) â
list of supported APIs</P>
<P ALIGN=LEFT>On failure: <BR>- No special errors defined, only
- generic ones might get returned.
+ generic ones might get returned.
</P>
</UL>
</UL>
@@ -123,4 +123,4 @@
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/reboot_api.html 2006/04/12 15:47:09 1.1
+++ conga/ricci/docs/reboot_api.html 2007/09/11 02:45:26 1.2
@@ -8,15 +8,15 @@
<META NAME="CHANGED" CONTENT="20060411;16472900">
</HEAD>
<BODY LANG="en-US" DIR="LTR">
-<P>Reboot module allows system reboot.
+<P>Reboot module allows system reboot.
</P>
-<P>Module name: ârebootâ
+<P>Module name: ârebootâ
</P>
<P>Module version: 1.0</P>
<P>See <A HREF="modules_common.html">Modules - Common API</A> for
-general module description.
+general module description.
</P>
-<P>Functions:
+<P>Functions:
</P>
<UL>
<LI><P>APIs</P>
@@ -34,10 +34,10 @@
Execute it asynchronously, retrieving batch status periodically
(there will be a period when ricci will not be responding). When
batch reports successful completion, kernel has been upgraded, and
- it is in use (system has been rebooted).
+ it is in use (system has been rebooted).
</P>
<P>No input variables.</P>
- <P ALIGN=LEFT>No output variables.
+ <P ALIGN=LEFT>No output variables.
</P>
<P ALIGN=LEFT>On failure:<BR>- No special errors defined, only
generic ones might get returned.</P>
@@ -46,4 +46,4 @@
<P ALIGN=LEFT><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/ricci_api.html 2006/06/09 16:32:19 1.3
+++ conga/ricci/docs/ricci_api.html 2007/09/11 02:45:26 1.4
@@ -14,13 +14,13 @@
client is considered authenticated, otherwise, client can invoke only
âauthenticateâ function (see bellow). Once authenticated,
presented certificate is saved into cert database, and client has
-access to all functions.
+access to all functions.
</P>
<P><BR><BR>
</P>
<P>All messages are XML based. Client is greeted with hello message
on connection establishment, then client submits request and waits
-for response. Client can make multiple requests in a single session.
+for response. Client can make multiple requests in a single session.
</P>
<OL>
<LI><P ALIGN=LEFT>Hello message:</P>
@@ -33,20 +33,20 @@
âauthenticatedâ attribute is âtrueâ client is authenticated
and can proceed with further calls, otherwise, client can only
invoke âauthenticateâ function (see bellow). Once authenticated,
- client can invoke all functions.
+ client can invoke all functions.
</P>
- <LI><P>Request:
+ <LI><P>Request:
</P>
<P>Tag has to be âricciâ, and âversionâ and âfunctionâ
attributes have to be present. Functions, and their arguments are
- described below.
+ described below.
</P>
- <LI><P>Function response:
+ <LI><P>Function response:
</P>
<P><ricci authenticated="true/false" success="success
value â unsigned int" version="1.0"/></P>
<P>Function response has âricciâ tag, and âauthenticatedâ,
- âversionâ and âsuccessâ attributes.
+ âversionâ and âsuccessâ attributes.
</P>
<P>Ricci function call successfulness is stored in âsuccessâ
attr, and can be one of:</P>
@@ -74,7 +74,7 @@
<BR>Subsequent connections that present saved cert will be
auto-authenticated. <BR>If signing CA is listed in
/var/lib/ricci/certs/auth_CAs.pem, certificate is considered valid,
- and client needs not call this function at all.
+ and client needs not call this function at all.
</P>
<P ALIGN=LEFT>Function takes only âpasswordâ argument,
specified as an attribute. It has to be a valid root password of
@@ -84,11 +84,11 @@
certificate is saved into cert database, and function returns 0.
Afterwards, client has access to all functions. If new connection
is initiated using the same certificate, client will have full
- access without need to call âauthenticateâ function.
+ access without need to call âauthenticateâ function.
</P>
<P ALIGN=LEFT>This is the only function that can be invoked if
âauthenticatedâ attribute of hello message is set to âfalseâ.
- <BR>Once authenticated, access is allowed to all functions.
+ <BR>Once authenticated, access is allowed to all functions.
</P>
</UL>
<LI><P ALIGN=LEFT>unauthenticate</P>
@@ -99,10 +99,10 @@
SSL certificate from cert database. <BR>Access will be allowed to
âauthenticateâ function only. <BR>New connections, established
using current certificate, will not be auto-authenticated; client
- will have to re-authenticate.
+ will have to re-authenticate.
</P>
<P ALIGN=LEFT>Function takes no arguments. <BR>- Function should
- always succeed and return 0.
+ always succeed and return 0.
</P>
</UL>
<LI><P>list_modules</P>
@@ -113,7 +113,7 @@
attached to the response message, in format: <BR><module
name=âmodule1â/><BR><module name=âmodule2â/></P>
<P ALIGN=LEFT>Function takes no arguments. <BR>- Function should
- always succeed and return 0.
+ always succeed and return 0.
</P>
</UL>
<LI><P>process_batch</P>
@@ -125,25 +125,25 @@
name=âmodule2â><BR>... module2 request
...<BR></module><BR></batch><BR></ricci></P>
<P ALIGN=LEFT>Processes batch request, see below for batch
- description.
+ description.
</P>
<P ALIGN=LEFT>Processing can be synchronous and asynchronous. If
synchronous, âprocess_batchâ will return after the whole batch
is completed, returning final batch report. There is no way to
- retrieve report again.
+ retrieve report again.
</P>
<P ALIGN=LEFT>If asynchronous, âprocess_batchâ will return
immediately, returning initial batch report (âbatch_idâ can be
extracted from it). Batch report can be retrieved later, using
âbatch_reportâ function. Since batch progress is updated for
multi-module request, asynchronous processing can be used to
- implement progress bars.
+ implement progress bars.
</P>
<P ALIGN=LEFT>Function takes two arguments, async attribute
- (defaults to âfalseâ), and batch.
+ (defaults to âfalseâ), and batch.
</P>
<P ALIGN=LEFT>- Function returns 11, if batch is missing. <BR>-
- Otherwise it returns 0.
+ Otherwise it returns 0.
</P>
</UL>
<LI><P>batch_report</P>
@@ -151,24 +151,24 @@
<P ALIGN=LEFT><A NAME="line111"></A><ricci
function="batch_report" batch_id=âbatch_idâ
version="1.0"/></P>
- <P ALIGN=LEFT>Retrieve report of batch with id âbatch_idâ.
+ <P ALIGN=LEFT>Retrieve report of batch with id âbatch_idâ.
</P>
<P ALIGN=LEFT>Batch report is attached to the function response. If
batch is completed (status is either 0 or 4), report will be
removed, and won't be accessible any more; otherwise, it can be
- retrieved again.
+ retrieved again.
</P>
<P ALIGN=LEFT>Function takes one arguments, âbatch_idâ, whose
- report is attached to the function response.
+ report is attached to the function response.
</P>
<P>- Function returns 12, if there is no batch with such
- âbatch_idâ. <BR>- It returns 0 otherwise.
+ âbatch_idâ. <BR>- It returns 0 otherwise.
</P>
</UL>
</UL>
<P><BR><BR>
</P>
-<P>Batch description:
+<P>Batch description:
</P>
<P>Batch is a list of module requests (see respective <A HREF="modules.html">module</A>
description for request description). It has a âbatch_idâ
@@ -177,7 +177,7 @@
is aborted, and batch' status is set to 4 â request failure. If all
modules complete successfully, batch' status is set to 0. <BR>Each
module, and batch, has a status attribute, describing its progress.
-Status is updated after completion of each module.
+Status is updated after completion of each module.
</P>
<P ALIGN=LEFT><batch batch_id="10271302"
status="2"><BR><module name="module1"
@@ -188,7 +188,7 @@
<P>Status codes: <BR>0 - completed successfully (batch and module) <BR>1
- scheduled (batch and module) <BR>2 - in progress (batch and module)
<BR>3 - module failure (module only) <BR>4 - request failure (batch
-and module) <BR>5 - removed from scheduler (module only)
+and module) <BR>5 - removed from scheduler (module only)
</P>
<P><BR><BR>
</P>
@@ -196,4 +196,4 @@
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/rpm_api.html 2007/02/05 20:08:28 1.3
+++ conga/ricci/docs/rpm_api.html 2007/09/11 02:45:26 1.4
@@ -10,30 +10,30 @@
<BODY LANG="en-US" DIR="LTR">
<P>Rpm module manages rpm packages. Allows retrieval of currently
installed rpms, querying repositories, and installation/upgrade of
-rpms using repositories. (rpm and up2date/yum frontend)
+rpms using repositories. (rpm and up2date/yum frontend)
</P>
-<P>Module name: ârpmâ
+<P>Module name: ârpmâ
</P>
<P>Module version: 1.0</P>
<P>See <A HREF="modules_common.html">Modules - Common API</A> for
-general module description.
+general module description.
</P>
<P>Rpm module has a notion of rpm and set (set of rpms). Sets are
here to simplify installation of multiple packages, eg cluster
-deployment.
+deployment.
</P>
<P><rpm name=ârpm nameâ summary=âsummaryâ
description=âdescriptionâ version=âinstalled versionâ
repo_version=âversion in repositoryâ/><BR>If âversionâ is
empty, rpm is not installed. If ârepo_versionâ is empty, package
is not in repository. If ârepo_versionâ > âversionâ,
-package can be installed/upgraded.
+package can be installed/upgraded.
</P>
<P ALIGN=LEFT><set name=âset nameâ summary=âsummaryâ
description=âdescriptionâ installed="true"
in_repository="true" installable="true"/><BR>If
installable is âtrueâ, set of rpms can be installed, if not
-installed; and upgraded, if already installed.
+installed; and upgraded, if already installed.
</P>
<P>There are couple of predefined rpm sets: <BR>- âCluster Baseâ
- base infrastructure of Red Hat Cluster Suite (currently ccs, cman,
@@ -44,7 +44,7 @@
magma-plugins) <BR>- âClustered Storageâ - shared storage
(currently GFS, lvm2-cluster and respective kernel-... rpms) <BR>-
âLinux Virtual Serverâ - (currently ipvsadm, piranha)</P>
-<P>Functions:
+<P>Functions:
</P>
<UL>
<LI><P>APIs</P>
@@ -72,24 +72,24 @@
<P ALIGN=LEFT>On failure:<BR>- No special errors defined, only
generic ones might get returned.</P>
</UL>
- <LI><P>query
+ <LI><P>query
</P>
<UL>
<P ALIGN=LEFT>Query rpms and sets, both locally installed and in
- repository, by rpm/set name.
+ repository, by rpm/set name.
</P>
<P>Input variables: <BR>- âsearchâ (list_xml) â list of rpms
and sets to query. Rpm format <rpm name=ârpm nameâ/>; set
- format <set name=âset nameâ/>.
+ format <set name=âset nameâ/>.
</P>
<P ALIGN=LEFT>Output variables: <BR>- âresultâ (list_xml) â
- list of matching rpms and sets.
+ list of matching rpms and sets.
</P>
<P>On failure: <BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
- <LI><P>install
+ <LI><P>install
</P>
<UL>
<P ALIGN=LEFT>Install/upgrade rpms and sets from repository.</P>
@@ -97,25 +97,25 @@
install/upgrade. Rpm format <rpm name=ârpm nameâ/>. <BR>-
âsetsâ (list_xml) â optional, list of sets to install/upgrade. Set
format <set name=âset nameâ/>. <BR>-
- âupgradeâ (boolean) â optional (defaults to true), upgrade already installed packages/sets.
+ âupgradeâ (boolean) â optional (defaults to true), upgrade already installed packages/sets.
</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P>On failure: <BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
- <LI><P>repository_configured
+ <LI><P>repository_configured
</P>
<UL>
<P ALIGN=LEFT>Is this managed system configured to use repository,
and capable of retrieving rpms?</P>
- <P>No input variables.
+ <P>No input variables.
</P>
<P>Output variables:<BR>- â repository_configuredâ (boolean) â
whether repository is available to this managed system</P>
<P>On failure: <BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
</UL>
--- conga/ricci/docs/service_api.html 2007/02/23 22:02:57 1.4
+++ conga/ricci/docs/service_api.html 2007/09/11 02:45:26 1.5
@@ -11,15 +11,15 @@
<P>Service module manages system-wide services. Allows service
start/stop and scheduling services to start on boot (service and
chkconfig frontend).</P>
-<P>Module name: âserviceâ
+<P>Module name: âserviceâ
</P>
<P>Module version: 1.0</P>
<P>See <A HREF="modules_common.html">Modules - Common API</A> for
-general module description.
+general module description.
</P>
<P>Service module has a notion of service and set (set of services).
Sets are here to simplify management of multiple services, eg cluster
-start/stop.
+start/stop.
</P>
<P><service description="description"
enabled="true/false" name="service name"
@@ -37,7 +37,7 @@
Managerâ - (currently rgmanager) <BR>- âClustered Storageâ -
shared storage (currently clvmd, gfs)<BR>- âLinux Virtual Serverâ
- (currently pulse, piranha-gui)</P>
-<P>Functions:
+<P>Functions:
</P>
<UL>
<LI><P>APIs</P>
@@ -49,7 +49,7 @@
<UL>
<LI><P>list</P>
<UL>
- <P ALIGN=LEFT>Retrieve list of services and sets.
+ <P ALIGN=LEFT>Retrieve list of services and sets.
</P>
<P>Input variables:<BR>- âdescriptionâ (boolean) â optional,
defaults to false, fill in âdescriptionâ attribute (slow)</P>
@@ -58,10 +58,10 @@
<P ALIGN=LEFT>On failure:<BR>- No special errors defined, only
generic ones might get returned.</P>
</UL>
- <LI><P>query
+ <LI><P>query
</P>
<UL>
- <P ALIGN=LEFT>Query services and sets by service/set name.
+ <P ALIGN=LEFT>Query services and sets by service/set name.
</P>
<P>Input variables: <BR>- âsearchâ (list_xml) â list of
services and sets to query. Service format <service name=ârpm
@@ -69,78 +69,78 @@
âdescriptionâ (boolean) â optional, defaults to false, fill
in âdescriptionâ attribute (slow)</P>
<P ALIGN=LEFT>Output variables: <BR>- âresultâ (list_xml) â
- list of matching services and sets.
+ list of matching services and sets.
</P>
<P>On failure: <BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
<LI><P>enable</P>
<UL>
<P ALIGN=LEFT>Enable services/sets to start at boot time. It is not
- error to enable already enabled service/set.
+ error to enable already enabled service/set.
</P>
<P>Input variables: <BR>- âservicesâ (list_xml) â list of
- services/sets to enable. For format see âqueryâ.
+ services/sets to enable. For format see âqueryâ.
</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P>On failure: <BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
<LI><P>disable</P>
<UL>
<P ALIGN=LEFT>Disable services/sets startup at boot time. It is not
- error to disable already disabled service/set.
+ error to disable already disabled service/set.
</P>
<P>Input variables: <BR>- âservicesâ (list_xml) â list of
- services/sets to disable. For format see âqueryâ.
+ services/sets to disable. For format see âqueryâ.
</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P ALIGN=LEFT>On failure: <BR>- No special errors defined, only
- generic ones might get returned.
+ generic ones might get returned.
</P>
</UL>
<LI><P>start</P>
<UL>
<P ALIGN=LEFT>Start services/sets. It is not error to start already
- started service/set.
+ started service/set.
</P>
<P>Input variables: <BR>- âservicesâ (list_xml) â list of
- services/sets to start. For format see âqueryâ.
+ services/sets to start. For format see âqueryâ.
</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P ALIGN=LEFT>On failure: <BR>- No special errors defined, only
- generic ones might get returned.
+ generic ones might get returned.
</P>
</UL>
<LI><P>restart</P>
<UL>
<P ALIGN=LEFT>Restart services/sets.</P>
<P>Input variables: <BR>- âservicesâ (list_xml) â list of
- services/sets to restart. For format see âqueryâ.
+ services/sets to restart. For format see âqueryâ.
</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P ALIGN=LEFT>On failure: <BR>- No special errors defined, only
- generic ones might get returned.
+ generic ones might get returned.
</P>
</UL>
<LI><P>stop</P>
<UL>
<P ALIGN=LEFT>Stop services/sets. It is not error to stop already
- stopped services/sets.
+ stopped services/sets.
</P>
<P>Input variables: <BR>- âservicesâ (list_xml) â list of
- services/sets to stop. For format see âqueryâ.
+ services/sets to stop. For format see âqueryâ.
</P>
- <P>No output variables.
+ <P>No output variables.
</P>
<P ALIGN=LEFT>On failure: <BR>- No special errors defined, only
- generic ones might get returned.
+ generic ones might get returned.
</P>
</UL>
</UL>
--- conga/ricci/docs/storage-bd_template.html 2006/04/12 22:41:20 1.1
+++ conga/ricci/docs/storage-bd_template.html 2007/09/11 02:45:26 1.2
@@ -11,7 +11,7 @@
<P><block_device_template/> is used for creation of new
<A HREF="storage-bds.html"><block_device/></A>s. It can be
found in <A HREF="storage-mappers.html"><mapper/></A> under
-<new_targets/>.
+<new_targets/>.
</P>
<P><BR><BR>
</P>
@@ -20,7 +20,7 @@
to Storage Module using âcreate_bdâ <A HREF="storage_api.html">function</A>.
<BR><block_device_template/>'s properties and content can be
modified using the same rules before calling âcreate_bdâ
-function.
+function.
</P>
<P><BR><BR>
</P>
@@ -28,4 +28,4 @@
<PRE><A NAME="line22"></A><FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><block_device_template/> has the same format as <block_device/>, except that it doesn't have âpathâ attribute. </FONT></FONT>
<FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3>Path of newly created block device can be extracted from return value of âcreate_bdâ function. </FONT></FONT></PRE>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/storage-bds.html 2006/04/12 22:41:20 1.1
+++ conga/ricci/docs/storage-bds.html 2007/09/11 02:45:26 1.2
@@ -12,7 +12,7 @@
<block_device/> is a target of some <A HREF="storage-mappers.html"><mapper/></A>.
</P>
<P>Every block device has <A HREF="storage-content.html"><content/></A>,
-which represent data stored on block device.
+which represent data stored on block device.
</P>
<P><BR><BR>
</P>
@@ -20,13 +20,13 @@
<UL>
<LI><P>Existing block devices are retrieved either by using
âget_bd(path)â <A HREF="storage_api.html">function</A> or by
- extraction from <A HREF="storage-mappers.html"><mapper/></A>.
+ extraction from <A HREF="storage-mappers.html"><mapper/></A>.
</P>
<LI><P>New block devices are created by submitting
<A HREF="storage-bd_template.html"><block_device_template/></A>
from <new_targets/> of <A HREF="storage-mappers.html"><mapper/></A>
to Storage Module using âcreate_bdâ <A HREF="storage_api.html">function</A>.
-
+
</P>
<LI><P>Properties are changed by modifying <properties/> tag,
see bellow, and submitting <block_device/> to Storage Module
@@ -40,7 +40,7 @@
<LI><P>Block devices are removed by submitting <block_device/>
to Storage Module using âremove_bdâ <A HREF="storage_api.html">function</A>.
Operation will succeed only if bd's âremovableâ property is
- âtrueâ.
+ âtrueâ.
</P>
</UL>
<P><BR><BR>
@@ -55,7 +55,7 @@
also has a âpathâ and âstate_indâ. State indicator
âstate_indâ is a hashed string of block device properties; if
something changes on a block device, its state indicator will change
- as well. It is used to detect mid-air collisions.
+ as well. It is used to detect mid-air collisions.
</P>
<LI><P><A NAME="line49"></A><properties/> tag, which has
<A HREF="variables.html">variables</A> for children. <BR>Some
@@ -65,7 +65,7 @@
different set of properties defined; some of them will be present in
all block devices, eg âremovableâ. See descriptions of
respective LINKME mappers. <BR>Example of properties for Logical
- Volume:
+ Volume:
</P>
<UL>
<P><FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><properties></FONT></FONT></P>
@@ -89,10 +89,10 @@
<UL>
<LI><P><A HREF="storage-content.html"><content/></A> tag,
which represent data stored on block device. <content/> also
- contains data about new contents.
+ contains data about new contents.
</P>
</UL>
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/storage-content.html 2006/04/12 22:41:20 1.1
+++ conga/ricci/docs/storage-content.html 2007/09/11 02:45:26 1.2
@@ -9,7 +9,7 @@
</HEAD>
<BODY LANG="en-US" DIR="LTR">
<P><content/> represents a data stored on block device. Every
-<block_device/> has a content.
+<block_device/> has a content.
</P>
<P>There are four types of contents:</P>
<UL>
@@ -23,7 +23,7 @@
<P>Contents are manipulated by changing <content/> tag of
<A HREF="storage-bds.html"><block_device/></A>, and submitting
<block_device/> to Storage Module using âmodify_bdâ
-<A HREF="storage_api.html">function</A>.
+<A HREF="storage_api.html">function</A>.
</P>
<UL>
<LI><P>Content properties are changed by modifying <properties/>
@@ -47,7 +47,7 @@
<FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3></content></FONT></FONT>
</PRE>
<UL>
- <LI><P>Every <content/> has a âtypeâ. Type can be one of:
+ <LI><P>Every <content/> has a âtypeâ. Type can be one of:
</P>
<UL>
<LI><P>âfilesystemâ - in which case âfs_typeâ attribute
@@ -55,10 +55,10 @@
âextended_fsâ and âgfsâ</P>
<LI><P>âmapper_sourceâ - in which case âmapper_typeâ and
âmapper_idâ attributes will be present. They define <A HREF="storage-mappers.html"><mapper/></A>
- whose source this content is.
+ whose source this content is.
</P>
<LI><P>ânoneâ - meaning that either useless data is present, or
- module is not able to properly detect it.
+ module is not able to properly detect it.
</P>
<LI><P>âhiddenâ - internal use, eg extended partition<BR><BR><BR>
</P>
@@ -68,7 +68,7 @@
properties can be mutable; modifying them and sending
<block_device/> to Storage Module will commit changes to the
disk. <BR>Contents have different set of properties defined.
- <BR>Example of properties for Extended Filesystem:
+ <BR>Example of properties for Extended Filesystem:
</P>
<UL>
<PRE STYLE="margin-bottom: 0.2in"><A NAME="line671"></A><FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><properties></FONT></FONT></PRE>
@@ -93,10 +93,10 @@
which can replace current content. <BR></FONT></FONT>To replace
current content, grab one of <content_template/>s, modify its
properties, move it to <new_content/> and submit
- <block_device/> to Storage Module.
+ <block_device/> to Storage Module.
</P>
</UL>
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/storage-content_template.html 2006/04/12 22:41:20 1.1
+++ conga/ricci/docs/storage-content_template.html 2007/09/11 02:45:26 1.2
@@ -9,7 +9,7 @@
</HEAD>
<BODY LANG="en-US" DIR="LTR">
<P><content_template/> is used for replacement of <A HREF="storage-content.html"><content/></A>
-on some <A HREF="storage-bds.html"><block_device/></A>.
+on some <A HREF="storage-bds.html"><block_device/></A>.
</P>
<P>There are three types of content templates:</P>
<UL>
@@ -23,7 +23,7 @@
<content_template/> from <available_contents/> to
<new_content/> of <A HREF="storage-content.html"><content/></A>.
It is module's responsibility to populate <available_contents/>
-with appropriate content_templates.
+with appropriate content_templates.
</P>
<P><BR><BR>
</P>
@@ -35,7 +35,7 @@
</PRE>
<UL>
<LI><P>Every <content_template/> has a âtypeâ. Type can be
- one of:
+ one of:
</P>
<UL>
<LI><P>âfilesystemâ - in which case âfs_typeâ attribute
@@ -43,10 +43,10 @@
âextended_fsâ and âgfsâ</P>
<LI><P>âmapper_sourceâ - in which case âmapper_typeâ
attribute will be present. They define <A HREF="storage-mappers.html"><mapper/></A>
- whose source this content is going to be.
+ whose source this content is going to be.
</P>
<LI><P>ânoneâ - meaning that current content will be destroyed.
-
+
</P>
</UL>
<LI><P><A NAME="line49"></A><properties/> tag, which has
@@ -54,7 +54,7 @@
be different that properties of <content/> of the same type.
<BR>Some properties can be mutable. <BR>Contents have different set
of properties defined. <BR>Example of properties for Swap
- Filesystem:
+ Filesystem:
</P>
<UL>
<PRE STYLE="margin-bottom: 0.2in"><A NAME="line671"></A><FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><properties></FONT></FONT></PRE>
@@ -69,4 +69,4 @@
<PRE>
</PRE>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/storage-mapper_template.html 2006/04/12 22:41:20 1.1
+++ conga/ricci/docs/storage-mapper_template.html 2007/09/11 02:45:26 1.2
@@ -10,7 +10,7 @@
<BODY LANG="en-US" DIR="LTR">
<P><mapper_template/> is used for creation of new <A HREF="storage-mappers.html"><mapper/></A>s.
Mapper templates are retrieved using âget_mapper_templatesâ
-<A HREF="storage_api.html">function</A>.
+<A HREF="storage_api.html">function</A>.
</P>
<P><BR><BR>
</P>
@@ -19,7 +19,7 @@
<BR>Modify <properties/> tag, move at least âmin_sourcesâ
<block_device/>s from <new_sources/> to <sources/>,submit
<mapper_template/> using âcreate_mapperâ, and new <A HREF="storage-mappers.html"><mapper/></A>
-will be created.
+will be created.
</P>
<P><BR><BR>
</P>
@@ -32,14 +32,14 @@
</PRE>
<UL>
<LI><P>Every mapper template has âmapper_typeâ that represents a
- type of mapper that can be created using this template.
+ type of mapper that can be created using this template.
</P>
<LI><P><properties/> tag, which has <A HREF="variables.html">variables</A>
for children. <BR>Some properties can be mutable. <BR>Every
âmapper_typeâ template has different set of properties defined.
<BR>Every mapper template will have â<B>min_sources</B>â and
â<B>max_sources</B>â defined. <BR>Example of properties for
- Partition Tables:
+ Partition Tables:
</P>
<UL>
<PRE STYLE="margin-bottom: 0.2in"><FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><properties></FONT></FONT></PRE>
@@ -57,10 +57,10 @@
<LI><P><new_sources/> tag, which has <A HREF="storage-bds.html"><block_device/></A>s
for children. These block devices can become initial sources of
newly created mapper. Move at least âmin_sourcesâ of them to
- <sources/>.
+ <sources/>.
</P>
</UL>
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/storage-mappers.html 2006/04/12 22:41:20 1.1
+++ conga/ricci/docs/storage-mappers.html 2007/09/11 02:45:26 1.2
@@ -13,11 +13,11 @@
data manipulation. <BR>Mappers abstract Volume Groups, Partition
Tables, RAIDs (Software and ATA), Multipath, dm-crypt, ... . <BR>There
is also a special Mapper that doesn't import anything, and exports
-local and remote physical Hard Drives.
+local and remote physical Hard Drives.
</P>
<P>Imported block devices are called âsourcesâ, exported ones are
called âtargetsâ; programs write data to targets, mapper writes
-to sources.
+to sources.
</P>
<P><BR><BR>
</P>
@@ -40,16 +40,16 @@
<P>Mappers are manipulated in different ways:</P>
<UL>
<LI><P>Existing mappers are retrieved using âget_mappersâ
- <A HREF="storage_api.html">function</A>.
+ <A HREF="storage_api.html">function</A>.
</P>
<LI><P>Mappers are created by submitting <A HREF="storage-mapper_template.html"><mapper_template/></A>
to Storage Module using âcreate_mapperâ <A HREF="storage_api.html">function</A>.
Mapper templates are retrieved using âget_mapper_templatesâ
- <A HREF="storage_api.html">function</A>.
+ <A HREF="storage_api.html">function</A>.
</P>
<LI><P>Properties are changed by modifying <properties/> tag,
see bellow, and submitting <mapper/> to Storage Module using
- âmodify_mapperâ <A HREF="storage_api.html">function</A>.
+ âmodify_mapperâ <A HREF="storage_api.html">function</A>.
</P>
<LI><P>New sources are added by submitting <block_device/>s
from <new_sources/>, see below, to Storage Module using
@@ -59,17 +59,17 @@
mapper's sources. <BR>For some mapper_types, it is also possible to
add new source manipulating <A HREF="storage-content.html"><content/></A>
of <A HREF="storage-bds.html"><block_device/></A> of other
- mappers.
+ mappers.
</P>
<LI><P>New targets are created by submitting
<A HREF="storage-bd_template.html"><block_device_template/></A>
from <new_targets/>, see below, to Storage Module using
- âcreate_bdâ <A HREF="storage_api.html">function</A>.
+ âcreate_bdâ <A HREF="storage_api.html">function</A>.
</P>
<LI><P>Mappers are removed by submitting <mapper/> to Storage
Module using âremove_mapperâ <A HREF="storage_api.html">function</A>.
Operation will succeed only if mapper's âremovableâ property is
- âtrueâ.
+ âtrueâ.
</P>
</UL>
<P><BR><BR>
@@ -88,7 +88,7 @@
âstate_indâ. State indicator âstate_indâ is a hashed string
of mapper properties; if something changes within mapper, its state
indicator will change as well. It is used to detect mid-air
- collisions.
+ collisions.
</P>
<LI><P><properties/> tag, which has <A HREF="variables.html">variables</A>
for children. <BR>Some properties can be mutable; modifying them and
@@ -96,7 +96,7 @@
disk. <BR>Every âmapper_typeâ has different set of properties
defined; some of them will be present in all mappers, eg
âremovableâ. See descriptions of respective LINKME mappers.
- <BR>Example of properties for Volume Groups:
+ <BR>Example of properties for Volume Groups:
</P>
<UL>
<PRE STYLE="margin-bottom: 0.2in"><FONT FACE="Nimbus Roman No9 L"><FONT SIZE=3><properties></FONT></FONT>
@@ -116,22 +116,22 @@
<LI><P><sources/> tag, which has <A HREF="storage-bds.html"><block_device/></A>s
for children. Content of those block devices will be LINKME
âmapper_sourceâs of this mapper. Source block devices are
- exported by some other mappers.
+ exported by some other mappers.
</P>
<LI><P><new_sources/> tag, which has <A HREF="storage-bds.html"><block_device/></A>s
for children. These block devices can become new sources of this
- mapper.
+ mapper.
</P>
<LI><P><targets/> tag, which has <A HREF="storage-bds.html"><block_device/></A>s
for children. Target block devices are block devices exported by
- this mapper, and can have anything for a content.
+ this mapper, and can have anything for a content.
</P>
<LI><P><new_targets/> tag, which has <A HREF="storage-bd_template.html"><block_device_template/></A>s
for children. These templates are used for creation of new targets
- of this mapper.
+ of this mapper.
</P>
</UL>
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/docs/storage_api.html 2007/03/05 20:45:17 1.7
+++ conga/ricci/docs/storage_api.html 2007/09/11 02:45:26 1.8
@@ -13,11 +13,11 @@
dm-crypt, md-crypt, filesystems, their properties, mounts,
...<BR>Currently, as of version 1.0, it supports LVM, partition
tables, software RAID, ext2/3, swap, GFS and mountpoints.</P>
-<P>Module name: âstorageâ
+<P>Module name: âstorageâ
</P>
<P>Module version: 1.0</P>
<P>See <A HREF="modules_common.html">Modules - Common API</A> for
-general module description.
+general module description.
</P>
<P><BR><BR>
</P>
@@ -49,22 +49,22 @@
</P>
<P>All functions might fail with generic error (-1), see <A HREF="modules_common.html">Modules
- Common API</A> for error description, or one of Storage Module
-Specific:
+Specific:
</P>
<UL>
<LI><P>1 â mid-air collision<BR>Every object has a state indicator
associated with it. Before anything is committed to disk, storage is
probed and local state indicator is calculated. Local indicator is
compared with the one committed by client, if different, mid-air
- error is raised. This prevents accidental data destruction.
+ error is raised. This prevents accidental data destruction.
</P>
<LI><P>2 â validation error<BR>Every property has constraints
associated with it. If property is modified, and it is not within
valid constraints, validation error is returned, before anything is
- committed to disk.
+ committed to disk.
</P>
<LI><P>3 â umount error<BR>It will happen in the case of umount
- failure.
+ failure.
</P>
<LI><P>4 â clvmd not running<BR>Clustered Volume Groups need clvmd
daemon running, and yet clvmd is not running. <BR>Storage module
@@ -76,38 +76,38 @@
<LI><P>5 â cluster not quorate<BR>LVM is configured to use cluster
locking mechanism, but cluster is not quorate. That would cause LVM
operations to hang until quorum is regained. User should make
- cluster quorate before continuing.
+ cluster quorate before continuing.
</P>
<LI><P>6 â cluster locking not enabled<BR>LVM is not configured to use cluster
- locking mechanism, but some volumes are marked clustered.
- User should enable cluster locking.
+ locking mechanism, but some volumes are marked clustered.
+ User should enable cluster locking.
</P>
<LI><P>7 â cluster not running on node<BR>LVM is configured to use cluster
- locking mechanism, but cluster is not running on local node.
+ locking mechanism, but cluster is not running on local node.
</P>
</UL>
<P><BR><BR>
</P>
-<P>Functions:
+<P>Functions:
</P>
<UL>
<LI><P>APIs</P>
<UL>
<P>Get supported API versions. See <A HREF="modules_common.html">Modules
- - Common API</A> for description.
+ - Common API</A> for description.
</P>
</UL>
<LI><P>report</P>
</UL>
<UL>
<UL>
- <P>Assemble all info into a single report.
+ <P>Assemble all info into a single report.
</P>
</UL>
</UL>
<UL>
<UL>
- <P>No input variables.
+ <P>No input variables.
</P>
<P ALIGN=LEFT>Output variables:<BR>- âmapper_templatesâ
(list_xml) â list of <A HREF="storage-mapper_template.html"><mapper_template/></A>s,
@@ -121,7 +121,7 @@
<UL>
<UL>
<P>On failure: <BR>- No special errors defined, only generic ones
- might get returned.
+ might get returned.
</P>
</UL>
</UL>
@@ -132,7 +132,7 @@
<UL>
<P ALIGN=LEFT>Retrieve all <A HREF="storage-mapper_template.html">mapper
templates</A> on the system. If âmapper_typeâ is specified,
- retrieve mapper templates of specified type only.
+ retrieve mapper templates of specified type only.
</P>
<P>Input variables: <BR>- âmapper_typeâ (string) â optional,
if specified, retrieve mapper templates of specified type</P>
@@ -153,7 +153,7 @@
<P ALIGN=LEFT>Retrieve âmapper_idâs of all mappers on the
system. If âmapper_typeâ is specified, retrieve âmapper_idâs
of specified type only. <BR>Mapper id can be used to retrieve
- mapper using âget_mappersâ function.
+ mapper using âget_mappersâ function.
</P>
<P>Input variables: <BR>- âmapper_typeâ (string) â optional,
if specified, retrieve IDs of mappers of specified type, otherwise,
@@ -173,7 +173,7 @@
<UL>
<UL>
<P ALIGN=LEFT>Retrieve all mappers on the system. âmapper_typeâ
- and âmapper_idâ can be used to limit the scope of search.
+ and âmapper_idâ can be used to limit the scope of search.
</P>
<P>Input variables: <BR>- âmapper_typeâ (string) â optional,
if specified, retrieve IDs of mappers of specified type<BR>-
@@ -212,7 +212,7 @@
</UL>
<UL>
<UL>
- <P ALIGN=LEFT>Modify properties of already existing mapper.
+ <P ALIGN=LEFT>Modify properties of already existing mapper.
</P>
<P>Input variables: <BR>- âmapperâ (xml) â modified <A HREF="storage-mappers.html"><mapper/></A>
to be changed on disk</P>
@@ -247,7 +247,7 @@
<UL>
<P ALIGN=LEFT>Output variables: <BR>- âmapperâ (xml) â
<A HREF="storage-mappers.html"><mapper/></A> with new sources
- added
+ added
</P>
<P ALIGN=LEFT>On failure: <BR>- Any of errors specified above</P>
</UL>
@@ -256,11 +256,11 @@
<UL>
<UL>
<P ALIGN=LEFT>Remove source from mapper. <BR>Source removal
- procedure: <BR>1 â retrieve mapper<BR>2 â extract block
+ procedure: <BR>1 â retrieve mapper<BR>2 â extract block
device, which has alternative content, from <sources/> tag
<BR>3 â submit block
device, from 2, and mapper attributes, using this function</P>
- <P ALIGN=LEFT>Input variables: <BR>- âbdâ (xml) â
+ <P ALIGN=LEFT>Input variables: <BR>- âbdâ (xml) â
<A HREF="storage-bds.html"><block_device/></A>, from
mapper's <sources/> tag, to be removed<BR>-
âmapper_typeâ (string) â type of mapper from which source
@@ -274,7 +274,7 @@
<UL>
<P ALIGN=LEFT>Output variables: <BR>- âmapperâ (xml) â
<A HREF="storage-mappers.html"><mapper/></A> with source
- removed
+ removed
</P>
<P ALIGN=LEFT>On failure: <BR>- Any of errors specified above</P>
</UL>
@@ -304,7 +304,7 @@
created by submitting <A HREF="storage-bd_template.html"><block_device_template/></A>
from <new_targets/> of <A HREF="storage-mappers.html"><mapper/></A>,
using this function. <BR><A HREF="storage-bd_template.html"><block_device_template/></A>'s
- properties and content can be modified before submission.
+ properties and content can be modified before submission.
</P>
<P>Input variables: <BR>- âbdâ (xml) â modified
<A HREF="storage-bd_template.html"><block_device_template/></A>
@@ -324,7 +324,7 @@
<UL>
<P ALIGN=LEFT>Get a block device by its path. <BR>Block devices can
also be retrieved by extraction of <A HREF="storage-bds.html"><block_device/></A>
- from <A HREF="storage-mappers.html"><mapper/></A>.
+ from <A HREF="storage-mappers.html"><mapper/></A>.
</P>
<P>Input variables: <BR>- âpathâ (string) â path to retrieve
block device for</P>
@@ -344,7 +344,7 @@
<P ALIGN=LEFT>Modify properties of block device, its content, or
replace content. <BR>See <A HREF="storage-bds.html"><block_device/></A>
and <A HREF="storage-content.html"><content/></A> for more
- info.
+ info.
</P>
<P>Input variables: <BR>- âbdâ (xml) â modified
<A HREF="storage-bds.html"><block_device/></A> to be changed
@@ -354,7 +354,7 @@
<UL>
<UL>
<P ALIGN=LEFT>Output variables: <BR>- âbdâ (xml) â modified
- <A HREF="storage-bds.html"><block_device/></A>
+ <A HREF="storage-bds.html"><block_device/></A>
</P>
<P ALIGN=LEFT>On failure: <BR>- Any of errors specified above,
especially unmount error if content fails to unmount</P>
@@ -383,8 +383,8 @@
</UL>
<LI><P>enable_clustered_lvm</P>
<UL>
- <P>Enable LVM's cluster locking.
- It is an error to call this function if lvm2-cluster
+ <P>Enable LVM's cluster locking.
+ It is an error to call this function if lvm2-cluster
is not installed.
</P>
<P>No input variables.
@@ -395,8 +395,8 @@
</UL>
<LI><P>disable_clustered_lvm</P>
<UL>
- <P>Disable LVM's cluster locking.
- It is an error to call this function if lvm2-cluster
+ <P>Disable LVM's cluster locking.
+ It is an error to call this function if lvm2-cluster
is not installed.
</P>
<P>No input variables.
--- conga/ricci/docs/variables.html 2006/09/26 01:04:20 1.5
+++ conga/ricci/docs/variables.html 2007/09/11 02:45:26 1.6
@@ -18,14 +18,14 @@
- If a variable has an ifnot_bool=âbool_var_nameâ attribute, it is to
be used only if boolean variable named âbool_var_nameâ is set to
âfalseâ.</P>
-<P>Types:
+<P>Types:
</P>
<UL>
<LI><P>int</P>
<UL>
- <P>Integer will be the value of attribute âvalueâ.
+ <P>Integer will be the value of attribute âvalueâ.
</P>
- <P>If mutable=âtrueâ, constraints:
+ <P>If mutable=âtrueâ, constraints:
</P>
<UL>
<P>min (attribute)</P>
@@ -42,9 +42,9 @@
</UL>
<LI><P>string</P>
<UL>
- <P>String will be the value of attribute âvalueâ.
+ <P>String will be the value of attribute âvalueâ.
</P>
- <P>If mutable=âtrueâ, constraints:
+ <P>If mutable=âtrueâ, constraints:
</P>
<UL>
<P>min_length (attribute)</P>
@@ -65,13 +65,13 @@
<UL>
<P>Boolean will be the value of attribute âvalueâ. It can be
one of âtrueâ or âfalseâ.</P>
- <P>There is no constraints.
+ <P>There is no constraints.
</P>
</UL>
<LI><P>xml</P>
<UL>
<P>XML will be attached to the <var/>.</P>
- <P>There is no constraints.
+ <P>There is no constraints.
</P>
</UL>
<LI><P>list_str</P>
--- conga/ricci/init.d/ricci 2007/06/25 16:03:42 1.11
+++ conga/ricci/init.d/ricci 2007/09/11 02:45:27 1.12
@@ -86,18 +86,18 @@
exit 1
fi
fi
-
+
service saslauthd start >&/dev/null
ssl_certs_ok
if [ "1$?" != "10" ] ; then
generate_ssl_certs
fi
-
+
NewUID=`grep "^$RUNASUSER:" /etc/passwd | sed -e 's/^[^:]*:[^:]*://' -e 's/:.*//'`
echo -n $"Starting $ID: "
daemon $RICCID -u $NewUID
rtrn=$?
- echo
+ echo
if [ $rtrn -eq 0 ]; then
touch "$LOCKFILE"
@@ -109,7 +109,7 @@
restart)
$0 stop
- $0 start
+ $0 start
rtrn=$?
;;
@@ -132,7 +132,7 @@
/usr/bin/logger -t $RICCID "shutdown failed"
rtrn=1
fi
- echo
+ echo
;;
condrestart)
--- conga/ricci/make/defines.mk.in 2007/09/09 14:18:37 1.8
+++ conga/ricci/make/defines.mk.in 2007/09/11 02:45:27 1.9
@@ -1,6 +1,6 @@
# default params:
-program-prefix ?=
+program-prefix ?=
prefix ?= ${DESTDIR}/usr
exec-prefix ?= ${DESTDIR}/usr
bindir ?= ${exec-prefix}/bin
--- conga/ricci/modules/cluster/clumon/README.cim 2006/06/14 21:44:36 1.1
+++ conga/ricci/modules/cluster/clumon/README.cim 2007/09/11 02:45:27 1.2
@@ -1,5 +1,5 @@
-To execute following commands, Pegasus CIM server has to be running
+To execute following commands, Pegasus CIM server has to be running
and root account has to be used,
Register Red Hat Cluster provider:
@@ -9,5 +9,5 @@
cimmof -n root/cimv2 RedHat_ClusterSchema.mof
-Refer to Pegasus documentation and /usr/share/doc/tog-pegasus for CIM
+Refer to Pegasus documentation and /usr/share/doc/tog-pegasus for CIM
user management and ACL.
--- conga/ricci/modules/cluster/clumon/README.snmpd 2006/06/14 21:44:36 1.1
+++ conga/ricci/modules/cluster/clumon/README.snmpd 2007/09/11 02:45:27 1.2
@@ -42,7 +42,7 @@
group clusterGroup v2c localnet
# name incl/excl subtree mask(optional)
-view clusterview included REDHAT-CLUSTER-MIB:RedHatCluster
+view clusterview included REDHAT-CLUSTER-MIB:RedHatCluster
# group context sec.model sec.level prefix read write notif
access clusterGroup "" any noauth prefix clusterview none none
@@ -54,7 +54,7 @@
net-snmp client configuration:
-Place REDHAT-MIB and REDHAT-CLUSTER-MIB into ~/.snmp/mibs/, and query cluster using:
+Place REDHAT-MIB and REDHAT-CLUSTER-MIB into ~/.snmp/mibs/, and query cluster using:
snmpwalk -v 2c -c COMMUNITY NODENAME REDHAT-CLUSTER-MIB::RedHatCluster
(replace NODENAME with the hostname of one of cluster nodes running software)
--- conga/ricci/modules/cluster/clumon/REDHAT-CLUSTER-MIB 2006/06/14 21:44:36 1.1
+++ conga/ricci/modules/cluster/clumon/REDHAT-CLUSTER-MIB 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
1801 Varsity Drive
Raleigh, North Carolina 27606
USA
-
+
email: customerservice at redhat.com
"
DESCRIPTION "Red Hat Cluster Suite MIB
@@ -28,7 +28,7 @@
rhcMIBInfo OBJECT IDENTIFIER ::= { RedHatCluster 1 }
rhcCluster OBJECT IDENTIFIER ::= { RedHatCluster 2 }
rhcTables OBJECT IDENTIFIER ::= { RedHatCluster 3 }
-
+
@@ -86,7 +86,7 @@
MAX-ACCESS read-only
STATUS current
DESCRIPTION
- "Minimum number of votes required for quorum.
+ "Minimum number of votes required for quorum.
If cluster is not quorate, all services are stopped."
::= { rhcCluster 4 }
--- conga/ricci/modules/cluster/clumon/REDHAT-MIB 2006/06/14 21:44:36 1.1
+++ conga/ricci/modules/cluster/clumon/REDHAT-MIB 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
1801 Varsity Drive
Raleigh, North Carolina 27606
USA
-
+
email: customerservice at redhat.com
"
DESCRIPTION "Red Hat, Inc MIB
--- conga/ricci/modules/cluster/clumon/RedHat_ClusterSchema.mof 2006/06/14 21:44:36 1.1
+++ conga/ricci/modules/cluster/clumon/RedHat_ClusterSchema.mof 2007/09/11 02:45:27 1.2
@@ -1,70 +1,70 @@
-[ Description ("RedHat Cluster. \nServices are accessible thru RedHat_ClusterHostingFailoverService.\nNodes are accessible thru RedHat_ClusterParticipatingNode.\nIf RequiredQuorum is not fulfilled, all services are stoped and Status is set to Degraded.\nIf some services have failed, Status is set to Stressed."),
+[ Description ("RedHat Cluster. \nServices are accessible thru RedHat_ClusterHostingFailoverService.\nNodes are accessible thru RedHat_ClusterParticipatingNode.\nIf RequiredQuorum is not fulfilled, all services are stoped and Status is set to Degraded.\nIf some services have failed, Status is set to Stressed."),
Version("0.0.2") ]
class RedHat_Cluster : CIM_Cluster
{
[ Description("Number of available nodes' votes.") ]
uint16 Votes;
-
+
[ Description("Minimum quorum required for cluster to be operational.") ]
uint16 VotesNeededForQuorum;
-
-
+
+
[ Description("Number of nodes.") ]
uint16 NodesNumber;
-
+
[ Description("Number of available nodes.") ]
uint16 AvailableNodesNumber;
-
+
[ Description("Number of unavailable nodes.") ]
uint16 UnavailableNodesNumber;
-
+
[ Description("Node Names.") ]
string NodesNames[];
-
+
[ Description("Available Nodes.") ]
string AvailableNodesNames[];
-
+
[ Description("Unavailable Nodes.") ]
string UnavailableNodesNames[];
-
-
+
+
[ Description("Number of services.") ]
uint16 ServicesNumber;
-
+
[ Description("Number of running services.") ]
uint16 RunningServicesNumber;
-
+
[ Description("Number of stopped services.") ]
uint16 StoppedServicesNumber;
-
+
[ Description("Number of failed services.") ]
uint16 FailedServicesNumber;
-
+
[ Description("Names of running services.") ]
string ServicesNames[];
-
+
[ Description("Names of running services.") ]
string RunningServicesNames[];
-
+
[ Description("Names of stopped services.") ]
string StoppedServicesNames[];
-
+
[ Description("Names of failed services.") ]
string FailedServicesNames[];
};
-[ Description("Cluster Node"),
+[ Description("Cluster Node"),
Version("0.0.2") ]
class RedHat_ClusterNode : CIM_ComputerSystem
{
[ Key, Description("Name of cluster this node participates in.") ]
string ClusterName;
-
+
[ Description("Number of services running on this node") ]
uint16 RunningServicesNumber;
-
+
[ Description("Services running on this node") ]
string RunningServicesNames[];
};
@@ -75,7 +75,7 @@
{
[ Description("Node service runs on") ]
string NodeName;
-
+
[ Description("Cluster Name") ]
string ClusterName;
};
@@ -90,13 +90,13 @@
/*
-[ Association,
+[ Association,
Description("Links cluster to cluster nodes."), Version("0.0.1") ]
class RedHat_ClusterParticipatingNode : CIM_ParticipatingCS
{
[ Override("Antecedent") ]
RedHat_ClusterNode REF Antecedent;
-
+
[ Description("Number of node's votes participating in cluster quorum.") ]
uint16 QuorumVotes;
};
@@ -109,7 +109,7 @@
{
[ Override("Antecedent") ]
RedHat_Cluster REF Antecedent;
-
+
[ Override("Dependent") ]
RedHat_ClusterFailoverService REF Dependent;
};
@@ -122,7 +122,7 @@
{
[ Override("Antecedent") ]
RedHat_ClusterNode REF Antecedent;
-
+
[ Override("Dependent") ]
RedHat_ClusterFailoverService REF Dependent;
};
--- conga/ricci/modules/cluster/clumon/init.d/modclusterd 2006/10/14 18:52:23 1.2
+++ conga/ricci/modules/cluster/clumon/init.d/modclusterd 2007/09/11 02:45:27 1.3
@@ -57,7 +57,7 @@
restart)
$0 stop
sleep 8
- $0 start
+ $0 start
rtrn=$?
;;
--- conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.cpp 2006/08/10 22:53:08 1.3
+++ conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.cpp 2007/09/11 02:45:27 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -46,19 +46,19 @@
-static CIMInstance
+static CIMInstance
buildClusterInstance(counting_auto_ptr<Cluster>& cluster, Boolean qual, Boolean orig);
-static CIMInstance
+static CIMInstance
buildNodeInstance(counting_auto_ptr<Node>& node, Boolean qual, Boolean orig);
-static CIMInstance
+static CIMInstance
buildServiceInstance(counting_auto_ptr<Service>& service, Boolean qual, Boolean orig);
-static CIMObjectPath
+static CIMObjectPath
buildClusterInstancePath(counting_auto_ptr<Cluster>& cluster, const CIMNamespaceName& nameSpace);
-static CIMObjectPath
+static CIMObjectPath
buildNodeInstancePath(counting_auto_ptr<Node>& node, const CIMNamespaceName& nameSpace);
-static CIMObjectPath
+static CIMObjectPath
buildServiceInstancePath(counting_auto_ptr<Service>& service, const CIMNamespaceName& nameSpace);
@@ -79,13 +79,13 @@
// CIMProvider interface
-void
+void
ClusterProvider::initialize (CIMOMHandle& cimom)
{
log("ClusterProvider::initialize called");
}
-void
+void
ClusterProvider::terminate (void)
{
log("ClusterProvider::terminate called");
@@ -94,7 +94,7 @@
// CIMInstanceProvider interface
-void
+void
ClusterProvider::getInstance(const OperationContext &context,
const CIMObjectPath &ref,
const Boolean includeQualifiers,
@@ -103,18 +103,18 @@
InstanceResponseHandler &handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<InstanceResponseHandler> t(handler);
-
+
CIMName className(ref.getClassName());
-
+
log("getInstance(... " + className.getString() + " ...) called");
-
+
if(className.equal(CLUSTER_CLASSNAME))
{
if(cluster.get() == NULL)
return;
- CIMObjectPath path = buildClusterInstancePath(cluster,
+ CIMObjectPath path = buildClusterInstancePath(cluster,
ref.getNameSpace());
if(path.identical(ref))
{
@@ -130,14 +130,14 @@
return;
list<counting_auto_ptr<Node> > nodes = cluster->nodes();
for(list<counting_auto_ptr<Node> >::iterator iter = nodes.begin();
- iter != nodes.end();
+ iter != nodes.end();
iter++)
{
- CIMObjectPath path = buildNodeInstancePath(*iter,
+ CIMObjectPath path = buildNodeInstancePath(*iter,
ref.getNameSpace());
if(path.identical(ref))
{
- CIMInstance inst = buildNodeInstance(*iter,
+ CIMInstance inst = buildNodeInstance(*iter,
includeQualifiers,
includeClassOrigin);
handler.deliver(inst);
@@ -150,14 +150,14 @@
return;
list<counting_auto_ptr<Service> > services = cluster->services();
for(list<counting_auto_ptr<Service> >::iterator iter = services.begin();
- iter != services.end();
+ iter != services.end();
iter++)
{
- CIMObjectPath path = buildServiceInstancePath(*iter,
+ CIMObjectPath path = buildServiceInstancePath(*iter,
ref.getNameSpace());
if(path.identical(ref))
{
- CIMInstance inst = buildServiceInstance(*iter,
+ CIMInstance inst = buildServiceInstance(*iter,
includeQualifiers,
includeClassOrigin);
handler.deliver(inst);
@@ -168,7 +168,7 @@
throw CIMInvalidParameterException(ref.toString());
}
-void
+void
ClusterProvider::enumerateInstances(const OperationContext &context,
const CIMObjectPath &ref,
const Boolean includeQualifiers,
@@ -177,13 +177,13 @@
InstanceResponseHandler &handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<InstanceResponseHandler> t(handler);
-
+
CIMName className(ref.getClassName());
-
+
log("enumerateInstances(... " + className.getString() + " ...) called");
-
+
if(className.equal(CLUSTER_CLASSNAME))
{
if(cluster.get() == NULL)
@@ -199,10 +199,10 @@
return;
list<counting_auto_ptr<Node> > nodes = cluster->nodes();
for(list<counting_auto_ptr<Node> >::iterator iter = nodes.begin();
- iter != nodes.end();
+ iter != nodes.end();
iter++)
{
- CIMInstance inst = buildNodeInstance(*iter,
+ CIMInstance inst = buildNodeInstance(*iter,
includeQualifiers,
includeClassOrigin);
handler.deliver(inst);
@@ -214,10 +214,10 @@
return;
list<counting_auto_ptr<Service> > services = cluster->services();
for(list<counting_auto_ptr<Service> >::iterator iter = services.begin();
- iter != services.end();
+ iter != services.end();
iter++)
{
- CIMInstance inst = buildServiceInstance(*iter,
+ CIMInstance inst = buildServiceInstance(*iter,
includeQualifiers,
includeClassOrigin);
handler.deliver(inst);
@@ -227,19 +227,19 @@
throw CIMInvalidParameterException(ref.toString());
}
-void
+void
ClusterProvider::enumerateInstanceNames(const OperationContext &context,
const CIMObjectPath &classRef,
ObjectPathResponseHandler &handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<ObjectPathResponseHandler> t(handler);
-
+
CIMName className(classRef.getClassName());
-
+
log("enumerateInstanceNames(... " + className.getString() + " ...) called");
-
+
if(className.equal(CLUSTER_CLASSNAME))
{
if(cluster.get() == NULL)
@@ -254,10 +254,10 @@
return;
list<counting_auto_ptr<Node> > nodes = cluster->nodes();
for(list<counting_auto_ptr<Node> >::iterator iter = nodes.begin();
- iter != nodes.end();
+ iter != nodes.end();
iter++)
{
- CIMObjectPath path = buildNodeInstancePath(*iter,
+ CIMObjectPath path = buildNodeInstancePath(*iter,
classRef.getNameSpace());
handler.deliver(path);
}
@@ -268,10 +268,10 @@
return;
list<counting_auto_ptr<Service> > services = cluster->services();
for(list<counting_auto_ptr<Service> >::iterator iter = services.begin();
- iter != services.end();
+ iter != services.end();
iter++)
{
- CIMObjectPath path = buildServiceInstancePath(*iter,
+ CIMObjectPath path = buildServiceInstancePath(*iter,
classRef.getNameSpace());
handler.deliver(path);
}
@@ -281,7 +281,7 @@
}
-void
+void
ClusterProvider::createInstance(const OperationContext &context,
const CIMObjectPath &ref,
const CIMInstance &obj,
@@ -290,7 +290,7 @@
throw CIMNotSupportedException(CLUSTER_PROVIDER_CLASSNAME + "::createInstance");
}
-void
+void
ClusterProvider::modifyInstance(const OperationContext &context,
const CIMObjectPath &ref,
const CIMInstance &obj,
@@ -301,7 +301,7 @@
throw CIMNotSupportedException(CLUSTER_PROVIDER_CLASSNAME + "::modifyInstance");
}
-void
+void
ClusterProvider::deleteInstance(const OperationContext &context,
const CIMObjectPath &ref,
ResponseHandler &handler)
@@ -314,7 +314,7 @@
// private
-void
+void
ClusterProvider::log(const Pegasus::String& str)
{
::log((const char*) str.getCString());
@@ -329,12 +329,12 @@
buildClusterInstance(counting_auto_ptr<Cluster>& cluster, Boolean qual, Boolean orig)
{
CIMInstance inst(CIMName(CLUSTER_CLASSNAME));
-
+
// Name
inst.addProperty(CIMProperty(
CIMName("Name"),
CIMValue(Pegasus::String(cluster->name().c_str()))));
-
+
// Caption
//inst.addProperty(CIMProperty(
// CIMName("Caption"),
@@ -343,25 +343,25 @@
//inst.addProperty(CIMProperty(
// CIMName("Description"),
// CIMValue(Pegasus::String(cluster.name.c_str()))));
-
+
// *** Votes ***
-
+
inst.addProperty(CIMProperty(
CIMName("Votes"),
CIMValue(Uint16(cluster->votes()))));
inst.addProperty(CIMProperty(
CIMName("VotesNeededForQuorum"),
CIMValue(Uint16(cluster->minQuorum()))));
-
-
+
+
// *** Nodes ***
-
+
list<counting_auto_ptr<Node> > nodes = cluster->nodes();
Array<Pegasus::String> names;
Array<Pegasus::String> namesA;
Array<Pegasus::String> namesU;
for(list<counting_auto_ptr<Node> >::iterator iterN = nodes.begin();
- iterN != nodes.end();
+ iterN != nodes.end();
iterN++)
{
counting_auto_ptr<Node>& node = *iterN;
@@ -385,24 +385,24 @@
CIMName("UnavailableNodesNumber"),
CIMValue(Uint16(cluster->unclusteredNodes().size()))));
inst.addProperty(CIMProperty(
- CIMName("NodesNames"),
+ CIMName("NodesNames"),
CIMValue(names)));
inst.addProperty(CIMProperty(
- CIMName("AvailableNodesNames"),
+ CIMName("AvailableNodesNames"),
CIMValue(namesA)));
inst.addProperty(CIMProperty(
- CIMName("UnavailableNodesNames"),
+ CIMName("UnavailableNodesNames"),
CIMValue(namesU)));
-
+
// *** services ***
-
+
list<counting_auto_ptr<Service> > services = cluster->services();
names.clear();
Array<Pegasus::String> namesR;
Array<Pegasus::String> namesF;
Array<Pegasus::String> namesS;
for(list<counting_auto_ptr<Service> >::iterator iterS = services.begin();
- iterS != services.end();
+ iterS != services.end();
iterS++)
{
counting_auto_ptr<Service>& service = *iterS;
@@ -410,7 +410,7 @@
names.append(name);
if(service->running())
namesR.append(name);
- else
+ else
namesS.append(name);
if(service->failed())
namesF.append(name);
@@ -439,10 +439,10 @@
inst.addProperty(CIMProperty(
CIMName("FailedServicesNames"),
CIMValue(namesF)));
-
-
+
+
// *** status begin ***
-
+
bool online = cluster->clusteredNodes().size() > 0;
bool failedServices = cluster->failedServices().size() != 0;
bool stoppedServices = cluster->stoppedServices().size() != 0;
@@ -495,7 +495,7 @@
Ostatus.append(10);
statusD.append("Cluster stopped");
}
-
+
//inst.addProperty(CIMProperty(
// CIMName("Status"),
// CIMValue(status)));
@@ -505,7 +505,7 @@
inst.addProperty(CIMProperty(
CIMName("StatusDescriptions"),
CIMValue(statusD)));
-
+
CIMValue clusterState;
if(online)
clusterState = CIMValue(Uint16(2)); // online
@@ -514,55 +514,55 @@
inst.addProperty(CIMProperty(
CIMName("ClusterState"),
clusterState));
-
+
// *** status done ***
-
-
+
+
// Types
Array<Uint16> types;
types.append(2); // failover
inst.addProperty(CIMProperty(
CIMName("Types"),
CIMValue(types)));
-
-
+
+
// CreationClassName
inst.addProperty(CIMProperty(
CIMName("CreationClassName"),
CIMValue(Pegasus::String(CLUSTER_CLASSNAME))));
-
+
// ResetCapability
//inst.addProperty(CIMProperty(
// CIMName("ResetCapability"),
// CIMValue(Uint16(5)))); // not implemented - cluster :)
// PowerManagementCapabilities
-
+
// ElementName
// InstallDate
-
+
// EnabledState
// OtherEnabledState
// EnabledDefault
-
+
// RequestedState
// TimeOfLastStateChange
-
+
// Roles
-
+
// NameFormat
-
+
// PrimaryOwnerContact
// PrimaryOwnerName
// OtherIdentifingInfo
// IdentifyingDescription
-
+
// Dedicated
// OtherDedicatedDescription
-
-
+
+
// Interconnect
// InterconnectAddress
-
+
return inst;
}
@@ -573,24 +573,24 @@
/*
[ Key, Description("Name of cluster this node participates in.") ]
string ClusterName;
-
+
[ Description("Number of services running on this node") ]
uint16 RunningServicesNumber;
-
+
[ Description("Services running on this node") ]
uint16 RunningServicesNames;
*/
-
+
// ClusterName
inst.addProperty(CIMProperty(
CIMName("ClusterName"),
CIMValue(Pegasus::String(node->clustername().c_str()))));
-
+
// Name
inst.addProperty(CIMProperty(
CIMName("Name"),
CIMValue(Pegasus::String(node->name().c_str()))));
-
+
// Caption
//inst.addProperty(CIMProperty(
// CIMName("Caption"),
@@ -599,20 +599,20 @@
//inst.addProperty(CIMProperty(
// CIMName("Description"),
// CIMValue(Pegasus::String(cluster.name.c_str()))));
-
-
+
+
// *** Votes ***
-
+
inst.addProperty(CIMProperty(
CIMName("Votes"),
CIMValue(Uint16(node->votes()))));
-
+
// *** services ***
-
+
list<counting_auto_ptr<Service> > services = node->services();
Array<Pegasus::String> names;
for(list<counting_auto_ptr<Service> >::iterator iter = services.begin();
- iter != services.end();
+ iter != services.end();
iter++)
{
Pegasus::String name((*iter)->name().c_str());
@@ -624,10 +624,10 @@
inst.addProperty(CIMProperty(
CIMName("RunningServicesNames"),
CIMValue(names)));
-
-
+
+
// *** status begin ***
-
+
Array<Uint16> Ostatus; // OperationalStatus
Array<Pegasus::String> statusD; // StatusDescription
if(node->online() && node->clustered())
@@ -648,7 +648,7 @@
Ostatus.append(10);
statusD.append("Node not running");
}
-
+
//inst.addProperty(CIMProperty(
// CIMName("Status"),
// CIMValue(status)));
@@ -658,41 +658,41 @@
inst.addProperty(CIMProperty(
CIMName("StatusDescriptions"),
CIMValue(statusD)));
-
-
+
+
// CreationClassName
inst.addProperty(CIMProperty(
CIMName("CreationClassName"),
CIMValue(Pegasus::String(CLUSTER_NODE_CLASSNAME))));
-
+
// ResetCapability
//inst.addProperty(CIMProperty(
// CIMName("ResetCapability"),
// CIMValue(Uint16(5)))); // not implemented - cluster :)
// PowerManagementCapabilities
-
+
// ElementName
// InstallDate
-
+
// EnabledState
// OtherEnabledState
// EnabledDefault
-
+
// RequestedState
// TimeOfLastStateChange
-
+
// Roles
-
+
// NameFormat
-
+
// PrimaryOwnerContact
// PrimaryOwnerName
// OtherIdentifingInfo
// IdentifyingDescription
-
+
// Dedicated
// OtherDedicatedDescription
-
+
return inst;
}
@@ -700,12 +700,12 @@
buildServiceInstance(counting_auto_ptr<Service>& service, Boolean qual, Boolean orig)
{
CIMInstance inst(CIMName(CLUSTER_SERVICE_CLASSNAME));
-
+
// Name
inst.addProperty(CIMProperty(
CIMName("Name"),
CIMValue(Pegasus::String(service->name().c_str()))));
-
+
// Caption
//inst.addProperty(CIMProperty(
// CIMName("Caption"),
@@ -714,12 +714,12 @@
//inst.addProperty(CIMProperty(
// CIMName("Description"),
// CIMValue(Pegasus::String(cluster.name.c_str()))));
-
+
// ClusterName
inst.addProperty(CIMProperty(
CIMName("ClusterName"),
CIMValue(Pegasus::String(service->clustername().c_str()))));
-
+
// Started
inst.addProperty(CIMProperty(
CIMName("Started"),
@@ -733,7 +733,7 @@
inst.addProperty(CIMProperty(
CIMName("StartMode"),
CIMValue(autostart)));
-
+
// NodeName
if(service->running())
{
@@ -742,9 +742,9 @@
CIMName("NodeName"),
CIMValue(nodeName)));
}
-
+
// *** status begin ***
-
+
Array<Uint16> Ostatus; // OperationalStatus
Array<Pegasus::String> statusD; // StatusDescription
if(service->failed())
@@ -775,91 +775,91 @@
CIMName("StatusDescriptions"),
CIMValue(statusD)));
// *** status done ***
-
+
// CreationClassName
inst.addProperty(CIMProperty(
CIMName("CreationClassName"),
CIMValue(Pegasus::String(CLUSTER_SERVICE_CLASSNAME))));
-
+
// SystemCreationClassName
inst.addProperty(CIMProperty(
CIMName("SystemCreationClassName"),
CIMValue(Pegasus::String(CLUSTER_CLASSNAME))));
-
+
// SystemName
inst.addProperty(CIMProperty(
CIMName("SystemName"),
CIMValue(Pegasus::String(service->clustername().c_str()))));
-
-
+
+
// ElementName
// InstallDate
-
+
// EnabledState
// OtherEnabledState
// EnabledDefault
-
+
// RequestedState
// TimeOfLastStateChange
-
+
// PrimaryOwnerContact
// PrimaryOwnerName
// OtherIdentifingInfo
// IdentifyingDescription
-
+
return inst;
}
-CIMObjectPath
-buildClusterInstancePath(counting_auto_ptr<Cluster>& cluster,
+CIMObjectPath
+buildClusterInstancePath(counting_auto_ptr<Cluster>& cluster,
const CIMNamespaceName& nameSpace)
{
Array<CIMKeyBinding> keys;
- keys.append(CIMKeyBinding("CreationClassName",
- Pegasus::String(CLUSTER_CLASSNAME),
+ keys.append(CIMKeyBinding("CreationClassName",
+ Pegasus::String(CLUSTER_CLASSNAME),
CIMKeyBinding::STRING));
- keys.append(CIMKeyBinding("Name",
- Pegasus::String(cluster->name().c_str()),
+ keys.append(CIMKeyBinding("Name",
+ Pegasus::String(cluster->name().c_str()),
CIMKeyBinding::STRING));
return CIMObjectPath(hostname(), nameSpace, CLUSTER_CLASSNAME, keys);
}
-CIMObjectPath
-buildNodeInstancePath(counting_auto_ptr<Node>& node,
+CIMObjectPath
+buildNodeInstancePath(counting_auto_ptr<Node>& node,
const CIMNamespaceName& nameSpace)
{
Array<CIMKeyBinding> keys;
- keys.append(CIMKeyBinding("CreationClassName",
- Pegasus::String(CLUSTER_NODE_CLASSNAME),
+ keys.append(CIMKeyBinding("CreationClassName",
+ Pegasus::String(CLUSTER_NODE_CLASSNAME),
CIMKeyBinding::STRING));
- keys.append(CIMKeyBinding("Name",
- Pegasus::String(node->name().c_str()),
+ keys.append(CIMKeyBinding("Name",
+ Pegasus::String(node->name().c_str()),
CIMKeyBinding::STRING));
- keys.append(CIMKeyBinding("ClusterName",
- Pegasus::String(node->clustername().c_str()),
+ keys.append(CIMKeyBinding("ClusterName",
+ Pegasus::String(node->clustername().c_str()),
CIMKeyBinding::STRING));
return CIMObjectPath(hostname(), nameSpace, CLUSTER_NODE_CLASSNAME, keys);
}
-CIMObjectPath
-buildServiceInstancePath(counting_auto_ptr<Service>& service,
+CIMObjectPath
+buildServiceInstancePath(counting_auto_ptr<Service>& service,
const CIMNamespaceName& nameSpace)
{
Array<CIMKeyBinding> keys;
- keys.append(CIMKeyBinding("CreationClassName",
- Pegasus::String(CLUSTER_SERVICE_CLASSNAME),
+ keys.append(CIMKeyBinding("CreationClassName",
+ Pegasus::String(CLUSTER_SERVICE_CLASSNAME),
CIMKeyBinding::STRING));
- keys.append(CIMKeyBinding("Name",
- Pegasus::String(service->name().c_str()),
+ keys.append(CIMKeyBinding("Name",
+ Pegasus::String(service->name().c_str()),
CIMKeyBinding::STRING));
- keys.append(CIMKeyBinding("SystemCreationClassName",
- Pegasus::String(CLUSTER_CLASSNAME),
+ keys.append(CIMKeyBinding("SystemCreationClassName",
+ Pegasus::String(CLUSTER_CLASSNAME),
CIMKeyBinding::STRING));
- keys.append(CIMKeyBinding("SystemName",
- Pegasus::String(service->clustername().c_str()),
+ keys.append(CIMKeyBinding("SystemName",
+ Pegasus::String(service->clustername().c_str()),
CIMKeyBinding::STRING));
return CIMObjectPath(hostname(), nameSpace, CLUSTER_SERVICE_CLASSNAME, keys);
}
@@ -870,12 +870,12 @@
{
Pegasus::String hostname;
struct utsname uts;
-
+
if (uname(&uts) == 0)
hostname = uts.nodename;
else
hostname = "unknown";
-
+
return hostname;
}
@@ -913,7 +913,7 @@
class Association
-{
+{
public:
Association(CIMInstance assoc, CIMObjectPath assocPath,
CIMInstance ante, CIMObjectPath antePath,
@@ -921,30 +921,30 @@
assoc(assoc), assocPath(assocPath),
ante(ante), antePath(antePath),
dep(dep), depPath(depPath) {}
-
+
CIMInstance assoc;
CIMObjectPath assocPath;
CIMInstance ante;
CIMObjectPath antePath;
CIMInstance dep;
CIMObjectPath depPath;
-};
+};
-vector<Association>
-buildAssociations(Cluster& cluster,
- const CIMNamespaceName& nameSpace,
- Boolean quals,
+vector<Association>
+buildAssociations(Cluster& cluster,
+ const CIMNamespaceName& nameSpace,
+ Boolean quals,
Boolean orig);
-static CIMInstance
-buildClusterParticipatingNodeInstance(Cluster& cluster,
- Node& node,
+static CIMInstance
+buildClusterParticipatingNodeInstance(Cluster& cluster,
+ Node& node,
const CIMNamespaceName& nameSpace,
- Boolean qual,
+ Boolean qual,
Boolean orig);
-static CIMObjectPath
+static CIMObjectPath
buildClusterParticipatingNodeInstancePath(Cluster& cluster,
Node& node,
const CIMNamespaceName& nameSpace);
@@ -952,29 +952,29 @@
// CIMAssociationProvider interface
-void
+void
ClusterProvider::associatorNames(const OperationContext& context,
const CIMObjectPath& objectName,
const CIMName& associationClass,
const CIMName& resultClass,
const Pegasus::String& role,
const Pegasus::String& resultRole,
- ObjectPathResponseHandler& handler)
+ ObjectPathResponseHandler& handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<ObjectPathResponseHandler> t(handler);
-
- log("associatorNames(" + objectName.toString() + ", " +
+
+ log("associatorNames(" + objectName.toString() + ", " +
associationClass.getString() + ", " +
resultClass.getString() + ", " +
- role + ", " +
+ role + ", " +
resultRole + ", ...) called");
return;
-
+
}
-
-void
+
+void
ClusterProvider::associators(const OperationContext& context,
const CIMObjectPath& objectName,
const CIMName& associationClass,
@@ -987,19 +987,19 @@
ObjectResponseHandler& handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<ObjectResponseHandler> t(handler);
-
- log("associatorNames(" + objectName.toString() + ", " +
+
+ log("associatorNames(" + objectName.toString() + ", " +
associationClass.getString() + ", " +
resultClass.getString() + ", " +
- role + ", " +
+ role + ", " +
resultRole + ", ...) called");
return;
-
+
}
-
-void
+
+void
ClusterProvider::referenceNames(const OperationContext& context,
const CIMObjectPath& objectName,
const CIMName& resultClass,
@@ -1007,55 +1007,55 @@
ObjectPathResponseHandler& handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<ObjectPathResponseHandler> t(handler);
-
+
CIMName className(objectName.toString());
-
- log("referenceNames(" + objectName.toString() + ", " +
+
+ log("referenceNames(" + objectName.toString() + ", " +
resultClass.getString() + ", " +
role + ", ...) called");
return;
-
-
- if(! className.equal(CLUSTER_CLASSNAME) ||
+
+
+ if(! className.equal(CLUSTER_CLASSNAME) ||
! className.equal(CLUSTER_NODE_CLASSNAME) ||
! className.equal(CLUSTER_SERVICE_CLASSNAME))
throw CIMInvalidParameterException(className.getString());
if(role.size()!=0 &&
- !role.equalNoCase(role, "Dependent") &&
+ !role.equalNoCase(role, "Dependent") &&
!role.equalNoCase(role, "Antecedent"))
throw CIMInvalidParameterException(className.getString());
-
-
+
+
if(cluster.get() == NULL)
return;
-
- vector<Association> assocs = buildAssociations(*cluster,
+
+ vector<Association> assocs = buildAssociations(*cluster,
objectName.getNameSpace(),
- false,
+ false,
false);
-
+
for(unsigned int i=0; i<assocs.size(); i++)
{
Association& assoc = assocs[i];
-
+
if(!objectName.identical(assoc.antePath) && !objectName.identical(assoc.depPath))
continue;
-
+
if(!resultClass.isNull() && !resultClass.equal(assoc.assocPath.getClassName()))
continue;
-
+
if(role.size()!=0 &&
!(role.equalNoCase(role, "Dependent") && objectName.identical(assoc.depPath)) &&
!(role.equalNoCase(role, "Antecedent") && objectName.identical(assoc.antePath)))
continue;
-
+
handler.deliver(assoc.assocPath);
}
}
-
-void
+
+void
ClusterProvider::references(const OperationContext& context,
const CIMObjectPath& objectName,
const CIMName& resultClass,
@@ -1066,83 +1066,83 @@
ObjectResponseHandler& handler)
{
counting_auto_ptr<Cluster> cluster = _monitor.get_cluster();
-
+
SmartHandler<ObjectResponseHandler> t(handler);
-
+
CIMName className(objectName.toString());
-
- log("references(" + objectName.toString() + ", " +
+
+ log("references(" + objectName.toString() + ", " +
resultClass.getString() + ", " +
role + ", ...) called");
return;
-
-
- if(! className.equal(CLUSTER_CLASSNAME) ||
+
+
+ if(! className.equal(CLUSTER_CLASSNAME) ||
! className.equal(CLUSTER_NODE_CLASSNAME) ||
! className.equal(CLUSTER_SERVICE_CLASSNAME))
throw CIMInvalidParameterException(className.getString());
if(role.size()!=0 &&
- !role.equalNoCase(role, "Dependent") &&
+ !role.equalNoCase(role, "Dependent") &&
!role.equalNoCase(role, "Antecedent"))
throw CIMInvalidParameterException(className.getString());
-
+
if(cluster.get() == NULL)
return;
-
-
- vector<Association> assocs = buildAssociations(*cluster,
+
+
+ vector<Association> assocs = buildAssociations(*cluster,
objectName.getNameSpace(),
includeQualifiers,
includeClassOrigin);
-
+
for(unsigned int i=0; i<assocs.size(); i++)
{
Association& assoc = assocs[i];
-
+
if(!objectName.identical(assoc.antePath) && !objectName.identical(assoc.depPath))
continue;
-
+
if(!resultClass.isNull() && !resultClass.equal(assoc.assocPath.getClassName()))
continue;
-
+
if(role.size()!=0 &&
!(role.equalNoCase(role, "Dependent") && objectName.identical(assoc.depPath)) &&
!(role.equalNoCase(role, "Antecedent") && objectName.identical(assoc.antePath)))
continue;
-
+
handler.deliver(assoc.assoc);
}
}
CIMInstance
-buildClusterParticipatingNodeInstance(Cluster& cluster,
- Node& node,
+buildClusterParticipatingNodeInstance(Cluster& cluster,
+ Node& node,
const CIMNamespaceName& nameSpace,
- Boolean qual,
+ Boolean qual,
Boolean orig)
{
CIMInstance inst(CIMName(CLUSTER_PARTICIPATING_NODE_CLASSNAME));
-
+
// *** localy defined ***
-
+
inst.addProperty(CIMProperty(
CIMName("QuorumVotes"),
CIMValue(Uint16(node.votes))));
-
+
// *** inherited ***
-
+
inst.addProperty(CIMProperty(
CIMName("Antecedent"),
CIMValue(buildNodeInstancePath(node, nameSpace))));
-
+
inst.addProperty(CIMProperty(
CIMName("Dependent"),
CIMValue(buildClusterInstancePath(cluster, nameSpace))));
-
+
inst.addProperty(CIMProperty(
CIMName("RoleOfNode"),
CIMValue(Uint16(2)))); // peers
-
+
// StateOfNode
int state;
if(node.clustered)
@@ -1151,39 +1151,39 @@
state = 5; // unclustered
inst.addProperty(CIMProperty(CIMName("StateOfNode"),
CIMValue(Uint16(state))));
-
+
return inst;
}
-CIMObjectPath
+CIMObjectPath
buildClusterParticipatingNodeInstancePath(Cluster& cluster,
Node& node,
const CIMNamespaceName& nameSpace)
{
Array<CIMKeyBinding> keys;
- keys.append(CIMKeyBinding("Dependent",
- Pegasus::String(buildClusterInstancePath(cluster, nameSpace).toString()),
+ keys.append(CIMKeyBinding("Dependent",
+ Pegasus::String(buildClusterInstancePath(cluster, nameSpace).toString()),
CIMKeyBinding::REFERENCE));
- keys.append(CIMKeyBinding("Antecedent",
- Pegasus::String(buildNodeInstancePath(node, nameSpace).toString()),
+ keys.append(CIMKeyBinding("Antecedent",
+ Pegasus::String(buildNodeInstancePath(node, nameSpace).toString()),
CIMKeyBinding::REFERENCE));
return CIMObjectPath(hostname(), nameSpace, CLUSTER_PARTICIPATING_NODE_CLASSNAME, keys);
}
-vector<Association>
-buildAssociations(Cluster& cluster,
- const CIMNamespaceName& nameSpace,
- Boolean quals,
+vector<Association>
+buildAssociations(Cluster& cluster,
+ const CIMNamespaceName& nameSpace,
+ Boolean quals,
Boolean orig)
{
vector<Association> assocs;
-
+
// cluster - node
list<Node>::iterator iter = cluster.getNodes().begin();
for( ; iter != cluster.getNodes().end(); iter++)
{
// association
- CIMInstance inst = buildClusterParticipatingNodeInstance(cluster,
+ CIMInstance inst = buildClusterParticipatingNodeInstance(cluster,
*iter,
nameSpace,
quals,
@@ -1198,26 +1198,26 @@
CIMObjectPath antePath = buildNodeInstancePath(*iter,
nameSpace);
// dep
- CIMInstance dep = buildClusterInstance(cluster,
+ CIMInstance dep = buildClusterInstance(cluster,
quals,
orig);
CIMObjectPath depPath = buildClusterInstancePath(cluster,
nameSpace);
-
- Association assoc(inst, instPath,
- ante, antePath,
+
+ Association assoc(inst, instPath,
+ ante, antePath,
dep, depPath);
-
+
assocs.push_back(assoc);
}
-
+
// cluster - service
-
-
+
+
// node - service
-
-
-
+
+
+
return assocs;
}
*/
--- conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProvider.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -46,17 +46,17 @@
-class ClusterProvider :
+class ClusterProvider :
public Pegasus::CIMInstanceProvider //, public Pegasus::CIMAssociationProvider
{
public:
ClusterProvider (void) throw ();
virtual ~ClusterProvider (void) throw ();
-
+
// CIMProvider interface
virtual void initialize (Pegasus::CIMOMHandle& cimom);
virtual void terminate (void);
-
+
// CIMInstanceProvider interface
virtual void getInstance(
const Pegasus::OperationContext & context,
@@ -92,7 +92,7 @@
const Pegasus::OperationContext & context,
const Pegasus::CIMObjectPath & ref,
Pegasus::ResponseHandler & handler);
-
+
/*
// CIMAssociationProvider
virtual void associatorNames(
@@ -103,7 +103,7 @@
const Pegasus::String& role,
const Pegasus::String& resultRole,
Pegasus::ObjectPathResponseHandler& handler) ;
-
+
virtual void associators(const Pegasus::OperationContext& context,
const Pegasus::CIMObjectPath& objectName,
const Pegasus::CIMName& associationClass,
@@ -114,13 +114,13 @@
const Pegasus::Boolean includeClassOrigin,
const Pegasus::CIMPropertyList& propertyList,
Pegasus::ObjectResponseHandler& handler);
-
+
virtual void referenceNames(const Pegasus::OperationContext& context,
const Pegasus::CIMObjectPath& objectName,
const Pegasus::CIMName& resultClass,
const Pegasus::String& role,
Pegasus::ObjectPathResponseHandler& handler);
-
+
virtual void references(const Pegasus::OperationContext& context,
const Pegasus::CIMObjectPath& objectName,
const Pegasus::CIMName& resultClass,
@@ -130,14 +130,14 @@
const Pegasus::CIMPropertyList& propertyList,
Pegasus::ObjectResponseHandler& handler);
*/
-
+
private:
void log(const Pegasus::String& str);
ClusterMonitor _monitor;
-
+
}; // class ClusterProvider
-
-
+
+
}; // namespace ClusterMonitoring
--- conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProviderMain.cpp 2006/08/09 16:50:42 1.2
+++ conga/ricci/modules/cluster/clumon/src/cim-provider/ClusterProviderMain.cpp 2007/09/11 02:45:27 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,6 +35,6 @@
{
return new ClusterMonitoring::ClusterProvider();
}
-
+
return (0);
}
--- conga/ricci/modules/cluster/clumon/src/cim-provider/SmartHandler.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/cim-provider/SmartHandler.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,7 +35,7 @@
public:
SmartHandler(cl &handler) : _handler(handler) { _handler.processing(); }
virtual ~SmartHandler(void) { _handler.complete(); }
-
+
private:
cl& _handler;
--- conga/ricci/modules/cluster/clumon/src/cim-provider/clusterCIM_test.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/cim-provider/clusterCIM_test.cpp 2007/09/11 02:45:27 1.2
@@ -7,14 +7,14 @@
PEGASUS_USING_STD;
-int
+int
main(int argc, char** argv)
{
try
{
CIMClient client;
string hostname;
-
+
if (argc == 1) {
cout << "Enter hostname: ";
cin >> hostname;
@@ -26,9 +26,9 @@
cout << " " << argv[0] << " <hostname>" << endl;
return 1;
}
-
+
// connect
-
+
if (hostname == "localhost")
client.connectLocal();
else {
@@ -37,16 +37,16 @@
cin >> username;
cout << "Enter password for user \"" + username + "\" on \"" + hostname + "\": ";
cin >> password;
-
- client.connect(hostname.c_str(),
+
+ client.connect(hostname.c_str(),
PEGASUS_PORT,
SSLContext("", NULL),
username.c_str(),
password.c_str());
}
-
- // print
-
+
+ // print
+
printClusters(client);
printNodes(client);
printServices(client);
@@ -56,23 +56,23 @@
cerr << "Error: " << e.getMessage() << endl;
exit(1);
}
-
+
return 0;
}
-void
+void
printClusters(CIMClient& client)
{
const CIMNamespaceName NAMESPACE = CIMNamespaceName("root/cimv2");
const CIMName CLASSNAME = CIMName("RedHat_Cluster");
-
+
Boolean deepInheritance = true;
Boolean localOnly = true;
Boolean includeQualifiers = false;
Boolean includeClassOrigin = false;
Array<CIMInstance> cimInstances;
-
+
//
// Enumerate Instances.
//
@@ -91,18 +91,18 @@
}
}
-void
+void
printNodes(CIMClient& client)
{
const CIMNamespaceName NAMESPACE = CIMNamespaceName("root/cimv2");
const CIMName CLASSNAME = CIMName("RedHat_ClusterNode");
-
+
Boolean deepInheritance = true;
Boolean localOnly = true;
Boolean includeQualifiers = false;
Boolean includeClassOrigin = false;
Array<CIMInstance> cimInstances;
-
+
//
// Enumerate Instances.
//
@@ -119,18 +119,18 @@
}
}
-void
+void
printServices(CIMClient& client)
{
const CIMNamespaceName NAMESPACE = CIMNamespaceName("root/cimv2");
const CIMName CLASSNAME = CIMName("RedHat_ClusterFailoverService");
-
+
Boolean deepInheritance = true;
Boolean localOnly = true;
Boolean includeQualifiers = false;
Boolean includeClassOrigin = false;
Array<CIMInstance> cimInstances;
-
+
//
// Enumerate Instances.
//
@@ -153,9 +153,9 @@
int size = inst.getPropertyCount();
for (int i=0; i<size; i++) {
CIMProperty prop = inst.getProperty(i);
-
+
cout << tab << prop.getName().getString() << ": ";
cout << prop.getValue().toString() << endl;
-
+
}
}
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.cpp 2006/08/10 22:53:08 1.3
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.cpp 2007/09/11 02:45:27 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -42,7 +42,7 @@
{
static oid rhcMIBVersion_oid[] =
{ 1, 3, 6, 1, 4, 1, 2312, 8, 1, 1 };
-
+
static oid rhcClusterName_oid[] =
{ 1, 3, 6, 1, 4, 1, 2312, 8, 2, 1 };
static oid rhcClusterStatusCode_oid[] =
@@ -83,9 +83,9 @@
{ 1, 3, 6, 1, 4, 1, 2312, 8, 2, 19 };
static oid rhcClusterFailedServicesNames_oid[] =
{ 1, 3, 6, 1, 4, 1, 2312, 8, 2, 20 };
-
+
DEBUGMSGTL(("libClusterMonitorSnmp", "Initializing\n"));
-
+
netsnmp_register_scalar(netsnmp_create_handler_registration
("rhcMIBVersion",
handle_rhcMIBVersion,
@@ -213,31 +213,31 @@
}
-unsigned int
+unsigned int
getStatusCode(Cluster* cluster)
{
unsigned int code = 1; // OK
-
+
if (cluster->failedServices().size() != 0)
// service failed
code = (code & ~1) | 2;
-
+
if (cluster->stoppedServices().size() != 0)
// service not running
code = (code & ~1) | 4;
-
+
if (cluster->unclusteredNodes().size() != 0)
// unavailable node
code = (code & ~1) | 8;
-
+
if (cluster->votes() < cluster->minQuorum())
// not quorate
code = (code & ~1) | 16;
-
+
if (cluster->unclusteredNodes().size() == cluster->nodes().size())
// cluster stopped
code = (code & ~1) | 32;
-
+
return code;
}
@@ -250,7 +250,7 @@
return "Cluster stopped (all services stopped)";
if (code & 16)
return "Not quorate (all services stopped)";
-
+
String descr;
if (code & 2) {
String c = "Some services failed";
@@ -284,31 +284,31 @@
netsnmp_request_info *requests)
{
try {
-
+
unsigned int num = 1; // MIB version 1
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
(u_char *)
&num,
sizeof(num));
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -329,31 +329,31 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->failedServices().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
(u_char *)
&num,
sizeof(num));
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -374,7 +374,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Service> > l = cluster->failedServices();
String str;
for (list<counting_auto_ptr<Service> >::iterator iter = l.begin();
@@ -382,31 +382,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -427,32 +427,32 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int code = getStatusCode(cluster.get());
String str = getStatusDescription(code);
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -473,17 +473,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->votes();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -494,10 +494,10 @@
&num,
sizeof(num));
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -518,17 +518,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->stoppedServices().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -539,10 +539,10 @@
&num,
sizeof(num));
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -563,7 +563,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Service> > l = cluster->stoppedServices();
String str;
for (list<counting_auto_ptr<Service> >::iterator iter = l.begin();
@@ -571,31 +571,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -616,19 +616,19 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->clusteredNodes().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
case MODE_GET:
@@ -637,10 +637,10 @@
&num,
sizeof(num));
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -661,7 +661,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Node> > l = cluster->clusteredNodes();
String str;
for (list<counting_auto_ptr<Node> >::iterator iter = l.begin();
@@ -669,31 +669,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -714,17 +714,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->services().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -738,7 +738,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -759,7 +759,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Service> > l = cluster->services();
String str;
for (list<counting_auto_ptr<Service> >::iterator iter = l.begin();
@@ -767,31 +767,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -812,17 +812,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
String name = cluster->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -836,7 +836,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -857,17 +857,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int code = getStatusCode(cluster.get());
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -881,7 +881,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -902,17 +902,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->unclusteredNodes().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -926,7 +926,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -947,7 +947,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Node> > l = cluster->unclusteredNodes();
String str;
for (list<counting_auto_ptr<Node> >::iterator iter = l.begin();
@@ -955,31 +955,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -1000,17 +1000,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->nodes().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -1024,7 +1024,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -1045,7 +1045,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Node> > l = cluster->nodes();
String str;
for (list<counting_auto_ptr<Node> >::iterator iter = l.begin();
@@ -1053,31 +1053,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -1098,17 +1098,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->runningServices().size();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -1122,7 +1122,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -1143,7 +1143,7 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
list<counting_auto_ptr<Service> > l = cluster->runningServices();
String str;
for (list<counting_auto_ptr<Service> >::iterator iter = l.begin();
@@ -1151,31 +1151,31 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
-
+
switch (reqinfo->mode) {
-
+
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)
str.c_str(),
str.size());
break;
-
+
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -1197,17 +1197,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->minQuorum();
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -1221,7 +1221,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
@@ -1243,17 +1243,17 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if(cluster.get() == NULL)
return SNMP_ERR_NOERROR;
-
+
unsigned int num = cluster->quorate() ? 1 : 0;
-
+
/*
* We are never called for a GETNEXT if it's registered as a
- * "instance", as it's "magically" handled for us.
+ * "instance", as it's "magically" handled for us.
*/
-
+
/*
* a instance handler also only hands us one request at a time, so
- * we don't need to loop over a list of requests; we'll only get one.
+ * we don't need to loop over a list of requests; we'll only get one.
*/
switch (reqinfo->mode) {
@@ -1267,7 +1267,7 @@
default:
/*
- * we should never get here, so this is a really bad error
+ * we should never get here, so this is a really bad error
*/
return SNMP_ERR_GENERR;
}
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMIB.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.cpp 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,8 +37,8 @@
initialize_clusterMIB();
initialize_nodesMIB();
initialize_servicesMIB();
-
+
// TODO: initialize others
- } catch ( ... )
+ } catch ( ... )
{}
}
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/clusterMonitorSnmp.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.cpp 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -85,7 +85,7 @@
OID_LENGTH
(rhcNodesTable_oid),
HANDLER_CAN_RONLY);
-
+
if (!my_handler || !table_info || !iinfo) {
snmp_log(LOG_ERR,
"malloc failed in initialize_table_rhcNodesTable");
@@ -112,7 +112,7 @@
//#ifdef MAYBE_USE_THESE
iinfo->make_data_context = rhcNodesTable_context_convert_function;
iinfo->free_data_context = rhcNodesTable_data_free;
-
+
/** pick *only* one of these if you use them */
//iinfo->free_loop_context = rhcNodesTable_loop_free;
iinfo->free_loop_context_at_end = rhcNodesTable_loop_free;
@@ -253,7 +253,7 @@
char *retval;
size_t retval_len = 0;
retval =
- get_rhcNodeRunningServicesNames(data_context,
+ get_rhcNodeRunningServicesNames(data_context,
&retval_len);
snmp_set_var_typed_value(var, ASN_OCTET_STR,
(const u_char *) retval,
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -39,9 +39,9 @@
config_require(rhcNodesTable_access)
/** other required module components */
config_require(rhcNodesTable_checkfns)
-
+
/*
- * function declarations
+ * function declarations
*/
void init_rhcNodesTable(void);
void initialize_table_rhcNodesTable(void);
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.cpp 2006/08/10 22:53:08 1.2
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.cpp 2007/09/11 02:45:27 1.3
@@ -47,12 +47,12 @@
class LoopContext
{
public:
- LoopContext(counting_auto_ptr<Cluster> cluster) :
- _cluster(cluster),
+ LoopContext(counting_auto_ptr<Cluster> cluster) :
+ _cluster(cluster),
_nodes(_cluster->nodes()),
_curr(_nodes.begin()) {}
virtual ~LoopContext() {}
-
+
counting_auto_ptr<Node> curr()
{
if (_curr == _nodes.end())
@@ -66,7 +66,7 @@
_curr++;
return curr();
}
-
+
private:
counting_auto_ptr<Cluster> _cluster;
list<counting_auto_ptr<Node> > _nodes;
@@ -76,7 +76,7 @@
class DataContext
{
public:
- DataContext(LoopContext& loop) :
+ DataContext(LoopContext& loop) :
_node(loop.curr()) {}
virtual ~DataContext() {}
counting_auto_ptr<Node> getNode()
@@ -122,14 +122,14 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if (cluster.get() == NULL)
return NULL;
-
+
LoopContext* loopctx = new LoopContext(cluster);
*my_loop_context = loopctx;
-
+
counting_auto_ptr<Node> node = loopctx->curr();
if (node.get() == NULL)
return NULL;
-
+
const String& name = node->name();
snmp_set_var_value(put_index_data, (u_char *) name.c_str(), name.size());
return put_index_data;
@@ -155,11 +155,11 @@
LoopContext* loopctx = (LoopContext*) *my_loop_context;
if (loopctx == NULL)
return NULL;
-
+
counting_auto_ptr<Node> node = loopctx->next();
if (node.get() == NULL)
return NULL;
-
+
const String& name = node->name();
snmp_set_var_value(put_index_data, (u_char *) name.c_str(), name.size());
return put_index_data;
@@ -198,7 +198,7 @@
/*
- * User-defined data access functions (per column) for data in table rhcNodesTable
+ * User-defined data access functions (per column) for data in table rhcNodesTable
*/
/*
* NOTE:
@@ -218,7 +218,7 @@
counting_auto_ptr<Node> node = datactx->getNode();
if (node.get() == NULL)
return NULL;
-
+
datactx->str_holder = node->name();
*ret_len = datactx->str_holder.size();
return (char*) datactx->str_holder.c_str();
@@ -237,7 +237,7 @@
counting_auto_ptr<Node> node = datactx->getNode();
if (node.get() == NULL)
return NULL;
-
+
datactx->long_holder = node->services().size();
*ret_len = sizeof(datactx->long_holder);
return &datactx->long_holder;
@@ -256,7 +256,7 @@
counting_auto_ptr<Node> node = datactx->getNode();
if (node.get() == NULL)
return NULL;
-
+
list<counting_auto_ptr<Service> > l = node->services();
String str;
for (list<counting_auto_ptr<Service> >::iterator iter = l.begin();
@@ -264,9 +264,9 @@
iter++)
if (str.empty())
str = (*iter)->name();
- else
+ else
str += ", " + (*iter)->name();
-
+
datactx->str_holder = str;
*ret_len = datactx->str_holder.size();
return (char*) datactx->str_holder.c_str();
@@ -278,21 +278,21 @@
// ## status ##
-unsigned int
+unsigned int
getStatusCode(counting_auto_ptr<Node> node)
{
if (node->clustered())
// in cluster
return 0;
-
+
if (node->online())
// unavailable to cluster
return 1;
-
+
// OK
return 2;
}
-String
+String
getStatusDescription(unsigned int code)
{
switch(code) {
@@ -317,7 +317,7 @@
counting_auto_ptr<Node> node = datactx->getNode();
if (node.get() == NULL)
return NULL;
-
+
datactx->long_holder = getStatusCode(node);
*ret_len = sizeof(datactx->long_holder);
return &datactx->long_holder;
@@ -336,7 +336,7 @@
counting_auto_ptr<Node> node = datactx->getNode();
if (node.get() == NULL)
return NULL;
-
+
unsigned int code = getStatusCode(node);
datactx->str_holder = getStatusDescription(code);
*ret_len = datactx->str_holder.size();
@@ -389,7 +389,7 @@
/*
* return no errors. And there shouldn't be any!!! Ever!!! You
- * should have checked the values long before this.
+ * should have checked the values long before this.
*/
return SNMP_ERR_NOERROR;
}
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_access.h 2007/09/11 02:45:27 1.2
@@ -41,7 +41,7 @@
Netsnmp_Free_Loop_Context rhcNodesTable_loop_free;
Netsnmp_Make_Data_Context rhcNodesTable_context_convert_function;
Netsnmp_Free_Data_Context rhcNodesTable_data_free;
-
+
int rhcNodesTable_commit_row(void** my_data_context, int new_or_del);
void* rhcNodesTable_create_data_context(netsnmp_variable_list* index_data);
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns.cpp 2007/09/11 02:45:27 1.2
@@ -12,7 +12,7 @@
/*
- * standard headers
+ * standard headers
*/
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns.h 2007/09/11 02:45:27 1.2
@@ -17,8 +17,8 @@
config_require(rhcNodesTable_checkfns_local)
/*
- * these functions are designed to check incoming values for
- * columns in the rhcNodesTable table for legality with respect to
+ * these functions are designed to check incoming values for
+ * columns in the rhcNodesTable table for legality with respect to
* datatype and value.
*/
};
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.cpp 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_checkfns_local.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -22,7 +22,7 @@
/*
* Note: this file originally auto-generated by mib2c using
* : : mib2c.check_values_local.conf,v 5.1.2.1 2004/05/04 23:35:32 hardaker Exp $
- *
+ *
*/
@@ -32,14 +32,14 @@
extern "C" {
/*
- * these functions are designed to check incoming values for
- * columns in the rhcNodesTable table for legality with respect to
+ * these functions are designed to check incoming values for
+ * columns in the rhcNodesTable table for legality with respect to
* datatype and value according to local conventions. You should modify
* them as appropriate. They will be called from parent check_value
* functions that are auto-generated using mib2c and the parent functions
* should NOT be modified.
*/
-
+
};
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_columns.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_columns.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -30,7 +30,7 @@
/*
- * column number definitions for table rhcNodesTable
+ * column number definitions for table rhcNodesTable
*/
#define COLUMN_RHCNODENAME 1
#define COLUMN_RHCNODESTATUSCODE 2
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_enums.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/nodesMIB_enums.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.cpp 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -111,7 +111,7 @@
//#ifdef MAYBE_USE_THESE
iinfo->make_data_context = rhcServicesTable_context_convert_function;
iinfo->free_data_context = rhcServicesTable_data_free;
-
+
/** pick *only* one of these if you use them */
//iinfo->free_loop_context = rhcServicesTable_loop_free;
iinfo->free_loop_context_at_end = rhcServicesTable_loop_free;
@@ -180,7 +180,7 @@
default: /* == the other SET modes */
ci = (struct commitInfo*) netsnmp_oid_stash_get_data(commitStorage,
- suffix + 1,
+ suffix + 1,
suffix_len - 1);
break;
@@ -271,7 +271,7 @@
case MODE_SET_RESERVE1:
ci = (struct commitInfo*) netsnmp_oid_stash_get_data(commitStorage,
- suffix + 1,
+ suffix + 1,
suffix_len - 1);
if (!ci) {
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -40,7 +40,7 @@
config_require(rhcServicesTable_checkfns)
/*
- * function declarations
+ * function declarations
*/
void init_rhcServicesTable(void);
void initialize_table_rhcServicesTable(void);
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.cpp 2006/08/10 22:53:08 1.2
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.cpp 2007/09/11 02:45:27 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -46,12 +46,12 @@
class LoopContext
{
public:
- LoopContext(counting_auto_ptr<Cluster> cluster) :
- _cluster(cluster),
+ LoopContext(counting_auto_ptr<Cluster> cluster) :
+ _cluster(cluster),
_services(cluster->services()),
_curr(_services.begin()) {}
virtual ~LoopContext() {}
-
+
counting_auto_ptr<Service> curr()
{
if (_curr == _services.end())
@@ -65,7 +65,7 @@
_curr++;
return curr();
}
-
+
private:
counting_auto_ptr<Cluster> _cluster;
list<counting_auto_ptr<Service> > _services;
@@ -75,10 +75,10 @@
class DataContext
{
public:
- DataContext(LoopContext& loop) :
+ DataContext(LoopContext& loop) :
_service(loop.curr()) {}
virtual ~DataContext() {}
-
+
counting_auto_ptr<Service> getService()
{
return _service;
@@ -122,14 +122,14 @@
counting_auto_ptr<Cluster> cluster = monitor.get_cluster();
if (cluster.get() == NULL)
return NULL;
-
+
LoopContext* loopctx = new LoopContext(cluster);
*my_loop_context = loopctx;
-
+
counting_auto_ptr<Service> service = loopctx->curr();
if (service.get() == NULL)
return NULL;
-
+
const String& name = service->name();
snmp_set_var_value(put_index_data, (u_char *) name.c_str(), name.size());
return put_index_data;
@@ -155,11 +155,11 @@
LoopContext* loopctx = (LoopContext*) *my_loop_context;
if (loopctx == NULL)
return NULL;
-
+
counting_auto_ptr<Service> service = loopctx->next();
if (service.get() == NULL)
return NULL;
-
+
const String& name = service->name();
snmp_set_var_value(put_index_data, (u_char *) name.c_str(), name.size());
return put_index_data;
@@ -199,7 +199,7 @@
/*
- * User-defined data access functions (per column) for data in table rhcServicesTable
+ * User-defined data access functions (per column) for data in table rhcServicesTable
*/
/*
* NOTE:
@@ -219,7 +219,7 @@
counting_auto_ptr<Service> service = datactx->getService();
if (service.get() == NULL)
return NULL;
-
+
datactx->str_holder = service->name();
*ret_len = datactx->str_holder.size();
return (char*) datactx->str_holder.c_str();
@@ -238,7 +238,7 @@
counting_auto_ptr<Service> service = datactx->getService();
if (service.get() == NULL)
return NULL;
-
+
if (service->autostart())
datactx->str_holder = "automatic";
else
@@ -260,10 +260,10 @@
counting_auto_ptr<Service> service = datactx->getService();
if (service.get() == NULL)
return NULL;
-
+
if (!service->running())
return NULL;
-
+
datactx->str_holder = service->nodename();
*ret_len = datactx->str_holder.size();
return (char*) datactx->str_holder.c_str();
@@ -274,13 +274,13 @@
// ## status ##
-unsigned int
+unsigned int
getStatusCode(counting_auto_ptr<Service> service)
{
if (service->failed())
// failed
return 2;
-
+
if (service->running())
// running
return 0;
@@ -288,7 +288,7 @@
// stopped
return 1;
}
-String
+String
getStatusDescription(unsigned int code)
{
switch(code) {
@@ -313,7 +313,7 @@
counting_auto_ptr<Service> service = datactx->getService();
if (service.get() == NULL)
return NULL;
-
+
datactx->long_holder = getStatusCode(service);
*ret_len = sizeof(datactx->long_holder);
return &datactx->long_holder;
@@ -332,7 +332,7 @@
counting_auto_ptr<Service> service = datactx->getService();
if (service.get() == NULL)
return NULL;
-
+
unsigned int code = getStatusCode(service);
datactx->str_holder = getStatusDescription(code);
*ret_len = datactx->str_holder.size();
@@ -383,7 +383,7 @@
/*
* return no errors. And there shouldn't be any!!! Ever!!! You
- * should have checked the values long before this.
+ * should have checked the values long before this.
*/
return SNMP_ERR_NOERROR;
}
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_access.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -41,10 +41,10 @@
Netsnmp_Free_Loop_Context rhcServicesTable_loop_free;
Netsnmp_Make_Data_Context rhcServicesTable_context_convert_function;
Netsnmp_Free_Data_Context rhcServicesTable_data_free;
-
+
int rhcServicesTable_commit_row(void** my_data_context, int new_or_del);
void *rhcServicesTable_create_data_context(netsnmp_variable_list* index_data);
-
+
/** column accessors */
char *get_rhcServiceName(void *data_context, size_t * ret_len);
long *get_rhcServiceStatusCode(void *data_context, size_t * ret_len);
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns.cpp 2007/09/11 02:45:27 1.2
@@ -11,7 +11,7 @@
********************************************************************/
/*
- * standard headers
+ * standard headers
*/
#include <net-snmp/net-snmp-config.h>
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns.h 2007/09/11 02:45:27 1.2
@@ -16,9 +16,9 @@
config_require(rhcServicesTable_checkfns_local)
/*
- * these functions are designed to check incoming values for
- * columns in the rhcServicesTable table for legality with respect to
+ * these functions are designed to check incoming values for
+ * columns in the rhcServicesTable table for legality with respect to
* datatype and value.
*/
-
+
#endif // servicesMIB_checkfns_h
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.cpp 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.cpp 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_checkfns_local.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -29,8 +29,8 @@
#define servicesMIB_checkfns_local_h
/*
- * these functions are designed to check incoming values for
- * columns in the rhcServicesTable table for legality with respect to
+ * these functions are designed to check incoming values for
+ * columns in the rhcServicesTable table for legality with respect to
* datatype and value according to local conventions. You should modify
* them as appropriate. They will be called from parent check_value
* functions that are auto-generated using mib2c and the parent functions
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_columns.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_columns.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -29,7 +29,7 @@
#define servicesMIB_columns_h
/*
- * column number definitions for table rhcServicesTable
+ * column number definitions for table rhcServicesTable
*/
#define COLUMN_RHCSERVICENAME 1
#define COLUMN_RHCSERVICESTATUSCODE 2
--- conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_enums.h 2006/06/14 21:44:37 1.1
+++ conga/ricci/modules/cluster/clumon/src/snmp-agent/servicesMIB_enums.h 2007/09/11 02:45:27 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/log/LogParser.cpp 2007/02/05 21:25:53 1.9
+++ conga/ricci/modules/log/LogParser.cpp 2007/09/11 02:45:28 1.10
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -60,7 +60,7 @@
"gfs2",
"openais",
"groupd",
- "qdiskd",
+ "qdiskd",
"dlm_controld",
"gfs_controld",
"clurgmgrd",
@@ -91,7 +91,7 @@
"ext2",
"ext3",
"ext3-fs",
- "swap",
+ "swap",
"mount",
"automount"};
@@ -112,43 +112,43 @@
const set<String>& elements) :
name(name),
elements(elements) {}
-
+
String name;
set<String> elements;
set<String> match;
};
-static const vector<tag_set>&
+static const vector<tag_set>&
get_sets()
{
static vector<tag_set> sets;
static Mutex mutex;
static bool init = false;
-
+
MutexLocker l(mutex);
if (!init) {
init = true;
- tag_set clu("cluster",
- set<String>(cluster,
+ tag_set clu("cluster",
+ set<String>(cluster,
cluster + sizeof(cluster)/sizeof(char*)));
clu.match.insert("fence_");
sets.push_back(clu);
-
- sets.push_back(tag_set("cluster service manager",
- set<String>(cluster_service_manager,
+
+ sets.push_back(tag_set("cluster service manager",
+ set<String>(cluster_service_manager,
cluster_service_manager + sizeof(cluster_service_manager)/sizeof(char*))));
-
- sets.push_back(tag_set("lvs",
- set<String>(LVS,
+
+ sets.push_back(tag_set("lvs",
+ set<String>(LVS,
LVS + sizeof(LVS)/sizeof(char*))));
-
- sets.push_back(tag_set("storage",
- set<String>(storage,
+
+ sets.push_back(tag_set("storage",
+ set<String>(storage,
storage + sizeof(storage)/sizeof(char*))));
-
- tag_set SEL("selinux",
- set<String>(selinux,
+
+ tag_set SEL("selinux",
+ set<String>(selinux,
selinux + sizeof(selinux)/sizeof(char*)));
SEL.match.insert("pam_");
sets.push_back(SEL);
@@ -178,7 +178,7 @@
return files;
if (path[0] != '/')
return files;
-
+
struct stat st;
if (stat(path.c_str(), &st))
// throw String("unable to stat ") + path;
@@ -186,17 +186,17 @@
if (S_ISREG(st.st_mode)) {
if (st.st_mtime >= age_time)
files.insert(path);
-
+
// get rotated logs
for (int i=0; i<25; i++)
get_files(path + "." + utils::to_string(i), files, age_time);
-
+
return files;
} else if (S_ISDIR(st.st_mode))
; // process directory
else
return files;
-
+
DIR* d = opendir(path.c_str());
if (d == NULL)
throw String("unable to open directory ") + path;
@@ -228,13 +228,13 @@
vector<String> words = utils::split(entry);
if (words.size() < 6)
throw String("invalid log entry format");
- if (words[4] == "last" &&
+ if (words[4] == "last" &&
words[5] == "message")
throw String("LogEntry: last message repetition");
- if (words[5] == "printk:" &&
- entry.find("suppressed") != entry.npos)
+ if (words[5] == "printk:" &&
+ entry.find("suppressed") != entry.npos)
throw String("LogEntry: printk repetition");
-
+
// get current year (not present in log files)
char buff[100];
time_t current_time = ::time(0);
@@ -254,7 +254,7 @@
}
if (age < 0)
throw String("error in LogEntry() - negative age");
-
+
// domain & pid
String d = utils::rstrip(utils::to_lower(words[4]), ":");
String::size_type i = d.find("[");
@@ -273,12 +273,12 @@
if (words[5][words[5].size()-1] == ':')
idx = 6;
}
-
+
// message
for ( ; idx<words.size(); idx++)
msg += words[idx] + " ";
msg = utils::strip(msg);
-
+
// tags (misc)
for (vector<String>::size_type j=4; j<6; j++) {
String t(utils::strip(utils::to_lower(words[j])));
@@ -305,7 +305,7 @@
tags.insert(tmp_tag);
}
}
-
+
// tags (from tag sets)
vector<tag_set> sets = get_sets();
set<String> tags_c(tags);
@@ -327,7 +327,7 @@
tags.erase("");
}
-String
+String
LogEntry::compare_str() const
{
String b(utils::to_string(age));
@@ -349,7 +349,7 @@
x.set_attr("pid", pid);
x.set_attr("age", utils::to_string(age));
x.set_attr("msg", msg);
-
+
for (set<String>::const_iterator iter = matched_tags.begin();
iter != matched_tags.end();
iter++) {
@@ -357,7 +357,7 @@
t.set_attr("tag", *iter);
x.add_child(t);
}
-
+
return x;
}
@@ -367,9 +367,9 @@
-set<LogEntry>
+set<LogEntry>
LogParser::get_entries(long long age,
- const std::list<String>& domains,
+ const std::list<String>& domains,
const list<String>& paths)
{
set<LogEntry> ret;
@@ -379,11 +379,11 @@
age_time = 0;
else
age_time -= age;
-
-
+
+
// set of requested tags
set<String> req_tags(domains.begin(), domains.end());
-
+
// get log paths
set<String> files;
for (list<String>::const_iterator iter = paths.begin();
@@ -394,7 +394,7 @@
get_files("/var/log/messages", files, age_time);
get_files("/var/log/syslog", files, age_time);
}
-
+
// process log files
for (set<String>::const_iterator iter = files.begin();
iter != files.end();
@@ -426,6 +426,6 @@
} catch ( ... ) {}
}
}
-
+
return ret;
}
--- conga/ricci/modules/log/LogParser.h 2006/08/10 22:53:08 1.3
+++ conga/ricci/modules/log/LogParser.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,23 +35,23 @@
{
public:
LogEntry(const String& entry);
-
+
long long age;
String domain;
String msg;
String pid;
-
+
std::set<String> tags;
std::set<String> matched_tags;
-
+
XMLObject xml() const;
-
+
bool operator < (const LogEntry&) const;
-
+
private:
-
+
String compare_str() const;
-
+
};
@@ -59,12 +59,12 @@
class LogParser
{
public:
-
- std::set<LogEntry> get_entries(long long age,
- const std::list<String>& tags,
+
+ std::set<LogEntry> get_entries(long long age,
+ const std::list<String>& tags,
const std::list<String>& paths);
-
-
+
+
};
--- conga/ricci/modules/log/LoggingModule.cpp 2006/08/10 22:53:08 1.3
+++ conga/ricci/modules/log/LoggingModule.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -47,15 +47,15 @@
{
FcnMap api_1_0;
api_1_0["get"] = get;
-
+
ApiFcnMap api_fcn_map;
api_fcn_map["1.0"] = api_1_0;
-
+
return api_fcn_map;
}
-VarMap
+VarMap
get(const VarMap& args)
{
long long age;
@@ -67,24 +67,24 @@
if (iter == args.end())
throw APIerror("missing age variable");
age = iter->second.get_int();
-
+
iter = args.find("tags");
if (iter != args.end())
tags = iter->second.get_list_str();
-
+
iter = args.find("paths");
if (iter != args.end())
paths = iter->second.get_list_str();
-
+
iter = args.find("intersection");
if (iter != args.end())
intersection = iter->second.get_bool();
} catch ( String e ) {
throw APIerror(e);
}
-
+
// clean up
-
+
list<String> t;
for (list<String>::const_iterator iter = tags.begin();
iter != tags.end();
@@ -102,11 +102,11 @@
t.push_back(s);
}
paths.swap(t);
-
+
// command
-
- set<LogEntry> entries = LogParser().get_entries(age,
- tags,
+
+ set<LogEntry> entries = LogParser().get_entries(age,
+ tags,
paths);
// union or intersection?
if (intersection) {
@@ -119,17 +119,17 @@
intersect.insert(*iter);
entries.swap(intersect);
}
-
+
// response
-
+
list<XMLObject> result_list;
for (set<LogEntry>::const_iterator iter = entries.begin();
iter != entries.end();
iter++)
result_list.push_back(iter->xml());
-
+
Variable var("log_entries", result_list);
-
+
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
--- conga/ricci/modules/log/LoggingModule.h 2006/06/02 00:14:29 1.1
+++ conga/ricci/modules/log/LoggingModule.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,9 +32,9 @@
public:
LoggingModule();
virtual ~LoggingModule();
-
+
private:
-
+
};
--- conga/ricci/modules/log/main.cpp 2006/08/15 04:15:53 1.3
+++ conga/ricci/modules/log/main.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/rpm/PackageHandler.cpp 2007/03/03 05:15:32 1.14
+++ conga/ricci/modules/rpm/PackageHandler.cpp 2007/09/11 02:45:28 1.15
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,7 +37,7 @@
#define YUM_PATH "/usr/bin/yum"
-static bool
+static bool
RHEL4=false, RHEL5=false, FC5=false, FC6=false;
static void
set_release();
@@ -88,10 +88,10 @@
PackageInstaller::available_rpms()
{
map<String, String> rpms;
-
+
if (!available())
return rpms;
-
+
if (RHEL4) {
String out, err;
int status;
@@ -115,7 +115,7 @@
String version = words[l-2] + "-" + words[l-1].substr(0, words[l-1].rfind("."));
rpms[name] = version;
}
-
+
} else if (FC5 || FC6 || RHEL5) {
String out, err;
int status;
@@ -144,7 +144,7 @@
rpms[name] = version;
}
}
-
+
return rpms;
}
@@ -153,7 +153,7 @@
{
if (rpms.empty())
return true;
-
+
if (RHEL4) {
String out, err;
int status;
@@ -165,7 +165,7 @@
if (status != 0)
throw String(UP2DATE_PATH) + " failed";
return true;
-
+
} else if (FC5 || FC6 || RHEL5) {
vector<String> rpms_to_install, rpms_to_upgrade;
String out, err;
@@ -225,7 +225,7 @@
return false;
}
return true;
- } else
+ } else
return false;
}
@@ -249,7 +249,7 @@
Package::~Package()
{}
-XMLObject
+XMLObject
Package::xml() const
{
XMLObject xml("rpm");
@@ -285,7 +285,7 @@
PackageSet::~PackageSet()
{}
-XMLObject
+XMLObject
PackageSet::xml() const
{
XMLObject xml("set");
@@ -308,9 +308,9 @@
PackageHandler::PackageHandler()
{
set_release();
-
+
// get installed packages
-
+
String out, err;
int status;
vector<String> args;
@@ -336,7 +336,7 @@
pack.version = words[l-2] + "-" + words[l-1];
_packages[name] = pack;
}
-
+
// probe repositories
if (repo_available()) {
map<String, String> avail_rpms = _pi.available_rpms();
@@ -350,8 +350,8 @@
pack.repo_version = version;
}
}
-
-
+
+
// build sets
_sets = build_sets();
for (map<String, PackageSet>::iterator iter = _sets.begin();
@@ -364,41 +364,41 @@
{}
-std::map<String, Package>&
+std::map<String, Package>&
PackageHandler::packages()
{
return _packages;
}
-std::map<String, PackageSet>&
+std::map<String, PackageSet>&
PackageHandler::sets()
{
return _sets;
}
-std::map<String, PackageSet>
+std::map<String, PackageSet>
PackageHandler::build_sets()
{
map<String, PackageSet> sets;
-
+
PackageSet set = build_cluster_base_set();
sets[set.name] = set;
-
+
if (RHEL4 || FC5) {
set = build_cluster_base_gulm_set();
sets[set.name] = set;
}
-
+
set = build_cluster_services_set();
sets[set.name] = set;
-
+
set = build_cluster_storage_set();
sets[set.name] = set;
-
+
set = build_linux_virtual_server_set();
sets[set.name] = set;
-
+
return sets;
}
@@ -406,13 +406,13 @@
PackageHandler::build_cluster_base_set()
{
PackageSet set("Cluster Base");
-
+
if (RHEL4 || FC5) {
set.packages.push_back("ccs");
set.packages.push_back("cman");
set.packages.push_back("dlm");
set.packages.push_back("fence");
-
+
struct utsname uts;
uname(&uts);
String kernel(uts.release);
@@ -429,7 +429,7 @@
} else if (RHEL5 || FC6) {
set.packages.push_back("cman");
}
-
+
return set;
}
@@ -437,13 +437,13 @@
PackageHandler::build_cluster_base_gulm_set()
{
PackageSet set("Cluster Base - Gulm");
-
+
if (RHEL4 || FC5) {
set.packages.push_back("ccs");
set.packages.push_back("gulm");
} else
throw String("GULM not available in CS5");
-
+
return set;
}
@@ -465,10 +465,10 @@
struct utsname uts;
uname(&uts);
String kernel(uts.release);
-
+
PackageSet set("Clustered Storage");
set.packages.push_back("lvm2-cluster");
-
+
if (RHEL4 || FC5) {
set.packages.push_back("GFS");
if (kernel.find("smp") != kernel.npos) {
@@ -488,11 +488,11 @@
set.packages.push_back("kmod-gfs-xen");
}
}
-
+
return set;
}
-PackageSet
+PackageSet
PackageHandler::build_linux_virtual_server_set()
{
PackageSet set("Linux Virtual Server");
@@ -508,7 +508,7 @@
set.installed = true;
set.in_repo = true;
set.upgradeable = false;
-
+
for (list<String>::const_iterator name_iter = set.packages.begin();
name_iter != set.packages.end();
name_iter++) {
@@ -533,13 +533,13 @@
set.upgradeable = false;
}
-void
-PackageHandler::install(const std::list<Package>& packages,
+void
+PackageHandler::install(const std::list<Package>& packages,
const std::list<PackageSet>& sets,
bool upgrade)
{
vector<String> rpms;
-
+
PackageHandler h_pre;
for (list<Package>::const_iterator iter = packages.begin();
iter != packages.end();
@@ -568,7 +568,7 @@
}
}
}
-
+
for (list<PackageSet>::const_iterator iter = sets.begin();
iter != sets.end();
iter++) {
@@ -602,7 +602,7 @@
}
}
}
-
+
if (!_pi.install(rpms)) {
String msg("Failed to install packages");
if (!repo_available())
@@ -628,7 +628,7 @@
static bool release_set = false;
if (!release_set) {
String release(utils::strip(File::open("/etc/redhat-release")));
-
+
if (release.find("Nahant") != release.npos)
RHEL4 = true;
else if (release.find("Bordeaux") != release.npos)
@@ -639,7 +639,7 @@
RHEL5 = true;
else
throw String("Unsupported OS");
-
+
release_set = true;
}
}
--- conga/ricci/modules/rpm/PackageHandler.h 2006/10/12 19:13:11 1.5
+++ conga/ricci/modules/rpm/PackageHandler.h 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -36,17 +36,17 @@
Package();
Package(const String& name);
virtual ~Package();
-
+
String name;
String summary;
String description;
String version;
String repo_version;
-
+
XMLObject xml() const;
-
+
private:
-
+
}; // class Package
@@ -56,20 +56,20 @@
PackageSet();
PackageSet(const String& name);
virtual ~PackageSet();
-
+
String name;
String summary;
String description;
bool installed;
bool in_repo;
bool upgradeable;
-
+
std::list<String> packages;
-
+
XMLObject xml() const;
-
+
private:
-
+
}; // class PackageSet
@@ -78,11 +78,11 @@
public:
PackageInstaller();
virtual ~PackageInstaller();
-
+
bool available();
std::map<String, String> available_rpms();
bool install(std::vector<String> rpm_names);
-
+
};
@@ -91,34 +91,34 @@
public:
PackageHandler();
virtual ~PackageHandler();
-
+
std::map<String, Package>& packages();
std::map<String, PackageSet>& sets();
-
+
void populate_set(PackageSet& set);
-
-
+
+
static bool repo_available();
-
+
static std::map<String, PackageSet> build_sets();
static PackageSet build_cluster_base_set();
static PackageSet build_cluster_base_gulm_set();
static PackageSet build_cluster_services_set();
static PackageSet build_cluster_storage_set();
static PackageSet build_linux_virtual_server_set();
-
+
static void install(const std::list<Package>& packages,
const std::list<PackageSet>& sets,
bool upgrade=true);
-
+
private:
-
+
std::map<String, Package> _packages;
std::map<String, PackageSet> _sets;
-
+
static PackageInstaller _pi;
-
-
+
+
}; // class PackageHandler
--- conga/ricci/modules/rpm/RpmModule.cpp 2006/10/12 19:13:11 1.3
+++ conga/ricci/modules/rpm/RpmModule.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -52,15 +52,15 @@
api_1_0["query"] = query;
api_1_0["install"] = install;
api_1_0["repository_configured"] = repository_configured;
-
+
ApiFcnMap api_fcn_map;
api_fcn_map["1.0"] = api_1_0;
-
+
return api_fcn_map;
}
-VarMap
+VarMap
install(const VarMap& args)
{
list<XMLObject> rpms_list, sets_list;
@@ -69,11 +69,11 @@
VarMap::const_iterator iter = args.find("rpms");
if (iter != args.end())
rpms_list = iter->second.get_list_XML();
-
+
iter = args.find("sets");
if (iter != args.end())
sets_list = iter->second.get_list_XML();
-
+
upgrade = true;
iter = args.find("upgrade");
if (iter != args.end())
@@ -81,8 +81,8 @@
} catch ( String e ) {
throw APIerror(e);
}
-
- // command
+
+ // command
list<Package> rpms;
for (list<XMLObject>::const_iterator iter = rpms_list.begin();
iter != rpms_list.end();
@@ -94,7 +94,7 @@
rpms.push_back(pack);
}
}
-
+
list<PackageSet> sets;
for (list<XMLObject>::const_iterator iter = sets_list.begin();
iter != sets_list.end();
@@ -106,22 +106,22 @@
sets.push_back(set);
}
}
-
+
PackageHandler::install(rpms, sets, upgrade);
return VarMap();
}
-VarMap
+VarMap
repository_configured(const VarMap& args)
{
Variable var("repository_configured", PackageHandler::repo_available());
-
+
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
lists(const VarMap& args)
{
bool rpms, sets, installed, installable, upgradeable;
@@ -130,22 +130,22 @@
VarMap::const_iterator iter = args.find("rpms");
if (iter != args.end())
rpms = iter->second.get_bool();
-
+
sets = false;
iter = args.find("sets");
if (iter != args.end())
sets = iter->second.get_bool();
-
+
installed = false;
iter = args.find("installed");
if (iter != args.end())
installed = iter->second.get_bool();
-
+
installable = false;
iter = args.find("installable");
if (iter != args.end())
installable = iter->second.get_bool();
-
+
upgradeable = false;
iter = args.find("upgradeable");
if (iter != args.end())
@@ -153,13 +153,13 @@
} catch ( String e ) {
throw APIerror(e);
}
-
-
+
+
VarMap ret;
-
+
if (sets || rpms) {
PackageHandler handler;
-
+
if (rpms) {
list<XMLObject> rpm_list;
for (map<String, Package>::const_iterator iter = handler.packages().begin();
@@ -184,7 +184,7 @@
Variable var("rpms", rpm_list);
ret.insert(pair<String, Variable>(var.name(), var));
}
-
+
if (sets) {
list<XMLObject> set_list;
for (map<String, PackageSet>::const_iterator iter = handler.sets().begin();
@@ -210,11 +210,11 @@
ret.insert(pair<String, Variable>(var.name(), var));
}
}
-
+
return ret;
}
-VarMap
+VarMap
query(const VarMap& args)
{
list<XMLObject> search_list;
@@ -226,8 +226,8 @@
} catch ( String e ) {
throw APIerror(e);
}
-
-
+
+
list<XMLObject> result_list;
PackageHandler handler;
for (list<XMLObject>::const_iterator iter = search_list.begin();
@@ -249,9 +249,9 @@
}
}
}
-
+
Variable var("result", result_list);
-
+
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
--- conga/ricci/modules/rpm/RpmModule.h 2006/04/07 16:42:40 1.1
+++ conga/ricci/modules/rpm/RpmModule.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,9 +32,9 @@
public:
RpmModule();
virtual ~RpmModule();
-
+
private:
-
+
};
--- conga/ricci/modules/rpm/main.cpp 2006/08/15 04:15:53 1.4
+++ conga/ricci/modules/rpm/main.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/service/ServiceManager.cpp 2007/02/24 09:39:22 1.11
+++ conga/ricci/modules/service/ServiceManager.cpp 2007/09/11 02:45:28 1.12
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -39,7 +39,7 @@
#define DESC_SIG String("# description:")
-static bool
+static bool
RHEL4=false, RHEL5=false, FC5=false, FC6=false;
static void
set_release();
@@ -65,12 +65,12 @@
{}
-XMLObject
+XMLObject
Service::xml(bool descr) const
{
if (!_name.get())
throw String("internal: service not initialized");
-
+
XMLObject xml("service");
xml.set_attr("name", name());
xml.set_attr("enabled", enabled()?"true":"false");
@@ -79,7 +79,7 @@
return xml;
}
-String
+String
Service::name() const
{
if (!_name.get())
@@ -87,7 +87,7 @@
return *_name;
}
-bool
+bool
Service::enabled() const
{
if (!_enabled.get())
@@ -95,7 +95,7 @@
return *_enabled;
}
-bool
+bool
Service::running() const
{
if (!_running.get())
@@ -103,17 +103,17 @@
return *_running;
}
-String
+String
Service::description() const
{
if (!_descr.get()) {
String path(INITD_DIR_PATH);
path += name();
-
+
String initd(File::open(path));
-
+
list<String> desc_lines;
-
+
vector<String> lines = utils::split(initd, "\n");
for (vector<String>::const_iterator iter = lines.begin();
iter != lines.end();
@@ -132,7 +132,7 @@
break;
break;
}
-
+
String desc;
for (list<String>::const_iterator l_iter = desc_lines.begin();
l_iter != desc_lines.end();
@@ -143,14 +143,14 @@
s = utils::lstrip(s);
desc += s;
}
-
+
_descr = counting_auto_ptr<String>(new String(desc));
}
-
+
return *_descr;
}
-void
+void
Service::enable()
{
if (!enabled()) {
@@ -159,7 +159,7 @@
}
}
-void
+void
Service::disable()
{
if (enabled()) {
@@ -168,7 +168,7 @@
}
}
-void
+void
Service::start()
{
running();
@@ -176,7 +176,7 @@
*_running = true;
}
-void
+void
Service::restart()
{
running();
@@ -184,7 +184,7 @@
*_running = true;
}
-void
+void
Service::stop()
{
running();
@@ -192,7 +192,7 @@
*_running = false;
}
-void
+void
Service::enable_service(const String& name, bool on)
{
String out, err;
@@ -209,12 +209,12 @@
throw String("chkconfig failed for service ") + name;
}
-bool
+bool
Service::service_running(const String& name)
{
String path(INITD_DIR_PATH);
path += name;
-
+
String out, err;
int status;
vector<String> args;
@@ -224,12 +224,12 @@
return status == 0;
}
-void
+void
Service::run_service(const String& name, ActionState state)
{
String path(INITD_DIR_PATH);
path += name;
-
+
String out, err;
int status;
vector<String> args;
@@ -285,7 +285,7 @@
{}
-XMLObject
+XMLObject
ServiceSet::xml(bool descr) const
{
XMLObject xml("set");
@@ -296,7 +296,7 @@
return xml;
}
-String
+String
ServiceSet::name() const
{
if (!_name.get() || servs.empty())
@@ -304,7 +304,7 @@
return *_name;
}
-bool
+bool
ServiceSet::enabled() const
{
name();
@@ -316,7 +316,7 @@
return true;
}
-bool
+bool
ServiceSet::running() const
{
name();
@@ -328,14 +328,14 @@
return true;
}
-String
+String
ServiceSet::description() const
{
name();
return *_descr;
}
-void
+void
ServiceSet::enable()
{
name();
@@ -349,7 +349,7 @@
}
}
-void
+void
ServiceSet::disable()
{
name();
@@ -363,7 +363,7 @@
}
}
-void
+void
ServiceSet::start()
{
name();
@@ -377,7 +377,7 @@
}
}
-void
+void
ServiceSet::restart()
{
name();
@@ -390,7 +390,7 @@
}
}
-void
+void
ServiceSet::stop()
{
name();
@@ -411,7 +411,7 @@
ServiceManager::ServiceManager()
{
set_release();
-
+
String out, err;
int status;
vector<String> args;
@@ -429,14 +429,14 @@
continue;
String name = words[0];
bool enabled = false;
- for (vector<String>::size_type i=2;
+ for (vector<String>::size_type i=2;
i < words.size() - 1;
i++)
if (words[i].find("on") != String::npos)
enabled = true;
_servs[name] = Service(name, enabled);
}
-
+
_sets = generate_sets();
}
@@ -448,7 +448,7 @@
ServiceManager::generate_sets()
{
map<String, ServiceSet> sets;
-
+
list<String> servs;
String name = "Cluster Base";
String descr = "Cluster infrastructure: ccs, cman, fence";
@@ -463,8 +463,8 @@
ServiceSet s(name, descr);
if (populate_set(s, servs))
sets[name] = s;
-
-
+
+
if (RHEL4 || FC5) {
servs.clear();
name = "Cluster Base - Gulm";
@@ -475,8 +475,8 @@
if (populate_set(s, servs))
sets[name] = s;
}
-
-
+
+
servs.clear();
name = "Cluster Service Manager";
descr = "Cluster Service Manager: rgmanager";
@@ -484,8 +484,8 @@
servs.push_back("rgmanager");
if (populate_set(s, servs))
sets[name] = s;
-
-
+
+
servs.clear();
name = "Clustered Storage";
if (RHEL4 || FC5) {
@@ -501,8 +501,8 @@
s = ServiceSet(name, descr);
if (populate_set(s, servs))
sets[name] = s;
-
-
+
+
servs.clear();
name = "Linux Virtual Server";
descr = "Red Hat's LVS implementation: pulse, piranha";
@@ -511,13 +511,13 @@
servs.push_back("piranha-gui");
if (populate_set(s, servs))
sets[name] = s;
-
-
+
+
return sets;
}
-bool
-ServiceManager::populate_set(ServiceSet& ss,
+bool
+ServiceManager::populate_set(ServiceSet& ss,
std::list<String> servs)
{
for (list<String>::iterator n_iter = servs.begin();
@@ -532,8 +532,8 @@
}
-void
-ServiceManager::enable(const std::list<String>& services,
+void
+ServiceManager::enable(const std::list<String>& services,
const std::list<String>& sets)
{
// check
@@ -547,21 +547,21 @@
iter++)
if (_sets.find(*iter) == _sets.end())
throw String("no such service set: ") + *iter;
-
+
// apply
for (list<String>::const_iterator iter = services.begin();
iter != services.end();
iter++)
_servs[*iter].enable();
-
+
for (list<String>::const_iterator iter = sets.begin();
iter != sets.end();
iter++)
_sets[*iter].enable();
}
-void
-ServiceManager::disable(const std::list<String>& services,
+void
+ServiceManager::disable(const std::list<String>& services,
const std::list<String>& sets)
{
// check
@@ -575,21 +575,21 @@
iter++)
if (_sets.find(*iter) == _sets.end())
throw String("no such service set: ") + *iter;
-
+
// apply
for (list<String>::const_iterator iter = services.begin();
iter != services.end();
iter++)
_servs[*iter].disable();
-
+
for (list<String>::const_iterator iter = sets.begin();
iter != sets.end();
iter++)
_sets[*iter].disable();
}
-void
-ServiceManager::start(const std::list<String>& services,
+void
+ServiceManager::start(const std::list<String>& services,
const std::list<String>& sets)
{
// check
@@ -603,21 +603,21 @@
iter++)
if (_sets.find(*iter) == _sets.end())
throw String("no such service set: ") + *iter;
-
+
// apply
for (list<String>::const_iterator iter = services.begin();
iter != services.end();
iter++)
_servs[*iter].start();
-
+
for (list<String>::const_iterator iter = sets.begin();
iter != sets.end();
iter++)
_sets[*iter].start();
}
-void
-ServiceManager::restart(const std::list<String>& services,
+void
+ServiceManager::restart(const std::list<String>& services,
const std::list<String>& sets)
{
// check
@@ -631,21 +631,21 @@
iter++)
if (_sets.find(*iter) == _sets.end())
throw String("no such service set: ") + *iter;
-
+
// apply
for (list<String>::const_iterator iter = services.begin();
iter != services.end();
iter++)
_servs[*iter].restart();
-
+
for (list<String>::const_iterator iter = sets.begin();
iter != sets.end();
iter++)
_sets[*iter].restart();
}
-void
-ServiceManager::stop(const std::list<String>& services,
+void
+ServiceManager::stop(const std::list<String>& services,
const std::list<String>& sets)
{
// check
@@ -659,52 +659,52 @@
iter++)
if (_sets.find(*iter) == _sets.end())
throw String("no such service set: ") + *iter;
-
+
// apply
for (list<String>::const_iterator iter = services.begin();
iter != services.end();
iter++)
_servs[*iter].stop();
-
+
for (list<String>::const_iterator iter = sets.begin();
iter != sets.end();
iter++)
_sets[*iter].stop();
}
-void
-ServiceManager::lists(std::list<Service>& services,
+void
+ServiceManager::lists(std::list<Service>& services,
std::list<ServiceSet>& sets)
{
services.clear();
sets.clear();
-
+
for (map<String, Service>::const_iterator iter = _servs.begin();
iter != _servs.end();
iter++)
services.push_back(iter->second);
-
+
for (map<String, ServiceSet>::const_iterator iter = _sets.begin();
iter != _sets.end();
iter++)
sets.push_back(iter->second);
}
-void
-ServiceManager::query(const std::list<String>& serv_names,
- const std::list<String>& set_names,
- std::list<Service>& services,
+void
+ServiceManager::query(const std::list<String>& serv_names,
+ const std::list<String>& set_names,
+ std::list<Service>& services,
std::list<ServiceSet>& sets)
{
services.clear();
sets.clear();
-
+
for (list<String>::const_iterator iter = serv_names.begin();
iter != serv_names.end();
iter++)
if (_servs.find(*iter) != _servs.end())
services.push_back(_servs[*iter]);
-
+
for (list<String>::const_iterator iter = set_names.begin();
iter != set_names.end();
iter++)
@@ -734,7 +734,7 @@
FC6 = true;
else if (release.find("Tikanga") != release.npos)
RHEL5 = true;
-
+
release_set = true;
}
}
--- conga/ricci/modules/service/ServiceManager.h 2007/02/24 09:39:22 1.4
+++ conga/ricci/modules/service/ServiceManager.h 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -40,38 +40,38 @@
public:
Service();
virtual ~Service();
-
+
String name() const;
bool enabled() const;
bool running() const;
String description() const;
-
+
void enable();
void disable();
void restart();
void start();
void stop();
-
+
XMLObject xml(bool descriptions) const;
-
+
private:
Service(const String& name, bool enabled);
-
+
mutable counting_auto_ptr<String> _name;
mutable counting_auto_ptr<String> _descr;
mutable counting_auto_ptr<bool> _enabled;
mutable counting_auto_ptr<bool> _running;
-
+
enum ActionState {
START,
STOP,
RESTART
};
-
+
static void enable_service(const String& name, bool on);
static bool service_running(const String& name);
static void run_service(const String& name, ActionState state);
-
+
friend class ServiceManager;
};
@@ -82,26 +82,26 @@
ServiceSet();
ServiceSet(const String& name, const String& description);
virtual ~ServiceSet();
-
+
String name() const;
bool enabled() const;
bool running() const;
String description() const;
-
+
void enable();
void disable();
void start();
void restart();
void stop();
-
+
std::list<Service> servs;
-
+
XMLObject xml(bool descriptions) const;
-
+
private:
mutable counting_auto_ptr<String> _name;
mutable counting_auto_ptr<String> _descr;
-
+
};
@@ -110,30 +110,30 @@
public:
ServiceManager();
virtual ~ServiceManager();
-
+
void enable(const std::list<String>& services, const std::list<String>& sets);
void disable(const std::list<String>& services, const std::list<String>& sets);
-
+
void start(const std::list<String>& services, const std::list<String>& sets);
void restart(const std::list<String>& services, const std::list<String>& sets);
void stop(const std::list<String>& services, const std::list<String>& sets);
-
- void lists(std::list<Service>& services,
+
+ void lists(std::list<Service>& services,
std::list<ServiceSet>& sets);
-
- void query(const std::list<String>& serv_names,
- const std::list<String>& set_names,
- std::list<Service>& services,
+
+ void query(const std::list<String>& serv_names,
+ const std::list<String>& set_names,
+ std::list<Service>& services,
std::list<ServiceSet>& sets);
-
+
private:
std::map<String, Service> _servs;
std::map<String, ServiceSet> _sets;
-
+
std::map<String, ServiceSet> generate_sets();
-
+
bool populate_set(ServiceSet& ss, std::list<String> servs);
-
+
};
--- conga/ricci/modules/service/ServiceModule.cpp 2007/02/23 22:02:57 1.4
+++ conga/ricci/modules/service/ServiceModule.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -58,15 +58,15 @@
api_1_0["stop"] = stop;
api_1_0["list"] = lists;
api_1_0["query"] = query;
-
+
ApiFcnMap api_fcn_map;
api_fcn_map["1.0"] = api_1_0;
-
+
return api_fcn_map;
}
-VarMap
+VarMap
enable(const VarMap& args)
{
list<XMLObject> serv_list;
@@ -78,7 +78,7 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
list<String> services, sets;
for (list<XMLObject>::const_iterator iter = serv_list.begin();
iter != serv_list.end();
@@ -88,13 +88,13 @@
else if (iter->tag() == "set")
sets.push_back(iter->get_attr("name"));
}
-
+
ServiceManager().enable(services, sets);
-
+
return VarMap();
}
-VarMap
+VarMap
disable(const VarMap& args)
{
list<XMLObject> serv_list;
@@ -106,7 +106,7 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
list<String> services, sets;
for (list<XMLObject>::const_iterator iter = serv_list.begin();
iter != serv_list.end();
@@ -116,13 +116,13 @@
else if (iter->tag() == "set")
sets.push_back(iter->get_attr("name"));
}
-
+
ServiceManager().disable(services, sets);
-
+
return VarMap();
}
-VarMap
+VarMap
start(const VarMap& args)
{
list<XMLObject> serv_list;
@@ -134,7 +134,7 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
list<String> services, sets;
for (list<XMLObject>::const_iterator iter = serv_list.begin();
iter != serv_list.end();
@@ -144,13 +144,13 @@
else if (iter->tag() == "set")
sets.push_back(iter->get_attr("name"));
}
-
+
ServiceManager().start(services, sets);
-
+
return VarMap();
}
-VarMap
+VarMap
restart(const VarMap& args)
{
list<XMLObject> serv_list;
@@ -162,7 +162,7 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
list<String> services, sets;
for (list<XMLObject>::const_iterator iter = serv_list.begin();
iter != serv_list.end();
@@ -172,13 +172,13 @@
else if (iter->tag() == "set")
sets.push_back(iter->get_attr("name"));
}
-
+
ServiceManager().restart(services, sets);
-
+
return VarMap();
}
-VarMap
+VarMap
stop(const VarMap& args)
{
list<XMLObject> serv_list;
@@ -190,7 +190,7 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
list<String> services, sets;
for (list<XMLObject>::const_iterator iter = serv_list.begin();
iter != serv_list.end();
@@ -200,13 +200,13 @@
else if (iter->tag() == "set")
sets.push_back(iter->get_attr("name"));
}
-
+
ServiceManager().stop(services, sets);
-
+
return VarMap();
}
-VarMap
+VarMap
lists(const VarMap& args)
{
bool descr;
@@ -218,11 +218,11 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
// command
-
+
list<XMLObject> xml_list;
-
+
list<Service> services;
list<ServiceSet> sets;
ServiceManager().lists(services, sets);
@@ -234,16 +234,16 @@
iter != sets.end();
iter++)
xml_list.push_back(iter->xml(descr));
-
+
// response
Variable var("services", xml_list);
-
+
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
query(const VarMap& args)
{
list<XMLObject> search_list;
@@ -253,7 +253,7 @@
if (iter == args.end())
throw APIerror("missing search variable");
search_list = iter->second.get_list_XML();
-
+
descr = false;
iter = args.find("description");
if (iter != args.end())
@@ -261,9 +261,9 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
// command
-
+
list<String> serv_names, set_names;
for (list<XMLObject>::const_iterator iter = search_list.begin();
iter != search_list.end();
@@ -273,16 +273,16 @@
else if (iter->tag() == "set")
set_names.push_back(iter->get_attr("name"));
}
-
+
list<Service> services;
list<ServiceSet> sets;
- ServiceManager().query(serv_names,
- set_names,
- services,
+ ServiceManager().query(serv_names,
+ set_names,
+ services,
sets);
-
+
// response
-
+
list<XMLObject> result_list;
for (list<Service>::const_iterator iter = services.begin();
iter != services.end();
@@ -292,9 +292,9 @@
iter != sets.end();
iter++)
result_list.push_back(iter->xml(descr));
-
+
Variable var("result", result_list);
-
+
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
--- conga/ricci/modules/service/ServiceModule.h 2006/04/07 16:42:40 1.1
+++ conga/ricci/modules/service/ServiceModule.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,9 +32,9 @@
public:
ServiceModule();
virtual ~ServiceModule();
-
+
private:
-
+
};
--- conga/ricci/modules/service/main.cpp 2006/08/15 04:15:53 1.4
+++ conga/ricci/modules/service/main.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/storage/BD.cpp 2006/10/06 03:10:13 1.4
+++ conga/ricci/modules/storage/BD.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -41,9 +41,9 @@
// ##### BD #####
-BD::BD(const String& mapper_type,
- const String& mapper_id,
- const String& bd_type,
+BD::BD(const String& mapper_type,
+ const String& mapper_id,
+ const String& bd_type,
const String& path,
bool check_path) :
content(ContentFactory().probe(path)),
@@ -55,7 +55,7 @@
if (check_path) {
// if (access(path.c_str(), F_OK) != 0)
// throw String("file non-existant");
-
+
// size (can be overwritten by descendants)
String out, err;
int status;
@@ -78,71 +78,71 @@
else
_props.set(Variable("size", size));
}
-
+
_props.set(Variable("path", path));
removable(false);
-
+
}
BD::~BD()
{}
-String
+String
BD::path() const
{
return _props.get("path").get_string();
}
-long long
+long long
BD::size() const
{
return _props.get("size").get_int();
}
-String
+String
BD::state_ind() const
{
XMLObject t;
t.add_child(_props.xml());
t.add_child(content->xml());
-
+
return utils::hash_str(generateXML(t) + path() + _mapper_id);
}
-String
+String
BD::mapper_id() const
{
return _mapper_id;
}
-String
+String
BD::mapper_type() const
{
return _mapper_type;
}
-
-bool
+
+bool
BD::removable() const
{
return _props.get("removable").get_bool();
}
-void
+void
BD::removable(bool removable)
{
_props.set(Variable("removable", removable));
}
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
BD::apply(const BDParsed& bd_parsed)
{
if (bd_parsed.content->_replacement.get()) {
// replace content
-
+
content->remove();
-
+
// first
this->apply_props_before_resize(bd_parsed.props);
// second - size
@@ -155,22 +155,22 @@
}
// third
this->apply_props_after_resize(bd_parsed.props);
-
+
counting_auto_ptr<BD> new_bd = BDFactory().get_bd(path());
ContentFactory().create_content(new_bd, bd_parsed.content);
} else {
// modify content
-
+
long long orig_size = this->size();
long long new_size = bd_parsed.props.get("size").get_int();
-
+
// first
this->apply_props_before_resize(bd_parsed.props);
- content->apply_props_before_resize(path(),
+ content->apply_props_before_resize(path(),
orig_size,
new_size,
bd_parsed.content->props);
-
+
// second - size
if (orig_size > new_size) {
content->shrink(path(), new_size, bd_parsed.content->props);
@@ -184,22 +184,22 @@
throw;
}
}
-
+
// third
this->apply_props_after_resize(bd_parsed.props);
- content->apply_props_after_resize(path(),
+ content->apply_props_after_resize(path(),
orig_size,
new_size,
bd_parsed.content->props);
}
-
+
utils::clear_cache();
return BDFactory().get_bd(path());
}
-XMLObject
+XMLObject
BD::xml() const
{
XMLObject bd(BD_TYPE_TAG);
@@ -210,7 +210,7 @@
bd.set_attr("state_ind", state_ind());
bd.add_child(_props.xml());
bd.add_child(content->xml());
-
+
return bd;
}
@@ -224,29 +224,29 @@
// ##### BDTemplate #####
-BDTemplate::BDTemplate(const String& mapper_type,
- const String& mapper_id,
- const String& mapper_state_ind,
+BDTemplate::BDTemplate(const String& mapper_type,
+ const String& mapper_id,
+ const String& mapper_state_ind,
const String& bd_type) :
mapper_type(mapper_type),
mapper_id(mapper_id),
- mapper_state_ind(mapper_state_ind),
+ mapper_state_ind(mapper_state_ind),
bd_type(bd_type),
content(counting_auto_ptr<Content>(new ContentNone("")))
{
-
+
}
BDTemplate::BDTemplate(const XMLObject& xml)
{
if (xml.tag() != BD_TEMPLATE_TYPE_TAG)
throw String("not BD template");
-
+
mapper_type = xml.get_attr("mapper_type");
mapper_id = xml.get_attr("mapper_id");
mapper_state_ind = xml.get_attr("mapper_state_ind");
-
- counting_auto_ptr<Mapper> mapper =
+
+ counting_auto_ptr<Mapper> mapper =
MapperFactory::get_mapper(mapper_type, mapper_id);
if (mapper->state_ind() != mapper_state_ind)
throw MidAir();
@@ -254,9 +254,9 @@
bd_type = BD_LV_TYPE;
else if (mapper_type == MAPPER_PT_TYPE)
bd_type = BD_PART_TYPE;
- else
+ else
throw String("BDTemplate(): not implemented");
-
+
XMLObject content_xml;
const list<XMLObject>& kids = xml.children();
for (list<XMLObject>::const_iterator kid_iter = kids.begin();
@@ -270,11 +270,11 @@
if (kid.tag() == CONTENT_TYPE_TAG)
content_xml = kid;
}
-
+
// validate props and content
-
+
list<counting_auto_ptr<BDTemplate> > bd_candidates;
- for (list<counting_auto_ptr<BDTemplate> >::const_iterator t_iter =
+ for (list<counting_auto_ptr<BDTemplate> >::const_iterator t_iter =
mapper->new_targets.begin();
t_iter != mapper->new_targets.end();
t_iter++) {
@@ -283,7 +283,7 @@
bd_candidates.push_back(*t_iter);
} catch ( ... ) {}
}
-
+
// bd_candidates have valid props, verify content
bool valid = false;
for (list<counting_auto_ptr<BDTemplate> >::const_iterator iter = bd_candidates.begin();
@@ -305,7 +305,7 @@
{}
-XMLObject
+XMLObject
BDTemplate::xml() const
{
XMLObject bd(BD_TEMPLATE_TYPE_TAG);
@@ -314,7 +314,7 @@
bd.set_attr("mapper_state_ind", mapper_state_ind);
bd.add_child(props.xml());
bd.add_child(content->xml());
-
+
return bd;
}
@@ -329,20 +329,20 @@
{
if (xml.tag() != BD_TYPE_TAG)
throw String("not BD");
-
+
path = xml.get_attr("path");
state_ind = xml.get_attr("state_ind");
if (path.empty() ||
state_ind.empty())
throw String("BDParsed missing identification");
-
+
// get BD
try {
bd = BDFactory::get_bd(path);
} catch ( ... ) {
throw MidAir();
}
-
+
for (list<XMLObject>::const_iterator iter = xml.children().begin();
iter != xml.children().end();
iter++) {
@@ -356,7 +356,7 @@
throw;
} catch ( ... ) {}
}
-
+
// ### validate ###
if (bd->state_ind() != state_ind)
throw MidAir();
@@ -364,9 +364,9 @@
if (!content.get())
throw String("missing content tag");
// content validated self
-
-
-
+
+
+
}
BDParsed::~BDParsed()
--- conga/ricci/modules/storage/BD.h 2006/08/10 22:53:09 1.4
+++ conga/ricci/modules/storage/BD.h 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -40,21 +40,21 @@
public:
BDParsed(const XMLObject& xml);
virtual ~BDParsed();
-
+
counting_auto_ptr<ContentParsed> content;
-
+
Props props;
-
+
// MapperType mapper_type;
// String mapper_id;
// BDType bd_type;
String path;
String state_ind;
-
-
+
+
counting_auto_ptr<BD> bd;
-
-
+
+
}; // class BDParsed
@@ -62,53 +62,53 @@
{
public:
virtual ~BD();
-
+
String path() const;
virtual String state_ind() const;
virtual long long size() const;
String mapper_id() const;
String mapper_type() const;
-
+
XMLObject xml() const;
-
+
counting_auto_ptr<Content> content;
-
+
Props _props;
-
+
virtual bool removable() const;
virtual void removable(bool removable);
virtual void remove() = 0;
-
+
virtual counting_auto_ptr<BD> apply(const BDParsed& bd); // return new bd
-
-
-
-
+
+
+
+
protected:
- BD(const String& mapper_type,
- const String& mapper_id,
- const String& bd_type,
+ BD(const String& mapper_type,
+ const String& mapper_id,
+ const String& bd_type,
const String& path,
bool check_path = true);
-
+
String _mapper_type;
String _mapper_id;
String _bd_type;
String _path;
-
-
- virtual void shrink(unsigned long long new_size,
+
+
+ virtual void shrink(unsigned long long new_size,
const Props& new_props) = 0;
- virtual void expand(unsigned long long new_size,
+ virtual void expand(unsigned long long new_size,
const Props& new_props) = 0;
-
+
virtual String apply_props_before_resize(const Props& new_props) = 0; // return path
virtual String apply_props_after_resize(const Props& new_props) = 0; // return path
-
-
-
+
+
+
private:
-
+
}; // class BD
@@ -117,31 +117,31 @@
public:
BDTemplate(const XMLObject& xml);
virtual ~BDTemplate();
-
+
XMLObject xml() const;
-
-
-
+
+
+
String mapper_type;
String mapper_id;
String mapper_state_ind;
String bd_type;
-
+
Props props;
-
+
counting_auto_ptr<Content> content; // valid only if not constructed from XML
-
+
counting_auto_ptr<ContentParsed> content_parsed; // valid only if constructed from XML
-
+
protected:
- BDTemplate(const String& mapper_type,
- const String& mapper_id,
- const String& mapper_state_ind,
+ BDTemplate(const String& mapper_type,
+ const String& mapper_id,
+ const String& mapper_state_ind,
const String& bd_type);
-
-
+
+
private:
-
+
}; // class BDTemplate
--- conga/ricci/modules/storage/BDFactory.cpp 2006/09/26 01:16:13 1.4
+++ conga/ricci/modules/storage/BDFactory.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,26 +35,26 @@
using namespace std;
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
BDFactory::get_bd(const String& path)
{
try {
return counting_auto_ptr<BD>(new LV(path));
} catch ( ... ) {}
-
+
try {
return counting_auto_ptr<BD>(new Partition(path));
} catch ( ... ) {}
-
+
try {
return counting_auto_ptr<BD>(new MDRaidTarget(path));
} catch ( ... ) {}
-
+
return counting_auto_ptr<BD>(new HD(path));
}
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
BDFactory::create_bd(const BDTemplate& bd_temp)
{
if (bd_temp.bd_type == BD_LV_TYPE)
@@ -65,7 +65,7 @@
}
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
BDFactory::modify_bd(const BDParsed& parsed_bd)
{
counting_auto_ptr<BD> old_bd = get_bd(parsed_bd.path);
@@ -82,7 +82,7 @@
throw MidAir();
if (!old_bd->removable())
throw String("invalid call: bd not removable");
-
+
old_bd->remove();
return MapperFactory::get_mapper(old_bd->mapper_type(),
old_bd->mapper_id());
--- conga/ricci/modules/storage/BDFactory.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/BDFactory.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,15 +34,15 @@
class BDFactory
{
public:
-
+
static counting_auto_ptr<BD> create_bd(const BDTemplate& bd_temp);
-
+
static counting_auto_ptr<BD> get_bd(const String& path);
-
+
static counting_auto_ptr<BD> modify_bd(const BDParsed& bd);
-
+
static counting_auto_ptr<Mapper> remove_bd(const BDParsed& bd);
-
+
};
--- conga/ricci/modules/storage/ClusterNotQuorateError.h 2007/03/05 20:45:17 1.3
+++ conga/ricci/modules/storage/ClusterNotQuorateError.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,7 +34,7 @@
: Except(5, String("Cluster is not quorate")) {}
virtual ~ClusterNotQuorateError()
{}
-
+
};
--- conga/ricci/modules/storage/ClusterNotRunningError.h 2007/03/05 20:45:17 1.2
+++ conga/ricci/modules/storage/ClusterNotRunningError.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,7 +34,7 @@
: Except(7, String("Cluster infrastructure is not active")) {}
virtual ~ClusterNotRunningError()
{}
-
+
};
--- conga/ricci/modules/storage/ClvmdError.h 2007/03/05 20:45:17 1.3
+++ conga/ricci/modules/storage/ClvmdError.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,7 +34,7 @@
: Except(4, String("clvmd failed to start")) {}
virtual ~ClvmdError()
{}
-
+
};
--- conga/ricci/modules/storage/Content.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/Content.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -43,22 +43,22 @@
{}
-String
+String
Content::path() const
{
return _props.get("path").get_string();
}
-String
+String
Content::state_ind() const
{
XMLObject xml;
xml.add_child(_props.xml());
-
+
return utils::hash_str(generateXML(xml) + path());
}
-void
+void
Content::add_replacement(const counting_auto_ptr<ContentTemplate>& replacement)
{
_avail_replacements.push_back(replacement);
@@ -70,7 +70,7 @@
return false;
}
-XMLObject
+XMLObject
Content::xml() const
{
XMLObject xml(CONTENT_TYPE_TAG);
@@ -78,19 +78,19 @@
// xml.set_attr("path", path());
// xml.set_attr("state_ind", state_ind());
xml.add_child(_props.xml());
-
+
XMLObject replacements(CONTENT_REPLACEMENTS_TAG);
for (list<counting_auto_ptr<ContentTemplate> >::const_iterator iter = _avail_replacements.begin();
iter != _avail_replacements.end();
iter++)
replacements.add_child((*iter)->xml());
xml.add_child(replacements);
-
+
XMLObject replacement(CONTENT_NEW_CONTENT_TAG);
if (_replacement.get())
replacement.add_child(_replacement->xml());
xml.add_child(replacement);
-
+
return xml;
}
@@ -110,12 +110,12 @@
{
if (xml.tag() != CONTENT_TEMPLATE_TYPE_TAG)
throw String("not Content template");
-
+
attrs = xml.attrs();
-
+
type = xml.get_attr("type");
-
-
+
+
const list<XMLObject>& kids = xml.children();
for (list<XMLObject>::const_iterator kid_iter = kids.begin();
kid_iter != kids.end();
@@ -125,38 +125,38 @@
break;
} catch ( ... ) {}
}
-
+
// validate props
counting_auto_ptr<ContentTemplate> orig_ct;
- for (list<counting_auto_ptr<ContentTemplate> >::const_iterator iter =
+ for (list<counting_auto_ptr<ContentTemplate> >::const_iterator iter =
content->_avail_replacements.begin();
iter != content->_avail_replacements.end();
iter++)
if ((*iter)->attrs == attrs)
orig_ct = *iter;
-
+
if (orig_ct.get()) {
orig_ct->_props.validate(_props);
- } else
+ } else
throw MidAir();
}
ContentTemplate::~ContentTemplate()
{}
-XMLObject
+XMLObject
ContentTemplate::xml() const
{
XMLObject xml(CONTENT_TEMPLATE_TYPE_TAG);
-
+
xml.set_attr("type", type);
for (map<String, String>::const_iterator iter = attrs.begin();
iter != attrs.end();
- iter++)
+ iter++)
xml.set_attr(iter->first, iter->second);
-
+
xml.add_child(_props.xml());
-
+
return xml;
}
@@ -173,14 +173,14 @@
throw String("not Content") + xml.tag();
if (!content.get())
throw String("content null pointer!!!");
-
+
const XMLObject& orig_xml = content->xml();
for (std::map<String, String>::const_iterator iter = orig_xml.attrs().begin();
iter != orig_xml.attrs().end();
iter++)
if (xml.get_attr(iter->first) != iter->second)
throw String("not a matching content");
-
+
for (list<XMLObject>::const_iterator iter = xml.children().begin();
iter != xml.children().end();
iter++) {
@@ -188,25 +188,25 @@
props = Props(*iter);
continue;
} catch ( ... ) {}
-
+
// replacement
if (iter->tag() == CONTENT_NEW_CONTENT_TAG) {
if (iter->children().size() > 1)
throw String("invalid number of replacement contents");
- else if (iter->children().size() == 1)
- _replacement =
+ else if (iter->children().size() == 1)
+ _replacement =
counting_auto_ptr<ContentTemplate>(new ContentTemplate(iter->children().front(), content));
}
}
-
+
// ### validation ###
-
+
content->_props.validate(props);;
-
+
// validate replacement
if (_replacement.get()) {
bool replacement_found = false;
- for (list<counting_auto_ptr<ContentTemplate> >::const_iterator iter =
+ for (list<counting_auto_ptr<ContentTemplate> >::const_iterator iter =
content->_avail_replacements.begin();
iter != content->_avail_replacements.end();
iter++) {
--- conga/ricci/modules/storage/Content.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/Content.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,14 +38,14 @@
class ContentParsed
{
public:
- ContentParsed(const XMLObject& xml,
+ ContentParsed(const XMLObject& xml,
counting_auto_ptr<Content>& content);
virtual ~ContentParsed();
-
+
Props props;
counting_auto_ptr<Content> content;
counting_auto_ptr<ContentTemplate> _replacement;
-
+
};
@@ -53,77 +53,77 @@
{
public:
virtual ~Content();
-
+
String path() const;
String state_ind() const;
-
+
virtual XMLObject xml() const;
-
+
const String type;
-
+
Props _props;
-
+
counting_auto_ptr<ContentTemplate> _replacement;
-
+
virtual void add_replacement(const counting_auto_ptr<ContentTemplate>& replacement);
std::list<counting_auto_ptr<ContentTemplate> > _avail_replacements;
-
-
-
+
+
+
// internal
virtual bool expandable(long long& max_size) const = 0;
virtual bool shrinkable(long long& min_size) const = 0;
-
-
+
+
// modifying fcns
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props) = 0;
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props) = 0;
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props) = 0;
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props) = 0;
-
+
virtual bool removable() const;
virtual void remove() = 0;
-
-
+
+
protected:
Content(const String& type, const String& path);
-
+
private:
-
-
+
+
};
class ContentTemplate
{
public:
- ContentTemplate(const XMLObject& xml,
+ ContentTemplate(const XMLObject& xml,
counting_auto_ptr<Content>& content); // content to perform validation against
virtual ~ContentTemplate();
-
+
virtual XMLObject xml() const;
-
+
Props _props;
-
+
String type;
-
+
std::map<String, String> attrs; // update if necessary
-
+
protected:
ContentTemplate(const String& type);
-
-
+
+
};
--- conga/ricci/modules/storage/ContentExtendedPartition.cpp 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/ContentExtendedPartition.cpp 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -36,7 +36,7 @@
{}
-bool
+bool
ContentExtendedPartition::removable() const
{
// TODO: removable based on logical parts
@@ -46,6 +46,6 @@
void
ContentExtendedPartition::remove()
{
- // for now, just return,
+ // for now, just return,
return;
}
--- conga/ricci/modules/storage/ContentExtendedPartition.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/ContentExtendedPartition.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,13 +32,13 @@
public:
ContentExtendedPartition(const String& path);
virtual ~ContentExtendedPartition();
-
+
virtual bool removable() const;
virtual void remove();
-
-
+
+
private:
-
+
};
--- conga/ricci/modules/storage/ContentFS.cpp 2006/10/06 03:10:13 1.5
+++ conga/ricci/modules/storage/ContentFS.cpp 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,8 +37,8 @@
-ContentFS::ContentFS(const String& path,
- const String& name,
+ContentFS::ContentFS(const String& path,
+ const String& name,
const String& module) :
Content(CONTENT_FS_TYPE, path),
_name(name),
@@ -49,21 +49,21 @@
{}
-bool
+bool
ContentFS::removable() const
{
return false;
}
-void
+void
ContentFS::remove()
{
if (!this->removable())
throw String("FS not removable");
-
+
FstabLocker lock;
MountHandler mh;
-
+
// mountpoint
list<Mountpoint> l = mh.mounts(mh.maj_min(path()));
list<Mountpoint> backup;
@@ -80,13 +80,13 @@
throw UMountError(iter->mountpoint);
}
}
-
+
list<Mountpoint> f = mh.fstabs(mh.maj_min(path()));
for (list<Mountpoint>::const_iterator iter = f.begin();
iter != f.end();
iter++)
mh.fstab_remove(iter->devname, iter->mountpoint);
-
+
create_content_none(BDFactory::get_bd(path()));
}
@@ -102,14 +102,14 @@
-void
+void
ContentFS::mount_props_probe(const String& path,
const String& fsname,
Props& props)
{
FstabLocker l;
MountHandler mh;
-
+
// mountpoint
pair<unsigned int, unsigned int> maj_min = mh.maj_min(path);
list<Mountpoint> mounts = mh.mounts(maj_min);
@@ -124,36 +124,36 @@
if (fstabs.size())
fstabpoint = fstabs.front().mountpoint;
ill_mnts.remove(fstabpoint);
-
-
-
+
+
+
bool mountable = mount_fs_supported(fsname);
props.set(Variable("mountable", mountable));
if (mountable)
- props.set(Variable("mountpoint",
- mountpoint,
- 0,
- 128,
- ILLEGAL_MOUNT_CHARS,
+ props.set(Variable("mountpoint",
+ mountpoint,
+ 0,
+ 128,
+ ILLEGAL_MOUNT_CHARS,
ill_mnts));
if (mountable ||
!fstabpoint.empty())
- props.set(Variable("fstabpoint",
- fstabpoint,
- 0,
- 128,
- ILLEGAL_MOUNT_CHARS,
+ props.set(Variable("fstabpoint",
+ fstabpoint,
+ 0,
+ 128,
+ ILLEGAL_MOUNT_CHARS,
ill_mnts));
}
-void
+void
ContentFS::mount_props_apply(const String& path,
const String& fsname,
const Props& old_props,
const Props& new_props)
{
FstabLocker l;
-
+
// mountpoint
if (old_props.has("mountpoint")) {
String mnt_curr = old_props.get("mountpoint").get_string();
@@ -168,7 +168,7 @@
throw String("mount failed");
}
}
-
+
// fstab
if (old_props.has("fstabpoint")) {
String mnt_curr = old_props.get("fstabpoint").get_string();
@@ -189,7 +189,7 @@
}
}
-bool
+bool
ContentFS::mount_props_mounted(const Props& props)
{
if (props.has("mountpoint"))
@@ -200,7 +200,7 @@
-
+
@@ -217,27 +217,27 @@
-void
+void
ContentFSTemplate::mount_props_template(const String& fsname,
Props& props)
{
bool mountable = ContentFS::mount_fs_supported(fsname);
props.set(Variable("mountable", mountable));
-
+
if (mountable) {
list<String> illegal_mps = MountHandler().used_dirs();
- props.set(Variable("mountpoint",
- "",
- 0,
- 128,
- ILLEGAL_MOUNT_CHARS,
+ props.set(Variable("mountpoint",
+ "",
+ 0,
+ 128,
+ ILLEGAL_MOUNT_CHARS,
illegal_mps));
props.set(Variable("fstab", false, true));
props.set(Variable("mount", false, true));
}
}
-void
+void
ContentFSTemplate::mount_props_create(const String& path,
const String& fsname,
const Props& props)
@@ -250,15 +250,15 @@
} catch ( ... ) {}
bool mount = props.get("mount").get_bool();
bool fstab = props.get("fstab").get_bool();
-
+
if (mountpoint.size()) {
FstabLocker l;
if (mount)
- MountHandler().mount(path,
+ MountHandler().mount(path,
mountpoint,
fsname);
if (fstab)
- MountHandler().fstab_add(label.empty() ? path : String("LABEL=") + label,
+ MountHandler().fstab_add(label.empty() ? path : String("LABEL=") + label,
mountpoint,
fsname);
}
@@ -275,7 +275,7 @@
list<String> l = MountHandler().fstypes();
if (find(l.begin(), l.end(), fsname) != l.end())
return true;
-
+
String out, err;
int status;
vector<String> args;
--- conga/ricci/modules/storage/ContentFS.h 2006/09/26 03:02:57 1.6
+++ conga/ricci/modules/storage/ContentFS.h 2007/09/11 02:45:28 1.7
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,14 +35,14 @@
{
public:
virtual ~ContentFS();
-
+
virtual XMLObject xml() const;
-
+
virtual bool removable() const;
virtual void remove();
-
-
-
+
+
+
static bool mount_fs_supported(const String& fsname); // true if mountable
// these fcns extract/place info from/into props
static bool mount_props_mounted(const Props& props); // true if mounted
@@ -53,13 +53,13 @@
const String& module,
const Props& old_props,
const Props& new_props);
-
-
+
+
protected:
ContentFS(const String& path, const String& name, const String& module);
String _name;
String _module;
-
+
};
@@ -67,19 +67,19 @@
{
public:
virtual ~ContentFSTemplate();
-
+
static void mount_props_template(const String& module,
Props &props);
static void mount_props_create(const String& path,
const String& module,
const Props &props);
-
-
+
+
protected:
ContentFSTemplate(const String& name);
String _name;
-
-
+
+
};
--- conga/ricci/modules/storage/ContentFactory.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/ContentFactory.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,29 +34,29 @@
using namespace std;
-counting_auto_ptr<Content>
+counting_auto_ptr<Content>
ContentFactory::probe(const String& path)
{
try {
return counting_auto_ptr<Content>(new PV(path));
} catch ( ... ) {}
-
+
try {
return counting_auto_ptr<Content>(new PTSource(path));
} catch ( ... ) {}
-
+
try {
return counting_auto_ptr<Content>(new MDRaidSource(path));
} catch ( ... ) {}
-
+
try {
return FSController().get_fs(path);
} catch ( ... ) {}
-
+
return counting_auto_ptr<Content>(new ContentNone(path));
}
-counting_auto_ptr<Content>
+counting_auto_ptr<Content>
ContentFactory::create_content(const counting_auto_ptr<BD>& bd,
const counting_auto_ptr<ContentParsed>& content)
{
@@ -73,9 +73,9 @@
return probe(bd->path());
}
}
- throw String("creation of content ") + content->_replacement->type +
+ throw String("creation of content ") + content->_replacement->type +
" not implemented";
}
-
+
return bd->content;
}
--- conga/ricci/modules/storage/ContentFactory.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/ContentFactory.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,13 +34,13 @@
class ContentFactory
{
public:
-
+
counting_auto_ptr<Content> probe(const String& path);
-
- counting_auto_ptr<Content>
+
+ counting_auto_ptr<Content>
create_content(const counting_auto_ptr<BD>& bd,
const counting_auto_ptr<ContentParsed>& content);
-
+
};
--- conga/ricci/modules/storage/ContentNone.cpp 2006/10/06 03:10:13 1.4
+++ conga/ricci/modules/storage/ContentNone.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -44,47 +44,47 @@
-bool
+bool
ContentNone::expandable(long long& max_size) const
{
max_size = LLONG_MAX;
return true;
}
-bool
+bool
ContentNone::shrinkable(long long& min_size) const
{
min_size = 0;
return true;
}
-void
+void
ContentNone::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
ContentNone::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
ContentNone::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
ContentNone::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
ContentNone::removable() const
{
return true;
@@ -101,7 +101,7 @@
ContentNone::xml() const
{
XMLObject xml = this->Content::xml();
-
+
/*
list<XMLObject> remove_us = xml.children();
for (list<XMLObject>::iterator iter = remove_us.begin();
@@ -109,7 +109,7 @@
iter++)
xml.remove_child(*iter);
*/
-
+
return xml;
}
@@ -117,22 +117,22 @@
-void
+void
create_content_none(const counting_auto_ptr<BD>& bd)
{
long long size = bd->_props.get("size").get_int();
if (size > 2 * 1024 * 1024)
size = 2 * 1024 * 1024;
-
+
vector<String> args;
String out, err;
int status;
-
+
args.push_back("if=/dev/zero");
args.push_back(String("of=") + bd->path());
args.push_back(String("bs=") + utils::to_string(size));
args.push_back("count=1");
-
+
if (utils::execute("/bin/dd", args, out, err, status))
throw command_not_found_error_msg("dd");
if (status)
--- conga/ricci/modules/storage/ContentNone.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/ContentNone.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -40,34 +40,34 @@
public:
ContentNone(const String& path);
virtual ~ContentNone();
-
+
virtual XMLObject xml() const;
-
-
+
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
-
+
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
virtual void remove();
-
-
+
+
private:
-
+
};
--- conga/ricci/modules/storage/ContentUnusable.cpp 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/ContentUnusable.cpp 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,49 +38,49 @@
{}
-bool
+bool
ContentUnusable::expandable(long long& max_size) const
{
return false;
}
-bool
+bool
ContentUnusable::shrinkable(long long& min_size) const
{
return false;
}
-void
+void
ContentUnusable::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{
throw String("ContentUnusable is not shrinkable");
}
-void
+void
ContentUnusable::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{
throw String("ContentUnusable is not expandable");
}
-void
+void
ContentUnusable::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
ContentUnusable::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
ContentUnusable::removable() const
{
return false;
@@ -97,6 +97,6 @@
ContentUnusable::xml() const
{
XMLObject xml = this->Content::xml();
-
+
return xml;
}
--- conga/ricci/modules/storage/ContentUnusable.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/ContentUnusable.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,34 +32,34 @@
public:
ContentUnusable(const String& path);
virtual ~ContentUnusable();
-
+
virtual XMLObject xml() const;
-
-
+
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
-
+
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
virtual void remove();
-
-
+
+
private:
-
+
};
--- conga/ricci/modules/storage/ExtendedFS.cpp 2006/12/21 21:23:17 1.8
+++ conga/ricci/modules/storage/ExtendedFS.cpp 2007/09/11 02:45:28 1.9
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,16 +38,16 @@
ExtendedFS::ExtendedFS(const String& path) :
- ContentFS(path,
+ ContentFS(path,
PRETTY_NAME,
"ext2"),
_journaled(false)
{
String magic(FileMagic::get_description(path));
- if (magic.find("ext3") == magic.npos &&
+ if (magic.find("ext3") == magic.npos &&
magic.find("ext2") == magic.npos)
throw path + ": not an " + _name;
-
+
// dumpe2fs
String out, err;
int status;
@@ -66,7 +66,7 @@
vector<String> words = utils::split(utils::strip(line));
if (words.size() < 3)
continue;
-
+
if (words[0] == "Filesystem" && words[1] == "features:") {
if (find(words.begin(), words.end(), "dir_index") != words.end())
_props.set(Variable("dir_index", true, true));
@@ -76,7 +76,7 @@
_journaled = true;
continue;
}
-
+
if (words.size() == 3) {
if (words[0] == "Block" && words[1] == "size:")
_props.set(Variable("block_size", utils::to_long(words[2])));
@@ -100,21 +100,21 @@
}
}
}
-
+
long long block_count = _props.get("block_count").get_int();
-
+
if (_journaled)
_module = "ext3";
else
_module = "ext2";
-
+
// journaling
- _props.set(Variable("has_journal",
- _journaled,
+ _props.set(Variable("has_journal",
+ _journaled,
(!_journaled && block_count > 1024)));
-
- mount_props_probe(path,
- _module,
+
+ mount_props_probe(path,
+ _module,
_props);
}
@@ -122,15 +122,15 @@
{}
-bool
+bool
ExtendedFS::expandable(long long& max_size) const
{
bool mounted = mount_props_mounted(_props);
-
+
long long bs = _props.get("block_size").get_int();
long long bc = _props.get("block_count").get_int();
long long size = bs * bc;
-
+
long long step = size;
if (bs == 1024)
step = 256LL * 1024 * 1024; // 256 MB
@@ -138,23 +138,23 @@
step = 2LL * 1024 * 1024 * 1024; // 2GB
else if (bs == 4096)
step = 16LL * 1024 * 1024 * 1024; // 16GB
-
+
max_size = ((size + step - 1) / step) * step;
return mounted && _journaled;
}
-void
+void
ExtendedFS::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{
String extend_cmd("/usr/sbin/ext2online");
if (access(extend_cmd.c_str(), X_OK))
extend_cmd = "/sbin/resize2fs";
-
+
vector<String> args;
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(extend_cmd, args, out, err, status))
@@ -163,22 +163,22 @@
throw String(extend_cmd + " failed");
}
-bool
+bool
ExtendedFS::shrinkable(long long& min_size) const
{
return false;
}
-void
+void
ExtendedFS::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
ExtendedFS::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
// has_journal
@@ -186,7 +186,7 @@
bool j_new = new_props.get("has_journal").get_bool();
if (!j_old && j_new)
enable_journal(path);
-
+
// dir_index
bool index_old = _props.get("dir_index").get_bool();
bool index_new = new_props.get("dir_index").get_bool();
@@ -207,9 +207,9 @@
if (status)
throw bin + " failed";
}
-
-
-
+
+
+
// label
/*
String old_label = _props.get("label").get_string();
@@ -217,9 +217,9 @@
if (old_label != new_label) {
FstabLocker lock;
MountHandler mh;
-
+
list<Mountpoint> l = mh.fstabs(mh.maj_min(path));
-
+
vector<String> args;
args.push_back("-L");
args.push_back(new_label);
@@ -230,14 +230,14 @@
throw command_not_found_error_msg();
if (status)
throw String("tune2fs failed");
-
+
args.clear();
args.push_back("1");
if (utils::execute("/bin/sleep", args, out, err, status, false))
throw command_not_found_error_msg();
if (status)
throw String("sleep failed");
-
+
for (list<Mountpoint>::const_iterator iter = l.begin();
iter != l.end();
iter++)
@@ -254,10 +254,10 @@
{
FstabLocker lock;
MountHandler mh;
-
+
list<Mountpoint> mounts = mh.mounts(mh.maj_min(path));
list<Mountpoint> fstabs = mh.fstabs(mh.maj_min(path));
-
+
list<Mountpoint> rollback;
try {
// umount
@@ -268,7 +268,7 @@
throw UMountError(iter->mountpoint);
rollback.push_back(*iter);
}
-
+
// add journal
vector<String> args;
String out, err, bin("/sbin/tune2fs");
@@ -280,7 +280,7 @@
if (status)
throw bin + " failed";
_module = "ext3";
-
+
} catch ( ... ) {
for (list<Mountpoint>::const_iterator iter = rollback.begin();
iter != rollback.end();
@@ -290,7 +290,7 @@
} catch ( ... ) {}
throw;
}
-
+
// modify fstab
for (list<Mountpoint>::const_iterator iter = fstabs.begin();
iter != fstabs.end();
@@ -298,7 +298,7 @@
mh.fstab_remove(iter->devname, iter->mountpoint);
mh.fstab_add(iter->devname, iter->mountpoint, _module);
}
-
+
// mount
for (list<Mountpoint>::const_iterator iter = mounts.begin();
iter != mounts.end();
@@ -307,19 +307,19 @@
throw String("mount failed");
}
-void
+void
ExtendedFS::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
mount_props_apply(path,
- _module,
+ _module,
_props,
new_props);
}
-bool
+bool
ExtendedFS::removable() const
{
return true;
@@ -329,7 +329,7 @@
-void
+void
create_extended_fs(const String& path,
const counting_auto_ptr<ContentTemplate>& templ)
{
@@ -337,7 +337,7 @@
String bs = utils::to_string(templ->_props.get("block_size").get_int());
bool dir_index = templ->_props.get("dir_index").get_bool();
bool has_journal = templ->_props.get("has_journal").get_bool();
-
+
vector<String> args;
if (!label.empty()) {
args.push_back("-L");
@@ -354,14 +354,14 @@
if (has_journal)
args.push_back("-j");
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(MKE2FS_path, args, out, err, status))
throw command_not_found_error_msg(MKE2FS_path);
if (status != 0)
throw MKE2FS_path + " failed";
-
+
// mountpoints
ContentFSTemplate::mount_props_create(path,
(has_journal) ? "ext3" : "ext2",
@@ -373,26 +373,26 @@
{
if (access(MKE2FS_path.c_str(), X_OK|R_OK))
throw String("no mke2fs exists");
-
+
bool ext3_supported = ContentFS::mount_fs_supported("ext3");
-
- _props.set(Variable("label",
- "",
- 0,
- 16,
- ILLEGAL_LABEL_CHARS,
+
+ _props.set(Variable("label",
+ "",
+ 0,
+ 16,
+ ILLEGAL_LABEL_CHARS,
list<String>()));
-
+
_props.set(Variable("dir_index", true, true));
-
- _props.set(Variable("has_journal",
- ext3_supported,
+
+ _props.set(Variable("has_journal",
+ ext3_supported,
ext3_supported));
-
- mount_props_template(ext3_supported ? "ext3" : "ext2",
+
+ mount_props_template(ext3_supported ? "ext3" : "ext2",
_props);
-
-
+
+
// block_size
list<long long> b_sizes;
b_sizes.push_back(1024);
--- conga/ricci/modules/storage/ExtendedFS.h 2006/09/26 03:02:57 1.4
+++ conga/ricci/modules/storage/ExtendedFS.h 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,35 +37,35 @@
public:
ExtendedFS(const String& path);
virtual ~ExtendedFS();
-
+
const static String PRETTY_NAME;
-
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
-
+
private:
-
+
bool _journaled;
-
+
void enable_journal(const String& path);
-
+
};
@@ -77,11 +77,11 @@
public:
ExtendedFSTemplate();
virtual ~ExtendedFSTemplate();
-
-
+
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/FSController.cpp 2007/09/09 14:18:38 1.9
+++ conga/ricci/modules/storage/FSController.cpp 2007/09/11 02:45:28 1.10
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -61,7 +61,7 @@
return members;
}
-counting_auto_ptr<Content>
+counting_auto_ptr<Content>
FSController::get_fs(const String& path)
{
try {
@@ -79,11 +79,11 @@
return counting_auto_ptr<Content>(new UnsupportedFS(path));
}
-std::list<counting_auto_ptr<ContentTemplate> >
+std::list<counting_auto_ptr<ContentTemplate> >
FSController::get_available_fss()
{
list<counting_auto_ptr<ContentTemplate> > cnts;
-
+
try {
cnts.push_back(counting_auto_ptr<ContentTemplate>(new ExtendedFSTemplate()));
} catch ( ... ) {}
@@ -96,17 +96,17 @@
try {
cnts.push_back(counting_auto_ptr<ContentTemplate>(new SwapFSTemplate()));
} catch ( ... ) {}
-
+
return cnts;
}
-counting_auto_ptr<Content>
+counting_auto_ptr<Content>
FSController::create_fs(const counting_auto_ptr<BD>& bd,
const counting_auto_ptr<ContentTemplate>& cont_templ)
{
if (cont_templ->type != CONTENT_FS_TYPE)
throw String("content_template not of filesystem type");
-
+
String fs_type = cont_templ->attrs["fs_type"];
if (fs_type == ExtendedFS::PRETTY_NAME)
create_extended_fs(bd->path(), cont_templ);
@@ -118,7 +118,7 @@
create_swap_fs(bd->path(), cont_templ);
else
throw String("unknown fs type \"") + fs_type + "\"";
-
+
utils::clear_cache();
return get_fs(bd->path());
}
--- conga/ricci/modules/storage/FSController.h 2007/06/27 08:14:23 1.3
+++ conga/ricci/modules/storage/FSController.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,20 +34,20 @@
{
public:
std::list<String> get_fs_group_ids(const String& name);
-
+
counting_auto_ptr<Content> get_fs(const String& path);
-
+
std::list<counting_auto_ptr<ContentTemplate> > get_available_fss();
-
+
counting_auto_ptr<Content> create_fs(const counting_auto_ptr<BD>& bd,
const counting_auto_ptr<ContentTemplate>& cont_templ);
-
+
private:
-
-
-
-
-
+
+
+
+
+
};
--- conga/ricci/modules/storage/FileMagic.cpp 2006/09/23 09:26:58 1.3
+++ conga/ricci/modules/storage/FileMagic.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,32 +32,32 @@
{
const char* buff = 0;
magic_t cookie = 0;
-
+
try {
cookie = magic_open(MAGIC_SYMLINK|MAGIC_DEVICES|MAGIC_ERROR);
if (!cookie)
throw String("initialization of libmagic failure");
-
+
if (magic_filename.empty()) {
if (magic_load(cookie, NULL))
throw String("initialization of libmagic failure: invalid default magic file");
} else
if (magic_load(cookie, magic_filename.c_str()))
throw String("initialization of libmagic failure: invalid magic file: ") + magic_filename;
-
+
String descr;
buff = magic_file(cookie, filename.c_str());
if (buff)
descr = buff;
-
+
if (descr.empty())
throw String("nothing detected");
if (descr == "data")
throw String("unknown data detected");
-
+
magic_close(cookie); cookie = 0;
// free((char*) buff); buff = 0;
-
+
return descr;
} catch ( ... ) {
if (cookie)
--- conga/ricci/modules/storage/FileMagic.h 2006/09/14 17:52:04 1.1
+++ conga/ricci/modules/storage/FileMagic.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/storage/GFS1.cpp 2007/03/20 15:35:59 1.4
+++ conga/ricci/modules/storage/GFS1.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -45,7 +45,7 @@
const static String MKFS_GFS1_path("/sbin/mkfs.gfs");
const static long long DEF_JSIZE = 128 * 1024 * 1024;
-static void
+static void
detect_gfs1(const String& filename,
long long &block_size,
String& locking_protocol,
@@ -60,14 +60,14 @@
long long bs;
String proto, table;
detect_gfs1(path, bs, proto, table);
-
+
_props.set(Variable("block_size", bs));
-
+
// cluster
String cluster = table.substr(0, table.find(":"));
String name = table.substr(table.find(":") + 1);
_props.set(Variable("clustered", proto != "lock_nolock"));
- Variable proto_var("locking_protocol",
+ Variable proto_var("locking_protocol",
proto.substr(proto.find("_") + 1));
proto_var.set_conditional_bool_if("clustered");
_props.set(proto_var);
@@ -77,10 +77,10 @@
Variable name_var("gfs_fsname", name);
name_var.set_conditional_bool_if("clustered");
_props.set(name_var);
-
+
// mountpoints
- mount_props_probe(path,
- _module,
+ mount_props_probe(path,
+ _module,
_props);
}
@@ -88,48 +88,48 @@
{}
-bool
+bool
GFS1::expandable(long long& max_size) const
{
return false;
}
-void
+void
GFS1::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
GFS1::shrinkable(long long& min_size) const
{
return false;
}
-void
+void
GFS1::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
GFS1::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
GFS1::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
// mountpoints
mount_props_apply(path, _module, _props, new_props);
}
-bool
+bool
GFS1::removable() const
{
return true;
@@ -139,7 +139,7 @@
-void
+void
create_GFS1(const String& path,
const counting_auto_ptr<ContentTemplate>& templ)
{
@@ -147,7 +147,7 @@
String jnum = utils::to_string(templ->_props.get("journals_num").get_int());
long long jsize_bytes = templ->_props.get("journal_size").get_int();
String jsize = utils::to_string(jsize_bytes / 1024 / 1024);
-
+
bool clustered = templ->_props.get("clustered").get_bool();
String proto("nolock");
String table;
@@ -158,37 +158,37 @@
templ->_props.get("gfs_fsname").get_string();
}
proto = String("lock_") + proto;
-
-
+
+
vector<String> args;
args.push_back("-b");
args.push_back(bs);
-
+
args.push_back("-J");
args.push_back(jsize);
-
+
args.push_back("-j");
args.push_back(jnum);
-
+
args.push_back("-O"); // no prompt
-
+
args.push_back("-p");
args.push_back(proto);
-
+
if (!table.empty()) {
args.push_back("-t");
args.push_back(table);
}
-
+
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(MKFS_GFS1_path, args, out, err, status))
throw command_not_found_error_msg(MKFS_GFS1_path);
if (status)
throw MKFS_GFS1_path + " " + path + " failed";
-
+
// mountpoints
ContentFSTemplate::mount_props_create(path, gfs1_module, templ->_props);
}
@@ -198,12 +198,12 @@
{
if (access(MKFS_GFS1_path.c_str(), X_OK|R_OK))
throw String("no mkfs.gfs exists");
-
+
// ## general options ##
-
+
// mountpoints
mount_props_template(gfs1_module, _props);
-
+
// block_size
list<long long> b_sizes;
b_sizes.push_back(512);
@@ -211,20 +211,20 @@
b_sizes.push_back(2048);
b_sizes.push_back(4096);
_props.set(Variable("block_size", 4096, b_sizes));
-
+
// journals
_props.set(Variable("journals_num", 1, 1, 128, 1));
list<long long> jsizes;
- long long jsize = 32 * 1024 * 1024;
+ long long jsize = 32 * 1024 * 1024;
for (int i = 1; i<11; i++) {
jsizes.push_back(jsize);
jsize *= 2;
}
_props.set(Variable("journal_size", DEF_JSIZE, jsizes));
-
-
+
+
// ## cluster options ##
-
+
bool cluster_exists = false;
XMLObject cluster_conf;
try {
@@ -238,7 +238,7 @@
String cluster = cluster_conf.get_attr("name");
String name = "unique_gfs_name";
String proto = "dlm";
-
+
long long jnum = 1;
if (cluster_exists) {
for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
@@ -251,20 +251,20 @@
}
_props.set(Variable("journals_num", jnum, 1, 128, 1));
}
-
+
_props.set(Variable("clustered", cluster_exists, cluster_exists));
-
+
Variable proto_var("locking_protocol", proto);
proto_var.set_conditional_bool_if("clustered");
_props.set(proto_var);
Variable cluster_var("cluster_name", cluster);
cluster_var.set_conditional_bool_if("clustered");
_props.set(cluster_var);
- Variable name_var("gfs_fsname",
+ Variable name_var("gfs_fsname",
name,
1,
16,
- NAMES_ILLEGAL_CHARS,
+ NAMES_ILLEGAL_CHARS,
list<String>());
name_var.set_conditional_bool_if("clustered");
_props.set(name_var);
@@ -286,39 +286,39 @@
String& locking_table)
{
// IMPORTANT: gfs saves metadata as BigEndian
-
+
int fd = open(filename.c_str(), O_RDONLY);
if (fd < 0)
throw String("GFS1_detect: cannot open ") + filename;
-
+
try {
struct gfs_sb sb;
-
+
int ret;
do {
const static int sb_offset = GFS_SB_ADDR * GFS_BASIC_BLOCK;
if (lseek(fd, sb_offset, SEEK_SET) != sb_offset)
throw String("lseek failed for ") + filename;
ret = read(fd, &sb, sizeof(sb));
- } while (ret == -1 &&
+ } while (ret == -1 &&
errno == EINTR);
if (ret != (int) sizeof(sb))
throw String("read of gfs superblock failed for ") + filename;
-
+
if (ntohl(sb.sb_header.mh_magic) != GFS_MAGIC ||
ntohl(sb.sb_header.mh_type) != GFS_METATYPE_SB ||
ntohl(sb.sb_fs_format) != GFS_FORMAT_FS ||
ntohl(sb.sb_multihost_format) != GFS_FORMAT_MULTI)
throw filename + " does not contain gfs";
-
+
block_size = ntohl(sb.sb_bsize);
-
+
sb.sb_lockproto[sizeof(sb.sb_lockproto) - 1] = '\0';
locking_protocol = String(sb.sb_lockproto);
-
+
sb.sb_locktable[sizeof(sb.sb_locktable) - 1] = '\0';
locking_table = String(sb.sb_locktable);
-
+
while (close(fd))
if (errno != EINTR)
break;
--- conga/ricci/modules/storage/GFS1.h 2006/09/26 03:17:41 1.1
+++ conga/ricci/modules/storage/GFS1.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,31 +37,31 @@
public:
GFS1(const String& path);
virtual ~GFS1();
-
+
const static String PRETTY_NAME;
-
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
-
+
private:
-
+
};
@@ -70,10 +70,10 @@
public:
GFS1Template();
virtual ~GFS1Template();
-
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/GFS2.cpp 2007/03/20 15:35:59 1.5
+++ conga/ricci/modules/storage/GFS2.cpp 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -51,7 +51,7 @@
const static String MKFS_GFS2_path("/sbin/mkfs.gfs2");
const static long long DEF_JSIZE = 32 * 1024 * 1024;
-static void
+static void
detect_gfs2(const String& filename,
long long &block_size,
String& locking_protocol,
@@ -66,14 +66,14 @@
long long bs;
String proto, table;
detect_gfs2(path, bs, proto, table);
-
+
_props.set(Variable("block_size", bs));
-
+
// cluster
String cluster = table.substr(0, table.find(":"));
String name = table.substr(table.find(":") + 1);
_props.set(Variable("clustered", proto != "lock_nolock"));
- Variable proto_var("locking_protocol",
+ Variable proto_var("locking_protocol",
proto.substr(proto.find("_") + 1));
proto_var.set_conditional_bool_if("clustered");
_props.set(proto_var);
@@ -83,7 +83,7 @@
Variable name_var("gfs_fsname", name);
name_var.set_conditional_bool_if("clustered");
_props.set(name_var);
-
+
// mountpoints
mount_props_probe(path, _module, _props);
}
@@ -92,48 +92,48 @@
{}
-bool
+bool
GFS2::expandable(long long& max_size) const
{
return false;
}
-void
+void
GFS2::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
GFS2::shrinkable(long long& min_size) const
{
return false;
}
-void
+void
GFS2::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
GFS2::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
GFS2::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
// mountpoints
mount_props_apply(path, _module, _props, new_props);
}
-bool
+bool
GFS2::removable() const
{
return true;
@@ -143,14 +143,14 @@
-void
+void
create_GFS2(const String& path,
const counting_auto_ptr<ContentTemplate>& templ)
{
String jnum = utils::to_string(templ->_props.get("journals_num").get_int());
long long jsize_bytes = templ->_props.get("journal_size").get_int();
String jsize = utils::to_string(jsize_bytes / 1024 / 1024);
-
+
bool clustered = templ->_props.get("clustered").get_bool();
String proto("nolock");
String table;
@@ -161,34 +161,34 @@
templ->_props.get("gfs_fsname").get_string();
}
proto = String("lock_") + proto;
-
-
+
+
vector<String> args;
args.push_back("-J");
args.push_back(jsize);
-
+
args.push_back("-j");
args.push_back(jnum);
-
+
args.push_back("-O"); // no prompt
-
+
args.push_back("-p");
args.push_back(proto);
-
+
if (!table.empty()) {
args.push_back("-t");
args.push_back(table);
}
-
+
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(MKFS_GFS2_path, args, out, err, status))
throw command_not_found_error_msg(MKFS_GFS2_path);
if (status)
throw MKFS_GFS2_path + " " + path + " failed";
-
+
// mountpoints
ContentFSTemplate::mount_props_create(path, gfs2_module, templ->_props);
}
@@ -198,25 +198,25 @@
{
if (access(MKFS_GFS2_path.c_str(), X_OK|R_OK))
throw String("no mkfs.gfs2 exists");
-
+
// ## general options ##
-
+
// mountpoints
mount_props_template(gfs2_module, _props);
-
+
// journals
_props.set(Variable("journals_num", 1, 1, 128, 1));
list<long long> jsizes;
- long long jsize = 8*1024*1024;
+ long long jsize = 8*1024*1024;
for (int i = 1; i<11; i++) {
jsizes.push_back(jsize);
jsize *= 2;
}
_props.set(Variable("journal_size", DEF_JSIZE, jsizes));
-
-
+
+
// ## cluster options ##
-
+
bool cluster_exists = false;
XMLObject cluster_conf;
try {
@@ -229,7 +229,7 @@
} catch ( ... ) {}
String cluster = cluster_conf.get_attr("name");
String name = "unique_gfs_name";
-
+
long long jnum = 1;
if (cluster_exists) {
for (list<XMLObject>::const_iterator iter = cluster_conf.children().begin();
@@ -239,20 +239,20 @@
jnum = iter->children().size();
_props.set(Variable("journals_num", jnum, 1, 128, 1));
}
-
+
_props.set(Variable("clustered", cluster_exists, cluster_exists));
-
+
Variable proto_var("locking_protocol", String("dlm"));
proto_var.set_conditional_bool_if("clustered");
_props.set(proto_var);
Variable cluster_var("cluster_name", cluster);
cluster_var.set_conditional_bool_if("clustered");
_props.set(cluster_var);
- Variable name_var("gfs_fsname",
+ Variable name_var("gfs_fsname",
name,
1,
16,
- NAMES_ILLEGAL_CHARS,
+ NAMES_ILLEGAL_CHARS,
list<String>());
name_var.set_conditional_bool_if("clustered");
_props.set(name_var);
@@ -274,39 +274,39 @@
String& locking_table)
{
// IMPORTANT: gfs2 saves metadata as BigEndian
-
+
int fd = open(filename.c_str(), O_RDONLY);
if (fd < 0)
throw String("GFS2_detect: cannot open ") + filename;
-
+
try {
struct gfs2_sb sb;
-
+
int ret;
do {
const static int sb_offset = GFS2_SB_ADDR * GFS2_BASIC_BLOCK;
if (lseek(fd, sb_offset, SEEK_SET) != sb_offset)
throw String("lseek failed for ") + filename;
ret = read(fd, &sb, sizeof(sb));
- } while (ret == -1 &&
+ } while (ret == -1 &&
errno == EINTR);
if (ret != (int) sizeof(sb))
throw String("read of gfs2 superblock failed for ") + filename;
-
+
if (ntohl(sb.sb_header.mh_magic) != GFS2_MAGIC ||
ntohl(sb.sb_header.mh_type) != GFS2_METATYPE_SB ||
ntohl(sb.sb_fs_format) != GFS2_FORMAT_FS ||
ntohl(sb.sb_multihost_format) != GFS2_FORMAT_MULTI)
throw filename + " does not contain gfs2";
-
+
block_size = ntohl(sb.sb_bsize);
-
+
sb.sb_lockproto[sizeof(sb.sb_lockproto) - 1] = '\0';
locking_protocol = String(sb.sb_lockproto);
-
+
sb.sb_locktable[sizeof(sb.sb_locktable) - 1] = '\0';
locking_table = String(sb.sb_locktable);
-
+
while (close(fd))
if (errno != EINTR)
break;
--- conga/ricci/modules/storage/GFS2.h 2006/09/26 03:17:41 1.1
+++ conga/ricci/modules/storage/GFS2.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,31 +37,31 @@
public:
GFS2(const String& path);
virtual ~GFS2();
-
+
const static String PRETTY_NAME;
-
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
-
+
private:
-
+
};
@@ -70,10 +70,10 @@
public:
GFS2Template();
virtual ~GFS2Template();
-
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/HD.cpp 2006/10/06 03:10:13 1.5
+++ conga/ricci/modules/storage/HD.cpp 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -40,7 +40,7 @@
vector<String> args;
String out, err;
int status;
-
+
/*
// size
args.push_back("--getss");
@@ -58,12 +58,12 @@
size *= utils::to_long(utils::strip(lines[1]));
_props.set(Variable("size", size));
*/
-
-
+
+
// vendor & model
String vendor("unknown");
String model(vendor);
-
+
args.clear(); out.clear();
args.push_back(String("/proc/ide") + path.substr(String("/dev").size()) + "/model");
if (utils::execute("/bin/cat", args, out, err, status))
@@ -75,11 +75,11 @@
if (words.size() > 1) {
vendor = words[0];
model = "";
- for (vector<String>::size_type i=1; i<words.size(); i++)
+ for (vector<String>::size_type i=1; i<words.size(); i++)
model += words[i] + " ";
}
}
-
+
String tmp = String("/sys/block") + path.substr(String("/dev").size()) + "/device/";
args.clear(); out.clear();
args.push_back(tmp + "vendor");
@@ -95,9 +95,9 @@
model = utils::strip(out);
_props.set(Variable("vendor", vendor));
_props.set(Variable("model", model));
-
+
String type("ide");
-
+
// scsi_id
args.clear(); out.clear();
args.push_back("-g");
@@ -132,30 +132,30 @@
{}
-void
-HD::shrink(unsigned long long new_size,
+void
+HD::shrink(unsigned long long new_size,
const Props& new_props)
{
throw String("HD::shrink() not implemented");
}
-void
-HD::expand(unsigned long long new_size,
+void
+HD::expand(unsigned long long new_size,
const Props& new_props)
{
throw String("HD::expand() not implemented");
}
-String
+String
HD::apply_props_before_resize(const Props& new_props)
{
return path();
}
-String
+String
HD::apply_props_after_resize(const Props& new_props)
{
return path();
}
-void
+void
HD::remove()
{
throw String("HD remove not implemented");
--- conga/ricci/modules/storage/HD.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/HD.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,18 +32,18 @@
public:
HD(const String& path);
virtual ~HD();
-
+
virtual void remove();
-
+
protected:
- virtual void shrink(unsigned long long new_size,
+ virtual void shrink(unsigned long long new_size,
const Props& new_props);
- virtual void expand(unsigned long long new_size,
+ virtual void expand(unsigned long long new_size,
const Props& new_props);
-
+
virtual String apply_props_before_resize(const Props& new_props); // return path
virtual String apply_props_after_resize(const Props& new_props); // return path
-
+
};
--- conga/ricci/modules/storage/LV.cpp 2007/06/25 16:03:43 1.9
+++ conga/ricci/modules/storage/LV.cpp 2007/09/11 02:45:28 1.10
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -36,23 +36,23 @@
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
create_LV(const BDTemplate& bd_temp)
{
// everything is already validated :)
-
+
String vgname = bd_temp.props.get("vgname").get_string();
-
-
+
+
// if VG is marked as clustered, but cluster locking is not available, throw
if (!LVM::clustered_enabled() &&
bd_temp.props.get("clustered").get_bool())
throw LVMClusterLockingError();
-
-
+
+
String lvname = bd_temp.props.get("lvname").get_string();
long long size = bd_temp.props.get("size").get_int();
-
+
bool snapshot = bd_temp.props.get("snapshot").get_bool();
if (snapshot) {
String origin = bd_temp.props.get("snapshot_origin").get_string();
@@ -60,15 +60,15 @@
LVM::lvcreate_snap(lvname, origin_path, size);
} else
LVM::lvcreate(vgname, lvname, size);
-
+
utils::clear_cache();
-
+
counting_auto_ptr<BD> bd = BDFactory::get_bd(String("/dev/") + vgname + "/" + lvname);
if (!snapshot)
ContentFactory().create_content(bd, bd_temp.content_parsed);
-
+
utils::clear_cache();
-
+
return BDFactory::get_bd(String("/dev/") + vgname + "/" + lvname);
}
@@ -78,14 +78,14 @@
// ##### LV #####
-LV::LV(const String& path) :
+LV::LV(const String& path) :
BD(MAPPER_VG_TYPE,
VG_PREFIX + LVM::vgname_from_lvpath(path),
BD_LV_TYPE,
path)
{
LVM::probe_lv(_path, _props);
-
+
if (content->removable()) {
removable(true);
if (content->type == CONTENT_NONE_TYPE) {
@@ -98,24 +98,24 @@
} else
content->add_replacement(counting_auto_ptr<ContentTemplate>(new ContentNoneTemplate()));
}
-
+
// LVs under snapshots can be neither removed nor resized
if (_props.get("snapshots").get_list_str().size()) {
removable(false);
-
+
long long extent_size = _props.get("extent_size").get_int();
long long size = _props.get("size").get_int();
- _props.set(Variable("size",
+ _props.set(Variable("size",
size,
size,
size,
extent_size));
}
-
+
// snapshots should neither replace nor resize content
if (_props.get("snapshot").get_bool()) {
content->_avail_replacements.clear();
-
+
// adjust size based on snap_percent
long long usage = _props.get("snapshot_usage_percent").get_int();
const Variable size_var(_props.get("size"));
@@ -163,86 +163,86 @@
-String
+String
LV::state_ind() const
{
Props tmp_props(_props);
-
+
// remove "snapshot_usage_percent" as its change shouldn't affect state_ind
tmp_props.set(Variable("snapshot_usage_percent", (long long) 0));
-
+
XMLObject t;
t.add_child(tmp_props.xml());
t.add_child(content->xml());
-
+
return utils::hash_str(generateXML(t) + path() + _mapper_id);
}
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
LV::apply(const BDParsed& bd_parsed)
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
!LVM::clustered_enabled())
throw LVMClusterLockingError();
-
+
// snapshots neither resize nor replace content, see LV()
-
+
if (_props.get("snapshot").get_bool()) {
long long orig_size = this->size();
long long new_size = bd_parsed.props.get("size").get_int();
-
+
// first
this->apply_props_before_resize(bd_parsed.props);
- content->apply_props_before_resize(path(),
+ content->apply_props_before_resize(path(),
orig_size,
orig_size,
bd_parsed.content->props);
-
+
// second - size
if (orig_size > new_size) {
this->shrink(new_size, bd_parsed.props);
} else if (orig_size < new_size) {
this->expand(new_size, bd_parsed.props);
}
-
+
// third
this->apply_props_after_resize(bd_parsed.props);
- content->apply_props_after_resize(path(),
+ content->apply_props_after_resize(path(),
+ orig_size,
orig_size,
- orig_size,
bd_parsed.content->props);
-
+
utils::clear_cache();
return BDFactory().get_bd(path());
} else
return this->BD::apply(bd_parsed);
}
-void
-LV::shrink(unsigned long long new_size,
+void
+LV::shrink(unsigned long long new_size,
const Props& new_props)
{
LVM::lvreduce(_path, new_size);
}
-void
-LV::expand(unsigned long long new_size,
+void
+LV::expand(unsigned long long new_size,
const Props& new_props)
{
LVM::lvextend(_path, new_size);
}
-String
+String
LV::apply_props_before_resize(const Props& new_props)
{
return path();
}
-String
+String
LV::apply_props_after_resize(const Props& new_props)
{
return path();
}
-void
+void
LV::remove()
{
// if VG is marked as clustered, but cluster locking is not available, throw
@@ -261,10 +261,10 @@
// ##### LVTemplate #####
-LVTemplate::LVTemplate(const String& mapper_id,
+LVTemplate::LVTemplate(const String& mapper_id,
const String& mapper_state_ind) :
BDTemplate(MAPPER_VG_TYPE,
- mapper_id,
+ mapper_id,
mapper_state_ind,
BD_LV_TYPE)
{
--- conga/ricci/modules/storage/LV.h 2006/08/10 22:53:09 1.4
+++ conga/ricci/modules/storage/LV.h 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,38 +35,38 @@
public:
LV(const String& path);
virtual ~LV();
-
+
virtual String state_ind() const;
-
+
virtual void remove();
-
+
virtual counting_auto_ptr<BD> apply(const BDParsed& bd); // return new bd
-
+
protected:
-
- virtual void shrink(unsigned long long new_size,
+
+ virtual void shrink(unsigned long long new_size,
const Props& new_props);
- virtual void expand(unsigned long long new_size,
+ virtual void expand(unsigned long long new_size,
const Props& new_props);
-
+
virtual String apply_props_before_resize(const Props& new_props); // return path
virtual String apply_props_after_resize(const Props& new_props); // return path
-
+
private:
-
+
}; // class LV
class LVTemplate : public BDTemplate
{
public:
- LVTemplate(const String& mapper_id,
+ LVTemplate(const String& mapper_id,
const String& mapper_state_ind);
virtual ~LVTemplate();
-
-
+
+
private:
-
+
}; // class LVTemplate
--- conga/ricci/modules/storage/LVM.cpp 2007/03/05 20:45:17 1.12
+++ conga/ricci/modules/storage/LVM.cpp 2007/09/11 02:45:28 1.13
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -59,7 +59,7 @@
uuid(uuid),
attrs(attrs),
format(format) {}
-
+
String path;
String vgname;
long long extent_size;
@@ -151,15 +151,15 @@
-String
+String
LVM::vgname_from_lvpath(const String& lvpath)
{
check_locking();
-
+
vector<String> args;
args.push_back("lvdisplay");
args.push_back("-c");
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status))
@@ -169,7 +169,7 @@
throw LVMClusterLockingError();
throw String("lvdisplay failed");
}
-
+
vector<String> lines = utils::split(out, "\n");
for (vector<String>::iterator iter = lines.begin();
iter != lines.end();
@@ -182,11 +182,11 @@
throw String("no such LV");
}
-String
+String
LVM::vgname_from_pvpath(const String& path)
{
check_locking();
-
+
map<String, PV_data> pvs(probe_pvs());
map<String, PV_data>::const_iterator iter = pvs.find(path);
if (iter == pvs.end())
@@ -195,11 +195,11 @@
}
-void
+void
LVM::probe_lv(const String& lvpath, Props& props)
{
check_locking();
-
+
vector<String> args;
args.push_back("lvs");
args.push_back("--nosuffix");
@@ -213,7 +213,7 @@
// if LVS_HAS_ALL_OPTION:
// arglist.append("--all")
args.push_back(lvpath);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status))
@@ -223,41 +223,41 @@
throw LVMClusterLockingError();
throw String("lvs failed");
}
-
+
String line = utils::strip(out);
vector<String> words = utils::split(line, ";");
if (words.size() < LVS_OPTIONS_LENGTH)
throw String("lvs failed, missing words");
-
+
String vgname(utils::strip(words[LVS_VG_NAME_IDX]));
props.set(Variable("vgname", vgname));
-
+
String lvname(utils::strip(words[LVS_NAME_IDX]));
// remove [] if there (used to mark hidden lvs)
lvname = utils::lstrip(lvname, "[");
lvname = utils::rstrip(lvname, "]");
props.set(Variable("lvname", lvname));
-
+
long long extent_size = utils::to_long(words[LVS_EXTENT_SIZE_IDX]);
props.set(Variable("extent_size", extent_size));
-
+
// size
long long lv_size = utils::to_long(words[LVS_SIZE_IDX]);
long long vg_extents_free = utils::to_long(words[LVS_VG_FREE_COUNT]);
long long free = vg_extents_free * extent_size;
props.set(Variable("size", lv_size, extent_size, lv_size + free, extent_size));
-
+
props.set(Variable("uuid", words[LVS_UUID_IDX]));
-
+
String attrs = words[LVS_ATTR_IDX];
props.set(Variable("attrs", attrs));
-
+
props.set(Variable("mirrored", attrs[0] == 'm'));
-
+
// clustered
String vg_attrs = words[LVS_VG_ATTR_IDX];
props.set(Variable("clustered", vg_attrs[5] == 'c'));
-
+
// snapshots
String origin = words[LVS_SNAP_ORIGIN_IDX];
props.set(Variable("snapshot", origin != ""));
@@ -299,17 +299,17 @@
-void
+void
LVM::probe_pv(const String& path, Props& props)
{
check_locking();
-
+
map<String, PV_data> pvs(probe_pvs());
map<String, PV_data>::const_iterator iter = pvs.find(path);
if (iter == pvs.end())
throw String("no such pv: ") + path;
const PV_data& data = iter->second;
-
+
props.set(Variable("vgname", data.vgname));
props.set(Variable("extent_size", data.extent_size));
props.set(Variable("size", data.size));
@@ -322,14 +322,14 @@
-void
+void
LVM::probe_vg(const String& vgname,
Props& props,
list<counting_auto_ptr<BD> >& sources,
list<counting_auto_ptr<BD> >& targets)
{
check_locking();
-
+
// pv to vg mappings
map<String, String> pv_to_vg;
map<String, PV_data> pvs_data(probe_pvs());
@@ -337,17 +337,17 @@
iter != pvs_data.end();
iter++)
pv_to_vg[iter->first] = iter->second.vgname;
-
+
// probe vg
if (!vgname.empty()) {
-
+
vector<String> words = vg_props(vgname);
-
+
props.set(Variable("vgname", words[VGS_NAME_IDX]));
-
+
String vg_attrs(words[VGS_ATTR_IDX]);
props.set(Variable("attrs", vg_attrs));
-
+
long long size = utils::to_long(words[VGS_SIZE_IDX]);
long long extent_size = utils::to_long(words[VGS_EXTENT_SIZE_IDX]);
long long extents_free = utils::to_long(words[VGS_EXTENT_FREE_IDX]);
@@ -355,24 +355,24 @@
props.set(Variable("extents_total", size/extent_size));
props.set(Variable("extents_free", extents_free));
props.set(Variable("extents_used", size/extent_size - extents_free));
-
+
long long max_lvs = utils::to_long(words[VGS_MAX_LVS_IDX]);
if (max_lvs == 0)
max_lvs = 256;
props.set(Variable("max_lvs", max_lvs));
-
+
long long max_pvs = utils::to_long(words[VGS_MAX_PVS_IDX]);
if (max_pvs == 0)
max_pvs = 256;
props.set(Variable("max_pvs", max_pvs));
-
+
props.set(Variable("uuid", words[VGS_UUID_IDX]));
-
+
// clustered
bool clustered = (vg_attrs[5] == 'c');
props.set(Variable("clustered", clustered, true));
}
-
+
// PVS
for (map<String, String>::iterator iter = pv_to_vg.begin();
iter != pv_to_vg.end();
@@ -382,8 +382,8 @@
}
if (sources.empty() && !vgname.empty())
throw String("invalid mapper_id");
-
-
+
+
// LVS
String out, err;
int status;
@@ -410,7 +410,7 @@
}
-void
+void
LVM::pvcreate(const String& path)
{
vector<String> args;
@@ -418,7 +418,7 @@
args.push_back("-y");
args.push_back("-f");
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -428,7 +428,7 @@
utils::clear_cache();
}
-void
+void
LVM::pvremove(const String& path)
{
vector<String> args;
@@ -436,7 +436,7 @@
args.push_back("-y");
args.push_back("-f");
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -447,16 +447,16 @@
}
-void
-LVM::vgcreate(const String& vgname,
- long long extent_size,
- bool clustered,
+void
+LVM::vgcreate(const String& vgname,
+ long long extent_size,
+ bool clustered,
const list<String>& pv_paths)
{
if (clustered &&
!clustered_enabled())
throw LVMClusterLockingError();
-
+
vector<String> args;
args.push_back("vgcreate");
args.push_back("--physicalextentsize");
@@ -468,7 +468,7 @@
iter != pv_paths.end();
iter++)
args.push_back(*iter);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -478,13 +478,13 @@
utils::clear_cache();
}
-void
+void
LVM::vgremove(const String& vgname)
{
vector<String> args;
args.push_back("vgremove");
args.push_back(vgname);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -494,7 +494,7 @@
utils::clear_cache();
}
-void
+void
LVM::vgextend(const String& vgname,
const std::list<String>& pv_paths)
{
@@ -505,7 +505,7 @@
iter != pv_paths.end();
iter++)
args.push_back(*iter);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -515,7 +515,7 @@
utils::clear_cache();
}
-void
+void
LVM::vgreduce(const String& vgname,
const String& pv_path)
{
@@ -532,14 +532,14 @@
utils::clear_cache();
}
-void
+void
LVM::vgchange(const String& vgname,
bool clustered)
{
if (clustered &&
!clustered_enabled())
throw LVMClusterLockingError();
-
+
vector<String> args;
args.push_back("vgchange");
args.push_back("-c");
@@ -555,7 +555,7 @@
}
-void
+void
LVM::lvcreate(const String& vgname,
const String& lvname,
long long size)
@@ -567,7 +567,7 @@
args.push_back("--size");
args.push_back(utils::to_string(size / 1024) + "k");
args.push_back(vgname);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -576,7 +576,7 @@
throw String("lvcreate failed");
utils::clear_cache();
}
-void
+void
LVM::lvcreate_snap(const String& lvname,
const String& origin_path,
long long size)
@@ -589,7 +589,7 @@
args.push_back("--size");
args.push_back(utils::to_string(size / 1024) + "k");
args.push_back(origin_path);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -599,27 +599,27 @@
utils::clear_cache();
}
-void
+void
LVM::lvremove(const String& path)
{
vector<String> args;
args.push_back("lvchange");
args.push_back("-an");
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
throw command_not_found_error_msg(LVM_BIN_PATH);
if (status != 0)
throw String("Unable to deactivate LV (might be in use by other cluster nodes)");
-
+
try {
args.clear();
args.push_back("lvremove");
args.push_back("--force");
args.push_back(path);
-
+
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
throw command_not_found_error_msg(LVM_BIN_PATH);
if (status != 0)
@@ -636,18 +636,18 @@
}
}
-void
+void
LVM::lvreduce(const String& path, long long new_size)
{
long long size_k = new_size / 1024;
-
+
vector<String> args;
args.push_back("lvreduce");
args.push_back("-f");
args.push_back("-L");
args.push_back(utils::to_string(size_k) + "k");
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -657,17 +657,17 @@
utils::clear_cache();
}
-void
+void
LVM::lvextend(const String& path, long long new_size)
{
long long size_k = new_size / 1024;
-
+
vector<String> args;
args.push_back("lvextend");
args.push_back("-L");
args.push_back(utils::to_string(size_k) + "k");
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute(LVM_BIN_PATH, args, out, err, status, false))
@@ -678,14 +678,14 @@
}
-bool
+bool
LVM::clustered_enabled()
{
String locking_type = get_locking_type();
return (locking_type == "2" || locking_type == "3");
}
-void
+void
LVM::enable_clustered()
{
String out, err;
@@ -698,7 +698,7 @@
throw String("Failed to enable LVM's clustered locking");
}
-void
+void
LVM::disable_clustered()
{
String out, err;
@@ -716,11 +716,11 @@
cluster_quorate()
{
// called only if cluster locking is enabled
-
+
bool use_magma = true;
- if (access("/sbin/magma_tool", X_OK))
+ if (access("/sbin/magma_tool", X_OK))
use_magma = false;
-
+
if (use_magma) {
// use magma_tool
String out, err;
@@ -735,9 +735,9 @@
} else {
// use cman_tool
String cman_tool_path = "/sbin/cman_tool";
- if (access(cman_tool_path.c_str(), X_OK))
+ if (access(cman_tool_path.c_str(), X_OK))
cman_tool_path = "/usr/sbin/cman_tool";
-
+
String out, err;
int status;
vector<String> args;
@@ -746,7 +746,7 @@
throw command_not_found_error_msg("cman_tool");
if (status)
throw ClusterNotRunningError();
-
+
long long quorum = -1;
long long votes = -1;
vector<String> lines = utils::split(utils::strip(out), "\n");
@@ -762,11 +762,11 @@
votes = utils::to_long(words[1]);
if (words.size() < 3)
continue;
- if (words[0] == "Total" &&
+ if (words[0] == "Total" &&
words[1] == "votes:")
votes = utils::to_long(words[2]);
}
-
+
if (quorum <= 0 ||
votes < 0)
throw String("Unable to determine cluster quorum status");
@@ -774,13 +774,13 @@
}
}
-void
+void
LVM::check_locking()
{
if (clustered_enabled()) {
if (!cluster_quorate())
throw ClusterNotQuorateError();
-
+
// try to start clvmd, if not running
String out, err;
int status;
@@ -842,7 +842,7 @@
throw LVMClusterLockingError();
throw String("vgs failed");
}
-
+
vector<String> lines = utils::split(out, "\n");
for (vector<String>::iterator iter = lines.begin();
iter != lines.end();
@@ -872,7 +872,7 @@
probe_pvs()
{
map<String, PV_data> pvs;
-
+
String out, err;
int status;
vector<String> args;
@@ -887,17 +887,17 @@
args.push_back(PVS_OPTIONS);
if (utils::execute(LVM_BIN_PATH, args, out, err, status))
throw command_not_found_error_msg(LVM_BIN_PATH);
-
+
bool use_pvdisplay = false;
if (status) {
if (err.find("Skipping clustered") != err.npos)
throw LVMClusterLockingError();
// wouldn't `pvdisplay -c` fail if `pvs` has already failed?
- // `pvs` fails if it cannot read one hard drive (common in SANs),
+ // `pvs` fails if it cannot read one hard drive (common in SANs),
// while pvdisplay reports without failure
use_pvdisplay = true;
}
-
+
if (use_pvdisplay) {
args.clear();
args.push_back("pvdisplay");
@@ -909,7 +909,7 @@
throw LVMClusterLockingError();
throw String("pvs and pvdisplay failed");
}
-
+
vector<String> lines = utils::split(utils::strip(out), "\n");
for (vector<String>::iterator iter = lines.begin();
iter != lines.end();
@@ -927,7 +927,7 @@
if (vgname.empty())
size_free = size;
String uuid(words[PVDISPLAY_c_UUID_IDX]);
-
+
// pvdisplay doesn't report attr and format
// guess
// FIXME: probe somewhere else
@@ -937,7 +937,7 @@
else
attrs = "a-";
String format = "lvm2";
-
+
pvs[path] = PV_data(path,
vgname,
extent_size,
@@ -948,7 +948,7 @@
format);
}
}
-
+
} else {
vector<String> lines = utils::split(utils::strip(out), "\n");
for (vector<String>::iterator iter = lines.begin();
@@ -964,7 +964,7 @@
String uuid(words[PVS_UUID_IDX]);
String attrs(words[PVS_ATTR_IDX]);
String format(words[PVS_FMT_IDX]);
-
+
pvs[path] = PV_data(path,
vgname,
extent_size,
@@ -976,7 +976,7 @@
}
}
}
-
+
return pvs;
}
--- conga/ricci/modules/storage/LVM.h 2006/12/12 13:11:51 1.5
+++ conga/ricci/modules/storage/LVM.h 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,24 +35,24 @@
class LVM
{
public:
-
+
static String vgname_from_lvpath(const String& lvpath);
static String vgname_from_pvpath(const String& pvpath);
static void probe_lv(const String& lvpath, Props& props);
static void probe_pv(const String& pvpath, Props& props);
-
+
static void probe_vg(const String& vgname,
Props& props,
std::list<counting_auto_ptr<BD> >& sources,
std::list<counting_auto_ptr<BD> >& targets);
-
-
+
+
static void pvcreate(const String& path);
static void pvremove(const String& path);
-
- static void vgcreate(const String& vgname,
- long long extent_size,
- bool clustered,
+
+ static void vgcreate(const String& vgname,
+ long long extent_size,
+ bool clustered,
const std::list<String>& pv_paths);
static void vgremove(const String& vgname);
static void vgextend(const String& vgname,
@@ -61,7 +61,7 @@
const String& pv_path);
static void vgchange(const String& vgname,
bool clustered);
-
+
static void lvcreate(const String& vgname,
const String& lvname,
long long size);
@@ -69,16 +69,16 @@
const String& origin_path,
long long size);
static void lvremove(const String& path);
-
+
static void lvreduce(const String& path, long long new_size);
static void lvextend(const String& path, long long new_size);
-
+
static bool vg_clustered(const String& vgname);
static void check_locking();
static bool clustered_enabled();
static void enable_clustered();
static void disable_clustered();
-
+
};
--- conga/ricci/modules/storage/LVMClusterLockingError.h 2007/03/05 20:45:17 1.2
+++ conga/ricci/modules/storage/LVMClusterLockingError.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,7 +34,7 @@
: Except(6, String("LVM cluster locking is not enabled")) {}
virtual ~LVMClusterLockingError()
{}
-
+
};
--- conga/ricci/modules/storage/MDRaid.cpp 2006/09/26 01:16:13 1.7
+++ conga/ricci/modules/storage/MDRaid.cpp 2007/09/11 02:45:28 1.8
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -29,11 +29,11 @@
using namespace std;
-list<String>
+list<String>
get_MDRaid_ids()
{
list<String> ids;
-
+
try {
list<mdraid> raids = mdadm::raids();
for (list<mdraid>::const_iterator iter = raids.begin();
@@ -41,7 +41,7 @@
iter++)
ids.push_back(MDRAID_PREFIX + iter->path);
} catch ( ... ) {}
-
+
return ids;
}
@@ -57,22 +57,22 @@
_raid = mdadm::probe_path(raid_path);
if (_raid.path != raid_path)
throw String("not mdraid");
-
+
for (list<mdraid_source>::const_iterator iter = _raid.devices.begin();
iter != _raid.devices.end();
iter++)
sources.push_back(BDFactory::get_bd(iter->path));
-
+
try {
targets.push_back(BDFactory::get_bd(_raid.path));
} catch ( ... ) {}
-
+
_props.set(Variable("raid", _raid.name));
_props.set(Variable("raid_level", _raid.level));
_props.set(Variable("uuid", _raid.uuid));
_props.set(Variable("num_devices", _raid.num_devices));
_props.set(Variable("num_spares", (long long) _raid.devices.size() - _raid.num_devices));
-
+
if (targets.empty())
_props.set(Variable("active", false, true));
else {
@@ -86,11 +86,11 @@
else
_props.set(Variable("active", true));
*/
-
+
if (targets.front()->content->removable())
removable(true);
-
- list<counting_auto_ptr<Mapper> > mappers =
+
+ list<counting_auto_ptr<Mapper> > mappers =
MapperFactory::get_mappers(MAPPER_PT_TYPE);
for (list<counting_auto_ptr<Mapper> >::iterator iter_map = mappers.begin();
iter_map != mappers.end();
@@ -111,7 +111,7 @@
{}
-void
+void
MDRaid::apply(const MapperParsed& mp)
{
bool active_old = _props.get("active").get_bool();
@@ -123,7 +123,7 @@
mdadm::start_raid(_raid);
}
-void
+void
MDRaid::__add_sources(const list<counting_auto_ptr<BD> >& bds)
{
for (list<counting_auto_ptr<BD> >::const_iterator iter = bds.begin();
@@ -132,13 +132,13 @@
mdadm::add_source(_raid.path, (*iter)->path());
}
-void
+void
MDRaid::__remove()
{
// throw String("MDRaid::_remove() not yet implemented");
-
+
mdadm::stop_raid(_raid);
-
+
for (list<mdraid_source>::const_iterator iter = _raid.devices.begin();
iter != _raid.devices.end();
iter++)
@@ -149,33 +149,33 @@
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
create_MDRaid(const MapperTemplate& temp)
{
// throw String("create_MDRaid() not yet implemented");
-
+
// everything is already validated, but number of sources
if (temp.sources.size() < 2)
throw String("create_MDRaid requires at least two sources");
-
+
list<String> devs;
for (list<counting_auto_ptr<BD> >::const_iterator iter = temp.sources.begin();
iter != temp.sources.end();
iter++)
devs.push_back((*iter)->path());
-
+
String raid_path = mdadm::create_raid(temp.props.get("level").get_string(),
devs);
-
+
return counting_auto_ptr<Mapper>(new MDRaid(MDRAID_PREFIX + raid_path));
-
+
/*
String vgname = temp.props.get("vgname").get_string();
long long extent_size = temp.props.get("extent_size").get_int();
-
+
try {
utils::clear_cache();
-
+
list<String> pv_paths;
for (list<counting_auto_ptr<BD> >::const_iterator iter = temp.sources.begin();
iter != temp.sources.end();
@@ -186,7 +186,7 @@
if (bd->content->type == CONTENT_NONE_TYPE)
LVM::pvcreate(bd->path());
}
-
+
// create VG
LVM::vgcreate(vgname, extent_size, pv_paths);
} catch ( ... ) {
@@ -201,7 +201,7 @@
}
throw;
}
-
+
return counting_auto_ptr<Mapper>(new VG(VG_PREFIX + vgname));
*/
}
@@ -214,8 +214,8 @@
MapperTemplate(MAPPER_MDRAID_TYPE)
{
// throw String("MDRaidTemplate() not yet implemented");
-
- list<counting_auto_ptr<Mapper> > mappers =
+
+ list<counting_auto_ptr<Mapper> > mappers =
MapperFactory::get_mappers(MAPPER_PT_TYPE);
for (list<counting_auto_ptr<Mapper> >::iterator iter_map = mappers.begin();
iter_map != mappers.end();
@@ -232,7 +232,7 @@
throw String("not enough sources for mdraid");
props.set(Variable("min_sources", (long long) 2));
props.set(Variable("max_sources", (long long) new_sources.size()));
-
+
list<String> levels = mdadm::valid_raid_levels();
props.set(Variable("level", levels.front(), levels));
}
--- conga/ricci/modules/storage/MDRaid.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/MDRaid.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -39,19 +39,19 @@
public:
MDRaid(const String& id);
virtual ~MDRaid();
-
+
virtual void apply(const MapperParsed&);
-
+
protected:
-
+
virtual void __add_sources(const std::list<counting_auto_ptr<BD> >& bds);
virtual void __remove();
-
+
private:
-
+
mdraid _raid;
-
-
+
+
}; // MDRaid
@@ -60,10 +60,10 @@
public:
MDRaidTemplate();
virtual ~MDRaidTemplate();
-
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/MDRaidSource.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/MDRaidSource.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -29,7 +29,7 @@
MDRaidSource::MDRaidSource(const String& path) :
MapperSource(MAPPER_MDRAID_TYPE,
- "BUG",
+ "BUG",
SOURCE_MDRAID_TYPE,
path),
_raid(mdadm::probe_path(path))
@@ -43,12 +43,12 @@
_raid_source = counting_auto_ptr<mdraid_source>(new mdraid_source(*iter));
if ( ! _raid_source.get())
throw String("MDRaidSource, null pointer");
-
+
_mapper_id = MDRAID_PREFIX + _raid.path;
-
+
_props.set(Variable("raid", _raid.name));
_props.set(Variable("raid_level", _raid.level));
-
+
String state;
switch (_raid_source->type) {
case MDRAID_S_ACTIVE:
@@ -64,7 +64,7 @@
throw String("invalid mdraid_source_type");
}
_props.set(Variable("state", state));
-
+
if (_raid_source->type == MDRAID_S_ACTIVE)
_props.set(Variable("failed", false, true));
else if (_raid_source->type == MDRAID_S_SPARE)
@@ -77,7 +77,7 @@
{}
-bool
+bool
MDRaidSource::removable() const
{
bool res = _raid_source->type == MDRAID_S_FAILED ||
@@ -85,7 +85,7 @@
return res;
}
-void
+void
MDRaidSource::remove()
{
if ( ! removable())
@@ -93,10 +93,10 @@
mdadm::remove_source(_raid.path, path());
}
-void
+void
MDRaidSource::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
bool failed_old = _props.get("failed").get_bool();
--- conga/ricci/modules/storage/MDRaidSource.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/MDRaidSource.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -33,21 +33,21 @@
public:
MDRaidSource(const String& path);
virtual ~MDRaidSource();
-
-
+
+
virtual bool removable() const;
virtual void remove();
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
private:
-
+
mdraid _raid;
counting_auto_ptr<mdraid_source> _raid_source;
-
+
};
--- conga/ricci/modules/storage/MDRaidTarget.cpp 2006/09/26 01:16:13 1.4
+++ conga/ricci/modules/storage/MDRaidTarget.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -33,9 +33,9 @@
-MDRaidTarget::MDRaidTarget(const String& path) :
+MDRaidTarget::MDRaidTarget(const String& path) :
BD(MAPPER_MDRAID_TYPE,
- "BUG",
+ "BUG",
BD_MDRAID_TYPE,
path)
{
@@ -43,11 +43,11 @@
if (_raid.path != path)
throw String("not MDRaidTarget, but source");
_mapper_id = MDRAID_PREFIX + _raid.path;
-
+
// props
_props.set(Variable("raid", _raid.name));
_props.set(Variable("raid_level", _raid.level));
-
+
// content
if (content->removable()) {
// removable(true);
@@ -68,34 +68,34 @@
-void
-MDRaidTarget::shrink(unsigned long long new_size,
+void
+MDRaidTarget::shrink(unsigned long long new_size,
const Props& new_props)
{
throw String("MDRaidTarget not resizable");
}
-void
-MDRaidTarget::expand(unsigned long long new_size,
+void
+MDRaidTarget::expand(unsigned long long new_size,
const Props& new_props)
{
throw String("MDRaidTarget not resizable");
}
-String
+String
MDRaidTarget::apply_props_before_resize(const Props& new_props)
{
return path();
}
-String
+String
MDRaidTarget::apply_props_after_resize(const Props& new_props)
{
return path();
}
-void
+void
MDRaidTarget::remove()
{
content->remove();
-
- // nothing to be done, will be removed as part of MDRaid removal,
+
+ // nothing to be done, will be removed as part of MDRaid removal,
// MDRaidTarget should not be marked as removable, because itself cannot be removed
}
--- conga/ricci/modules/storage/MDRaidTarget.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/MDRaidTarget.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,23 +34,23 @@
public:
MDRaidTarget(const String& path);
virtual ~MDRaidTarget();
-
+
virtual void remove();
-
+
protected:
-
- virtual void shrink(unsigned long long new_size,
+
+ virtual void shrink(unsigned long long new_size,
const Props& new_props);
- virtual void expand(unsigned long long new_size,
+ virtual void expand(unsigned long long new_size,
const Props& new_props);
-
+
virtual String apply_props_before_resize(const Props& new_props); // return path
virtual String apply_props_after_resize(const Props& new_props); // return path
-
+
private:
-
+
mdraid _raid;
-
+
}; // class MDRaidTarget_h
--- conga/ricci/modules/storage/Mapper.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/Mapper.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -44,20 +44,20 @@
{}
-bool
+bool
Mapper::removable() const
{
return _props.get("removable").get_bool();
}
-void
+void
Mapper::removable(bool removable)
{
_props.set(Variable("removable", removable));
}
-void
+void
Mapper::add_sources(const list<BDParsed>& parsed_bds)
{
list<String> paths;
@@ -69,10 +69,10 @@
paths.push_back(iter->path);
bds.push_back(iter->bd);
}
-
+
if (bds.empty())
return;
-
+
for (list<counting_auto_ptr<BD> >::const_iterator bd_iter = bds.begin();
bd_iter != bds.end();
bd_iter++) {
@@ -86,7 +86,7 @@
if (!found)
throw MidAir();
}
-
+
this->__add_sources(bds);
utils::clear_cache();
}
@@ -96,17 +96,17 @@
{
if (!_props.get("removable").get_bool())
throw String("mapper not removable");
-
+
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
iter != targets.end();
iter++)
(*iter)->remove();
-
+
this->__remove();
}
-String
+String
Mapper::state_ind() const
{
XMLObject xml("hash");
@@ -122,51 +122,51 @@
return utils::hash_str(generateXML(xml));
}
-XMLObject
+XMLObject
Mapper::xml() const
{
XMLObject xml(MAPPER_TYPE_TAG);
-
+
xml.set_attr("mapper_type", _mapper_type);
xml.set_attr("mapper_id", _mapper_id);
xml.set_attr("state_ind", state_ind());
-
+
xml.add_child(_props.xml());
-
+
XMLObject sources_xml(MAPPER_SOURCES_TAG);
for (list<counting_auto_ptr<BD> >::const_iterator iter = sources.begin();
iter != sources.end();
iter++)
sources_xml.add_child((*iter)->xml());
xml.add_child(sources_xml);
-
+
XMLObject targets_xml(MAPPER_TARGETS_TAG);
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
iter != targets.end();
iter++)
targets_xml.add_child((*iter)->xml());
xml.add_child(targets_xml);
-
+
/*
XMLObject mappings(MAPPER_MAPPINGS_TAG);
xml.add_child(mappings);
*/
-
-
+
+
XMLObject new_sources_xml(MAPPER_NEW_SOURCES_TAG);
for (list<counting_auto_ptr<BD> >::const_iterator iter = new_sources.begin();
iter != new_sources.end();
iter++)
new_sources_xml.add_child((*iter)->xml());
xml.add_child(new_sources_xml);
-
+
XMLObject new_targets_xml(MAPPER_NEW_TARGETS_TAG);
for (list<counting_auto_ptr<BDTemplate> >::const_iterator iter = new_targets.begin();
iter != new_targets.end();
iter++)
new_targets_xml.add_child((*iter)->xml());
xml.add_child(new_targets_xml);
-
+
return xml;
}
@@ -180,7 +180,7 @@
{
if (xml.tag() != MAPPER_TYPE_TAG)
throw String("not Mapper");
-
+
mapper_type = xml.get_attr("mapper_type");
mapper_id = xml.get_attr("mapper_id");
state_ind = xml.get_attr("state_ind");
@@ -188,14 +188,14 @@
mapper_id.empty() ||
state_ind.empty())
throw String("MapperParsed missing identification");
-
+
// get Mapper
try {
mapper = MapperFactory::get_mapper(mapper_type, mapper_id);
} catch ( ... ) {
throw MidAir();
}
-
+
for (list<XMLObject>::const_iterator iter = xml.children().begin();
iter != xml.children().end();
iter++) {
@@ -204,12 +204,12 @@
continue;
} catch ( ... ) {}
}
-
+
// ### validate ###
if (mapper->state_ind() != state_ind)
throw MidAir();
mapper->_props.validate(props);;
-
+
}
MapperParsed::~MapperParsed()
@@ -228,32 +228,32 @@
{
if (xml.tag() != MAPPER_TEMPLATE_TYPE_TAG)
throw String("not mapper template");
-
- list<counting_auto_ptr<MapperTemplate> > mapper_temps =
+
+ list<counting_auto_ptr<MapperTemplate> > mapper_temps =
MapperFactory::get_mapper_templates(xml.get_attr("mapper_type"));
if (mapper_temps.size() != 1)
throw String("invalid number of mapper_templates returned");
counting_auto_ptr<MapperTemplate> orig_mapp = mapper_temps.front();
mapper_type = orig_mapp->mapper_type;
-
+
const list<XMLObject>& kids = xml.children();
for (list<XMLObject>::const_iterator kid_iter = kids.begin();
kid_iter != kids.end();
kid_iter++) {
const XMLObject& kid = *kid_iter;
-
+
try {
props = Props(kid);
continue;
} catch ( ... ) {}
-
+
if (kid.tag() == MAPPER_SOURCES_TAG) {
for (list<XMLObject>::const_iterator bd_iter = kid.children().begin();
bd_iter != kid.children().end();
bd_iter++) {
BDParsed bdp(*bd_iter);
counting_auto_ptr<BD> bd;
- for (list<counting_auto_ptr<BD> >::const_iterator obd_iter =
+ for (list<counting_auto_ptr<BD> >::const_iterator obd_iter =
orig_mapp->new_sources.begin();
obd_iter != orig_mapp->new_sources.end();
obd_iter++) {
@@ -279,50 +279,50 @@
{}
-XMLObject
+XMLObject
MapperTemplate::xml() const
{
XMLObject xml(MAPPER_TEMPLATE_TYPE_TAG);
-
+
xml.set_attr("mapper_type", mapper_type);
// xml.set_attr("state_ind", state_ind());
-
+
xml.add_child(props.xml());
-
+
XMLObject sources_xml(MAPPER_SOURCES_TAG);
for (list<counting_auto_ptr<BD> >::const_iterator iter = sources.begin();
iter != sources.end();
iter++)
sources_xml.add_child((*iter)->xml());
xml.add_child(sources_xml);
-
+
XMLObject targets_xml(MAPPER_TARGETS_TAG);
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
iter != targets.end();
iter++)
targets_xml.add_child((*iter)->xml());
xml.add_child(targets_xml);
-
+
/*
XMLObject mappings(MAPPER_MAPPINGS_TAG);
xml.add_child(mappings);
*/
-
-
-
+
+
+
XMLObject new_sources_xml(MAPPER_NEW_SOURCES_TAG);
for (list<counting_auto_ptr<BD> >::const_iterator iter = new_sources.begin();
iter != new_sources.end();
iter++)
new_sources_xml.add_child((*iter)->xml());
xml.add_child(new_sources_xml);
-
+
XMLObject new_targets_xml(MAPPER_NEW_TARGETS_TAG);
for (list<counting_auto_ptr<BDTemplate> >::const_iterator iter = new_targets.begin();
iter != new_targets.end();
iter++)
new_targets_xml.add_child((*iter)->xml());
xml.add_child(new_targets_xml);
-
+
return xml;
}
--- conga/ricci/modules/storage/Mapper.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/Mapper.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -41,42 +41,42 @@
{
public:
virtual ~Mapper();
-
+
String state_ind() const;
-
+
Props _props;
-
+
virtual XMLObject xml() const;
-
-
-
+
+
+
std::list<counting_auto_ptr<BD> > sources;
std::list<counting_auto_ptr<BD> > targets;
-
+
std::list<counting_auto_ptr<BD> > new_sources;
std::list<counting_auto_ptr<BDTemplate> > new_targets;
-
+
virtual bool removable() const;
virtual void removable(bool removable);
virtual void remove();
-
+
virtual void apply(const MapperParsed&) = 0;
-
+
virtual void add_sources(const std::list<BDParsed>& bds);
-
+
protected:
Mapper(const String& type, const String& id);
-
+
String _mapper_type;
String _mapper_id;
-
+
virtual void __add_sources(const std::list<counting_auto_ptr<BD> >& bds) = 0;
virtual void __remove() = 0;
-
-
+
+
private:
-
-
+
+
}; // class Mapper
@@ -85,15 +85,15 @@
public:
MapperParsed(const XMLObject& xml);
virtual ~MapperParsed();
-
+
Props props;
-
+
String mapper_type;
String mapper_id;
String state_ind;
-
+
counting_auto_ptr<Mapper> mapper;
-
+
};
@@ -102,27 +102,27 @@
public:
MapperTemplate(const XMLObject& xml);
virtual ~MapperTemplate();
-
+
virtual XMLObject xml() const;
-
-
+
+
std::list<counting_auto_ptr<BD> > sources;
std::list<counting_auto_ptr<BD> > targets;
-
+
std::list<counting_auto_ptr<BD> > new_sources;
std::list<counting_auto_ptr<BDTemplate> > new_targets;
-
-
+
+
String mapper_type;
-
+
Props props;
-
+
protected:
MapperTemplate(const String& type);
-
+
private:
-
-
+
+
}; // class MapperTemplate
--- conga/ricci/modules/storage/MapperFactory.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/MapperFactory.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -35,7 +35,7 @@
-list<pair<String, String> >
+list<pair<String, String> >
MapperFactory::get_mapper_ids(const String& mapper_type)
{
list<pair<String, String> > id_pairs;
@@ -70,7 +70,7 @@
return id_pairs;
}
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
MapperFactory::get_mapper(const String& mapper_type,
const String& mapper_id)
{
@@ -85,7 +85,7 @@
throw String("no such mapper type");
}
-list<counting_auto_ptr<Mapper> >
+list<counting_auto_ptr<Mapper> >
MapperFactory::get_mappers(const String& mapper_type,
const String& mapper_id)
{
@@ -95,7 +95,7 @@
iter != id_pairs.end();
iter++) {
if ((mapper_type.empty() || mapper_type == iter->first) &&
- (mapper_id.empty() || mapper_id == iter->second))
+ (mapper_id.empty() || mapper_id == iter->second))
try {
mappers.push_back(get_mapper(iter->first, iter->second));
// } catch ( String e ) {
@@ -127,7 +127,7 @@
return temps;
}
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
MapperFactory::create_mapper(const MapperTemplate& mapper_temp)
{
mapper_temp.props.validate();
@@ -140,7 +140,7 @@
throw String("no such mapper type");
}
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
MapperFactory::modify_mapper(const MapperParsed& mapper_parsed)
{
mapper_parsed.mapper->apply(mapper_parsed);
@@ -154,7 +154,7 @@
}
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
MapperFactory::add_sources(const String& mapper_type,
const String& mapper_id,
const String& mapper_state_ind,
@@ -163,7 +163,7 @@
counting_auto_ptr<Mapper> mapper = get_mapper(mapper_type, mapper_id);
if (mapper->state_ind() != mapper_state_ind)
throw MidAir();
-
+
mapper->add_sources(bds);
return get_mapper(mapper_type, mapper_id);
}
--- conga/ricci/modules/storage/MapperFactory.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/MapperFactory.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -31,35 +31,35 @@
class MapperFactory
{
public:
-
- static std::list<std::pair<String, String> >
+
+ static std::list<std::pair<String, String> >
get_mapper_ids(const String& mapper_type="");
-
- static counting_auto_ptr<Mapper>
+
+ static counting_auto_ptr<Mapper>
get_mapper(const String& mapper_type,
const String& mapper_id);
-
- static std::list<counting_auto_ptr<Mapper> >
+
+ static std::list<counting_auto_ptr<Mapper> >
get_mappers(const String& mapper_type="",
const String& mapper_id="");
-
+
static std::list<counting_auto_ptr<MapperTemplate> >
get_mapper_templates(const String& mapper_type);
-
- static counting_auto_ptr<Mapper>
+
+ static counting_auto_ptr<Mapper>
create_mapper(const MapperTemplate& mapper_temp);
-
- static counting_auto_ptr<Mapper>
+
+ static counting_auto_ptr<Mapper>
modify_mapper(const MapperParsed& mapper_temp);
-
+
static void remove_mapper(const MapperParsed& mapper);
-
- static counting_auto_ptr<Mapper>
+
+ static counting_auto_ptr<Mapper>
add_sources(const String& mapper_type,
const String& mapper_id,
const String& mapper_state_ind,
const std::list<BDParsed>& bds);
-
+
};
--- conga/ricci/modules/storage/MapperSource.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/MapperSource.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -28,8 +28,8 @@
using namespace std;
-MapperSource::MapperSource(const String& mapper_type,
- const String& mapper_id,
+MapperSource::MapperSource(const String& mapper_type,
+ const String& mapper_id,
const String& type,
const String& path) :
Content(CONTENT_MS_TYPE, path),
@@ -42,13 +42,13 @@
{}
-bool
+bool
MapperSource::expandable(long long& max_size) const
{
return false;
}
-bool
+bool
MapperSource::shrinkable(long long& min_size) const
{
return false;
@@ -56,53 +56,53 @@
void
MapperSource::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
void
MapperSource::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
void
MapperSource::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
void
MapperSource::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
MapperSource::removable() const
{
return false;
}
-void
+void
MapperSource::remove()
{
throw String("MapperSource not removable");
}
-XMLObject
+XMLObject
MapperSource::xml() const
{
XMLObject xml = this->Content::xml();
-
+
// xml.set_attr("source_type", "source_type");
xml.set_attr("mapper_type", _mapper_type);
xml.set_attr("mapper_id", _mapper_id);
-
+
return xml;
}
--- conga/ricci/modules/storage/MapperSource.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/MapperSource.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,45 +32,45 @@
class MapperSource : public Content
{
public:
- MapperSource(const String& mapper_type,
- const String& mapper_id,
- const String& type,
+ MapperSource(const String& mapper_type,
+ const String& mapper_id,
+ const String& type,
const String& path);
virtual ~MapperSource();
-
+
XMLObject xml() const;
-
-
+
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
-
+
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
virtual void remove();
-
+
protected:
String _mapper_type;
String _mapper_id;
String _type;
-
-
+
+
private:
-
-
+
+
};
@@ -78,12 +78,12 @@
{
public:
virtual ~MapperSourceTemplate();
-
+
protected:
MapperSourceTemplate(const String& mapper_type);
-
+
String _mapper_type;
-
+
};
--- conga/ricci/modules/storage/MidAir.h 2006/04/07 16:42:40 1.2
+++ conga/ricci/modules/storage/MidAir.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -30,11 +30,11 @@
class MidAir : public Except
{
public:
- MidAir()
+ MidAir()
: Except(1, "Mid-Air collision") {}
virtual ~MidAir()
{}
-
+
};
--- conga/ricci/modules/storage/MountHandler.cpp 2007/08/24 22:06:29 1.7
+++ conga/ricci/modules/storage/MountHandler.cpp 2007/09/11 02:45:28 1.8
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -42,7 +42,7 @@
using namespace std;
-
+
static String mtab_path("/etc/mtab");
static String fstab_path("/etc/fstab");
static String mounts_path("/proc/mounts");
@@ -54,18 +54,18 @@
static int locker_counter = 0;
-static list<String>
+static list<String>
follow_links(const String& path);
-static String
+static String
find_path(const String& devname);
static void
create_dir(const String& path);
-Mountpoint::Mountpoint(const String& devname,
- const String& mountpoint,
- const String& fstype,
+Mountpoint::Mountpoint(const String& devname,
+ const String& mountpoint,
+ const String& fstype,
const std::pair<unsigned int, unsigned int>& major_minor) :
devname(devname),
mountpoint(mountpoint),
@@ -86,33 +86,33 @@
{}
-std::pair<unsigned int, unsigned int>
+std::pair<unsigned int, unsigned int>
MountHandler::maj_min(const String& devname) const
{
MutexLocker l1(mutex);
-
+
String path(follow_links(find_path(devname)).back());
-
+
struct stat st;
- if (stat(path.c_str(), &st))
+ if (stat(path.c_str(), &st))
throw String("stat(") + path + ") failed: " + String(strerror(errno));
- if (!S_ISBLK(st.st_mode))
+ if (!S_ISBLK(st.st_mode))
throw path + " is not a block device";
-
- return pair<unsigned int, unsigned int>(major(st.st_rdev),
+
+ return pair<unsigned int, unsigned int>(major(st.st_rdev),
minor(st.st_rdev));
}
-std::list<Mountpoint>
+std::list<Mountpoint>
MountHandler::get_entries(const String& filename) const
{
MutexLocker l1(mutex);
FstabLocker l2;
-
+
char buff[1024];
struct mntent mntbuff;
list<Mountpoint> ret;
-
+
FILE* fstab = setmntent(filename.c_str(), "r");
if (!fstab)
throw String("unable to open ") + filename + ": " + String(strerror(errno));
@@ -133,14 +133,14 @@
}
-std::list<Mountpoint>
+std::list<Mountpoint>
MountHandler::mounts() const
{
MutexLocker l1(mutex);
-
+
list<Mountpoint> ret = get_entries(mtab_path);
-
-
+
+
FILE* file = fopen("/proc/swaps", "r");
if (!file)
throw String("unable to open /proc/swaps: ") + String(strerror(errno));
@@ -168,7 +168,7 @@
free(ptr);
throw;
}
-
+
if (line.empty())
continue;
if (line[0] == '/') {
@@ -183,60 +183,60 @@
;
} catch ( ... ) {
while (fclose(file) && errno == EINTR)
- ;
+ ;
throw;
}
-
+
return ret;
}
-std::list<Mountpoint>
+std::list<Mountpoint>
MountHandler::mounts(const std::pair<unsigned int, unsigned int>& maj_min) const
{
MutexLocker l1(mutex);
-
+
list<Mountpoint> ret, l = mounts();
for (list<Mountpoint>::const_iterator iter = l.begin();
iter != l.end();
- iter++)
+ iter++)
if (iter->major_minor == maj_min)
ret.push_back(*iter);
return ret;
}
-std::list<Mountpoint>
+std::list<Mountpoint>
MountHandler::fstabs() const
{
MutexLocker l1(mutex);
-
+
return get_entries(fstab_path);
}
-std::list<Mountpoint>
+std::list<Mountpoint>
MountHandler::fstabs(const std::pair<unsigned int, unsigned int>& maj_min) const
{
MutexLocker l1(mutex);
-
+
list<Mountpoint> ret, l = fstabs();
for (list<Mountpoint>::const_iterator iter = l.begin();
iter != l.end();
- iter++)
+ iter++)
if (iter->major_minor == maj_min)
ret.push_back(*iter);
return ret;
}
-bool
+bool
MountHandler::mount(const String& devname,
const String& mountpoint,
const String& fstype) const
{
MutexLocker l1(mutex);
-
+
String out, err, bin;
int status;
vector<String> args;
-
+
if (fstype == "swap") {
bin = "/sbin/swapon";
args.clear();
@@ -244,7 +244,7 @@
} else {
// make sure dir exists
create_dir(mountpoint);
-
+
bin = "/bin/mount";
args.clear();
args.push_back(devname);
@@ -252,27 +252,27 @@
args.push_back("-t");
args.push_back(fstype);
}
-
- if (utils::execute(bin,
+
+ if (utils::execute(bin,
args,
- out,
- err,
+ out,
+ err,
status,
false))
throw command_not_found_error_msg(bin);
return !status;
}
-bool
+bool
MountHandler::umount(const String& devname,
const String& mountpoint) const
{
MutexLocker l1(mutex);
-
+
String out, err, bin;
int status;
vector<String> args;
-
+
if (mountpoint == "swap") {
bin = "/sbin/swapoff";
args.clear();
@@ -282,36 +282,36 @@
args.clear();
args.push_back(mountpoint);
}
-
- if (utils::execute(bin,
+
+ if (utils::execute(bin,
args,
- out,
- err,
+ out,
+ err,
status,
false))
throw command_not_found_error_msg(bin);
return !status;
}
-bool
+bool
MountHandler::fstab_add(const String& devname,
const String& mountpoint,
const String& fstype) const
{
MutexLocker l1(mutex);
FstabLocker l2;
-
+
String dev(utils::strip(devname));
String mnt(utils::strip(mountpoint));
String type(utils::strip(fstype));
-
+
// verify devname
pair<unsigned int, unsigned int> mm = maj_min(dev);
-
+
// make sure dir exists
if (type != "swap")
create_dir(mnt);
-
+
list<Mountpoint> tabs(fstabs());
for (list<Mountpoint>::const_iterator iter = tabs.begin();
iter != tabs.end();
@@ -323,7 +323,7 @@
if (mnt != "swap")
throw mnt + String("is already in fstab");
}
-
+
FILE* fstab = setmntent(fstab_path.c_str(), "r+");
if (!fstab)
throw String("unable to open ") + fstab_path + ": " + String(strerror(errno));
@@ -336,7 +336,7 @@
st.mnt_opts = (char*) "defaults";
st.mnt_freq = 0;
st.mnt_passno = 0;
-
+
success = !addmntent(fstab, &st);
} catch ( ... ) {
endmntent(fstab);
@@ -352,10 +352,10 @@
{
MutexLocker l1(mutex);
FstabLocker l2;
-
+
String dev(utils::strip(devname));
String mnt(utils::strip(mountpoint));
-
+
String buff;
bool modified = false;
FILE* fstab = fopen(fstab_path.c_str(), "r");
@@ -385,7 +385,7 @@
free(ptr);
throw;
}
-
+
vector<String> words = utils::split(utils::strip(line));
if (words.size() < 2)
buff += line;
@@ -402,10 +402,10 @@
;
} catch ( ... ) {
while (fclose(fstab) && errno == EINTR)
- ;
+ ;
throw;
}
-
+
// write changes
if (modified) {
fstab = fopen(fstab_path.c_str(), "w");
@@ -418,20 +418,20 @@
;
} catch ( ... ) {
while (fclose(fstab) && errno == EINTR)
- ;
+ ;
throw;
}
}
}
-std::list<String>
+std::list<String>
MountHandler::fstypes() const
{
MutexLocker l1(mutex);
-
+
list<String> fss;
fss.push_back("swap");
-
+
FILE* file = fopen("/proc/filesystems", "r");
if (!file)
throw String("unable to open /proc/filesystems: " + String(strerror(errno)));
@@ -459,7 +459,7 @@
free(ptr);
throw;
}
-
+
if (line.empty())
continue;
if (line.find_first_of(" \t") == line.npos)
@@ -469,23 +469,23 @@
;
} catch ( ... ) {
while (fclose(file) && errno == EINTR)
- ;
+ ;
throw;
}
-
+
return fss;
}
-static std::list<String>
+static std::list<String>
_used_dirs(const String& filename)
{
MutexLocker l1(mutex);
FstabLocker l2;
-
+
char buff[1024];
struct mntent mntbuff;
list<String> ret;
-
+
FILE* fstab = setmntent(filename.c_str(), "r");
if (!fstab)
throw String("unable to open ") + filename + ": " + String(strerror(errno));
@@ -503,28 +503,28 @@
endmntent(fstab);
return ret;
}
-std::list<String>
+std::list<String>
MountHandler::used_dirs() const
{
MutexLocker l1(mutex);
FstabLocker l2;
-
+
list<String> ret = _used_dirs(fstab_path.c_str());
-
+
list<String> tmp = _used_dirs(mtab_path.c_str());
for (list<String>::const_iterator iter = tmp.begin();
iter != tmp.end();
iter++)
if (find(ret.begin(), ret.end(), *iter) == ret.end())
ret.push_back(*iter);
-
+
tmp = _used_dirs(mounts_path.c_str());
for (list<String>::const_iterator iter = tmp.begin();
iter != tmp.end();
iter++)
if (find(ret.begin(), ret.end(), *iter) == ret.end())
ret.push_back(*iter);
-
+
return ret;
}
@@ -535,7 +535,7 @@
FstabLocker::FstabLocker()
{
MutexLocker l(mutex);
-
+
if (locker_counter == 0) {
locker_fd = open(fstab_path.c_str(), O_RDWR);
if (locker_fd == -1)
@@ -549,14 +549,14 @@
throw String("unable to flock fstab: ") + String(strerror(errno));
}
}
-
+
locker_counter++;
}
FstabLocker::~FstabLocker()
{
MutexLocker l(mutex);
-
+
if (locker_counter == 1) {
int ret;
while ((ret = flock(locker_fd, LOCK_UN)) && errno == EINTR)
@@ -566,7 +566,7 @@
while (close(locker_fd) == -1 && errno == EINTR)
;
}
-
+
locker_counter--;
}
@@ -579,31 +579,31 @@
{
char buff[1024];
list<String> paths;
-
+
paths.push_back(path);
-
+
int ret;
while ((ret = readlink(paths.back().c_str(), buff, sizeof(buff))) > 0)
paths.push_back(String(buff, ret));
-
+
return paths;
}
-String
+String
find_path(const String& devname)
{
if (devname.find("LABEL=") == 0) {
String out, err;
int status;
- if (utils::execute(findfs_path,
+ if (utils::execute(findfs_path,
vector<String>(1, devname),
- out,
- err,
+ out,
+ err,
status,
false))
throw command_not_found_error_msg(findfs_path);
if (status != 0)
- throw String("unable to find path for ") + devname +
+ throw String("unable to find path for ") + devname +
" " + out + " " + err + " " + utils::to_string(status);
String path = utils::split(out, "\n")[0];
return utils::strip(path);
@@ -617,21 +617,21 @@
create_dir(const String& path)
{
MutexLocker l1(mutex);
-
+
if (path.empty())
throw String("dir path is empty");
if (path[0] != '/')
throw String("dir must be an absolute path");
-
+
String out, err, bin;
int status;
vector<String> args;
args.push_back("-p");
args.push_back(utils::strip(path));
- if (utils::execute("/bin/mkdir",
+ if (utils::execute("/bin/mkdir",
args,
- out,
- err,
+ out,
+ err,
status,
false))
throw command_not_found_error_msg("mkdir");
--- conga/ricci/modules/storage/MountHandler.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/MountHandler.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,7 +37,7 @@
public:
FstabLocker();
virtual ~FstabLocker();
-
+
};
@@ -45,19 +45,19 @@
{
public:
virtual ~Mountpoint();
-
+
const String devname;
const String mountpoint;
const String fstype;
const std::pair<unsigned int, unsigned int> major_minor;
-
+
private:
- Mountpoint(const String& devname,
- const String& mountpoint,
- const String& fstype,
- const std::pair<unsigned int,
+ Mountpoint(const String& devname,
+ const String& mountpoint,
+ const String& fstype,
+ const std::pair<unsigned int,
unsigned int>& major_minor);
-
+
friend class MountHandler;
};
@@ -66,37 +66,37 @@
public:
MountHandler();
virtual ~MountHandler();
-
+
std::pair<unsigned int, unsigned int> maj_min(const String& devname) const;
-
+
std::list<Mountpoint> mounts() const;
- std::list<Mountpoint> mounts(const std::pair<unsigned int,
+ std::list<Mountpoint> mounts(const std::pair<unsigned int,
unsigned int>& maj_min) const;
-
+
std::list<Mountpoint> fstabs() const;
- std::list<Mountpoint> fstabs(const std::pair<unsigned int,
+ std::list<Mountpoint> fstabs(const std::pair<unsigned int,
unsigned int>& maj_min) const;
-
+
bool mount(const String& devname,
const String& mountpoint,
const String& fstype) const;
bool umount(const String& devname,
const String& mountpoint) const;
-
+
bool fstab_add(const String& devname,
const String& mountpoint,
const String& fstype) const;
void fstab_remove(const String& devname,
const String& mountpoint) const;
-
+
std::list<String> fstypes() const; // /proc/filesystems
-
+
std::list<String> used_dirs() const; // list of mounpoints from fstab, mtab & mounts
-
+
private:
-
+
std::list<Mountpoint> get_entries(const String& filename) const;
-
+
};
--- conga/ricci/modules/storage/PTSource.cpp 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/PTSource.cpp 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -31,14 +31,14 @@
PTSource::PTSource(const String& path) :
MapperSource(MAPPER_PT_TYPE,
- PT_PREFIX + path,
- SOURCE_PT_TYPE,
+ PT_PREFIX + path,
+ SOURCE_PT_TYPE,
path)
{
list<String> hds = Parted::possible_paths();
if (find(hds.begin(), hds.end(), path) == hds.end())
throw String(path + "not a partition table");
-
+
std::pair<String, std::list<PartedPartition> > p = Parted::partitions(path);
_props.set(Variable("disklabel", p.first));
}
--- conga/ricci/modules/storage/PTSource.h 2006/08/10 22:53:09 1.2
+++ conga/ricci/modules/storage/PTSource.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -33,9 +33,9 @@
public:
PTSource(const String& path);
virtual ~PTSource();
-
-
-
+
+
+
};
--- conga/ricci/modules/storage/PV.cpp 2007/03/05 20:45:17 1.6
+++ conga/ricci/modules/storage/PV.cpp 2007/09/11 02:45:28 1.7
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,14 +38,14 @@
path)
{
LVM::probe_pv(path, _props);
-
+
if (unused()) {
list<String> vgnames;
-
+
String vgname(_props.get("vgname").get_string());
vgnames.push_back(vgname);
-
- list<pair<String, String> > vg_pairs =
+
+ list<pair<String, String> > vg_pairs =
MapperFactory::get_mapper_ids(MAPPER_VG_TYPE);
for (list<pair<String, String> >::const_iterator iter = vg_pairs.begin();
iter != vg_pairs.end();
@@ -74,31 +74,31 @@
return false;
}
-bool
+bool
PV::removable() const
{
return unused();
}
-void
+void
PV::remove()
{
if (!removable())
throw String("PV::remove() called, while pv not removable");
-
- counting_auto_ptr<Mapper> vg =
+
+ counting_auto_ptr<Mapper> vg =
MapperFactory::get_mapper(_mapper_type,
_mapper_id);
-
+
String vgname = _props.get("vgname").get_string();
-
-
+
+
// if VG is marked as clustered, but cluster locking is not available, throw
if (!LVM::clustered_enabled() &&
LVM::vg_clustered(vgname))
throw LVMClusterLockingError();
-
-
+
+
if (vg->sources.size() == 1) {
if (vgname.size())
LVM::vgremove(vgname);
@@ -110,27 +110,27 @@
}
}
-void
+void
PV::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
String vgname_old(_props.get("vgname").get_string());
String vgname_new(new_props.get("vgname").get_string());
-
-
+
+
// if VG is marked as clustered, but cluster locking is not available, throw
if (!LVM::clustered_enabled() &&
- (LVM::vg_clustered(vgname_old) ||
+ (LVM::vg_clustered(vgname_old) ||
LVM::vg_clustered(vgname_new)))
throw LVMClusterLockingError();
-
-
- counting_auto_ptr<Mapper> vg_old =
+
+
+ counting_auto_ptr<Mapper> vg_old =
MapperFactory::get_mapper(_mapper_type,
_mapper_id);
-
+
if (vgname_old != vgname_new) {
if (vgname_old.size()) {
if (vg_old->sources.size() == 1)
@@ -145,19 +145,19 @@
-void
+void
create_content_pv(const String& path,
const counting_auto_ptr<ContentTemplate>& templ)
{
String vgname(templ->_props.get("vgname").get_string());
-
-
+
+
// if VG is marked as clustered, but cluster locking is not available, throw
if (!LVM::clustered_enabled() &&
LVM::vg_clustered(vgname))
throw LVMClusterLockingError();
-
-
+
+
LVM::pvcreate(path);
try {
if (vgname.size())
@@ -173,7 +173,7 @@
MapperSourceTemplate(MAPPER_VG_TYPE)
{
list<String> vgnames;
- list<pair<String, String> > vg_pairs =
+ list<pair<String, String> > vg_pairs =
MapperFactory::get_mapper_ids(MAPPER_VG_TYPE);
for (list<pair<String, String> >::const_iterator iter = vg_pairs.begin();
iter != vg_pairs.end();
@@ -181,7 +181,7 @@
String vgname(iter->second.substr(VG_PREFIX.size()));
vgnames.push_back(vgname);
}
-
+
// there will always be at least unused PVs holder
_props.set(Variable("vgname", vgnames.front(), vgnames));
}
--- conga/ricci/modules/storage/PV.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/PV.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,21 +37,21 @@
public:
PV(const String& path);
virtual ~PV();
-
-
-
+
+
+
virtual bool removable() const;
virtual void remove();
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
private:
-
+
bool unused() const;
-
+
};
@@ -60,10 +60,10 @@
public:
PVTemplate();
virtual ~PVTemplate();
-
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/Partition.cpp 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/Partition.cpp 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,9 +38,9 @@
Partition::Partition(const String& path) :
- BD(MAPPER_PT_TYPE,
- PT_PREFIX + Parted::extract_pt_path(path),
- BD_PART_TYPE,
+ BD(MAPPER_PT_TYPE,
+ PT_PREFIX + Parted::extract_pt_path(path),
+ BD_PART_TYPE,
path,
false),
_pt_path(Parted::extract_pt_path(path))
@@ -72,10 +72,10 @@
throw String(_path + " not a partition");
}
-Partition::Partition(const String& path,
+Partition::Partition(const String& path,
const PartedPartition& parted_part) :
- BD(MAPPER_PT_TYPE,
- PT_PREFIX + Parted::extract_pt_path(path),
+ BD(MAPPER_PT_TYPE,
+ PT_PREFIX + Parted::extract_pt_path(path),
BD_PART_TYPE,
path,
false),
@@ -84,17 +84,17 @@
initialize(parted_part);
}
-void
+void
Partition::initialize(const PartedPartition& part)
{
partition = counting_auto_ptr<PartedPartition>(new PartedPartition(part));
-
+
_props.set(Variable("size", part.size()));
_props.set(Variable("partition_num", (long long) part.partnum()));
_props.set(Variable("partition_type", part.type()));
_props.set(Variable("bootable", part.bootable()));
_props.set(Variable("partition_begin", part.begin()));
-
+
if (content->removable()) {
removable(true);
if (content->type == CONTENT_NONE_TYPE) {
@@ -104,17 +104,17 @@
iter++) {
content->add_replacement(*iter);
}
-
+
// add PV
content->add_replacement(counting_auto_ptr<ContentTemplate>(new PVTemplate()));
} else
content->add_replacement(counting_auto_ptr<ContentTemplate>(new ContentNoneTemplate()));
- }
-
+ }
+
if (partition->extended()) {
// replace content with extended content
content = counting_auto_ptr<Content>(new ContentExtendedPartition(_path));
-
+
// TODO: fix removable (extended s/b removable if all it's parts are removable)
bool rem = true;
for (list<PartedPartition>::const_iterator iter = partition->kids().begin();
@@ -124,7 +124,7 @@
rem = false;
removable(rem);
}
-
+
if (partition->logical()) {
// TODO: logical removal changes paths, fix it out
// for now, only last logical can be removed
@@ -146,50 +146,50 @@
if (max_logical != part.partnum())
removable(false);
}
-
+
// if label not supported, parts not removable
list<String> supp_labels = Parted::supported_labels();
- bool label_supported = (find(supp_labels.begin(),
- supp_labels.end(),
+ bool label_supported = (find(supp_labels.begin(),
+ supp_labels.end(),
part.label()) != supp_labels.end());
if ( ! label_supported)
removable(false);
-
+
}
Partition::~Partition()
{}
-void
-Partition::shrink(unsigned long long new_size,
+void
+Partition::shrink(unsigned long long new_size,
const Props& new_props)
{
throw String("Partition::shrink() not implemented");
}
-void
-Partition::expand(unsigned long long new_size,
+void
+Partition::expand(unsigned long long new_size,
const Props& new_props)
{
throw String("Partition::expand() not implemented");
}
-String
+String
Partition::apply_props_before_resize(const Props& new_props)
{
return path();
}
-String
+String
Partition::apply_props_after_resize(const Props& new_props)
{
return path();
}
-void
+void
Partition::remove()
{
if (!partition.get())
throw String("Partition::remove() null pointer");
-
+
content->remove();
Parted::remove_partition(_pt_path,
*(partition.get()));
@@ -197,28 +197,28 @@
-counting_auto_ptr<BD>
+counting_auto_ptr<BD>
create_partition(const BDTemplate& bd_temp)
{
// everything is already validated :)
-
+
String pt_path = bd_temp.mapper_id.substr(PT_PREFIX.size());
-
+
String part_type = bd_temp.props.get("partition_type").get_string();
-
+
long long seg_begin = bd_temp.props.get("partition_begin").get_int();
long long size = bd_temp.props.get("size").get_int();
-
+
String part_path = Parted::create_partition(pt_path,
part_type,
seg_begin,
size);
-
+
utils::clear_cache();
-
+
counting_auto_ptr<BD> bd = BDFactory::get_bd(part_path);
ContentFactory().create_content(bd, bd_temp.content_parsed);
-
+
return BDFactory::get_bd(part_path);
}
@@ -233,9 +233,9 @@
{
if (!part.unused_space())
throw String("not unused space");
-
+
props.set(Variable("partition_begin", part.begin()));
-
+
String type;
if (part.primary())
type = "primary";
@@ -246,22 +246,22 @@
else
throw String("uncreatable");
props.set(Variable("partition_type", type));
-
+
long long min_part_size = Parted::min_part_size(part.label());
long long part_size = (part.size() / min_part_size) * min_part_size;
- Variable size("size",
- part_size,
+ Variable size("size",
+ part_size,
min_part_size,
- part_size,
+ part_size,
min_part_size);
props.set(size);
-
+
if (part.extended()) {
-
-
+
+
// TODO: extended partition's content
-
-
+
+
} else {
if (content->type == CONTENT_NONE_TYPE) {
list<counting_auto_ptr<ContentTemplate> > fss = FSController().get_available_fss();
@@ -270,7 +270,7 @@
iter++) {
content->add_replacement(*iter);
}
-
+
// add PV
content->add_replacement(counting_auto_ptr<ContentTemplate>(new PVTemplate()));
}
--- conga/ricci/modules/storage/Partition.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/Partition.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,25 +37,25 @@
Partition(const String& path);
Partition(const String& path, const PartedPartition& parted_part);
virtual ~Partition();
-
+
virtual void remove();
-
+
protected:
- virtual void shrink(unsigned long long new_size,
+ virtual void shrink(unsigned long long new_size,
const Props& new_props);
- virtual void expand(unsigned long long new_size,
+ virtual void expand(unsigned long long new_size,
const Props& new_props);
-
+
virtual String apply_props_before_resize(const Props& new_props); // return path
virtual String apply_props_after_resize(const Props& new_props); // return path
-
+
private:
void initialize(const PartedPartition& part);
-
+
String _pt_path;
-
+
counting_auto_ptr<PartedPartition> partition;
-
+
}; // class Partition
@@ -67,8 +67,8 @@
const String& mapper_state_ind,
const PartedPartition& part);
virtual ~PartitionTemplate();
-
-
+
+
}; // class PartitionTemplate
--- conga/ricci/modules/storage/PartitionTable.cpp 2006/10/16 15:32:25 1.5
+++ conga/ricci/modules/storage/PartitionTable.cpp 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,7 +38,7 @@
list<String> get_PT_ids()
{
list<String> hds = Parted::possible_paths();
-
+
// check if a partition table is on the path
list<String> ids;
for (list<String>::const_iterator iter = hds.begin();
@@ -52,20 +52,20 @@
return ids;
}
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
create_PT(const MapperTemplate& temp)
{
// everything is already validated, but number of sources
if (temp.sources.size() != 1)
throw String("create_PT requires exactly one source");
-
+
utils::clear_cache();
-
+
String path = temp.sources.front()->path();
Parted::create_label(path, temp.props.get("label").get_string());
-
+
utils::clear_cache();
-
+
return counting_auto_ptr<Mapper>(new PartitionTable(PT_PREFIX + path));
}
@@ -73,46 +73,46 @@
// ##### PartitionTable #####
-static void
+static void
generate_targets(const String& pt_path,
const list<PartedPartition>& parts,
list<counting_auto_ptr<BD> >& targets);
-static void
+static void
generate_new_targets(const String& mapper_id,
const String& mapper_state_ind,
const list<PartedPartition>& parts,
list<counting_auto_ptr<BDTemplate> >& new_targets);
-
+
PartitionTable::PartitionTable(const String& id) :
Mapper(MAPPER_PT_TYPE, id)
{
_pt_path = _mapper_id;
_pt_path.replace(0, PT_PREFIX.size(), "");
-
+
list<String> hds = Parted::possible_paths();
if (find(hds.begin(), hds.end(), _pt_path) == hds.end())
throw String(_pt_path + "not a partition table");
-
+
pair<String, list<PartedPartition> > p = Parted::partitions(_pt_path);
const list<PartedPartition> parts = p.second;
_label = p.first;
_props.set(Variable("disklabel", _label));
-
+
// label supported
list<String> supp_labels = Parted::supported_labels();
- bool label_supported = (find(supp_labels.begin(),
- supp_labels.end(),
+ bool label_supported = (find(supp_labels.begin(),
+ supp_labels.end(),
_label) != supp_labels.end());
-
+
// sources
counting_auto_ptr<BD> source = BDFactory::get_bd(_pt_path);
_props.set(Variable("size", source->_props.get("size").get_int()));
sources.push_back(source);
-
+
// targets
generate_targets(_pt_path, parts, targets);
-
+
bool rem = true;
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
iter != targets.end();
@@ -120,12 +120,12 @@
if (!(*iter)->removable())
rem = false;
removable(rem);
-
+
// new targets
if (label_supported)
generate_new_targets(id,
state_ind(),
- parts,
+ parts,
new_targets);
}
@@ -133,19 +133,19 @@
{}
-void
+void
PartitionTable::apply(const MapperParsed&)
{
// nothing to do, for now
}
-void
+void
PartitionTable::__add_sources(const list<counting_auto_ptr<BD> >& bds)
{
throw String("PartitionTable can have only one source");
}
-void
+void
PartitionTable::__remove()
{
Parted::remove_label(_pt_path);
@@ -153,7 +153,7 @@
-static void
+static void
generate_targets(const String& pt_path,
const list<PartedPartition>& parts,
list<counting_auto_ptr<BD> >& targets)
@@ -170,7 +170,7 @@
}
}
-static void
+static void
generate_new_targets(const String& mapper_id,
const String& mapper_state_ind,
const list<PartedPartition>& parts,
@@ -182,7 +182,7 @@
if (iter->unused_space()) {
try {
if (iter->primary()) {
- PartedPartition p(0,
+ PartedPartition p(0,
iter->begin(),
iter->begin() + iter->size(),
iter->bootable(),
@@ -194,7 +194,7 @@
new_targets.push_back(ptt);
}
if (iter->extended()) {
- PartedPartition p(0,
+ PartedPartition p(0,
iter->begin(),
iter->begin() + iter->size(),
iter->bootable(),
@@ -206,7 +206,7 @@
new_targets.push_back(ptt);
}
if (iter->logical()) {
- PartedPartition p(0,
+ PartedPartition p(0,
iter->begin(),
iter->begin() + iter->size(),
iter->bootable(),
@@ -237,10 +237,10 @@
{
Variable labels("label", String("gpt"), Parted::supported_labels());
props.set(labels);
-
+
// new sources
- counting_auto_ptr<Mapper> system =
- MapperFactory::get_mapper(MAPPER_SYS_TYPE,
+ counting_auto_ptr<Mapper> system =
+ MapperFactory::get_mapper(MAPPER_SYS_TYPE,
SYS_PREFIX);
for (list<counting_auto_ptr<BD> >::iterator iter = system->targets.begin();
iter != system->targets.end();
@@ -249,7 +249,7 @@
if (bd->content->type == CONTENT_NONE_TYPE)
new_sources.push_back(bd);
}
-
+
if (new_sources.empty())
throw String("no available new sources");
props.set(Variable("min_sources", (long long) 1));
--- conga/ricci/modules/storage/PartitionTable.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/PartitionTable.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -36,19 +36,19 @@
public:
PartitionTable(const String& id);
virtual ~PartitionTable();
-
+
virtual void apply(const MapperParsed&);
-
+
protected:
-
+
virtual void __add_sources(const std::list<counting_auto_ptr<BD> >& bds);
virtual void __remove();
-
+
private:
String _pt_path;
String _label;
-
-
+
+
}; // PartitionTable
@@ -58,10 +58,10 @@
public:
PTTemplate();
virtual ~PTTemplate();
-
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/Props.cpp 2006/09/26 03:02:57 1.4
+++ conga/ricci/modules/storage/Props.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,11 +32,11 @@
Props::Props()
{}
-Props::Props(const XMLObject& xml)
+Props::Props(const XMLObject& xml)
{
if (xml.tag() != PROPERTIES_TAG)
throw String("not properties");
-
+
for (list<XMLObject>::const_iterator iter = xml.children().begin();
iter != xml.children().end();
iter++) {
@@ -51,13 +51,13 @@
{}
-bool
+bool
Props::has(const String& name) const
{
return _vars.find(name) != _vars.end();
}
-const Variable
+const Variable
Props::get(const String& name) const
{
map<String, Variable>::const_iterator iter = _vars.find(name);
@@ -78,7 +78,7 @@
if (!c.empty())
if (get(c).type() != Boolean)
throw String("non-boolean variable used as bool condition for variable ") + var.name();
-
+
// insert new variable
_set(var);
}
@@ -92,7 +92,7 @@
i.first->second = var;
}
-bool
+bool
Props::is_active(const Variable& var) const
{
String c(var.get_conditional_bool_if());
@@ -112,7 +112,7 @@
validate(*this);
}
-void
+void
Props::validate(const Props& props) const
{
for (map<String, Variable>::const_iterator iter = _vars.begin();
@@ -133,7 +133,7 @@
}
-XMLObject
+XMLObject
Props::xml() const
{
XMLObject props(PROPERTIES_TAG);
--- conga/ricci/modules/storage/Props.h 2006/09/26 03:02:57 1.4
+++ conga/ricci/modules/storage/Props.h 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -39,26 +39,26 @@
Props();
Props(const XMLObject&);
virtual ~Props();
-
+
void set(const Variable& var);
bool has(const String& name) const;
const Variable get(const String& name) const;
-
+
bool is_active(const Variable& var) const;
-
+
void validate() const;
void validate(const Props& props) const; // validate props against *this
-
-
+
+
XMLObject xml() const;
-
-
+
+
private:
-
+
std::map<String, Variable> _vars;
-
+
void _set(const Variable& var);
-
+
};
--- conga/ricci/modules/storage/StorageModule.cpp 2007/06/27 08:14:23 1.7
+++ conga/ricci/modules/storage/StorageModule.cpp 2007/09/11 02:45:28 1.8
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -68,44 +68,44 @@
build_fcn_map()
{
FcnMap api_1_0;
-
+
api_1_0["report"] = report;
-
+
api_1_0["get_mapper_ids"] = get_mapper_ids;
api_1_0["get_mappers"] = get_mappers;
-
+
api_1_0["get_mapper_templates"] = get_mapper_templates;
api_1_0["create_mapper"] = create_mapper;
api_1_0["modify_mapper"] = modify_mapper;
api_1_0["remove_mapper"] = remove_mapper;
api_1_0["add_mapper_sources"] = add_sources;
api_1_0["remove_mapper_source"] = remove_source;
-
+
api_1_0["create_bd"] = create_bd;
api_1_0["get_bd"] = get_bd;
api_1_0["modify_bd"] = modify_bd;
api_1_0["remove_bd"] = remove_bd;
api_1_0["get_fs_group_members"] = get_fs_group_members;
-
+
api_1_0["enable_clustered_lvm"] = enable_clustered_lvm;
api_1_0["disable_clustered_lvm"] = disable_clustered_lvm;
-
-
+
+
ApiFcnMap api_fcn_map;
api_fcn_map["1.0"] = api_1_0;
-
+
return api_fcn_map;
}
-VarMap
+VarMap
report(const VarMap& args)
{
Variable ids("mapper_ids", _mapper_ids(""));
Variable mappers("mappers", _mappers("", ""));
Variable temps("mapper_templates", _mapper_templates(""));
-
+
VarMap ret;
ret.insert(pair<String, Variable>(ids.name(), ids));
ret.insert(pair<String, Variable>(mappers.name(), mappers));
@@ -113,7 +113,7 @@
return ret;
}
-VarMap
+VarMap
get_mapper_ids(const VarMap& args)
{
String mapper_type;
@@ -124,14 +124,14 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
Variable var("mapper_ids", _mapper_ids(mapper_type));
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
get_mappers(const VarMap& args)
{
String mapper_type, mapper_id;
@@ -139,21 +139,21 @@
VarMap::const_iterator iter = args.find("mapper_type");
if (iter != args.end())
mapper_type = iter->second.get_string();
-
+
iter = args.find("mapper_id");
if (iter != args.end())
mapper_id = iter->second.get_string();
} catch ( String e ) {
throw APIerror(e);
}
-
+
Variable var("mappers", _mappers(mapper_type, mapper_id));
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
get_mapper_templates(const VarMap& args)
{
String mapper_type;
@@ -164,14 +164,14 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
Variable var("mapper_templates", _mapper_templates(mapper_type));
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
create_mapper(const VarMap& args)
{
XMLObject mapper_xml;
@@ -183,17 +183,17 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
MapperTemplate mapper_template(mapper_xml);
counting_auto_ptr<Mapper> mapper = MapperFactory::create_mapper(mapper_template);
-
+
Variable var("mapper", mapper->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
remove_mapper(const VarMap& args)
{
XMLObject mapper_xml;
@@ -205,15 +205,15 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
MapperParsed mapper(mapper_xml);
MapperFactory::remove_mapper(mapper);
-
+
VarMap ret;
return ret;
}
-VarMap
+VarMap
modify_mapper(const VarMap& args)
{
XMLObject mapper_xml;
@@ -225,17 +225,17 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
MapperParsed mp(mapper_xml);
counting_auto_ptr<Mapper> mapper = MapperFactory::modify_mapper(mp);
-
+
Variable var("mapper", mapper->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
add_sources(const VarMap& args)
{
String mapper_type, mapper_id, mapper_state_ind;
@@ -245,17 +245,17 @@
if (iter == args.end())
throw APIerror("missing mapper_type variable");
mapper_type = iter->second.get_string();
-
+
iter = args.find("mapper_id");
if (iter == args.end())
throw APIerror("missing mapper_id variable");
mapper_id = iter->second.get_string();
-
+
iter = args.find("mapper_state_ind");
if (iter == args.end())
throw APIerror("missing mapper_state_ind variable");
mapper_state_ind = iter->second.get_string();
-
+
iter = args.find("bds");
if (iter == args.end())
throw APIerror("missing bds variable");
@@ -263,7 +263,7 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
list<BDParsed> parsed_bds;
for (list<XMLObject>::const_iterator iter = bds_list.begin();
iter != bds_list.end();
@@ -273,14 +273,14 @@
mapper_id,
mapper_state_ind,
parsed_bds);
-
+
Variable var("mapper", mapper->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
remove_source(const VarMap& args)
{
String mapper_type, mapper_id, mapper_state_ind;
@@ -290,17 +290,17 @@
if (iter == args.end())
throw APIerror("missing mapper_type variable");
mapper_type = iter->second.get_string();
-
+
iter = args.find("mapper_id");
if (iter == args.end())
throw APIerror("missing mapper_id variable");
mapper_id = iter->second.get_string();
-
+
iter = args.find("mapper_state_ind");
if (iter == args.end())
throw APIerror("missing mapper_state_ind variable");
mapper_state_ind = iter->second.get_string();
-
+
iter = args.find("bd");
if (iter == args.end())
throw APIerror("missing bd variable");
@@ -308,16 +308,16 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
throw String("remove_mapper_source() function not implemented");
-
+
/*
BDParsed parsed_bd(bd);
counting_auto_ptr<Mapper> mapper = MapperFactory::remove_source(mapper_type,
mapper_id,
mapper_state_ind,
parsed_bd);
-
+
Variable var("mapper", mapper->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
@@ -326,7 +326,7 @@
}
-VarMap
+VarMap
create_bd(const VarMap& args)
{
XMLObject bd_xml;
@@ -338,15 +338,15 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
// bd
BDTemplate bd_template(bd_xml);
counting_auto_ptr<BD> bd = BDFactory::create_bd(bd_template);
-
+
// mapper
counting_auto_ptr<Mapper> mapper = MapperFactory::get_mapper(bd->mapper_type(),
bd->mapper_id());
-
+
Variable var_bd("bd", bd->xml());
Variable var_map("mapper", mapper->xml());
VarMap ret;
@@ -355,7 +355,7 @@
return ret;
}
-VarMap
+VarMap
get_bd(const VarMap& args)
{
String path;
@@ -367,16 +367,16 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
counting_auto_ptr<BD> bd = BDFactory::get_bd(path);
-
+
Variable var("bd", bd->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
modify_bd(const VarMap& args)
{
XMLObject bd_xml;
@@ -388,17 +388,17 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
BDParsed bd_parsed(bd_xml);
counting_auto_ptr<BD> bd = BDFactory::modify_bd(bd_parsed);
-
+
Variable var("bd", bd->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
remove_bd(const VarMap& args)
{
XMLObject bd_xml;
@@ -410,17 +410,17 @@
} catch ( String e ) {
throw APIerror(e);
}
-
+
BDParsed bd_parsed(bd_xml);
counting_auto_ptr<Mapper> mapper = BDFactory::remove_bd(bd_parsed);
-
+
Variable var("mapper", mapper->xml());
VarMap ret;
ret.insert(pair<String, Variable>(var.name(), var));
return ret;
}
-VarMap
+VarMap
get_fs_group_members(const VarMap& args)
{
String fsname;
@@ -452,12 +452,12 @@
}
-list<XMLObject>
+list<XMLObject>
_mapper_ids(const String& mapper_type)
{
-
+
list<XMLObject> ids_list;
-
+
list<pair<String, String> > id_pairs = MapperFactory::get_mapper_ids(mapper_type);
for (list<pair<String, String> >::iterator iter = id_pairs.begin();
iter != id_pairs.end();
@@ -467,56 +467,56 @@
id_xml.set_attr("mapper_id", iter->second);
ids_list.push_back(id_xml);
}
-
+
return ids_list;
}
-list<XMLObject>
+list<XMLObject>
_mappers(const String& mapper_type, const String& mapper_id)
{
-
+
list<XMLObject> mapper_list;
-
- list<counting_auto_ptr<Mapper> > mappers =
+
+ list<counting_auto_ptr<Mapper> > mappers =
MapperFactory::get_mappers(mapper_type, mapper_id);
for (list<counting_auto_ptr<Mapper> >::iterator iter = mappers.begin();
iter != mappers.end();
iter++)
mapper_list.push_back((*iter)->xml());
-
+
return mapper_list;
}
-list<XMLObject>
+list<XMLObject>
_mapper_templates(const String& mapper_type)
{
-
+
list<XMLObject> temp_list;
-
- list<counting_auto_ptr<MapperTemplate> > mapper_templates =
+
+ list<counting_auto_ptr<MapperTemplate> > mapper_templates =
MapperFactory::get_mapper_templates(mapper_type);
for (list<counting_auto_ptr<MapperTemplate> >::iterator iter = mapper_templates.begin();
iter != mapper_templates.end();
iter++)
temp_list.push_back((*iter)->xml());
-
+
return temp_list;
}
-VarMap
+VarMap
enable_clustered_lvm(const VarMap& args)
{
LVM::enable_clustered();
-
+
VarMap ret;
return ret;
}
-VarMap
+VarMap
disable_clustered_lvm(const VarMap& args)
{
LVM::disable_clustered();
-
+
VarMap ret;
return ret;
}
--- conga/ricci/modules/storage/StorageModule.h 2006/04/07 16:42:40 1.1
+++ conga/ricci/modules/storage/StorageModule.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -32,9 +32,9 @@
public:
StorageModule();
virtual ~StorageModule();
-
+
private:
-
+
};
--- conga/ricci/modules/storage/SwapFS.cpp 2007/08/24 22:05:14 1.9
+++ conga/ricci/modules/storage/SwapFS.cpp 2007/09/11 02:45:28 1.10
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -40,7 +40,7 @@
String magic(FileMagic::get_description(path));
if (magic.find("swap") == magic.npos)
throw String(path + " not swap");
-
+
// swapon
MountHandler mh;
FstabLocker l;
@@ -59,44 +59,44 @@
{}
-bool
+bool
SwapFS::expandable(long long& max_size) const
{
return false;
}
-bool
+bool
SwapFS::shrinkable(long long& min_size) const
{
return false;
}
-void
+void
SwapFS::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
SwapFS::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
SwapFS::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
bool fstab_old = _props.get("fstab").get_bool();
bool fstab_new = new_props.get("fstab").get_bool();
bool swapon_old = _props.get("swapon").get_bool();
bool swapon_new = new_props.get("swapon").get_bool();
-
+
MountHandler mh;
FstabLocker lock;
-
+
if (fstab_old && !fstab_new) {
list<Mountpoint> l = mh.fstabs(mh.maj_min(path));
for (list<Mountpoint>::const_iterator iter = l.begin();
@@ -106,7 +106,7 @@
mh.fstab_remove(iter->devname, iter->mountpoint);
} else if (!fstab_old && fstab_new)
mh.fstab_add(path, "swap", "swap");
-
+
if (swapon_old && !swapon_new) {
list<Mountpoint> l = mh.mounts(mh.maj_min(path));
for (list<Mountpoint>::const_iterator iter = l.begin();
@@ -119,14 +119,14 @@
mh.mount(path, "swap", "swap");
}
-void
+void
SwapFS::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
SwapFS::removable() const
{
return true;
@@ -134,28 +134,28 @@
-void
+void
create_swap_fs(const String& path,
const counting_auto_ptr<ContentTemplate>& templ)
{
String label = templ->_props.get("label").get_string();
bool swapon = templ->_props.get("swapon").get_bool();
bool fstab = templ->_props.get("fstab").get_bool();
-
+
vector<String> args;
if (label.size()) {
args.push_back("-L");
args.push_back(label);
}
args.push_back(path);
-
+
String out, err;
int status;
if (utils::execute("/sbin/mkswap", args, out, err, status))
throw command_not_found_error_msg("mkswap");
if (status != 0)
throw String("mkswap failed: ") + err;
-
+
if (swapon) {
args.clear();
args.push_back(path);
@@ -164,10 +164,10 @@
if (status != 0)
throw String("swapon failed: ") + err;
}
-
+
if (fstab) {
/*
- MountHandler().fstab_add(label.empty() ? path : String("LABEL=") + label,
+ MountHandler().fstab_add(label.empty() ? path : String("LABEL=") + label,
"swap",
"swap");
*/
@@ -180,16 +180,16 @@
ContentFSTemplate(SwapFS::PRETTY_NAME)
{
// label
- _props.set(Variable("label",
- "",
- 0,
- 16,
- ILLEGAL_LABEL_CHARS,
+ _props.set(Variable("label",
+ "",
+ 0,
+ 16,
+ ILLEGAL_LABEL_CHARS,
list<String>()));
-
+
// swapon
_props.set(Variable("swapon", true, true));
-
+
// fstab
_props.set(Variable("fstab", true, true));
}
--- conga/ricci/modules/storage/SwapFS.h 2006/09/26 03:02:57 1.4
+++ conga/ricci/modules/storage/SwapFS.h 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,29 +38,29 @@
public:
SwapFS(const String& path);
virtual ~SwapFS();
-
+
const static String PRETTY_NAME;
-
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
-
+
};
--- conga/ricci/modules/storage/System.cpp 2007/08/24 22:05:14 1.5
+++ conga/ricci/modules/storage/System.cpp 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -48,18 +48,18 @@
{
if (_mapper_id != SYS_PREFIX)
throw String("invalid mapper_id: " + _mapper_id);
-
+
// parse blockdev
vector<String> args;
args.push_back("--report");
-
+
String out, err;
int status;
if (utils::execute("/sbin/blockdev", args, out, err, status))
throw command_not_found_error_msg("blockdev");
if (status)
throw String("blockdev failed: ") + err;
-
+
vector<String> lines = utils::split(out, "\n");
for (vector<String>::iterator iter = lines.begin();
iter != lines.end();
@@ -77,19 +77,19 @@
{}
-void
+void
System::apply(const MapperParsed&)
{
// nothing to do, for now
}
-void
+void
System::__add_sources(const list<counting_auto_ptr<BD> >& bds)
{
throw String("System can have no sources");
}
-void
+void
System::__remove()
{
throw String("System mapper is not removable");
--- conga/ricci/modules/storage/System.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/System.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -37,14 +37,14 @@
public:
System(const String& id);
virtual ~System();
-
+
virtual void apply(const MapperParsed&);
-
+
protected:
-
+
virtual void __add_sources(const std::list<counting_auto_ptr<BD> >& bds);
virtual void __remove();
-
+
};
--- conga/ricci/modules/storage/UMountError.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/UMountError.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,7 +34,7 @@
: Except(3, String("Unmount of ") + mountpoint + " failed") {}
virtual ~UMountError()
{}
-
+
};
--- conga/ricci/modules/storage/UnsupportedFS.cpp 2006/10/05 16:11:38 1.2
+++ conga/ricci/modules/storage/UnsupportedFS.cpp 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -103,12 +103,12 @@
} else if (magic.find("udf") != magic.npos) {
_name = "udf";
_module = "udf";
-
-
-
+
+
+
} else
throw String("not even an unsupported FS");
-
+
// mountpoints
mount_props_probe(path, _module, _props);
}
@@ -117,48 +117,48 @@
{}
-bool
+bool
UnsupportedFS::expandable(long long& max_size) const
{
return false;
}
-void
+void
UnsupportedFS::expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-bool
+bool
UnsupportedFS::shrinkable(long long& min_size) const
{
return false;
}
-void
+void
UnsupportedFS::shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
UnsupportedFS::apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{}
-void
+void
UnsupportedFS::apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props)
{
// mountpoints
mount_props_apply(path, _module, _props, new_props);
}
-bool
+bool
UnsupportedFS::removable() const
{
return true;
--- conga/ricci/modules/storage/UnsupportedFS.h 2006/09/26 03:17:41 1.1
+++ conga/ricci/modules/storage/UnsupportedFS.h 2007/09/11 02:45:28 1.2
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -34,30 +34,30 @@
public:
UnsupportedFS(const String& path);
virtual ~UnsupportedFS();
-
-
+
+
virtual bool expandable(long long& max_size) const;
virtual bool shrinkable(long long& min_size) const;
virtual void shrink(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void expand(const String& path,
- unsigned long long new_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual void apply_props_before_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
virtual void apply_props_after_resize(const String& path,
- unsigned long long old_size,
- unsigned long long new_size,
+ unsigned long long old_size,
+ unsigned long long new_size,
const Props& new_props);
-
+
virtual bool removable() const;
-
+
private:
-
+
};
--- conga/ricci/modules/storage/VG.cpp 2007/06/25 16:11:30 1.13
+++ conga/ricci/modules/storage/VG.cpp 2007/09/11 02:45:28 1.14
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -39,13 +39,13 @@
-list<String>
+list<String>
get_VG_ids()
{
LVM::check_locking();
-
+
list<String> vgids;
-
+
vector<String> args;
args.push_back("vgs");
args.push_back("--noheadings");
@@ -86,9 +86,9 @@
_vgname(id.substr(VG_PREFIX.size()))
{
LVM::probe_vg(_vgname, _props, sources, targets);
-
+
if (id == VG_PREFIX) {
- list<counting_auto_ptr<Mapper> > mappers =
+ list<counting_auto_ptr<Mapper> > mappers =
MapperFactory::get_mappers(MAPPER_PT_TYPE);
for (list<counting_auto_ptr<Mapper> >::iterator iter_map = mappers.begin();
iter_map != mappers.end();
@@ -102,14 +102,14 @@
}
}
} else {
- long long size =
+ long long size =
_props.get("extents_total").get_int() * _props.get("extent_size").get_int();
_props.set(Variable("size", size));
-
- long long free_size =
+
+ long long free_size =
_props.get("extents_free").get_int() * _props.get("extent_size").get_int();
_props.set(Variable("size_free", free_size));
-
+
bool rem = true;
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
iter != targets.end();
@@ -117,7 +117,7 @@
if (!(*iter)->removable())
rem = false;
removable(rem);
-
+
// new sources
VG unused(VG_PREFIX);
for (list<counting_auto_ptr<BD> >::iterator iter = unused.sources.begin();
@@ -128,22 +128,22 @@
iter != unused.new_sources.end();
iter++)
new_sources.push_back(*iter);
-
-
+
+
// ### new targets ###
-
+
if (free_size == 0)
return;
-
+
// new LV
counting_auto_ptr<BDTemplate> new_lv(new LVTemplate(_mapper_id, state_ind()));
-
- new_lv->props.set(Variable("size",
- free_size,
- _props.get("extent_size").get_int(),
- free_size,
+
+ new_lv->props.set(Variable("size",
+ free_size,
+ _props.get("extent_size").get_int(),
+ free_size,
_props.get("extent_size").get_int()));
-
+
list<String> lvnames;
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
iter != targets.end();
@@ -153,30 +153,30 @@
}
lvnames.push_back("_mlog");
lvnames.push_back("_mimage");
- new_lv->props.set(Variable("lvname",
- String("new_lv"),
+ new_lv->props.set(Variable("lvname",
+ String("new_lv"),
1,
36,
- NAMES_ILLEGAL_CHARS,
+ NAMES_ILLEGAL_CHARS,
lvnames));
-
+
new_lv->props.set(Variable("vgname", _vgname));
new_lv->props.set(Variable("snapshot", false));
new_lv->props.set(Variable("clustered", _props.get("clustered").get_bool()));
new_targets.push_back(new_lv);
-
+
// snapshots
counting_auto_ptr<BDTemplate> new_snap(new LVTemplate(_mapper_id, state_ind()));
new_snap->props = new_lv->props;
- new_snap->props.set(Variable("lvname",
- String("new_snapshot"),
+ new_snap->props.set(Variable("lvname",
+ String("new_snapshot"),
1,
36,
- NAMES_ILLEGAL_CHARS,
+ NAMES_ILLEGAL_CHARS,
lvnames));
-
+
new_snap->content->_avail_replacements.clear();
-
+
new_snap->props.set(Variable("snapshot", true));
list<String> snap_origs;
for (list<counting_auto_ptr<BD> >::const_iterator iter = targets.begin();
@@ -185,7 +185,7 @@
if (!(*iter)->_props.get("snapshot").get_bool())
snap_origs.push_back((*iter)->_props.get("lvname").get_string());
if (snap_origs.size()) {
- new_snap->props.set(Variable("snapshot_origin",
+ new_snap->props.set(Variable("snapshot_origin",
snap_origs.front(),
snap_origs));
new_targets.push_back(new_snap);
@@ -197,11 +197,11 @@
{}
-void
+void
VG::apply(const MapperParsed& mp)
{
String vgname(mp.props.get("vgname").get_string());
-
+
// clustered
bool clustered_old = _props.get("clustered").get_bool();
bool clustered_new = mp.props.get("clustered").get_bool();
@@ -209,22 +209,22 @@
LVM::vgchange(vgname, clustered_new);
}
-void
+void
VG::__add_sources(const list<counting_auto_ptr<BD> >& bds)
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
!LVM::clustered_enabled())
throw LVMClusterLockingError();
-
+
String vgname;
try {
vgname = _props.get("vgname").get_string();
} catch ( ... ) {}
-
+
try {
utils::clear_cache();
-
+
list<String> pv_paths;
for (list<counting_auto_ptr<BD> >::const_iterator iter = bds.begin();
iter != bds.end();
@@ -235,11 +235,11 @@
if (bd->content->type == CONTENT_NONE_TYPE)
LVM::pvcreate(bd->path());
}
-
+
// extend VG, if not unused PVs holder
if (vgname.size())
LVM::vgextend(vgname, pv_paths);
-
+
} catch ( ... ) {
for (list<counting_auto_ptr<BD> >::const_iterator iter = bds.begin();
iter != bds.end();
@@ -254,14 +254,14 @@
}
}
-void
+void
VG::__remove()
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
!LVM::clustered_enabled())
throw LVMClusterLockingError();
-
+
String vgname = _props.get("vgname").get_string();
LVM::vgremove(vgname);
for (list<counting_auto_ptr<BD> >::const_iterator iter = sources.begin();
@@ -273,24 +273,24 @@
-counting_auto_ptr<Mapper>
+counting_auto_ptr<Mapper>
create_VG(const MapperTemplate& temp)
{
// everything is already validated, but number of sources
if (temp.sources.size() == 0)
throw String("create_VG requires at least one source");
-
+
String vgname = temp.props.get("vgname").get_string();
long long extent_size = temp.props.get("extent_size").get_int();
bool clustered = temp.props.get("clustered").get_bool();
-
+
if (clustered &&
!LVM::clustered_enabled())
throw LVMClusterLockingError();
-
+
try {
utils::clear_cache();
-
+
list<String> pv_paths;
for (list<counting_auto_ptr<BD> >::const_iterator iter = temp.sources.begin();
iter != temp.sources.end();
@@ -301,7 +301,7 @@
if (bd->content->type == CONTENT_NONE_TYPE)
LVM::pvcreate(bd->path());
}
-
+
// create VG
LVM::vgcreate(vgname, extent_size, clustered, pv_paths);
} catch ( ... ) {
@@ -316,7 +316,7 @@
}
throw;
}
-
+
return counting_auto_ptr<Mapper>(new VG(VG_PREFIX + vgname));
}
@@ -337,21 +337,21 @@
if (!vgname.empty())
vgnames.push_back(vgname);
}
- Variable vgname("vgname",
- String("new_vg"),
+ Variable vgname("vgname",
+ String("new_vg"),
1,
36,
- NAMES_ILLEGAL_CHARS,
+ NAMES_ILLEGAL_CHARS,
vgnames);
props.set(vgname);
-
+
// extent_size
list<long long> ext_sizes;
for (long long i = 8 * 1024 /* 8KB */;
i <= 16LL * 1024 * 1024 * 1024 /* 16 GB */;
i = 2L * i)
ext_sizes.push_back(i);
- props.set(Variable("extent_size",
+ props.set(Variable("extent_size",
4 * 1024 * 1024 /* 4 MB */,
ext_sizes));
@@ -373,7 +373,7 @@
iter != unused.new_sources.end();
iter++)
new_sources.push_back(*iter);
-
+
if (new_sources.empty())
throw String("no available new sources");
props.set(Variable("min_sources", (long long) 1));
--- conga/ricci/modules/storage/VG.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/VG.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -38,19 +38,19 @@
public:
VG(const String& id);
virtual ~VG();
-
+
virtual void apply(const MapperParsed&);
-
+
protected:
-
+
virtual void __add_sources(const std::list<counting_auto_ptr<BD> >& bds);
virtual void __remove();
-
+
private:
-
+
String _vgname;
-
-
+
+
}; // VG
@@ -59,10 +59,10 @@
public:
VGTemplate();
virtual ~VGTemplate();
-
+
private:
-
-
+
+
};
--- conga/ricci/modules/storage/ValidationError.h 2006/04/07 16:42:40 1.2
+++ conga/ricci/modules/storage/ValidationError.h 2007/09/11 02:45:28 1.3
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -30,11 +30,11 @@
class ValidationError : public Except
{
public:
- ValidationError()
+ ValidationError()
: Except(2, "Validation error") {}
virtual ~ValidationError()
{}
-
+
};
--- conga/ricci/modules/storage/defines.h 2007/03/20 15:35:59 1.7
+++ conga/ricci/modules/storage/defines.h 2007/09/11 02:45:28 1.8
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/storage/gfs_ondisk.h 2006/09/26 03:17:41 1.1
+++ conga/ricci/modules/storage/gfs_ondisk.h 2007/09/11 02:45:28 1.2
@@ -39,7 +39,7 @@
* metadata. Each RG has its own set of block allocation statistics (within
* the RG header), a number of blocks containing the block allocation bitmap,
* and a large number of allocatable blocks for file data and metadata.
- * Multiple RGs allow multiple nodes to simultaneously allocate blocks from the
+ * Multiple RGs allow multiple nodes to simultaneously allocate blocks from the
* filesystem (using different RGs), enhancing parallel access. RG size and
* number of RGs are determined by gfs_mkfs when creating the filesystem.
* An administrator can specify RG size (see man gfs_mkfs).
@@ -81,7 +81,7 @@
* All structures must be a multiple of 8 bytes long.
*
* GRIPES:
- * We should have forgetten about supporting 512B FS block sizes
+ * We should have forgetten about supporting 512B FS block sizes
* and made the di_reserved field in the struct gfs_dinode structure
* much bigger.
*
@@ -261,7 +261,7 @@
};
/*
- * journal index structure
+ * journal index structure
*
* One for each journal used by the filesystem.
* These descriptors are packed contiguously within the jindex inode (file).
@@ -276,7 +276,7 @@
};
/*
- * resource index structure
+ * resource index structure
*
* One of these for each resource group in the filesystem.
* These descriptors are packed contiguously within the rindex inode (file).
@@ -306,7 +306,7 @@
* and first part of block alloc bitmap.
* Bitmap block(s), continuing block alloc bitmap started in header block.
* Data/meta blocks, allocatable blocks containing file data and metadata.
- *
+ *
* In older versions, now-unused (but previously allocated) dinodes were
* saved for re-use in an on-disk linked list (chain). This is no longer
* done, but support still exists for reclaiming dinodes from this list,
--- conga/ricci/modules/storage/main.cpp 2006/08/15 04:15:54 1.4
+++ conga/ricci/modules/storage/main.cpp 2007/09/11 02:45:28 1.5
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
--- conga/ricci/modules/storage/mdadm_wrapper.cpp 2006/10/06 03:10:13 1.5
+++ conga/ricci/modules/storage/mdadm_wrapper.cpp 2007/09/11 02:45:28 1.6
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -51,7 +51,7 @@
-std::list<String>
+std::list<String>
mdadm::valid_raid_levels()
{
list<String> levels;
@@ -70,11 +70,11 @@
return probe_raids();
}
-mdraid
+mdraid
mdadm::probe_path(const String& path)
{
list<mdraid> raids = mdadm::raids();
-
+
for (list<mdraid>::const_iterator iter = raids.begin();
iter != raids.end();
iter++) {
@@ -88,12 +88,12 @@
if (iter->path == path)
return *iter;
}
-
+
throw String("not mdraid path");
}
-void
+void
mdadm::remove_source(const String& raid_path,
const String& path)
{
@@ -108,11 +108,11 @@
if (status)
throw String("mdadm failed");
utils::clear_cache();
-
+
zero_superblock(path);
}
-void
+void
mdadm::zero_superblock(const String& path)
{
String out, err;
@@ -127,7 +127,7 @@
utils::clear_cache();
}
-void
+void
mdadm::add_source(const String& raid_path,
const String& path)
{
@@ -143,8 +143,8 @@
throw String("mdadm failed");
utils::clear_cache();
}
-
-void
+
+void
mdadm::fail_source(const String& raid_path,
const String& path)
{
@@ -161,7 +161,7 @@
utils::clear_cache();
}
-void
+void
mdadm::start_raid(const mdraid& raid)
{
vector<String> args;
@@ -180,7 +180,7 @@
utils::clear_cache();
}
-void
+void
mdadm::stop_raid(const mdraid& raid)
{
vector<String> args;
@@ -195,13 +195,13 @@
utils::clear_cache();
}
-String
+String
mdadm::create_raid(const String& level,
const list<String>& dev_paths)
{
String md_path_templ = "/dev/md";
String new_md_path = md_path_templ;
-
+
list<mdraid> raids = mdadm::raids();
for (long long i=1; i<30; i++) {
String tmp_path = md_path_templ + utils::to_string(i);
@@ -218,16 +218,16 @@
}
if (new_md_path == md_path_templ)
throw String("no more raid devices allowed");
-
+
list<String>::size_type raid_devices = 3;
if (level == "raid1")
raid_devices = 2;
else if (level == "raid5")
raid_devices = 3;
- else
+ else
throw String("unsupported raid level");
raid_devices = (raid_devices < dev_paths.size()) ? dev_paths.size() : raid_devices;
-
+
vector<String> args;
args.push_back("--create");
args.push_back(new_md_path);
@@ -243,7 +243,7 @@
i < raid_devices - dev_paths.size();
i++)
args.push_back("missing");
-
+
String out, err;
int status;
if (utils::execute(MDADM_BIN_PATH, args, out, err, status))
@@ -251,7 +251,7 @@
if (status)
throw String("mdadm failed");
utils::clear_cache();
-
+
return new_md_path;
}
@@ -274,14 +274,14 @@
throw command_not_found_error_msg(MDADM_BIN_PATH);
if (status)
throw String("mdadm failed");
-
+
// remove '\n'
String::size_type i = 0;
while ((i = out.find('\n', i)) != out.npos)
out.replace(i, 1, " ");
-
+
list<mdraid> raids;
-
+
vector<String> words = utils::split(utils::strip(out));
for (vector<String>::iterator iter = words.begin();
iter != words.end();
@@ -295,7 +295,7 @@
if (raids.empty())
continue;
mdraid& raid = raids.back();
-
+
if ((*iter)[0] == '/')
raid.path = *iter;
else if (iter->find("level=") == 0)
@@ -310,38 +310,38 @@
raid.devices = probe_sources(devs);
}
}
-
+
for (list<mdraid>::iterator iter = raids.begin();
iter != raids.end();
iter++) {
String path = iter->path;
iter->name = path.replace(0, String("/dev/").size(), "");
}
-
+
return raids;
}
-list<mdraid_source>
+list<mdraid_source>
probe_sources(vector<String> paths)
{
list<mdraid_source> devs;
-
+
String date("0000");
list<mdraid_source> probed_sources;
-
+
for (vector<String>::const_iterator iter = paths.begin();
iter != paths.end();
iter++) {
- pair<String, list<mdraid_source> > tmp =
+ pair<String, list<mdraid_source> > tmp =
probe_source(*iter);
if (tmp.first > date) {
date = tmp.first;
probed_sources = tmp.second;
}
}
-
+
for (vector<String>::const_iterator path_iter = paths.begin();
path_iter != paths.end();
path_iter++) {
@@ -356,7 +356,7 @@
if (!path_found)
devs.push_back(mdraid_source(*path_iter, MDRAID_S_FAILED));
}
-
+
return devs;
}
@@ -372,11 +372,11 @@
throw command_not_found_error_msg(MDADM_BIN_PATH);
if (status)
throw String("mdadm failed");
-
-
+
+
String update_time;
list<mdraid_source> devs;
-
+
bool devs_section = false;
vector<String> lines = utils::split(utils::strip(out), "\n");
for (vector<String>::iterator iter = lines.begin();
@@ -386,7 +386,7 @@
vector<String> words = utils::split(utils::strip(line));
if (words.empty())
continue;
-
+
if (devs_section) {
if (line.find("active") != line.npos)
devs.push_back(mdraid_source(words.back(), MDRAID_S_ACTIVE));
@@ -397,7 +397,7 @@
devs_section = true;
continue;
}
-
+
if (words.size() < 8)
continue;
if (words[0] == "Update" && words[1] == "Time") {
@@ -405,7 +405,7 @@
String day = words[5];
String time = words[6];
String year = words[7];
-
+
if (month == "Jan") month = "01";
else if (month == "Feb") month = "02";
else if (month == "Mar") month = "03";
@@ -418,10 +418,10 @@
else if (month == "Oct") month = "10";
else if (month == "Nov") month = "11";
else month = "12";
-
+
if (day.size() == 1)
day = "0" + day;
-
+
vector<String> time_words = utils::split(time, ":");
if (time_words.size() != 3)
throw String("invalid mdadm output");
@@ -429,12 +429,12 @@
if (time_words[1].size() == 1) time_words[1] = "0" + time_words[1];
if (time_words[2].size() == 1) time_words[2] = "0" + time_words[2];
time = time_words[0] + time_words[1] + time_words[2];
-
+
update_time = year + " " + month + " " + day + " " + time;
- }
+ }
}
-
-
+
+
return pair<String, list<mdraid_source> >(update_time,
devs);
}
--- conga/ricci/modules/storage/mdadm_wrapper.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/mdadm_wrapper.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -29,8 +29,8 @@
#include <vector>
-enum mdraid_source_type { MDRAID_S_ACTIVE,
- MDRAID_S_SPARE,
+enum mdraid_source_type { MDRAID_S_ACTIVE,
+ MDRAID_S_SPARE,
MDRAID_S_FAILED};
@@ -39,10 +39,10 @@
public:
mdraid_source(const String& path,
mdraid_source_type type);
-
+
String path;
mdraid_source_type type;
-
+
};
@@ -51,16 +51,16 @@
{
public:
mdraid();
-
+
String path;
String name;
-
+
String level;
String uuid;
long long num_devices;
-
+
std::list<mdraid_source> devices;
-
+
};
@@ -68,12 +68,12 @@
class mdadm
{
public:
-
+
static std::list<String> valid_raid_levels();
-
+
static std::list<mdraid> raids();
static mdraid probe_path(const String& path);
-
+
static void add_source(const String& raid_path,
const String& path);
static void fail_source(const String& raid_path,
@@ -81,15 +81,15 @@
static void remove_source(const String& raid_path,
const String& path);
static void zero_superblock(const String& path);
-
-
+
+
static void start_raid(const mdraid& raid);
static void stop_raid(const mdraid& raid);
-
+
static String create_raid(const String& level,
const std::list<String>& dev_paths);
-
-
+
+
}; // class mdadm
--- conga/ricci/modules/storage/parted_wrapper.cpp 2007/06/25 16:11:30 1.11
+++ conga/ricci/modules/storage/parted_wrapper.cpp 2007/09/11 02:45:28 1.12
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -45,7 +45,7 @@
plain_partitions(const String& path,
String& label,
long long& disk_size);
-static void
+static void
__create_label(const String& path, const String& label);
static long long
parted_size_to_bytes(const String& size_str);
@@ -53,11 +53,11 @@
-PartedPartition::PartedPartition(int partnum,
- long long beg,
- long long end,
- bool bootable,
- PPType type,
+PartedPartition::PartedPartition(int partnum,
+ long long beg,
+ long long end,
+ bool bootable,
+ PPType type,
const String& label) :
_partnum(partnum),
_beg(beg),
@@ -67,9 +67,9 @@
_label(label)
{}
-PartedPartition::PartedPartition(long long beg,
- long long end,
- PPType available_types,
+PartedPartition::PartedPartition(long long beg,
+ long long end,
+ PPType available_types,
const String& label) :
_beg(beg),
_end(end),
@@ -82,19 +82,19 @@
{}
-long long
+long long
PartedPartition::size() const
{
return _end - _beg;
}
-long long
+long long
PartedPartition::begin() const
{
return _beg;
}
-int
+int
PartedPartition::partnum() const
{
if (unused_space())
@@ -102,13 +102,13 @@
return _partnum;
}
-bool
+bool
PartedPartition::bootable() const
{
return _bootable;
}
-String
+String
PartedPartition::type() const
{
switch (_type) {
@@ -124,37 +124,37 @@
throw String("invalid partition type");
}
-String
+String
PartedPartition::label() const
{
return _label;
}
-bool
+bool
PartedPartition::unused_space() const
{
return _type & PPTunused;
}
-bool
+bool
PartedPartition::primary() const
{
return _type & PPTprimary;
}
-bool
+bool
PartedPartition::extended() const
{
return _type & PPTextended;
}
-bool
+bool
PartedPartition::logical() const
{
return _type & PPTlogical;
}
-void
+void
PartedPartition::add_kid(const PartedPartition& part)
{
if (extended() && part.logical()) {
@@ -164,38 +164,38 @@
throw String("PartedPartition.add_kid() error");
}
-const list<PartedPartition>&
+const list<PartedPartition>&
PartedPartition::kids() const
{
return _kids;
}
-list<PartedPartition>&
+list<PartedPartition>&
PartedPartition::kids()
{
return _kids;
}
-bool
+bool
PartedPartition::operator<(const PartedPartition& p2) const
{
return _beg < p2._beg;
}
-void
+void
PartedPartition::print(const String& indent) const
{
cout << indent << "num" << (unused_space()) ? 100000LL : partnum();
cout << " beg" << begin();
cout << " size" << size();
cout << " boot" << bootable();
-
+
String t = "selection";
try {
t = type();
} catch ( ... ) {}
cout << " " << t;
-
+
cout << " used" << !unused_space() << endl;
for (list<PartedPartition>::const_iterator iter = _kids.begin();
iter != _kids.end();
@@ -210,21 +210,21 @@
// ##### Parted #####
-String
+String
Parted::extract_pt_path(const String& path)
{
if (path.find("/dev/cciss/") != path.npos) {
unsigned int p_pos = path.find("p");
return path.substr(0, p_pos);
}
-
+
unsigned int i = path.size() - 1;
for (; isdigit(path[i]); i--)
;
return path.substr(0, i+1);
}
-String
+String
Parted::generate_part_path(const String& pt_path, const PartedPartition& part)
{
if (part.unused_space())
@@ -263,7 +263,7 @@
list<PartedPartition> parts;
label = "";
disk_size = 0;
-
+
String parted_output = utils::strip(__probe_pt_execute(path));
vector<String> lines = utils::split(parted_output, "\n");
for (vector<String>::const_iterator iter = lines.begin();
@@ -272,23 +272,23 @@
vector<String> words = utils::split(utils::strip(*iter));
if (words.size() < 3)
continue;
-
+
// label
if ((words[0] == "Disk" && words[1] == "label" && words[2] == "type:") ||
(words[0] == "Partition" && words[1] == "Table:")) {
label = words.back();
continue;
}
-
+
// disk size
if (words[0] == "Disk" && words[1] == (path + ":")) {
disk_size = parted_size_to_bytes(words[2]);
continue;
}
if (words.size() > 4) {
- if (words[0] == "Disk" &&
- words[1] == "geometry" &&
- words[2] == "for" &&
+ if (words[0] == "Disk" &&
+ words[1] == "geometry" &&
+ words[2] == "for" &&
words[3] == (path + ":")) {
String s = words[4];
String::size_type idx = s.find("-");
@@ -300,7 +300,7 @@
continue;
}
}
-
+
// partition
if (!isdigit(words[0][0]))
continue;
@@ -321,19 +321,19 @@
else if (*word_iter == "logical")
type = PPTlogical;
}
- parts.push_back(PartedPartition(partnum,
- beg,
- end,
- bootable,
- type,
+ parts.push_back(PartedPartition(partnum,
+ beg,
+ end,
+ bootable,
+ type,
label));
}
-
+
if (label.empty() || label == "loop")
throw String("not a partition table");
if (disk_size == 0)
throw String("disk_size == 0???");
-
+
return parts;
}
@@ -348,9 +348,9 @@
String label;
long long disk_size;
list<PartedPartition> parts = plain_partitions(path, label, disk_size);
-
+
int primary_count = 0;
-
+
// put logical into extended
PartedPartition extended(0, 0, PPTunused, label);
for (list<PartedPartition>::const_iterator iter = parts.begin();
@@ -373,7 +373,7 @@
if (!extended.unused_space())
sorted.push_back(extended);
sorted.sort();
-
+
/*
cout << "\n\npt_path " << path << endl;
for (list<PartedPartition>::const_iterator iter = sorted.begin();
@@ -381,7 +381,7 @@
iter++)
iter->print("\t");
*/
-
+
// fill gaps
bool more_primaries = false;
if (label == "gpt" ||
@@ -398,11 +398,11 @@
}
fill_gaps(types,
label,
- min_part_size(label),
- sorted,
- 0,
+ min_part_size(label),
+ sorted,
+ 0,
disk_size);
-
+
/*
cout << "\n\npt_path " << path << endl;
for (list<PartedPartition>::const_iterator iter = sorted.begin();
@@ -410,12 +410,12 @@
iter++)
iter->print("\t");
*/
-
+
return pair<String, list<PartedPartition> >(label, sorted);
}
void
-fill_gaps(int types,
+fill_gaps(int types,
const String& label,
long long min_part_size,
list<PartedPartition>& parts,
@@ -426,31 +426,31 @@
list<PartedPartition>::iterator iter = parts.begin();
while (current < end) {
if (iter == parts.end()) {
- PartedPartition n(current,
- end,
- PPType(types),
+ PartedPartition n(current,
+ end,
+ PPType(types),
label);
if (n.size() >= min_part_size)
parts.insert(iter, n);
current = n.begin() + n.size();
continue;
}
-
+
if (iter->extended())
fill_gaps(PPTlogical,
label,
min_part_size,
- iter->kids(),
- iter->begin(),
+ iter->kids(),
+ iter->begin(),
iter->begin() + iter->size());
-
+
if (iter->begin() <= current) {
current = iter->begin() + iter->size();
iter++;
} else {
- PartedPartition n(current,
- iter->begin(),
- PPType(types),
+ PartedPartition n(current,
+ iter->begin(),
+ PPType(types),
label);
if (n.size() > min_part_size)
parts.insert(iter, n);
@@ -470,11 +470,11 @@
-std::list<String>
+std::list<String>
Parted::possible_paths()
{
list<String> hds;
-
+
// parse blockdev
vector<String> args;
args.push_back("--report");
@@ -492,16 +492,16 @@
if (words.size() != 7 || words[0] == "RO")
continue;
String path = words[6];
-
+
if (path == Parted::extract_pt_path(path))
hds.push_back(path);
}
-
+
return hds;
}
-std::list<String>
+std::list<String>
Parted::supported_labels()
{
list<String> labels;
@@ -512,21 +512,21 @@
labels.push_back("msdos");
// labels.push_back("pc98");
// labels.push_back("sun");
-
+
return labels;
}
-void
+void
__create_label(const String& path, const String& label)
{
if (Parted::extract_pt_path(path) != path)
throw String("partition table on partition??? Not for now :(");
-
+
list<String> labels = Parted::supported_labels();
if (find(labels.begin(), labels.end(), label) == labels.end())
throw String("unsuported label type");
-
+
// create label
vector<String> args;
args.push_back("-s");
@@ -541,7 +541,7 @@
throw String("parted failed");
}
-void
+void
Parted::create_label(const String& path, const String& label)
{
// don't overwrite existing label
@@ -552,16 +552,16 @@
} catch ( ... ) {}
if (in_use)
throw String(path + " already has a partition table");
-
+
// create label
__create_label(path, label);
}
-void
+void
Parted::remove_label(const String& path)
-{
+{
__create_label(path, "msdos");
-
+
vector<String> args;
String out, err;
int status;
@@ -578,7 +578,7 @@
}
-long long
+long long
Parted::min_part_size(const String& label)
{
return 2 * 1024 * 1024; // 2 MB // FIXME
@@ -586,7 +586,7 @@
-String
+String
Parted::create_partition(const String& pt_path,
const String& part_type,
long long seg_begin,
@@ -595,11 +595,11 @@
String aaa;
long long bbb;
list<PartedPartition> parts = plain_partitions(pt_path, aaa, bbb);
-
+
// parted defines 1KB as 1000 bytes
seg_begin = seg_begin / 1000 / 1000;
long long seg_end = seg_begin + size / 1000 / 1000;
-
+
vector<String> args;
args.push_back("-s");
args.push_back(pt_path);
@@ -613,9 +613,9 @@
throw command_not_found_error_msg(PARTED_BIN_PATH);
if (status)
throw String("parted failed");
-
+
utils::clear_cache();
-
+
// find new partnum
list<PartedPartition> new_parts = plain_partitions(pt_path, aaa, bbb);
for (list<PartedPartition>::const_iterator iter_n = new_parts.begin();
@@ -623,7 +623,7 @@
iter_n++) {
if (iter_n->unused_space())
continue;
-
+
bool new_part = true;
for (list<PartedPartition>::const_iterator iter_o = parts.begin();
iter_o != parts.end();
@@ -633,11 +633,11 @@
if (iter_n->partnum() == iter_o->partnum())
new_part = false;
}
-
+
if (new_part)
return generate_part_path(pt_path, *iter_n);
}
-
+
throw String("partition creation failed");
}
@@ -656,7 +656,7 @@
throw command_not_found_error_msg(PARTED_BIN_PATH);
if (status)
throw String("parted failed");
-
+
utils::clear_cache();
}
@@ -682,6 +682,6 @@
else if (s[s.size()-2] == 't')
multiplier = (long long) 1000 * 1000 * 1000 * 1000;
}
-
+
return (long long) utils::to_float(s) * multiplier;
}
--- conga/ricci/modules/storage/parted_wrapper.h 2006/08/10 22:53:09 1.3
+++ conga/ricci/modules/storage/parted_wrapper.h 2007/09/11 02:45:28 1.4
@@ -13,7 +13,7 @@
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,
+ Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
MA 02139, USA.
*/
/*
@@ -30,52 +30,52 @@
enum PPType {PPTprimary = 1,
PPTextended = 2,
- PPTlogical = 4,
+ PPTlogical = 4,
PPTunused = 8};
class PartedPartition
{
public:
- PartedPartition(int partnum,
- long long beg,
- long long end,
- bool bootable,
+ PartedPartition(int partnum,
+ long long beg,
+ long long end,
+ bool bootable,
PPType type,
const String& label);
// unused
- PartedPartition(long long beg,
- long long end,
+ PartedPartition(long long beg,
+ long long end,
PPType available_types,
const String& label);
virtual ~PartedPartition();
-
+
long long begin() const;
long long size() const;
int partnum() const;
bool bootable() const;
-
+
String type() const;
String label() const;
-
+
bool unused_space() const;
-
+
// if unused(), possible part types
bool primary() const;
bool extended() const;
bool logical() const;
-
+
void add_kid(const PartedPartition& part);
std::list<PartedPartition>& kids();
const std::list<PartedPartition>& kids() const;
-
-
+
+
bool operator<(const PartedPartition&) const;
-
-
+
+
void print(const String& indent) const;
-
-
+
+
private:
int _partnum;
long long _beg;
@@ -83,9 +83,9 @@
bool _bootable;
PPType _type;
String _label;
-
+
std::list<PartedPartition> _kids;
-
+
}; // class PartedPartition
@@ -93,34 +93,34 @@
class Parted
{
public:
-
+
static String extract_pt_path(const String& path);
- static String generate_part_path(const String& pt_path,
+ static String generate_part_path(const String& pt_path,
const PartedPartition& part);
-
+
static std::list<String> possible_paths();
-
+
static std::list<String> supported_labels();
-
+
static long long min_part_size(const String& label);
-
-
- static std::pair<String, std::list<PartedPartition> >
+
+
+ static std::pair<String, std::list<PartedPartition> >
partitions(const String& pt_path);
-
+
static void create_label(const String& path, const String& label);
static void remove_label(const String& path);
-
+
// return path of new partition
- static String create_partition(const String& pt_path,
- const String& part_type,
- long long seg_begin,
+ static String create_partition(const String& pt_path,
+ const String& part_type,
+ long long seg_begin,
long long size);
-
+
static void remove_partition(const String& pt_path,
const PartedPartition& partition);
-
-
+
+
}; // class Parted
--- conga/ricci/ricci/main.cpp 2007/08/30 17:07:14 1.5
+++ conga/ricci/ricci/main.cpp 2007/09/11 02:45:28 1.6
@@ -54,7 +54,7 @@
case 'c':
advertise_cluster = true;
break;
-
+
case 'd':
debug = true;
break;
@@ -67,7 +67,7 @@
if (optarg != NULL) {
uint32_t port;
char *e = NULL;
-
+
port = strtoul(optarg, &e, 10);
if (*e != '\0' || !port || (port & 0xffff) != port) {
fprintf(stderr, "Invalid port: %s\n", optarg);
--- conga/ricci/test/PropsObject.py 2006/03/13 20:48:27 1.1
+++ conga/ricci/test/PropsObject.py 2007/09/11 02:45:29 1.2
@@ -7,11 +7,11 @@
class PropsObject:
-
+
def __init__(self):
self.__vars = {}
return
-
+
def add_prop(self, variable):
self.__vars[variable.get_name()] = variable
def get_prop(self, name):
@@ -20,17 +20,17 @@
else:
return None
pass
-
+
def get_props(self):
return self.__vars
-
+
def export_xml(self, doc, parent_node):
props = doc.createElement(str(PROPS_TAG))
parent_node.appendChild(props)
for var in self.__vars:
props.appendChild(self.__vars[var].export_xml(doc))
return props
-
+
def import_xml(self, parent_node):
props = None
for node in parent_node.childNodes:
@@ -46,4 +46,4 @@
except:
continue
return self
-
+
--- conga/ricci/test/Variable.py 2006/06/28 20:20:20 1.3
+++ conga/ricci/test/Variable.py 2007/09/11 02:45:29 1.4
@@ -10,7 +10,7 @@
raise 'not a variable'
if node.nodeName != str(VARIABLE_TAG):
raise 'not a variable'
-
+
attrs_dir = {}
attrs = node.attributes
for attrName in attrs.keys():
@@ -21,12 +21,12 @@
raise 'incomplete variable'
if (attrs_dir['type'] != VARIABLE_TYPE_LIST_INT and attrs_dir['type'] != VARIABLE_TYPE_LIST_STR and attrs_dir['type'] != VARIABLE_TYPE_LIST_XML and attrs_dir['type'] != VARIABLE_TYPE_XML) and ('value' not in attrs_dir):
raise 'incomplete variable'
-
+
mods = {}
for mod in attrs_dir:
if mod not in ['name', 'value', 'type']:
mods[mod] = attrs_dir[mod]
-
+
value = ''
if attrs_dir['type'] == VARIABLE_TYPE_LIST_STR:
value = []
@@ -74,37 +74,37 @@
value = (attrs_dir['value'] == 'true')
else:
raise 'invalid variable'
-
+
return Variable(attrs_dir['name'], value, mods)
class Variable:
-
+
def __init__(self, name, value, mods={}):
self.__name = str(name)
self.__mods = mods
self.set_value(value)
return
-
+
def get_name(self):
return self.__name
-
+
def get_value(self):
return self.__value
def set_value(self, value):
if self.__is_bool(value):
self.__type = VARIABLE_TYPE_BOOL
self.__value = value
-
+
elif self.__is_int(value):
self.__type = VARIABLE_TYPE_INT
self.__value = int(value)
-
+
elif self.__is_float(value):
self.__type = VARIABLE_TYPE_FLOAT
self.__value = float(value)
-
+
elif self.__is_list(value):
raise "lists not implemented"
if self.__is_int(value[0]):
@@ -118,11 +118,11 @@
elif self.__is_xml(value):
self.__type = VARIABLE_TYPE_XML
self.__value = value
-
+
else:
self.__value = str(value)
self.__type = VARIABLE_TYPE_STRING
-
+
def type(self):
if 'valid_values' in self.__mods:
if self.__type == VARIABLE_TYPE_INT:
@@ -130,13 +130,13 @@
elif self.__type == VARIABLE_TYPE_STRING:
return VARIABLE_TYPE_STRING_SEL
return self.__type
-
+
def get_modifiers(self):
return self.__mods
def set_modifier(self, mod_name, mod_value):
self.__mods[mod_name] = mod_value
return
-
+
def export_xml(self, doc):
elem = doc.createElement(VARIABLE_TAG)
elem.setAttribute('name', self.__name)
@@ -182,10 +182,10 @@
return VARIABLE_TYPE_XML
else:
return VARIABLE_TYPE_STRING
-
-
-
-
+
+
+
+
def __is_xml(self, value):
try:
value.toxml()
@@ -224,10 +224,10 @@
except:
pass
return False
-
-
+
+
class VariableList(Variable):
-
+
def __init__(self, name, value, mods, list_type):
if list_type != VARIABLE_TYPE_LIST_STR and list_type != VARIABLE_TYPE_LIST_XML:
raise 'invalid list type'
@@ -238,29 +238,29 @@
self.__type = list_type
self.__value = value
pass
-
+
def get_name(self):
return self.__name
-
+
def get_value(self):
return self.__value
def set_value(self, value):
raise 'VariableList.set_value() not implemented'
-
+
def type(self):
return self.__type
-
+
def get_modifiers(self):
return self.__mods
def set_modifier(self, mod_name, mod_value):
self.__mods[mod_name] = mod_value
return
-
+
def export_xml(self, doc):
elem = doc.createElement(VARIABLE_TAG)
elem.setAttribute('name', self.__name)
elem.setAttribute('type', self.type())
-
+
for x in self.get_value():
if self.type() == VARIABLE_TYPE_LIST_XML:
elem.appendChild(x)
@@ -271,6 +271,6 @@
for mod in self.__mods:
elem.setAttribute(str(mod), str(self.__mods[mod]))
return elem
-
-
-
+
+
+
--- conga/ricci/test/add_sources_renderer.py 2006/06/28 20:20:20 1.3
+++ conga/ricci/test/add_sources_renderer.py 2007/09/11 02:45:29 1.4
@@ -30,50 +30,50 @@
return 'missing mapper_state_ind parameter'
if 'new_sources_xml' not in params:
return 'missing targets_xml parameter'
-
+
xml_buff = params['new_sources_xml'].replace(PARENTH_SIG, '"')
new_sources_node = minidom.parseString(xml_buff).firstChild
-
+
hostname = params['hostname']
mapper_type = params['mapper_type']
mapper_id = params['mapper_id']
mapper_state_ind = params['mapper_state_ind']
-
+
buff = '<P ALIGN=CENTER><B>"Add Sources to Mapper" Dialog<br>'
buff += 'Mapper Type: "' + mapper_type + '"<br>'
buff += 'Mapper ID: "' + mapper_id + '"</B></P>'
-
+
buff += new_sources_node.toxml()
-
-
+
+
### sources ###
-
+
buff += '<pre><FORM METHOD="POST">'
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + hostname + '">'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="add_sources_commit">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_type" VALUE="' + mapper_type + '">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_id" VALUE="' + mapper_id + '">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_state_ind" VALUE="' + mapper_state_ind + '">'
-
+
buff += 'Select BDs to add to mapper: <P>'
-
+
for node in new_sources_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
if node.nodeName == BD_TYPE:
name = SOURCE_XML_NODE_SIG
name += node.toxml().replace('"', PARENTH_SIG)
props = PropsObject().import_xml(node)
-
+
buff += '<INPUT TYPE=CHECKBOX NAME="' + name + '"> '
-
+
buff += node.getAttribute("path")
buff += ', provided by mapper "' + node.getAttribute('mapper_id') + '" '
buff += '\n\tProperties:\n'
-
+
buff += render_props(props, '\t\t')
-
+
buff += '\n'
-
+
buff += '<INPUT TYPE=SUBMIT VALUE="Add Selected Sources">'
buff += '</FORM></pre><br>'
return buff
@@ -91,17 +91,17 @@
return 'missing mapper_id parameter'
if 'mapper_state_ind' not in params:
return 'missing mapper_state_ind parameter'
-
-
+
+
hostname = params['hostname']
mapper_type = params['mapper_type']
mapper_id = params['mapper_id']
mapper_state_ind = params['mapper_state_ind']
-
+
buff = '<P ALIGN=CENTER><B>Adding New Sources to<br>'
buff += 'Mapper Type: "' + mapper_type + '"<br>'
buff += 'Mapper ID: "' + mapper_id + '"<br></B></P>'
-
+
sources = []
for name in params:
if name.startswith(SOURCE_XML_NODE_SIG):
@@ -110,11 +110,11 @@
bd_node = minidom.parseString(xml_buff).firstChild
sources.append(bd_node)
#
-
-
-
+
+
+
### prepare request ###
-
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -127,9 +127,9 @@
func.appendChild(Variable('mapper_state_ind', mapper_state_ind).export_xml(doc))
func.appendChild(VariableList("bds", sources, {}, VARIABLE_TYPE_LIST_XML).export_xml(doc))
req.appendChild(func)
-
+
### submit request ###
-
+
com = Communicator(params['hostname'])
ret = None
try:
@@ -138,10 +138,10 @@
return 'failure communicating to ' + params['hostname']
if ret == None:
return 'failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -150,7 +150,7 @@
resp_node = node
if resp_node == None:
return 'failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -159,7 +159,7 @@
func_node = node
if func_node == None:
return 'failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -178,8 +178,8 @@
else:
### SUCCESS ###
buff += '<br><br><P ALIGN=CENTER><B>SUCCESS<br></B></P>'
-
-
+
+
buff += render_mapper(vars['mapper'].get_value(), hostname)
-
+
return buff
--- conga/ricci/test/auth_page.py 2006/03/23 17:12:09 1.2
+++ conga/ricci/test/auth_page.py 2007/09/11 02:45:29 1.3
@@ -11,21 +11,21 @@
def auth_page(params):
if 'hostname' not in params:
return host_selection(params)
-
+
hostname = params['hostname']
already_entered = False
if 'already_entered' in params:
already_entered = (params['already_entered'] == 'true')
pass
-
+
comm = Communicator(hostname)
-
+
authed = False
try:
authed = comm.auth_check()
except:
return 'There is no ricci running on ' + hostname
-
+
if authed:
p2 = {}
p2['hostname'] = hostname
@@ -35,10 +35,10 @@
buff = '<br><P ALIGN=CENTER><B>Authentication to \''
buff += hostname
buff += '\' required</B></P>'
-
+
if already_entered:
buff += '<P ALIGN=CENTER>Invalid password, try again</P><br>'
-
+
buff += '<FORM METHOD="POST">'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="authenticate">'
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + hostname + '">'
@@ -46,7 +46,7 @@
buff += '<INPUT TYPE=PASSWORD SIZE=50 NAME=password VALUE=""></P>'
buff += '<INPUT TYPE=SUBMIT VALUE=Authenticate>'
buff += '</FORM>'
-
+
return buff
pass
@@ -60,17 +60,17 @@
p2['already_entered'] = 'true'
#return 'missing password parameter'
return auth_page(p2)
-
+
hostname = params['hostname']
password = params['password']
-
+
comm = Communicator(hostname)
-
+
try:
comm.authenticate(password)
except:
return 'There is no ricci running on ' + hostname
-
+
p2 = {}
p2['hostname'] = hostname
p2['already_entered'] = 'true'
--- conga/ricci/test/bd_remove_renderer.py 2006/04/07 16:42:40 1.2
+++ conga/ricci/test/bd_remove_renderer.py 2007/09/11 02:45:29 1.3
@@ -19,29 +19,29 @@
return 'missing hostname parameter'
if 'bd_xml' not in params:
return 'missing bd_xml parameter'
-
+
hostname = params['hostname']
indent = '\t'
#indent = ' '
-
+
xml_buff = params['bd_xml'].replace(PARENTH_SIG, '"')
bd_node = minidom.parseString(xml_buff).firstChild
-
-
+
+
path = bd_node.getAttribute('path')
state_ind = bd_node.getAttribute('state_ind')
mapper_type = bd_node.getAttribute('mapper_type')
mapper_id = bd_node.getAttribute('mapper_id')
-
-
+
+
buff = '<P ALIGN=CENTER><B>Removing Block Device<br><br>'
buff += path + '<br><br><br></B></P>'
-
+
buff += '<pre>'
-
+
#buff += bd_node.toxml()
-
-
+
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -51,7 +51,7 @@
func.setAttribute('name', 'remove_bd')
func.appendChild(Variable('bd', bd_node).export_xml(doc))
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -59,10 +59,10 @@
return '1. failure communicating to ' + params['hostname']
if ret == None:
return '2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -71,7 +71,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -80,7 +80,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -94,12 +94,12 @@
msg = params['hostname'] + ' reported error: '
msg += vars['error_code'].get_value()
return msg
-
+
buff += '<P ALIGN=CENTER><B>SUCCESS<br><br></B></P>'
-
+
buff += '<P ALIGN=CENTER><B>Displaying Mapper<br><br></B></P>'
-
+
params['mapper_id'] = mapper_id
params['mapper_type'] = mapper_type
-
+
return buff + mapper_renderer(params)
--- conga/ricci/test/bd_renderer.py 2006/04/07 16:42:40 1.2
+++ conga/ricci/test/bd_renderer.py 2007/09/11 02:45:29 1.3
@@ -13,22 +13,22 @@
class bd_renderer:
-
+
def __init__(self):
return
-
-
+
+
def render_source(self, hostname, bd_node, indent='\t'):
path = bd_node.getAttribute('path')
state_ind = bd_node.getAttribute('state_ind')
mapper_type = bd_node.getAttribute('mapper_type')
mapper_id = bd_node.getAttribute('mapper_id')
-
-
+
+
### properties ###
-
+
props = PropsObject().import_xml(bd_node)
-
+
buff = '<FORM METHOD="POST">'
#buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="mapper_renderer">'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="bd_renderer">'
@@ -43,21 +43,21 @@
buff += '\n' + indent + indent + '- BD Properties:\n'
buff += render_props(props, indent + indent + indent)
buff += '</FORM>'
-
-
+
+
### content ###
-
-
+
+
content_node = None
for node in bd_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
if node.nodeName == CONTENT_TYPE:
content_node = node
content_type = content_node.getAttribute('type')
-
-
+
+
buff += '<FORM METHOD="POST">'
-
+
if content_type == CONTENT_NONE_TYPE:
buff += indent + indent + '- Content: none\n'
return buff
@@ -78,24 +78,24 @@
buff += indent + indent + indent + '- Properties:\n'
props = PropsObject().import_xml(content_node)
buff += render_props(props, indent + indent + indent + indent)
-
+
buff += '</FORM>'
-
+
return buff
-
-
-
+
+
+
def render_target(self, hostname, bd_node, indent='\t'):
path = bd_node.getAttribute('path')
state_ind = bd_node.getAttribute('state_ind')
mapper_type = bd_node.getAttribute('mapper_type')
mapper_id = bd_node.getAttribute('mapper_id')
-
-
+
+
### properties ###
-
+
props = PropsObject().import_xml(bd_node)
-
+
buff = '<FORM METHOD="POST">'
buff += indent + path
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="bd_renderer">'
@@ -109,21 +109,21 @@
buff += '\n' + indent + indent + '- BD Properties:\n'
buff += '</FORM>'
buff += render_props(props, indent + indent + indent)
-
-
+
+
### content ###
-
-
+
+
content_node = None
for node in bd_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
if node.nodeName == CONTENT_TYPE:
content_node = node
content_type = content_node.getAttribute('type')
-
-
+
+
buff += '<FORM METHOD="POST">'
-
+
if content_type == CONTENT_NONE_TYPE:
buff += indent + indent + '- Content: none\n'
return buff
@@ -142,11 +142,11 @@
buff += indent + indent + indent + '- Properties:\n'
props = PropsObject().import_xml(content_node)
buff += render_props(props, indent + indent + indent + indent)
-
+
buff += '</FORM>'
-
+
return buff
-
+
pass
@@ -156,63 +156,63 @@
return 'missing hostname parameter'
if 'bd_xml' not in params:
return 'missing bd_xml parameter'
-
+
hostname = params['hostname']
indent = '\t'
#indent = ' '
-
+
xml_buff = params['bd_xml'].replace(PARENTH_SIG, '"')
bd_node = minidom.parseString(xml_buff).firstChild
-
-
+
+
path = bd_node.getAttribute('path')
state_ind = bd_node.getAttribute('state_ind')
mapper_type = bd_node.getAttribute('mapper_type')
mapper_id = bd_node.getAttribute('mapper_id')
-
-
+
+
buff = '<P ALIGN=CENTER><B>Editing Block Device<br><br>'
buff += path + '<br><br><br></B></P>'
-
+
buff += '<pre>'
-
+
#buff += bd_node.toxml()
-
+
buff += '<FORM METHOD="POST">'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="bd_renderer">'
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + hostname + '">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_type" VALUE="' + mapper_type + '">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_id" VALUE="' + mapper_id + '">'
buff += '<INPUT TYPE=HIDDEN NAME="bd_xml" VALUE="' + bd_node.toxml().replace('"', PARENTH_SIG) + '">'
-
-
+
+
### providing mapper ###
-
-
+
+
buff += 'Block Device is provided by mapper "' + mapper_id + '" <INPUT TYPE=SUBMIT NAME="sub_page" VALUE="Display Mapper">\n\n'
-
-
+
+
### properties ###
-
-
+
+
buff += '\nBlock Device Properties:\n'
props = PropsObject().import_xml(bd_node)
buff += render_props_editor(props, indent)
-
-
+
+
### content ###
-
-
+
+
buff += render_edit_content(bd_node, indent)
-
-
+
+
### apply button ###
-
-
+
+
buff += '\n\n\n<INPUT TYPE=SUBMIT NAME="sub_page" VALUE="Apply Changes">\n'
buff += '</FORM>'
buff += '</pre>'
-
+
return buff
@@ -225,36 +225,36 @@
return 'missing content_xml parameter'
if 'current_content_id' not in params:
return 'missing current_content_id parameter'
-
+
indent = '\t'
#indent = ' '
-
+
current_content_id = params['current_content_id']
hostname = params['hostname']
-
+
xml_buff = params['bd_xml'].replace(PARENTH_SIG, '"')
bd_node = minidom.parseString(xml_buff).firstChild
-
+
xml_buff = params['content_xml'].replace(PARENTH_SIG, '"')
new_content_node = minidom.parseString(xml_buff).firstChild
-
+
path = bd_node.getAttribute('path')
state_ind = bd_node.getAttribute('state_ind')
mapper_type = bd_node.getAttribute('mapper_type')
mapper_id = bd_node.getAttribute('mapper_id')
-
-
+
+
buff = '<P ALIGN=CENTER><B>Applying changes to Block Device<br><br>'
buff += path + '<br><br><br></B></P>'
-
+
buff += '<pre>'
-
+
#buff += bd_node.toxml()
#buff += new_content_node.toxml()
-
-
+
+
### update bd props ##
-
+
new_values = {}
for param in params:
if param.startswith(VARIABLE_SIG):
@@ -264,23 +264,23 @@
if node.nodeName == str(PROPS_TAG):
props_node = node
update_props(props_node, new_values)
-
-
+
+
### update content ###
-
-
-
+
+
+
content_reconstruct(bd_node,
new_content_node,
params,
current_content_id)
-
-
-
+
+
+
#buff += bd_node.toxml()
-
-
-
+
+
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -290,7 +290,7 @@
func.setAttribute('name', 'modify_bd')
func.appendChild(Variable('bd', bd_node).export_xml(doc))
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -298,10 +298,10 @@
return '1. failure communicating to ' + params['hostname']
if ret == None:
return '2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -310,7 +310,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -319,7 +319,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -333,11 +333,11 @@
msg = params['hostname'] + ' reported error: '
msg += vars['error_code'].get_value()
return msg
-
+
if 'bd' not in vars:
return 'missing bd var'
buff += '<P ALIGN=CENTER><B>SUCCESS<br><br></B></P>'
buff += 'Newly modified target:\n'
buff += bd_renderer().render_source(params['hostname'], vars['bd'].get_value())
-
+
return buff
--- conga/ricci/test/communicator.py 2006/04/07 16:42:40 1.3
+++ conga/ricci/test/communicator.py 2007/09/11 02:45:29 1.4
@@ -11,24 +11,24 @@
def __init__(self, hostname, port=11111):
self.__hostname = hostname
self.__port = port
-
+
self.__privkey_file = "/usr/share/ricci-storage-web/certs/privkey.pem"
self.__cert_file = "/usr/share/ricci-storage-web/certs/cacert.pem"
-
+
return
-
-
+
+
def process(self, xml_out):
# socket
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((self.__hostname, self.__port))
ss = ssl(sock, self.__privkey_file, self.__cert_file)
-
+
# receive ricci header
hello = self.__receive(ss)
if hello != None:
print hello.toxml()
-
+
# send request
doc = minidom.Document()
ricci = doc.createElement("ricci")
@@ -41,17 +41,17 @@
module.setAttribute("name", "storage")
batch.appendChild(module)
ricci.appendChild(batch)
-
-
-
+
+
+
req = minidom.parseString(xml_out)
module.appendChild(req.firstChild)
-
-
+
+
#self.__sendall(doc.toprettyxml(), ss)
self.__sendall(doc.toxml(), ss)
-
-
+
+
# receive response
doc = self.__receive(ss)
if doc != None:
@@ -81,39 +81,39 @@
else:
doc = minidom.Document()
doc.appendChild(resp_node)
-
+
sock.shutdown(2)
sock.close()
return doc
-
-
-
+
+
+
def auth_check(self):
# socket
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((self.__hostname, self.__port))
ss = ssl(sock, self.__privkey_file, self.__cert_file)
-
+
# receive ricci header
hello = self.__receive(ss)
if hello != None:
print hello.toxml()
pass
return hello.firstChild.getAttribute('authenticated') == 'true'
-
-
+
+
def authenticate(self, password):
# socket
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((self.__hostname, self.__port))
ss = ssl(sock, self.__privkey_file, self.__cert_file)
-
+
# receive ricci header
hello = self.__receive(ss)
if hello != None:
print hello.toxml()
pass
-
+
# send request
doc = minidom.Document()
ricci = doc.createElement("ricci")
@@ -123,8 +123,8 @@
doc.appendChild(ricci)
self.__sendall(doc.toxml(), ss)
return
-
-
+
+
def __sendall(self, str, ssl_sock):
print str
s = str
@@ -132,8 +132,8 @@
pos = ssl_sock.write(s)
s = s[pos:]
return
-
-
+
+
def __receive(self, ssl_sock):
doc = None
xml_in = ''
@@ -157,4 +157,4 @@
except:
pass
return doc
-
+
--- conga/ricci/test/content_renderer.py 2006/03/13 20:48:27 1.1
+++ conga/ricci/test/content_renderer.py 2007/09/11 02:45:29 1.2
@@ -16,7 +16,7 @@
def render_edit_content(bd_node, indent):
buff = ''
-
+
content_node = None
for node in bd_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -24,7 +24,7 @@
content_node = node
if content_node == None:
return 'missing content tag'
-
+
available_contents = []
for node in content_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -35,7 +35,7 @@
if node.nodeName == 'content_template':
available_contents.append(node)
#
-
+
c_id = gen_content_id(content_node)
buff += '<INPUT TYPE=HIDDEN NAME="current_content_id" VALUE="' + c_id + '">'
if len(available_contents) == 0:
@@ -49,14 +49,14 @@
buff += content_node.toxml().replace('"', PARENTH_SIG)
buff += '"> '
buff += render_content('Current content: ', content_node, c_id, indent)
-
+
for ct in available_contents:
ct_id = gen_content_id(ct)
buff += '\n<INPUT TYPE=RADIO NAME="content_xml" VALUE="'
buff += ct.toxml().replace('"', PARENTH_SIG)
buff += '"> '
buff += render_content('New content: ', ct, ct_id, indent)
-
+
return buff
@@ -75,7 +75,7 @@
content_id,
indent):
buff = msg
-
+
content_type = content_node.getAttribute('type')
if content_type == CONTENT_NONE_TYPE:
buff += 'none\n'
@@ -92,8 +92,8 @@
buff += render_props_editor(props,
indent + indent,
content_id)
-
-
+
+
return buff
@@ -114,7 +114,7 @@
if node.nodeName == str(PROPS_TAG):
props_node = node
update_props(props_node, new_values)
-
+
# insert new_content_node where it belongs
content_node = None
for node in bd_node.childNodes:
@@ -133,8 +133,8 @@
replacement_holder = node
replacement_holder.appendChild(new_content_node)
#
-
- return
+
+ return
--- conga/ricci/test/dispatcher.py 2006/03/13 20:48:27 1.1
+++ conga/ricci/test/dispatcher.py 2007/09/11 02:45:29 1.2
@@ -11,20 +11,20 @@
class Dispatcher:
-
+
def __init__(self, params):
self.params = params
-
-
+
+
def get_html(self):
#print '<pre>'
#for key in self.params:
# print key + ': ' + self.params[key]
# pass
#print '</pre>'
-
+
buff = ''
-
+
if 'hostname' in self.params:
buff += '<P>'
buff += '<FORM METHOD="POST">\n'
@@ -32,13 +32,13 @@
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + self.params['hostname'] + '">\n'
buff += '<INPUT TYPE=SUBMIT VALUE="Main page">\n'
buff += '</FORM><P/>\n'
-
-
+
+
if 'page' not in self.params:
page_type = 'host_selection'
else:
page_type = self.params['page']
-
+
if page_type == 'host_selection':
return host_selection(self.params)
elif page_type == 'auth_page':
@@ -47,7 +47,7 @@
return authenticate(self.params)
elif page_type == 'main_page':
return main_page(self.params)
-
+
elif page_type == 'mapper_renderer':
return buff + mapper_renderer(self.params)
elif page_type == 'apply_mapper_props':
@@ -71,16 +71,16 @@
return buff + new_target_renderer(self.params)
elif page_type == 'commit_new_target':
return buff + commit_new_target(self.params)
-
+
elif page_type == 'add_sources':
return buff + add_sources_renderer(self.params)
elif page_type == 'add_sources_commit':
return buff + add_sources_commit(self.params)
-
+
elif page_type == 'new_mapper_selection':
return buff + new_mapper_renderer(self.params)
elif page_type == 'commit_new_mapper':
return buff + commit_new_mapper(self.params)
-
+
return buff + '<P ALIGN=CENTER><B>Page Not Implemented</B></P>'
-
+
--- conga/ricci/test/host_selection.py 2006/03/13 20:48:27 1.1
+++ conga/ricci/test/host_selection.py 2007/09/11 02:45:29 1.2
@@ -1,7 +1,7 @@
def host_selection(params):
-
+
buff = '<pre>'
buff += 'Simple website used to test ricci\'s storage module\n\n'
buff += 'There are three main objects:\n'
@@ -12,13 +12,13 @@
buff += ' - mapper source (Physical Volume, partition table source, ...)\n'
buff += ' - none\n'
buff += '\n</pre>'
-
+
buff += '<FORM METHOD="POST">'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="auth_page">'
buff += '<P>Enter hostname of server to manage: '
buff += '<INPUT TYPE=TEXT SIZE=50 NAME=hostname VALUE=""></P>'
buff += '<INPUT TYPE=SUBMIT VALUE=Continue>'
buff += '</FORM>'
-
+
return buff
--- conga/ricci/test/main_page.py 2006/04/07 16:42:40 1.2
+++ conga/ricci/test/main_page.py 2007/09/11 02:45:29 1.3
@@ -11,14 +11,14 @@
def main_page(params):
if 'hostname' not in params:
return 'missing hostname parameter'
-
-
+
+
buff = '<FORM METHOD="POST">\n'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="host_selection">\n'
buff += '<INPUT TYPE=SUBMIT VALUE="Select server to manage">\n'
buff += '</FORM><P/><br>\n'
-
-
+
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -27,7 +27,7 @@
func = doc.createElement("function_call")
func.setAttribute('name', 'get_mapper_ids')
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -35,10 +35,10 @@
return buff + '<br>1. failure communicating to ' + params['hostname']
if ret == None:
return buff + '<br>2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -47,7 +47,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -56,7 +56,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -70,7 +70,7 @@
return params['hostname'] + ' reported error'
if 'mapper_ids' not in vars:
return 'missing mapper_ids variable'
-
+
mapper_ids = {}
for node in vars['mapper_ids'].get_value():
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -81,12 +81,12 @@
mapper_ids[type].append(id)
else:
mapper_ids[type] = [id]
-
+
buff += '<P ALIGN=CENTER><B>Mappers</B></P>'
-
-
+
+
### HDs ###
-
+
buff += '<P>Hard Drives (Mapper Type - "hard_drives"):'
buff += '<FORM METHOD="POST">\n'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="mapper_renderer">\n'
@@ -95,8 +95,8 @@
buff += '<INPUT TYPE=HIDDEN NAME="mapper_id" VALUE="hard_drives:">\n'
buff += '<INPUT TYPE=SUBMIT VALUE="View Hard Drives">\n'
buff += '</FORM><P/><br>\n'
-
-
+
+
for m_type in mapper_ids:
m_ids = mapper_ids[m_type]
if m_type == 'hard_drives':
@@ -144,13 +144,13 @@
buff += '<P/><br>'
pass
pass
-
-
+
+
buff += '<P ALIGN=CENTER><B>'
buff += '<FORM METHOD="POST">\n'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="new_mapper_selection">\n'
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + params['hostname'] + '">\n'
buff += '<INPUT TYPE=SUBMIT VALUE="Create New Mapper">\n'
buff += '</FORM></B></P>\n'
-
+
return buff
--- conga/ricci/test/mapper_renderer.py 2006/04/07 16:42:40 1.2
+++ conga/ricci/test/mapper_renderer.py 2007/09/11 02:45:29 1.3
@@ -22,7 +22,7 @@
return 'missing mapper_type parameter'
if 'mapper_id' not in params:
return 'missing mapper_id parameter'
-
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -32,7 +32,7 @@
func.setAttribute('name', 'get_mappers')
func.appendChild(Variable('mapper_id', params['mapper_id']).export_xml(doc))
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -40,10 +40,10 @@
return '1. failure communicating to ' + params['hostname']
if ret == None:
return '2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -52,7 +52,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -61,7 +61,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -73,11 +73,11 @@
return '5. failure communicating to ' + params['hostname']
if vars['success'].get_value() != True:
return params['hostname'] + ' reported error'
-
+
if vars['mappers'] == None:
return 'illegal return value from ' + params['hostname']
-
-
+
+
mapper = None
for node in vars['mappers'].get_value():
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -85,7 +85,7 @@
mapper = node
if mapper == None:
return 'mapper not found'
-
+
return render_mapper(mapper, params['hostname'])
@@ -111,8 +111,8 @@
new_sources_node == None or
new_targets_node == None):
return 'illegal return value from ' + hostname
-
-
+
+
id = mapper.getAttribute('mapper_id')
type = mapper.getAttribute('mapper_type')
pretty_type = type
@@ -122,11 +122,11 @@
pretty_type = 'Partition Table'
elif type == 'hard_drives':
pretty_type = 'System Hard Drives'
-
+
buff = '<P ALIGN=CENTER><B>Mapper Type: "' + pretty_type + '"<br>'
buff += 'Mapper ID: "' + id + '"</B></P>'
-
-
+
+
### props editor ###
props = PropsObject().import_xml(mapper)
buff += '\n<FORM METHOD="POST">\n'
@@ -142,7 +142,7 @@
buff += mapper.toxml().replace('"', PARENTH_SIG) + '">\n'
buff += '</pre>'
buff += '</FORM>'
-
+
### display remove mapper button ###
if props.get_prop('removable') == True:
buff += '<FORM METHOD="POST">\n'
@@ -155,8 +155,8 @@
buff += '<INPUT TYPE=SUBMIT VALUE="Remove Mapper">\n'
buff += '</FORM>'
pass
-
-
+
+
### display sources ###
buff += '<pre>Sources:\n'
for node in sources_node.childNodes:
@@ -165,8 +165,8 @@
buff += bd_renderer().render_source(hostname, node)
buff += '\n'
buff += '<pre/>\n'
-
-
+
+
### new sources ###
has_new_sources = False
for node in new_sources_node.childNodes:
@@ -184,9 +184,9 @@
buff += '\t<INPUT TYPE=SUBMIT VALUE="Add New Source">'
buff += '</FORM>'
pass
-
-
-
+
+
+
### display targets ###
buff += '<pre>Targets:\n'
for node in targets_node.childNodes:
@@ -195,8 +195,8 @@
buff += bd_renderer().render_target(hostname, node)
buff += '\n'
buff +='<pre/>\n'
-
-
+
+
### new targets ###
has_new_targets = False
for node in new_targets_node.childNodes:
@@ -213,9 +213,9 @@
buff += '\t<INPUT TYPE=SUBMIT VALUE="Add New Target">'
buff += '</FORM>'
pass
-
-
-
+
+
+
return buff
@@ -228,26 +228,26 @@
return 'missing mapper_type parameter'
if 'mapper_id' not in params:
return 'missing mapper_id parameter'
-
+
indent = '\t'
#indent = ' '
-
+
hostname = params['hostname']
mapper_type = params['mapper_type']
mapper_id = params['mapper_id']
-
+
xml_buff = params['mapper_xml'].replace(PARENTH_SIG, '"')
mapper_node = minidom.parseString(xml_buff).firstChild
-
-
+
+
buff = '<P ALIGN=CENTER><B>Applying changes to mapper<br><br>'
buff += mapper_id + '<br><br><br></B></P>'
-
+
buff += '<pre>'
-
-
+
+
### update props ##
-
+
new_values = {}
for param in params:
if param.startswith(VARIABLE_SIG):
@@ -257,11 +257,11 @@
if node.nodeName == str(PROPS_TAG):
props_node = node
update_props(props_node, new_values)
-
-
+
+
#buff += mapper_node.toxml()
-
-
+
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -271,7 +271,7 @@
func.setAttribute('name', 'modify_mapper')
func.appendChild(Variable('mapper', mapper_node).export_xml(doc))
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -279,10 +279,10 @@
return '1. failure communicating to ' + params['hostname']
if ret == None:
return '2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -291,7 +291,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -300,7 +300,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -314,13 +314,13 @@
msg = params['hostname'] + ' reported error: '
msg += vars['error_code'].get_value()
return msg
-
+
if 'mapper' not in vars:
return 'missing mapper var'
buff += '<P ALIGN=CENTER><B>SUCCESS<br><br></B></P>'
buff += 'Newly modified mapper:\n'
buff += render_mapper(vars['mapper'].get_value(), hostname)
-
+
return buff
@@ -334,23 +334,23 @@
return 'missing mapper_id parameter'
if 'mapper_xml' not in params:
return 'missing mapper_xml parameter'
-
+
hostname = params['hostname']
mapper_type = params['mapper_type']
mapper_id = params['mapper_id']
-
+
xml_buff = params['mapper_xml'].replace(PARENTH_SIG, '"')
mapper_node = minidom.parseString(xml_buff).firstChild
-
-
+
+
buff = '<P ALIGN=CENTER><B>Removing Mapper<br>'
buff += 'Mapper Type: "' + mapper_type + '"<br>'
buff += 'Mapper ID: "' + mapper_id + '"<br></B></P>'
-
-
-
+
+
+
# request
-
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -360,7 +360,7 @@
func.setAttribute('name', 'remove_mapper')
func.appendChild(Variable('mapper', mapper_node).export_xml(doc))
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -368,10 +368,10 @@
return '1. failure communicating to ' + params['hostname']
if ret == None:
return '2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -380,7 +380,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -389,7 +389,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -408,6 +408,6 @@
else:
### SUCCESS ###
buff += '<br><br><P ALIGN=CENTER><B>SUCCESS<br></B></P>'
-
+
return buff + main_page(params)
--- conga/ricci/test/new_mapper_renderer.py 2006/04/07 16:42:40 1.2
+++ conga/ricci/test/new_mapper_renderer.py 2007/09/11 02:45:29 1.3
@@ -17,11 +17,11 @@
def new_mapper_renderer(params):
if 'hostname' not in params:
return 'missing hostname parameter'
-
+
buff = '<P ALIGN=CENTER><B>New Mapper Creation Dialog<br></B></P>'
-
-
-
+
+
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -30,7 +30,7 @@
func = doc.createElement("function_call")
func.setAttribute('name', 'get_mapper_templates')
req.appendChild(func)
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -38,10 +38,10 @@
return '1. failure communicating to ' + params['hostname']
if ret == None:
return '2. failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -50,7 +50,7 @@
resp_node = node
if resp_node == None:
return '3. failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -59,7 +59,7 @@
func_node = node
if func_node == None:
return '4. failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -73,7 +73,7 @@
return params['hostname'] + ' reported error'
if 'mapper_templates' not in vars:
return 'missing mapper_templates variable'
-
+
mapper_temps = []
for node in vars['mapper_templates'].get_value():
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -81,8 +81,8 @@
mapper_temps.append(node)
if len(mapper_temps) == 0:
return buff + ' no available mapper_templates on ' + params['hostname']
-
-
+
+
### dialogs ###
for template_node in mapper_temps:
buff += '<pre>New Mapper ("' + template_node.getAttribute('mapper_type') + '"): '
@@ -90,11 +90,11 @@
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="commit_new_mapper">'
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + params['hostname'] + '">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_template_xml" VALUE="' + template_node.toxml().replace('"', PARENTH_SIG) + '">'
-
+
### props ###
props = PropsObject().import_xml(template_node)
buff += '\tproperties:\n' + render_props_editor(props, '\t\t')
-
+
### sources ###
new_sources_node = None
for node in template_node.childNodes:
@@ -108,7 +108,7 @@
path = node.getAttribute('path')
buff += '\t\t<INPUT TYPE=CHECKBOX NAME="' + BDPATH_SIG + path + '">'
buff += path + '\n'
-
+
# "create mapper" button
buff += '<INPUT TYPE=SUBMIT VALUE="Create Mapper">'
buff += '</FORM></pre><br>'
@@ -123,14 +123,14 @@
return 'missing hostname parameter'
if 'mapper_template_xml' not in params:
return 'missing bd_template_xml parameter'
-
+
xml_buff = params['mapper_template_xml'].replace(PARENTH_SIG, '"')
mapper_template_node = minidom.parseString(xml_buff).firstChild
-
+
buff = '<P ALIGN=CENTER><B>Creating New Mapper<br></B></P>'
-
+
### update mapper_template_node ###
-
+
new_values = {}
for param in params:
if param.startswith(VARIABLE_SIG):
@@ -141,7 +141,7 @@
if node.nodeName == str(PROPS_TAG):
props_node = node
update_props(props_node, new_values)
-
+
# sources
paths = []
for param in params:
@@ -166,10 +166,10 @@
for bd in bd_nodes:
node.appendChild(bd)
print mapper_template_node.toxml()
-
-
+
+
### prepare request ###
-
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("API_version", "1.0")
@@ -179,9 +179,9 @@
func.setAttribute('name', 'create_mapper')
func.appendChild(Variable('mapper', mapper_template_node).export_xml(doc))
req.appendChild(func)
-
+
### submit request ###
-
+
com = Communicator(params['hostname'])
ret = None
try:
@@ -190,10 +190,10 @@
return 'failure communicating to ' + params['hostname']
if ret == None:
return 'failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -202,7 +202,7 @@
resp_node = node
if resp_node == None:
return 'failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -211,7 +211,7 @@
func_node = node
if func_node == None:
return 'failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -230,6 +230,6 @@
else:
### SUCCESS ###
buff += '<br><br><P ALIGN=CENTER><B>SUCCESS<br></B></P>'
-
+
buff += render_mapper(vars['mapper'].get_value(), params['hostname'])
return buff
--- conga/ricci/test/new_target_renderer.py 2006/04/07 16:42:40 1.2
+++ conga/ricci/test/new_target_renderer.py 2007/09/11 02:45:29 1.3
@@ -23,20 +23,20 @@
return 'missing mapper_id parameter'
if 'targets_xml' not in params:
return 'missing targets_xml parameter'
-
+
xml_buff = params['targets_xml'].replace(PARENTH_SIG, '"')
targets_node = minidom.parseString(xml_buff).firstChild
-
+
mapper_type = params['mapper_type']
mapper_id = params['mapper_id']
-
+
buff = '<P ALIGN=CENTER><B>New Target Creation Dialog<br>'
buff += 'Mapper Type: "' + mapper_type + '"<br>'
buff += 'Mapper ID: "' + mapper_id + '"</B></P>'
-
+
buff += targets_node.toxml()
-
-
+
+
### target ###
for node in targets_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -48,14 +48,14 @@
buff += '<INPUT TYPE=HIDDEN NAME="mapper_type" VALUE="' + mapper_type + '">'
buff += '<INPUT TYPE=HIDDEN NAME="mapper_id" VALUE="' + mapper_id + '">'
buff += '<INPUT TYPE=HIDDEN NAME="bd_template_xml" VALUE="' + node.toxml().replace('"', PARENTH_SIG) + '">'
-
+
### props ###
props = PropsObject().import_xml(node)
buff += render_props_editor(props, '\t')
-
+
### content ###
buff += render_edit_content(node, '\t')
-
+
buff += '<INPUT TYPE=SUBMIT VALUE="Create Target">'
buff += '</FORM></pre><br>'
return buff
@@ -77,31 +77,31 @@
return 'missing content_xml parameter'
if 'current_content_id' not in params:
return 'missing current_content_id parameter'
-
+
xml_buff = params['bd_template_xml'].replace(PARENTH_SIG, '"')
bd_template_node = minidom.parseString(xml_buff).firstChild
-
+
current_content_id = params['current_content_id']
-
+
xml_buff = params['content_xml'].replace(PARENTH_SIG, '"')
new_content_node = minidom.parseString(xml_buff).firstChild
-
-
+
+
mapper_type = params['mapper_type']
mapper_id = params['mapper_id']
-
+
buff = '<P ALIGN=CENTER><B>Adding New Target<br>'
buff += 'Mapper Type: "' + mapper_type + '"<br>'
buff += 'Mapper ID: "' + mapper_id + '"<br></B></P>'
-
-
+
+
### update bd_template_node ###
-
+
new_values = {}
for param in params:
if param.startswith(VARIABLE_SIG):
new_values[param[len(VARIABLE_SIG):]] = params[param]
-
+
props_node = None
for node in bd_template_node.childNodes:
if node.nodeType == xml.dom.Node.ELEMENT_NODE:
@@ -128,10 +128,10 @@
new_content_node,
params,
current_content_id)
-
-
+
+
### prepare request ###
-
+
doc = minidom.Document()
req = doc.createElement("request")
req.setAttribute("sequence", str(1254))
@@ -141,9 +141,9 @@
func.setAttribute('name', 'create_bd')
func.appendChild(Variable('bd', bd_template_node).export_xml(doc))
req.appendChild(func)
-
+
### submit request ###
-
+
com = Communicator(params['hostname'])
try:
ret = com.process(doc.toxml())
@@ -151,10 +151,10 @@
return 'failure communicating to ' + params['hostname']
if ret == None:
return 'failure communicating to ' + params['hostname']
-
+
#print doc.toprettyxml()
#print ret.toxml()
-
+
# response
resp_node = None
for node in ret.childNodes:
@@ -163,7 +163,7 @@
resp_node = node
if resp_node == None:
return 'failure communicating to ' + params['hostname']
-
+
# function
func_node = None
for node in resp_node.childNodes:
@@ -172,7 +172,7 @@
func_node = node
if func_node == None:
return 'failure communicating to ' + params['hostname']
-
+
vars = {}
for var_node in func_node.childNodes:
try:
@@ -191,7 +191,7 @@
else:
### SUCCESS ###
buff += '<br><br><P ALIGN=CENTER><B>SUCCESS<br></B></P>'
-
+
buff += '<FORM METHOD="POST">'
buff += '<INPUT TYPE=HIDDEN NAME="page" VALUE="mapper_renderer">'
buff += '<INPUT TYPE=HIDDEN NAME="hostname" VALUE="' + params['hostname'] + '">'
@@ -199,13 +199,13 @@
buff += '<INPUT TYPE=HIDDEN NAME="mapper_id" VALUE="' + mapper_id + '">'
buff += '<INPUT TYPE=SUBMIT VALUE="Display Mapper">'
buff += '</FORM>'
-
+
buff += '<br><pre>'
buff += 'Newly created target:\n'
buff += bd_renderer().render_target(params['hostname'],
vars['bd'].get_value())
buff += '</pre>'
-
-
-
+
+
+
return buff
--- conga/ricci/test/props_renderer.py 2006/03/13 20:48:27 1.1
+++ conga/ricci/test/props_renderer.py 2007/09/11 02:45:29 1.2
@@ -72,7 +72,7 @@
for mod in modifiers:
if mod not in ['mutable']:
buff += indent + indent + indent + mod + '=' + modifiers[mod] + '\n'
-
+
return buff
--- conga/ricci/test_suite/README 2007/03/05 20:45:17 1.2
+++ conga/ricci/test_suite/README 2007/09/11 02:45:29 1.3
@@ -1,6 +1,6 @@
1. generate SSL cert/key pair
./generate_certs.sh
- this step needs to be performed only once
+ this step needs to be performed only once
(cert can be used for multiple riccis - each requires authentication)
2. modify ricci/authenticate.xml, writing root password of machine hosting ricci to 'password' attribute
3. execute `./send_to_ricci ricci_hostname ricci/authenticate.xml`
--- conga/ricci/test_suite/SSLClient_send_to_ricci 2007/03/22 03:42:38 1.1
+++ conga/ricci/test_suite/SSLClient_send_to_ricci 2007/09/11 02:45:29 1.2
@@ -20,7 +20,7 @@
def send_to_ricci(hostname, msg):
ss = SSLSocket(hostname, RICCI_PORT, CONNECT_TIMEOUT)
-
+
res1 = ss.recv(READ_TIMEOUT)
ss.send(msg, WRITE_TIMEOUT)
res2 = ''
@@ -45,7 +45,7 @@
if os.access('privkey.pem', os.R_OK) == False:
print 'cannot find privkey.pem'
certs_present = False
-
+
if len(argv) != 3 or not certs_present:
print 'sends <command_file> to ricci on <hostname>, and writes its response to stdout'
print '\t' + argv[0] + ' <hostname> <command_file>'
--- conga/ricci/test_suite/send_to_ricci 2006/10/27 19:30:30 1.1
+++ conga/ricci/test_suite/send_to_ricci 2007/09/11 02:45:29 1.2
@@ -18,7 +18,7 @@
s.connect((hostname, RICCI_PORT))
ss = socket.ssl(s, 'privkey.pem', 'cacert.pem')
s.settimeout(600.0)
-
+
res1 = ss.read(1024)
ss.write(msg)
res2 = ''
@@ -43,7 +43,7 @@
if os.access('privkey.pem', os.R_OK) == False:
print 'cannot find privkey.pem'
certs_present = False
-
+
if len(argv) != 3 or not certs_present:
print 'sends <command_file> to ricci on <hostname>, and writes its response to stdout'
print '\t' + argv[0] + ' <hostname> <command_file>'
More information about the Cluster-devel
mailing list