From 93c45317cb2bcaf69b3f71b5fa42c191d16b79cf Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Mon, 2 Jun 2008 21:29:34 +0000 Subject: * separated synchronization of attributes from removal of stale references, as the are in fact two separate concepts (and are invoked from different contexts) * added cleanup-db command to slxconfig which can be used to get rid of references to unknown attributes and/or plugins git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@1836 95ad53e4-c205-0410-b2fa-d234c58c8868 --- config-db/OpenSLX/ConfigDB.pm | 54 +++++++++++++++++++++++++++---------------- config-db/OpenSLX/DBSchema.pm | 8 +++---- config-db/slxconfig | 18 +++++++++++++++ 3 files changed, 56 insertions(+), 24 deletions(-) diff --git a/config-db/OpenSLX/ConfigDB.pm b/config-db/OpenSLX/ConfigDB.pm index ea1b6643..1d9c6a36 100644 --- a/config-db/OpenSLX/ConfigDB.pm +++ b/config-db/OpenSLX/ConfigDB.pm @@ -188,8 +188,9 @@ sub connect ## no critic (ProhibitBuiltinHomonyms) $self->{'db-type'} = $dbType; $self->{'meta-db'} = $metaDB; - $self->{'db-schema'}->checkAndUpgradeDBSchemaIfNecessary($self); - + $self->{'db-schema'}->checkAndUpgradeDBSchemaIfNecessary($self) + or die _tr('unable to check/update DB schema!'); + return 1; } @@ -256,6 +257,27 @@ sub rollbackTransaction return 1; } +=item C + +Looks for any inconsistencies (stale references, references to non-existing +plugins, ...) and removes them from the DB. + +=cut + +sub cleanupAnyInconsistencies +{ + my $self = shift; + + $self->synchronizeAttributesWithDB(); + + return if !$self->_removeStaleSystemAttributes(); + return if !$self->_removeStaleGroupAttributes(); + return if !$self->_removeStaleClientAttributes(); + return if !$self->_removeStaleVendorOSAttributes(); + + return 1; +} + =item C Makes sure that all known attributes are referenced by the default system @@ -268,8 +290,7 @@ stale attributes removed, too. sub synchronizeAttributesWithDB { - my $self = shift; - my $removeStaleRefs = shift; + my $self = shift; my $defaultSystem = $self->fetchSystemByID(0); return if !$defaultSystem; @@ -297,23 +318,16 @@ sub synchronizeAttributesWithDB return if !$self->changeSystem(0, $defaultSystem); } - if ($removeStaleRefs) { - return if !$self->removeStaleSystemAttributes(); - return if !$self->removeStaleGroupAttributes(); - return if !$self->removeStaleClientAttributes(); - return if !$self->removeStaleVendorOSAttributes(); - } - return 1; } -=item C +=item C<_removeStaleSystemAttributes()> Removes any stale attributes from every system. =cut -sub removeStaleSystemAttributes +sub _removeStaleSystemAttributes { my $self = shift; @@ -334,13 +348,13 @@ sub removeStaleSystemAttributes return 1; } -=item C +=item C<_removeStaleGroupAttributes()> Removes any stale attributes from every group. =cut -sub removeStaleGroupAttributes +sub _removeStaleGroupAttributes { my $self = shift; @@ -361,13 +375,13 @@ sub removeStaleGroupAttributes return 1; } -=item C +=item C<_removeStaleClientAttributes()> Removes any stale attributes from every client. =cut -sub removeStaleClientAttributes +sub _removeStaleClientAttributes { my $self = shift; @@ -388,13 +402,13 @@ sub removeStaleClientAttributes return 1; } -=item C +=item C<_removeStaleVendorOSAttributes()> Removes any stale attributes from every vendor-OS. =cut -sub removeStaleVendorOSAttributes +sub _removeStaleVendorOSAttributes { my $self = shift; @@ -1272,7 +1286,7 @@ sub addInstalledPlugin my $pluginAttrs = shift || {}; # make sure the attributes of this plugin are available via default system - $self->synchronizeAttributesWithDB(0); + $self->synchronizeAttributesWithDB(); return $self->{'meta-db'}->addInstalledPlugin( $vendorOSID, $pluginName, $pluginAttrs diff --git a/config-db/OpenSLX/DBSchema.pm b/config-db/OpenSLX/DBSchema.pm index 7187f217..3fa9c40b 100644 --- a/config-db/OpenSLX/DBSchema.pm +++ b/config-db/OpenSLX/DBSchema.pm @@ -279,8 +279,8 @@ sub checkAndUpgradeDBSchemaIfNecessary ); } $metaDB->schemaSetDBVersion($DbSchema->{version}); - $configDB->synchronizeAttributesWithDB(1) - or die _tr('unable to synchronize attributes with DB!'); + $configDB->cleanupAnyInconsistencies() + or die _tr('unable to cleanup DB!'); vlog(1, _tr('DB has been created successfully')); } elsif ($currVersion < $DbSchema->{version}) { vlog( @@ -291,8 +291,8 @@ sub checkAndUpgradeDBSchemaIfNecessary ) ); $self->_schemaUpgradeDBFrom($metaDB, $currVersion); - $configDB->synchronizeAttributesWithDB(1) - or die _tr('unable to synchronize attributes with DB!'); + $configDB->cleanupAnyInconsistencies() + or die _tr('unable to cleanup DB!'); vlog(1, _tr('upgrade done')); } else { vlog(1, _tr('DB matches current schema version (%s)', $currVersion)); diff --git a/config-db/slxconfig b/config-db/slxconfig index 02029a81..3d9eba0a 100755 --- a/config-db/slxconfig +++ b/config-db/slxconfig @@ -98,6 +98,9 @@ elsif ($action =~ m[^change-s]i) { elsif ($action =~ m[^change-c]i) { changeClientInConfigDB(@ARGV); } +elsif ($action =~ m[^cleanup-db]i) { + cleanupConfigDB(@ARGV); +} elsif ($action =~ m[^list-a]) { print @ARGV ? _tr("List of known attributes for scope '%s':\n", $ARGV[0]) @@ -164,6 +167,7 @@ else { change-group change-system change-vendor-os + cleanup-db list-attributes list-client list-export @@ -292,6 +296,11 @@ sub checkGivenStage3Attrs return 1; } +sub cleanupConfigDB +{ + return $openslxDB->cleanupAnyInconsistencies(); +} + sub mergeNonExistingAttributes { my $target = shift; @@ -1489,6 +1498,15 @@ changes the data of an existing system in the config-DB Note: you can use the special value '-' to unset a key (mostly useful for attributes). +=item B<< cleanup-db >> + +utility command that looks for any inconsistencies in the DB (stale references +and/or references to plugins that do not exists) and removes them. + +You should only invoke this if you are a developer and have removed one or +more plugins from the repository and would like to get rid of the left-overs +in your local DB. + =item B<< list-attributes [] >> lists all attributes or the one with the given name -- cgit v1.2.3-55-g7522