From 57fe2e6ed38df784267d94b69837d3097d7a5a65 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Sun, 12 Jan 2014 21:08:59 +0000 Subject: [PATCH] Properly map pools to pool members using a pid map --- opentrafficshaper/plugins/configmanager.pm | 28 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/opentrafficshaper/plugins/configmanager.pm b/opentrafficshaper/plugins/configmanager.pm index 0679164..2a28bc8 100644 --- a/opentrafficshaper/plugins/configmanager.pm +++ b/opentrafficshaper/plugins/configmanager.pm @@ -3089,6 +3089,9 @@ sub _load_statefile createOverride($coverride); } + # We need a pool ID translation, when we recreate pools we get different ID's, we cannot restore members with orignal ID's + my %pidMap; + # Loop with pools foreach my $section ($state->GroupMembers('pool')) { my $pool = $stateHash{$section}; @@ -3106,7 +3109,15 @@ sub _load_statefile } # Process this pool - createPool($cpool); + if (defined(my $pid = createPool($cpool))) { + # Save the new ID + $pidMap{$pool->{'ID'}} = $pid; + } else { + $logger->log(LOG_ERR,"[CONFIGMANAGER] Failed to load pool '%s' [%s], members will be ignored", + prettyUndef($cpool->{'Name'}), + $section + ); + } } # Loop with pool members @@ -3125,8 +3136,19 @@ sub _load_statefile } } - # Process this pool member - createPoolMember($cpoolMember); + # Translate pool ID + if (my $pid = $pidMap{$cpoolMember->{'PoolID'}}) { + $cpoolMember->{'PoolID'} = $pid; + # Process this pool member + if (!defined(my $pmid = createPoolMember($cpoolMember))) { + $logger->log(LOG_ERR,"[CONFIGMANAGER] Failed to load pool member '%s'",$pmid); + } + } else { + $logger->log(LOG_ERR,"[CONFIGMANAGER] Failed to load pool member '%s', no pool ID map for '%s'", + $cpoolMember->{'Username'}, + $cpoolMember->{'PoolID'} + ); + } } } -- GitLab