Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 5
0
        // 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);
        }
Ejemplo n.º 6
0
        // 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()));
        }
Ejemplo n.º 8
0
 // 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));
 }