internal static string NotifyChangesByWorkload(Task task, IConfigurationSession configurationSession, Workload workload, IEnumerable <SyncChangeInfo> syncChangeInfos, bool fullSync, bool syncNow, ExecutionLog logger, Type client, out string notificationIdentifier) { Exception exception = null; notificationIdentifier = string.Empty; string text = string.Empty; try { CompliancePolicySyncNotificationClient compliancePolicySyncNotificationClient = AggregatedNotificationClients.workloadToNotificationClientsGetter[workload](configurationSession, new WriteVerboseDelegate(task.WriteVerbose)); if (compliancePolicySyncNotificationClient != null) { task.WriteVerbose(Strings.VerboseNotifyWorkloadWithChanges(workload.ToString(), string.Concat(from syncChangeInfo in syncChangeInfos select syncChangeInfo.ToString()))); notificationIdentifier = compliancePolicySyncNotificationClient.NotifyPolicyConfigChanges(syncChangeInfos, fullSync, syncNow); task.WriteVerbose(Strings.VerboseNotifyWorkloadWithChangesSuccess(workload.ToString(), notificationIdentifier)); } else { text = Strings.WarningNotificationClientIsMissing(workload.ToString()); } } catch (CompliancePolicySyncNotificationClientException ex) { text = Strings.ErrorMessageForNotificationFailure(workload.ToString(), ex.Message); exception = ex; } if (!string.IsNullOrEmpty(text)) { logger.LogOneEntry(client.Name, string.Empty, ExecutionLog.EventType.Warning, string.Format("We failed to notify workload '{0}' with error message '{1}'", workload, text), exception); MonitoringItemErrorPublisher.Instance.PublishEvent("UnifiedPolicySync.SendNotificationError", UnifiedPolicyConfiguration.GetInstance().GetOrganizationIdKey(configurationSession), string.Format("Workload={0};Timestamp={1}", workload, DateTime.UtcNow), exception); } else { ExecutionLog.EventType eventType = ExecutionLog.EventType.Verbose; string name = client.Name; string correlationId = notificationIdentifier; string format = "Notification '{0}' was sent to workload '{1}' with sync change info: '{2}'"; object[] array = new object[3]; array[0] = notificationIdentifier; array[1] = workload; array[2] = string.Join(",", from x in syncChangeInfos select x.ToString()); logger.LogOneEntry(eventType, name, correlationId, format, array); } return(text); }
private void WriteSyncVerbose(List <ChangeNotificationData> syncData, Workload workload, bool isObjectLevelSync) { base.WriteVerbose(Strings.VerboseRetryDistributionNotifyingWorkload(workload.ToString(), isObjectLevelSync ? "object" : "delta")); foreach (ChangeNotificationData changeNotificationData in syncData) { base.WriteVerbose(Strings.VerboseRetryDistributionNotificationDetails(changeNotificationData.Id.ToString(), changeNotificationData.ChangeType.ToString(), changeNotificationData.ObjectType.ToString())); } }
internal static BindingStorage CreateNewBindingStorage(ADObjectId tenantId, Workload workload, Guid policyId) { string text = workload.ToString() + policyId.ToString(); BindingStorage bindingStorage = new BindingStorage { MasterIdentity = Guid.NewGuid(), Name = text, PolicyId = policyId, Workload = workload }; bindingStorage[ADObjectSchema.OrganizationalUnitRoot] = tenantId; bindingStorage.SetId(tenantId.GetDescendantId(PolicyStorage.PoliciesContainer).GetChildId(policyId.ToString()).GetChildId(text)); return(bindingStorage); }
public static void Main(string[] args) { var config = new ConfigurationBuilder().AddCommandLine(args).Build(); var threads = int.Parse(config["threads"] ?? _defaultThreads.ToString()); var duration = TimeSpan.FromSeconds(int.Parse(config["duration"] ?? _defaultDuration.TotalSeconds.ToString())); var syncPrimitive = (Sync)Enum.Parse(typeof(Sync), config["sync"] ?? _defaultSync.ToString(), ignoreCase: true); var workload = (Workload)Enum.Parse(typeof(Workload), config["workload"] ?? _defaultWorkload.ToString(), ignoreCase: true); var workOutsideLock = int.Parse(config["workOutsideLock"] ?? _defaultWorkOutsideLock.ToString()); var workInsideLock = int.Parse(config["workInsideLock"] ?? _defaultWorkInsideLock.ToString()); Console.WriteLine($"Duration: {duration}"); Console.WriteLine($"Threads: {threads}"); Console.WriteLine($"SyncPrimitive: {syncPrimitive}"); Console.WriteLine($"Workload: {workload}"); Console.WriteLine($"Work Outside Lock: {workOutsideLock}"); Console.WriteLine($"Work Inside Lock: {workInsideLock}"); Console.WriteLine(); var sw = new Stopwatch(); var threadObjects = new Thread[threads]; for (var i = 0; i < threads; i++) { threadObjects[i] = new Thread(() => { if (syncPrimitive == Sync.NoLock) { while (sw.Elapsed < duration) { DoWork(workInsideLock); DoWork(workOutsideLock); Interlocked.Increment(ref _locksTaken); } } else if (syncPrimitive == Sync.Lock) { while (sw.Elapsed < duration) { lock (_lock) { DoWork(workInsideLock); } DoWork(workOutsideLock); Interlocked.Increment(ref _locksTaken); } } else if (syncPrimitive == Sync.Rwls) { if (workload == Workload.Read) { while (sw.Elapsed < duration) { _readerWriterLockSlim.EnterReadLock(); try { DoWork(workInsideLock); } finally { _readerWriterLockSlim.ExitReadLock(); } DoWork(workOutsideLock); Interlocked.Increment(ref _locksTaken); } } } }); } sw.Start(); for (var i = 0; i < threads; i++) { threadObjects[i].Start(); } for (var i = 0; i < threads; i++) { threadObjects[i].Join(); } sw.Stop(); Console.WriteLine($"Actual Duration: {sw.Elapsed}"); Console.WriteLine($"Total Locks Taken: {_locksTaken.ToString("N0")}"); var locksTakenPerSecond = (int)Math.Round(_locksTaken / sw.Elapsed.TotalSeconds, 0); Console.WriteLine($"Locks Taken per Second: {locksTakenPerSecond.ToString("N0")}"); }