/// <summary> /// Updates the new configuration if the new configuration revision is greater than the current configuration. /// </summary> /// <param name="bucketConfig">The bucket configuration.</param> /// <param name="force">if set to <c>true</c> [force].</param> public override void UpdateConfig(IBucketConfig bucketConfig, bool force = false) { IConfigObserver configObserver; if (ConfigObservers != null && ConfigObservers.TryGetValue(bucketConfig.Name, out configObserver)) { IConfigInfo configInfo; if (Configs.TryGetValue(bucketConfig.Name, out configInfo)) { try { Log.Debug("1. Checking config [{0}] with rev#{1} on thread {2}", bucketConfig.Name, bucketConfig.Rev, Thread.CurrentThread.ManagedThreadId); var oldBucketConfig = configInfo.BucketConfig; if (bucketConfig.Rev > oldBucketConfig.Rev) { lock (SyncObj) { Log.Debug("2. Checking config [{0}] with rev#{1} on thread {2}", bucketConfig.Name, bucketConfig.Rev, Thread.CurrentThread.ManagedThreadId); if (bucketConfig.Rev > oldBucketConfig.Rev || !bucketConfig.Equals(oldBucketConfig) || force) { Log.Info( "Config changed (forced:{0}) new Rev#{1} | old Rev#{2} CCCP: {3}", force, bucketConfig.Rev, oldBucketConfig.Rev, JsonConvert.SerializeObject(bucketConfig)); //Set the password on the new server configuration var clientBucketConfig = GetOrCreateConfiguration(bucketConfig.Name); bucketConfig.Password = clientBucketConfig.Password; configInfo.LoadConfig(bucketConfig, force); ClientConfig.UpdateBootstrapList(bucketConfig); configObserver.NotifyConfigChanged(configInfo); Log.Debug("3. Completed checking config [{0}] with rev#{1} on thread {2}", bucketConfig.Name, bucketConfig.Rev, Thread.CurrentThread.ManagedThreadId); } } } else { Log.Info("Ignoring config with rev#{0}", bucketConfig.Rev); } } catch (Exception e) { Log.Debug("Ack! rev#{0} on thread {1}", bucketConfig.Rev, Thread.CurrentThread.ManagedThreadId); Log.Info(e); } } else { throw new ConfigNotFoundException(bucketConfig.Name); } LogServers(configInfo); } else { Log.Warn("No ConfigObserver found for bucket [{0}]", bucketConfig.Name); } }
public void UpdateConfig(IBucketConfig bucketConfig, bool force = false) { IConfigObserver configObserver; if (ConfigObservers != null && ConfigObservers.TryGetValue(bucketConfig.Name, out configObserver)) { IConfigInfo configInfo; if (Configs.TryGetValue(bucketConfig.Name, out configInfo)) { var lockTaken = false; try { Monitor.TryEnter(configInfo, ref lockTaken); if (!lockTaken) { return; } var oldBucketConfig = configInfo.BucketConfig; if (bucketConfig.Rev > oldBucketConfig.Rev || !bucketConfig.Equals(oldBucketConfig) || force) { Log.Info( m => m("Config changed (forced:{0}) new Rev#{1} | old Rev#{2} CCCP: {3}", force, bucketConfig.Rev, oldBucketConfig.Rev, JsonConvert.SerializeObject(bucketConfig))); //Set the password on the new server configuration var clientBucketConfig = GetOrCreateConfiguration(bucketConfig.Name); bucketConfig.Password = clientBucketConfig.Password; configInfo.LoadConfig(bucketConfig, force); ClientConfig.UpdateBootstrapList(bucketConfig); configObserver.NotifyConfigChanged(configInfo); } } finally { if (lockTaken) { Monitor.Exit(configInfo); } } } else { throw new ConfigNotFoundException(bucketConfig.Name); } } else { Log.Warn(m => m("No ConfigObserver found for bucket [{0}]", bucketConfig.Name)); } }
public void UpdateConfig(IBucketConfig bucketConfig, bool force = false) { IConfigObserver configObserver; if (ConfigObservers != null && ConfigObservers.TryGetValue(bucketConfig.Name, out configObserver)) { IConfigInfo configInfo; if (Configs.TryGetValue(bucketConfig.Name, out configInfo)) { var lockTaken = false; try { Monitor.TryEnter(configInfo, ref lockTaken); if (!lockTaken) return; var oldBucketConfig = configInfo.BucketConfig; if (bucketConfig.Rev > oldBucketConfig.Rev || !bucketConfig.Equals(oldBucketConfig) || force) { Log.LogInformation("Config changed (forced:{0}) new Rev#{1} | old Rev#{2} CCCP: {3}", force, bucketConfig.Rev, oldBucketConfig.Rev, JsonConvert.SerializeObject(bucketConfig)); //Set the password on the new server configuration var clientBucketConfig = GetOrCreateConfiguration(bucketConfig.Name); bucketConfig.Password = clientBucketConfig.Password; configInfo.LoadConfig(bucketConfig, force); ClientConfig.UpdateBootstrapList(bucketConfig); configObserver.NotifyConfigChanged(configInfo); } } finally { if (lockTaken) { Monitor.Exit(configInfo); } } } else { throw new ConfigNotFoundException(bucketConfig.Name); } } else { Log.LogWarning("No ConfigObserver found for bucket [{0}]", bucketConfig.Name); } }