public static Tuple <T[], T[], T[]> DiffArrays <T>(T[] left, T[] right) { left = (left ?? Utils.EmptyArray <T>()); right = (right ?? Utils.EmptyArray <T>()); T[] array = left.Intersect(right).ToArray <T>(); T[] item = right.Except(array).ToArray <T>(); T[] item2 = left.Except(array).ToArray <T>(); return(new Tuple <T[], T[], T[]>(array, item, item2)); }
public static string[] GetMultistring(XElement element) { if (element.HasElements) { return((from el in element.Elements() where Utils.IsEqual(el.Name.LocalName, "String", StringComparison.OrdinalIgnoreCase) select el.Value).ToArray <string>()); } return(Utils.EmptyArray <string>()); }
public string[] GetGroupMemberNames(string groupName) { string[] result = Utils.EmptyArray <string>(); lock (this.locker) { using (RegistryKey registryKey = this.OpenGroupMembersContainerKey(groupName, false)) { if (registryKey != null) { result = registryKey.GetSubKeyNames(); } } } return(result); }
public void RefreshTopology(bool isForceRefresh = false) { TopologyInfo topology = null; bool flag = DxStoreRegistryConfigProvider.Tracer.IsTraceEnabled(TraceType.DebugTrace); Utils.RunOperation(this.ManagerConfig.Identity, "RefreshTopology", delegate { topology = this.GetLocalServerTopology(isForceRefresh); }, this.eventLogger, LogOptions.LogException, true, new TimeSpan?(TimeSpan.FromMinutes(1.0)), new TimeSpan?(this.ManagerConfig.Settings.PeriodicExceptionLoggingDuration), null, null, null); if (topology != null) { if (topology.IsConfigured) { if (flag) { DxStoreRegistryConfigProvider.Tracer.TraceDebug <string, string>(0L, "RefreshConfig found a valid topology '{0}' members: {1}", topology.Name, topology.Members.JoinWithComma("<null>")); } if (!topology.IsAllMembersVersionCompatible) { DxStoreRegistryConfigProvider.Tracer.TraceDebug <string>(0L, "RefreshConfig found that some of the members are version compatible - will be retrying in next iteration", topology.Name); return; } bool flag2 = false; InstanceGroupMemberConfig[] configuredMembers = Utils.EmptyArray <InstanceGroupMemberConfig>(); string[] serversToRemove = Utils.EmptyArray <string>(); InstanceGroupConfig groupConfig = this.GetGroupConfig(topology.Name, false); if (groupConfig != null) { if (flag) { DxStoreRegistryConfigProvider.Tracer.TraceDebug <string, string>(0L, "Group {0} already exist with configured members {1}", topology.Name, (from m in groupConfig.Members select m.Name).JoinWithComma("<null>")); } flag2 = true; configuredMembers = groupConfig.Members; if (!groupConfig.Settings.IsAppendOnlyMembership) { serversToRemove = (from m in configuredMembers let isFound = topology.Members.Any((string tm) => string.Equals(tm, m.Name)) where !isFound && !m.IsManagedExternally select m.Name).ToArray <string>(); } } string[] serversToAdd = (from tm in topology.Members let isFound = configuredMembers.Any((InstanceGroupMemberConfig m) => string.Equals(tm, m.Name)) where !isFound select tm).ToArray <string>(); this.UpdateMembers(topology.Name, serversToRemove, serversToAdd, !flag2, !flag2); return; } else { InstanceGroupConfig[] allGroupConfigs = this.GetAllGroupConfigs(); foreach (InstanceGroupConfig instanceGroupConfig in allGroupConfigs) { if (instanceGroupConfig.IsMember(instanceGroupConfig.Self, true)) { string[] array2 = (from member in instanceGroupConfig.Members where !member.IsManagedExternally select member into m select m.Name).ToArray <string>(); if (flag) { DxStoreRegistryConfigProvider.Tracer.TraceDebug <string, string>(0L, "{0}: Removing members '{1}' from group since local node is not part of group member any more", instanceGroupConfig.Identity, array2.JoinWithComma("<null>")); } this.RemoveMembers(instanceGroupConfig.Name, array2); } } } } }