summaryrefslogtreecommitdiffstats
path: root/config-db
diff options
context:
space:
mode:
authorOliver Tappe2008-06-03 00:30:19 +0200
committerOliver Tappe2008-06-03 00:30:19 +0200
commit9bdcb088ebddb422cd8e9a27e688e9718cf50013 (patch)
treeb739b9ea762bc0aade42bd52f4d47db9b20ab9da /config-db
parent* separated synchronization of attributes from removal of stale references, (diff)
downloadcore-9bdcb088ebddb422cd8e9a27e688e9718cf50013.tar.gz
core-9bdcb088ebddb422cd8e9a27e688e9718cf50013.tar.xz
core-9bdcb088ebddb422cd8e9a27e688e9718cf50013.zip
Implemented a better algorithm for keeping the plugins and the references
to them (and their attributes) in the DB in sync: * The DB now keeps a hash-value for the list of known plugins and their attributes and checks this value against the current one on every connect. If the values do not match, the DB is brought up-to-date automatically (i.e. the attributes are synchronized with the systems, clients and groups). git-svn-id: http://svn.openslx.org/svn/openslx/openslx/trunk@1837 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'config-db')
-rw-r--r--config-db/OpenSLX/ConfigDB.pm19
-rw-r--r--config-db/OpenSLX/DBSchema.pm29
-rw-r--r--config-db/OpenSLX/MetaDB/DBI.pm23
3 files changed, 62 insertions, 9 deletions
diff --git a/config-db/OpenSLX/ConfigDB.pm b/config-db/OpenSLX/ConfigDB.pm
index 1d9c6a36..37bc1404 100644
--- a/config-db/OpenSLX/ConfigDB.pm
+++ b/config-db/OpenSLX/ConfigDB.pm
@@ -151,9 +151,8 @@ The precise name of the database that should be connected (defaults to 'openslx'
sub connect ## no critic (ProhibitBuiltinHomonyms)
{
my $self = shift;
- my $dbParams = shift;
- # hash-ref with any additional info that might be required by
- # specific metadb-module (not used yet)
+ my $dbParams = shift; # hash-ref with any additional info that might be
+ # required by specific metadb-module (not used yet)
my $dbType = $openslxConfig{'db-type'};
# name of underlying database module...
@@ -191,6 +190,17 @@ sub connect ## no critic (ProhibitBuiltinHomonyms)
$self->{'db-schema'}->checkAndUpgradeDBSchemaIfNecessary($self)
or die _tr('unable to check/update DB schema!');
+ # check if any plugins (or plugin-attributes) have been added/removed since
+ # last DB-session and bring the DB up-to-date, if so
+ my $pluginInfoHashVal
+ = OpenSLX::OSPlugin::Roster->computeMD5HashOverAvailablePlugins();
+ my $pluginInfoHashValInDB = $metaDB->schemaFetchPluginInfoHashVal();
+ vlog(1, "plugin-info-hashes: $pluginInfoHashVal <=> $pluginInfoHashValInDB");
+ if ($pluginInfoHashValInDB ne $pluginInfoHashVal) {
+ $self->cleanupAnyInconsistencies();
+ return if !$metaDB->schemaSetPluginInfoHashVal($pluginInfoHashVal);
+ }
+
return 1;
}
@@ -1285,9 +1295,6 @@ sub addInstalledPlugin
my $pluginName = shift;
my $pluginAttrs = shift || {};
- # make sure the attributes of this plugin are available via default system
- $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 3fa9c40b..24f46fc6 100644
--- a/config-db/OpenSLX/DBSchema.pm
+++ b/config-db/OpenSLX/DBSchema.pm
@@ -34,7 +34,7 @@ use OpenSLX::Basics;
### fk => foreign key (integer)
################################################################################
-my $VERSION = 0.32;
+my $VERSION = 0.33;
my $DbSchema = {
'version' => $VERSION,
@@ -173,11 +173,16 @@ my $DbSchema = {
'meta' => {
# information about the database as such
'cols' => [
- 'schema_version:s.5', # schema-version currently implemented by DB
+ 'plugin_info_hash:s.32', # hash-value identifying a specific
+ # set of plugins and their
+ # attributes
+ 'schema_version:s.5', # schema-version currently
+ # implemented by DB
],
'vals' => [
{
- 'schema_version' => $VERSION,
+ 'plugin_info_hash' => '',
+ 'schema_version' => $VERSION,
},
],
},
@@ -723,6 +728,24 @@ sub _schemaUpgradeDBFrom
return 1;
},
+ 0.33 => sub {
+ my $metaDB = shift;
+
+ # add new column meta.plugin_info_hash
+ $metaDB->schemaAddColumns(
+ 'meta',
+ [
+ 'plugin_info_hash:s.32',
+ ],
+ undef,
+ [
+ 'plugin_info_hash:s.32',
+ 'schema_version:s.5',
+ ]
+ );
+
+ return 1;
+ },
);
1;
diff --git a/config-db/OpenSLX/MetaDB/DBI.pm b/config-db/OpenSLX/MetaDB/DBI.pm
index 7acb861f..c4606f0c 100644
--- a/config-db/OpenSLX/MetaDB/DBI.pm
+++ b/config-db/OpenSLX/MetaDB/DBI.pm
@@ -1273,6 +1273,29 @@ sub schemaSetDBVersion
return 1;
}
+sub schemaFetchPluginInfoHashVal
+{
+ my $self = shift;
+
+ my $row
+ = $self->{dbh}->selectrow_hashref('SELECT plugin_info_hash FROM meta');
+
+ return $row->{plugin_info_hash};
+}
+
+sub schemaSetPluginInfoHashVal
+{
+ my $self = shift;
+ my $pluginInfoHashVal = shift;
+
+ $self->{dbh}->do("UPDATE meta SET plugin_info_hash = '$pluginInfoHashVal'")
+ or croak _tr(
+ 'Unable to set plugin-info-hash-value to %s!', $pluginInfoHashVal
+ );
+
+ return 1;
+}
+
sub schemaConvertTypeDescrToNative
{ # a default implementation, many DBs need to override...
my $self = shift;