private CopyStatusClientCachedEntry AddCopyStatusCachedEntryNoLock(Guid dbGuid, AmServerName server, CopyStatusClientCachedEntry status) { CopyStatusClientCachedEntry copyStatusCachedEntryNoLock = this.GetCopyStatusCachedEntryNoLock(dbGuid, server); CopyStatusClientCachedEntry result = copyStatusCachedEntryNoLock; if (CopyStatusHelper.CheckCopyStatusNewer(status, copyStatusCachedEntryNoLock)) { this.AddCopyStatusToDbTable(dbGuid, server, status); this.AddCopyStatusToServerTable(dbGuid, server, status); result = status; } return(result); }
private CopyStatusServerCachedEntry UpdateCachedCopyStatus(RpcDatabaseCopyStatus2 status) { CopyStatusServerCachedEntry copyStatusServerCachedEntry = new CopyStatusServerCachedEntry(status); CopyStatusServerCachedEntry cachedStatus; lock (this.m_statusCacheLocker) { if (CopyStatusHelper.CheckCopyStatusNewer(copyStatusServerCachedEntry, this.m_cachedStatus)) { this.m_cachedStatus = copyStatusServerCachedEntry; } cachedStatus = this.m_cachedStatus; } return(cachedStatus); }
// Token: 0x06001342 RID: 4930 RVA: 0x0004D650 File Offset: 0x0004B850 protected virtual IEnumerable <CopyStatusClientCachedEntry> FetchAllCopyStatusesFromRpc(AmServerName server, IEnumerable <IADDatabase> expectedDatabases, ref Exception exception) { int arg = expectedDatabases.Count <IADDatabase>(); CopyStatusClientLookup.Tracer.TraceDebug <AmServerName, int>((long)this.GetHashCode(), "CopyStatusClientLookup.GetCopyStatusesByServer() for server '{0}': Performing a forced read through, expecting {1} database copy results!", server, arg); RpcHealthStateInfo[] array; CopyStatusClientCachedEntry[] allCopyStatuses = CopyStatusHelper.GetAllCopyStatuses(server, RpcGetDatabaseCopyStatusFlags2.None, expectedDatabases, RegistryParameters.GetMailboxDatabaseCopyStatusRPCTimeoutInMSec, this.m_activeManager, false, out array, out exception); IEnumerable <CopyStatusClientCachedEntry> result = allCopyStatuses; if (this.m_cachingEnabled) { result = this.m_statusTable.AddCopyStatusCachedEntriesForServer(server, allCopyStatuses); } return(result); }
// Token: 0x06001341 RID: 4929 RVA: 0x0004D5E4 File Offset: 0x0004B7E4 protected virtual CopyStatusClientCachedEntry FetchCopyStatusFromRpc(Guid dbGuid, AmServerName server, ref Exception exception) { CopyStatusClientLookup.Tracer.TraceDebug <Guid, AmServerName>((long)this.GetHashCode(), "CopyStatusClientLookup.GetCopyStatus() for DB '{0}' to server '{1}': Performing a forced read through!", dbGuid, server); CopyStatusClientCachedEntry[] copyStatus = CopyStatusHelper.GetCopyStatus(server, RpcGetDatabaseCopyStatusFlags2.None, new Guid[] { dbGuid }, RegistryParameters.GetMailboxDatabaseCopyStatusRPCTimeoutInMSec, this.m_activeManager, out exception); CopyStatusClientCachedEntry copyStatusClientCachedEntry = copyStatus[0]; if (this.m_cachingEnabled) { copyStatusClientCachedEntry = this.m_statusTable.AddCopyStatusCachedEntry(dbGuid, server, copyStatusClientCachedEntry); } return(copyStatusClientCachedEntry); }
// Token: 0x06001353 RID: 4947 RVA: 0x0004E3D8 File Offset: 0x0004C5D8 internal static CopyStatusClientCachedEntry[] GetAllCopyStatuses(AmServerName amServer, RpcGetDatabaseCopyStatusFlags2 collectionFlags2, IEnumerable <IADDatabase> expectedDatabases, int timeoutMs, ActiveManager activeManager, bool isGetHealthStates, out RpcHealthStateInfo[] healthStates, out Exception exception) { CopyStatusClientCachedEntry[] result = null; RpcDatabaseCopyStatus2[] statuses = null; TimeSpan rpcDuration = TimeSpan.Zero; new ReplayStopwatch(); Exception tempEx = null; exception = null; healthStates = null; RpcHealthStateInfo[] tmpHealthStates = null; tempEx = CopyStatusHelper.TimeCopyStatusRpc(delegate { if (!isGetHealthStates) { statuses = Dependencies.ReplayRpcClientWrapper.GetCopyStatus(amServer.Fqdn, collectionFlags2, null, timeoutMs); return; } RpcCopyStatusContainer copyStatusWithHealthState = Dependencies.ReplayRpcClientWrapper.GetCopyStatusWithHealthState(amServer.Fqdn, collectionFlags2, null, timeoutMs); statuses = copyStatusWithHealthState.CopyStatuses; tmpHealthStates = copyStatusWithHealthState.HealthStates; }, out rpcDuration); healthStates = tmpHealthStates; exception = tempEx; if (exception != null) { result = (from db in expectedDatabases select CopyStatusHelper.ConstructCopyStatusCachedEntry(db.Guid, amServer, null, tempEx, rpcDuration, activeManager)).ToArray <CopyStatusClientCachedEntry>(); } else if (statuses != null) { Dictionary <Guid, RpcDatabaseCopyStatus2> tempStatusTable = statuses.ToDictionary((RpcDatabaseCopyStatus2 status) => status.DBGuid); tempEx = new ReplayServiceRpcUnknownInstanceException(); result = (from db in expectedDatabases let guid = db.Guid let statusFound = tempStatusTable.ContainsKey(guid) select CopyStatusHelper.ConstructCopyStatusCachedEntry(guid, amServer, statusFound ? tempStatusTable[guid] : null, statusFound ? null : tempEx, rpcDuration, activeManager)).ToArray <CopyStatusClientCachedEntry>(); } else { DiagCore.RetailAssert(false, "If no exception was thrown by GetCopyStatus RPC, then we should have some status results!", new object[0]); } return(result); }
// Token: 0x06001359 RID: 4953 RVA: 0x0004E9F4 File Offset: 0x0004CBF4 private static CopyStatusClientCachedEntry ConstructCopyStatusCachedEntry(Guid dbGuid, AmServerName server, RpcDatabaseCopyStatus2 status, Exception exception, TimeSpan rpcDuration, ActiveManager activeManager) { CopyStatusClientCachedEntry copyStatusClientCachedEntry = new CopyStatusClientCachedEntry(dbGuid, server); copyStatusClientCachedEntry.CopyStatus = status; copyStatusClientCachedEntry.RpcDuration = rpcDuration; copyStatusClientCachedEntry.LastException = exception; copyStatusClientCachedEntry.Result = CopyStatusHelper.ConvertExceptionToCopyStatusRpcResultEnum(exception); if (status != null) { copyStatusClientCachedEntry.ActiveServer = new AmServerName(status.ActiveDatabaseCopy, false); } else if (activeManager != null) { copyStatusClientCachedEntry.ActiveServer = CopyStatusHelper.GetActiveServerForDatabase(dbGuid, activeManager); } DiagCore.RetailAssert(copyStatusClientCachedEntry.Result != CopyStatusRpcResult.Success || copyStatusClientCachedEntry.CopyStatus != null, "If the GetCopyStatus RPC result was 'Success', we have to have a CopyStatus value!", new object[0]); DiagCore.RetailAssert(copyStatusClientCachedEntry.CopyStatus != null || copyStatusClientCachedEntry.Result != CopyStatusRpcResult.Success, "If the CopyStatus value was null, we have to return a Result that is *not* 'Success'!", new object[0]); return(copyStatusClientCachedEntry); }
private string GetErrorMessage(bool skipFullCopyStatusDump) { if (this.m_errors.Count == 0 && this.m_result.IsValidationSuccessful && skipFullCopyStatusDump) { return(null); } StringBuilder stringBuilder = new StringBuilder(2048); stringBuilder.AppendLine(); foreach (KeyValuePair <AmServerName, string> keyValuePair in this.m_errors) { stringBuilder.AppendFormat("\r\n\r\n {0}:\r\n {1}\r\n ", keyValuePair.Key.NetbiosName, keyValuePair.Value); } if (!skipFullCopyStatusDump && this.CopyStatuses != null) { stringBuilder.AppendLine(); stringBuilder.AppendLine(); stringBuilder.AppendLine("================"); stringBuilder.AppendLine(ReplayStrings.DbValidationFullCopyStatusResultsLabel); stringBuilder.AppendLine("================"); stringBuilder.AppendLine(); foreach (CopyStatusClientCachedEntry copyStatusClientCachedEntry in this.CopyStatuses) { stringBuilder.AppendLine("----------------"); stringBuilder.AppendFormat("{0} : {1}\\{2}", ReplayStrings.DbValidationCopyStatusNameLabel, this.Database.Name, copyStatusClientCachedEntry.ServerContacted.NetbiosName); stringBuilder.AppendLine(); stringBuilder.AppendLine("----------------"); stringBuilder.AppendLine(CopyStatusHelper.GetCopyStatusMonitoringDisplayString(copyStatusClientCachedEntry.CopyStatus)); stringBuilder.AppendLine(); } } if (this.m_errors.Count == 0 && this.m_result.IsValidationSuccessful) { return(stringBuilder.ToString()); } return(this.GetValidationRollupErrorMessage(this.m_result.HealthyCopiesCount, this.m_result.MinimumNumHealthyCopies, this.m_result.TotalPassiveCopiesCount, this.m_result.HealthyPassiveCopiesCount, stringBuilder.ToString())); }
// Token: 0x06001351 RID: 4945 RVA: 0x0004DC80 File Offset: 0x0004BE80 internal static CopyStatusClientCachedEntry[] GetCopyStatus(AmServerName amServer, RpcGetDatabaseCopyStatusFlags2 collectionFlags2, Guid[] dbGuids, int timeoutMs, ActiveManager activeManager, out Exception exception) { RpcHealthStateInfo[] array = null; return(CopyStatusHelper.GetCopyStatus(amServer, collectionFlags2, dbGuids, timeoutMs, activeManager, false, out array, out exception)); }