Exemplo n.º 1
0
 public void DeleteRequest(SafetyNetInfo info)
 {
     using (SafetyNetRegKeyStore safetyNetRegKeyStore = new SafetyNetRegKeyStore(this.m_dbGuidStr, this.m_dbName))
     {
         safetyNetRegKeyStore.DeleteRequest(info);
     }
 }
Exemplo n.º 2
0
        // Token: 0x06000F1E RID: 3870 RVA: 0x00040268 File Offset: 0x0003E468
        public static SafetyNetInfo Deserialize(string dbName, string blob, Trace tracer, bool throwOnError)
        {
            Exception     ex            = null;
            SafetyNetInfo safetyNetInfo = null;
            object        obj           = SerializationUtil.XmlToObject(blob, typeof(SafetyNetInfo), out ex);

            if (ex == null)
            {
                safetyNetInfo = (obj as SafetyNetInfo);
                if (safetyNetInfo == null && tracer != null)
                {
                    tracer.TraceError <string, string>(0L, "Deserialized object {0} was not compatible with expected type {1}.", (obj != null) ? obj.GetType().Name : "(null)", typeof(SafetyNetInfo).Name);
                }
                else
                {
                    safetyNetInfo.m_version        = new Version(safetyNetInfo.m_versionString);
                    safetyNetInfo.m_fModified      = false;
                    safetyNetInfo.m_serializedForm = blob;
                }
            }
            if (ex != null && tracer != null)
            {
                tracer.TraceError <string, string>(0L, "Deserialization of object {0} failed:\n{1}", typeof(SafetyNetInfo).Name, ex.ToString());
            }
            if (safetyNetInfo == null && throwOnError)
            {
                throw new FailedToDeserializeDumpsterRequestStrException(dbName, blob, typeof(SafetyNetInfo).Name, AmExceptionHelper.GetExceptionMessageOrNoneString(ex), ex);
            }
            return(safetyNetInfo);
        }
 // Token: 0x06000F37 RID: 3895 RVA: 0x0004092C File Offset: 0x0003EB2C
 public void Delete(SafetyNetInfo safetyNetInfo)
 {
     lock (this)
     {
         this.m_stateSafetyNetInfo.DeleteRequest(safetyNetInfo);
         this.m_currentTable = null;
     }
 }
Exemplo n.º 4
0
        // Token: 0x06000F51 RID: 3921 RVA: 0x00041EEC File Offset: 0x000400EC
        public void DeleteRequest(SafetyNetInfo info)
        {
            this.EnsureOpen();
            SafetyNetRequestKey safetyNetRequestKey = new SafetyNetRequestKey(info);
            string valueName = safetyNetRequestKey.ToString();

            this.DeleteValue(valueName);
        }
 // Token: 0x06000F35 RID: 3893 RVA: 0x00040870 File Offset: 0x0003EA70
 public void Reset(SafetyNetInfo safetyNetInfo)
 {
     lock (this)
     {
         safetyNetInfo.RedeliveryRequired = false;
         this.Update(safetyNetInfo);
     }
 }
Exemplo n.º 6
0
        // Token: 0x06000F50 RID: 3920 RVA: 0x00041EBC File Offset: 0x000400BC
        public void WriteRequestInfo(SafetyNetInfo info)
        {
            this.EnsureOpen();
            SafetyNetRequestKey safetyNetRequestKey = new SafetyNetRequestKey(info);
            string valueName = safetyNetRequestKey.ToString();
            string value     = info.Serialize();

            this.WriteString(valueName, value);
        }
Exemplo n.º 7
0
        public SafetyNetInfo ReadRequestInfo(SafetyNetRequestKey requestKey, SafetyNetInfo prevInfo)
        {
            SafetyNetInfo result;

            using (SafetyNetRegKeyStore safetyNetRegKeyStore = new SafetyNetRegKeyStore(this.m_dbGuidStr, this.m_dbName))
            {
                result = safetyNetRegKeyStore.ReadRequestInfo(requestKey, prevInfo);
            }
            return(result);
        }
Exemplo n.º 8
0
        public static void MarkRedeliveryRequired(ReplayConfiguration configuration, DateTime failoverTimeUtc, DateTime startTimeUtc, DateTime endTimeUtc, long lastLogGenBeforeActivation, long numLogsLost)
        {
            SafetyNetRedelivery.Tracer.TraceDebug(0L, "MarkRedeliveryRequired() for {0}({1}) called: failoverTimeUtc={2}, startTimeUtc={3}, endTimeUtc={4}, lastLogGenBeforeActivation={5}, numLogsLost={6}", new object[]
            {
                configuration.Name,
                configuration.Identity,
                failoverTimeUtc,
                startTimeUtc,
                endTimeUtc,
                lastLogGenBeforeActivation,
                numLogsLost
            });
            if (endTimeUtc < startTimeUtc)
            {
                SafetyNetRedelivery.Tracer.TraceError <string, string>(0L, "MarkRedeliveryRequired() for {0}({1}) failed because endTimeUtc should not be less than startTimeUtc", configuration.Name, configuration.Identity);
                DiagCore.AssertOrWatson(false, "endTimeUtc ({0}) should not be less than startTimeUtc ({1}) !", new object[]
                {
                    endTimeUtc,
                    startTimeUtc
                });
                throw new DumpsterInvalidResubmitRequestException(configuration.DatabaseName);
            }
            TimeSpan timeSpan  = endTimeUtc.Subtract(startTimeUtc);
            TimeSpan timeSpan2 = TimeSpan.FromSeconds((double)RegistryParameters.DumpsterRedeliveryMaxTimeRangeInSecs);

            if (timeSpan > timeSpan2)
            {
                SafetyNetRedelivery.Tracer.TraceError(0L, "MarkRedeliveryRequired() for {0}({1}) failed because the request window ({2}) is larger than the maximum allowed of {3}", new object[]
                {
                    configuration.Name,
                    configuration.Identity,
                    timeSpan,
                    timeSpan2
                });
                throw new DumpsterInvalidResubmitRequestException(configuration.DatabaseName);
            }
            string text;

            ActiveManagerCore.GetDatabaseMountStatus(configuration.IdentityGuid, out text);
            SafetyNetInfo      safetyNetInfo  = new SafetyNetInfo(text, lastLogGenBeforeActivation, numLogsLost, failoverTimeUtc, startTimeUtc, endTimeUtc);
            SafetyNetInfoCache safetyNetTable = configuration.ReplayState.GetSafetyNetTable();

            safetyNetTable.Update(safetyNetInfo);
            ReplayEventLogConstants.Tuple_DatabaseDumpsterRedeliveryRequired.LogEvent(null, new object[]
            {
                configuration.DatabaseName,
                startTimeUtc,
                endTimeUtc
            });
            ReplayCrimsonEvents.DumpsterRedeliveryRequired.Log <string, Guid, string, long, long, DateTime, DateTime, DateTime, bool, bool>(configuration.DatabaseName, configuration.IdentityGuid, text, lastLogGenBeforeActivation, numLogsLost, failoverTimeUtc, startTimeUtc, endTimeUtc, false, true);
        }
 // Token: 0x06000F36 RID: 3894 RVA: 0x000408B4 File Offset: 0x0003EAB4
 public void Update(SafetyNetInfo safetyNetInfo)
 {
     lock (this)
     {
         if (safetyNetInfo.IsModified())
         {
             this.m_stateSafetyNetInfo.WriteRequestInfo(safetyNetInfo);
             safetyNetInfo.ClearModified();
             this.m_currentTable = null;
         }
         else
         {
             SafetyNetInfoCache.Tracer.TraceDebug <string, SafetyNetInfo>((long)this.GetHashCode(), "Update() for DB '{0}' skipping ClusDB update since redelivery request has not been modified. SafetyNetInfo = {1}", this.m_dbGuidStr, safetyNetInfo);
         }
     }
 }
Exemplo n.º 10
0
        // Token: 0x06000F4F RID: 3919 RVA: 0x00041E64 File Offset: 0x00040064
        public SafetyNetInfo ReadRequestInfo(SafetyNetRequestKey requestKey, SafetyNetInfo prevInfo)
        {
            this.EnsureOpen();
            string        valueName     = requestKey.ToString();
            string        text          = this.ReadString(valueName);
            SafetyNetInfo safetyNetInfo = null;

            if (prevInfo != null && SharedHelper.StringIEquals(text, prevInfo.GetSerializedForm()))
            {
                safetyNetInfo = prevInfo;
            }
            if (safetyNetInfo == null && !string.IsNullOrEmpty(text))
            {
                safetyNetInfo = SafetyNetInfo.Deserialize(this.m_dbName, text, ExTraceGlobals.DumpsterTracer, true);
            }
            return(safetyNetInfo);
        }
 // Token: 0x06000F39 RID: 3897 RVA: 0x00040998 File Offset: 0x0003EB98
 private SafetyNetInfoCache.InnerTable ReadNewTable()
 {
     SafetyNetInfoCache.InnerTable innerTable = new SafetyNetInfoCache.InnerTable();
     innerTable.Table = new SafetyNetInfoHashTable();
     foreach (SafetyNetRequestKey safetyNetRequestKey in this.m_stateSafetyNetInfo.ReadRequestKeys())
     {
         SafetyNetInfo prevInfo = null;
         if (this.m_currentTable != null)
         {
             this.m_currentTable.Table.TryGetValue(safetyNetRequestKey, out prevInfo);
         }
         SafetyNetInfo safetyNetInfo = this.m_stateSafetyNetInfo.ReadRequestInfo(safetyNetRequestKey, prevInfo);
         if (safetyNetInfo != null)
         {
             innerTable.Table.Add(safetyNetRequestKey, safetyNetInfo);
         }
     }
     innerTable.CreateTimeUtc = DateTime.UtcNow;
     return(innerTable);
 }
Exemplo n.º 12
0
        private static void ProcessSingleRequest(ReplayConfiguration config, SafetyNetInfoCache snCache, KeyValuePair <SafetyNetRequestKey, SafetyNetInfo> request)
        {
            SafetyNetRequestKey key         = request.Key;
            SafetyNetInfo       value       = request.Value;
            string   serverName             = key.ServerName;
            DateTime requestCreationTimeUtc = key.RequestCreationTimeUtc;
            TimeSpan timeSpan = TimeSpan.FromSeconds((double)RegistryParameters.DumpsterRedeliveryExpirationDurationInSecs);

            if (requestCreationTimeUtc.Add(timeSpan) < DateTime.UtcNow)
            {
                SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "ProcessSingleRequest: Deleting Dumpster Redelivery request ({2}) for {0}({1}) because it is older than the maximum time for retries ({3}). CreationTimeUtc={4}", new object[]
                {
                    config.Name,
                    config.Identity,
                    key,
                    timeSpan,
                    requestCreationTimeUtc
                });
                ReplayCrimsonEvents.DumpsterRedeliverySpecificRequestExpired.Log <string, Guid, bool, DateTime, SafetyNetRequestKey, string, TimeSpan, bool>(config.DatabaseName, config.IdentityGuid, false, requestCreationTimeUtc, key, value.GetSerializedForm(), timeSpan, value.RedeliveryRequired);
                snCache.Delete(value);
                return;
            }
            if (!value.IsVersionCompatible())
            {
                SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "ProcessSingleRequest: Skipping Dumpster Redelivery request ({2}) for {0}({1}) because it is of an incompatible version. ServerVersion={3}; RequestVersion={4}", new object[]
                {
                    config.Name,
                    config.Identity,
                    key,
                    SafetyNetInfo.VersionNumber,
                    value.Version
                });
                ReplayCrimsonEvents.DumpsterRedeliveryRequestVersionIncompatible.LogPeriodic <string, Guid, bool, DateTime, SafetyNetRequestKey, string, bool, Version, Version>(config.Identity + key.ToString(), DateTimeHelper.OneDay, config.DatabaseName, config.IdentityGuid, false, requestCreationTimeUtc, key, value.GetSerializedForm(), value.RedeliveryRequired, SafetyNetInfo.VersionNumber, value.Version);
                return;
            }
            if (!value.RedeliveryRequired)
            {
                SafetyNetRedelivery.Tracer.TraceDebug <string, string, SafetyNetRequestKey>((long)config.GetHashCode(), "ProcessSingleRequest: Skipping and deleting request ({2}) for {0}({1}) because RedeliveryRequired is 'false'.", config.Name, config.Identity, key);
                snCache.Delete(value);
                return;
            }
            if (value.RequestNextDueTimeUtc > DateTime.UtcNow)
            {
                SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "ProcessSingleRequest: Skipped processing redelivery request ({2}) for {0}({1}) due to backoff logic. The request will next run at '{3}'", new object[]
                {
                    config.Name,
                    config.Identity,
                    key,
                    value.RequestNextDueTimeUtc
                });
                return;
            }
            SafetyNetRedelivery.Tracer.TraceDebug <string, string, SafetyNetRequestKey>((long)config.GetHashCode(), "ProcessSingleRequest: Processing redelivery request ({2}) for {0}({1})", config.Name, config.Identity, key);
            bool                flag         = true;
            DateTime            startTimeUtc = value.StartTimeUtc;
            DateTime            endTimeUtc   = value.EndTimeUtc;
            List <string>       list         = null;
            List <string>       list2        = null;
            TimeSpan            value2       = TimeSpan.FromSeconds((double)RegistryParameters.DumpsterRedeliveryPrimaryRetryDurationInSecs);
            IMonitoringADConfig config2      = Dependencies.MonitoringADConfigProvider.GetConfig(true);

            if (value.HubServers == null || value.HubServers.Count == 0)
            {
                if (config2.ServerRole != MonitoringServerRole.DagMember)
                {
                    SafetyNetRedelivery.LogSpecificRequestFailedEvent(config, key, value, "Local server is not a member of a DAG.", new object[0]);
                    return;
                }
                List <IADServer> servers = config2.Servers;
                if (servers == null || servers.Count == 0)
                {
                    SafetyNetRedelivery.LogSpecificRequestFailedEvent(config, key, value, "Could not find any BackEnd servers in local DAG '{0}'.", new object[]
                    {
                        config2.Dag.Name
                    });
                    return;
                }
                list = new List <string>(servers.Count <IADServer>());
                foreach (IADServer iadserver in servers)
                {
                    list.Add(iadserver.Fqdn);
                }
                value.HubServers = list;
            }
            else if (requestCreationTimeUtc.Add(value2) >= DateTime.UtcNow)
            {
                list = value.PrimaryHubServers;
            }
            else
            {
                list = value.ShadowHubServers;
                flag = false;
                if (value.ShadowRequestCreateTimeUtc == DateTime.MinValue)
                {
                    value.ShadowRequestCreateTimeUtc = DateTime.UtcNow;
                }
            }
            if (list == null || list.Count == 0)
            {
                list = value.HubServers;
            }
            if (SafetyNetRedelivery.Tracer.IsTraceEnabled(TraceType.DebugTrace))
            {
                string text = string.Join(",", list);
                if (flag)
                {
                    SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "ProcessSingleRequest: Processing redelivery request ({2}) for {0}({1}) : Primary phase. Servers={3}", new object[]
                    {
                        config.Name,
                        config.Identity,
                        key,
                        text
                    });
                }
                else
                {
                    SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "ProcessSingleRequest: Processing redelivery request ({2}) for {0}({1}) : Shadow copy phase. Servers={3}", new object[]
                    {
                        config.Name,
                        config.Identity,
                        key,
                        text
                    });
                }
            }
            list2 = new List <string>(list.Count);
            value.RequestLastAttemptedTimeUtc = DateTime.UtcNow;
            foreach (string text2 in list)
            {
                Exception ex = SafetyNetRedelivery.DumpsterResubmitRpc(text2, config, key, value, config2, flag);
                if (ex != null)
                {
                    list2.Add(text2);
                }
            }
            if (list2.Count == 0)
            {
                SafetyNetRedelivery.Tracer.TraceDebug <string, string, SafetyNetRequestKey>((long)config.GetHashCode(), "ProcessSingleRequest: Deleting dumpster request ({2}) for {0}({1}), since RPC has completed to all HUB servers", config.Name, config.Identity, key);
                value.RedeliveryRequired      = false;
                value.RequestCompletedTimeUtc = DateTime.UtcNow;
                value.RequestNextDueTimeUtc   = DateTime.MinValue;
            }
            else
            {
                value.RequestNextDueTimeUtc = SafetyNetRequestBackoff.GetNextDueTime(key, value, flag);
                SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "ProcessSingleRequest: Dumpster request ({2}) for {0}({1}): Setting next due time to {3}.", new object[]
                {
                    config.Name,
                    config.Identity,
                    key,
                    value.RequestNextDueTimeUtc
                });
                ReplayCrimsonEvents.DumpsterRedeliveryRequestNextDueAt.Log <string, Guid, DateTime, DateTime, DateTime, DateTime>(config.DatabaseName, config.IdentityGuid, key.RequestCreationTimeUtc, value.StartTimeUtc, value.EndTimeUtc, value.RequestNextDueTimeUtc);
            }
            if (flag)
            {
                value.PrimaryHubServers = list2;
            }
            else
            {
                value.ShadowHubServers = list2;
            }
            if (value.RedeliveryRequired)
            {
                snCache.Update(value);
                return;
            }
            snCache.Delete(value);
        }
Exemplo n.º 13
0
 public SafetyNetRequestKey(SafetyNetInfo info) : this(info.SourceServerName, info.FailoverTimeUtc, info.UniqueStr)
 {
 }
Exemplo n.º 14
0
        private static Exception DumpsterResubmitRpcInternal(bool isSafetyNetRpc, string hubServer, ReplayConfiguration config, SafetyNetRequestKey snKey, SafetyNetInfo snInfo, bool inPrimaryPhase, out AddResubmitRequestStatus snStatus)
        {
            Exception        ex       = null;
            SubmissionStatus dpStatus = SubmissionStatus.Error;
            string           unresponsivePrimaryServersStr = string.Empty;

            snStatus = AddResubmitRequestStatus.Error;
            AddResubmitRequestStatus tempSnStatus = AddResubmitRequestStatus.Error;

            SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "DumpsterResubmitRpcInternal() called for {0}({1}) to HUB server {2}. isSafetyNetRpc={3}. inPrimaryPhase={4}", new object[]
            {
                config.Name,
                config.Identity,
                hubServer,
                isSafetyNetRpc,
                inPrimaryPhase
            });
            try
            {
                InvokeWithTimeout.Invoke(delegate()
                {
                    using (MailSubmissionServiceRpcClient mailSubmissionServiceRpcClient = new MailSubmissionServiceRpcClient(hubServer))
                    {
                        mailSubmissionServiceRpcClient.SetTimeOut(RegistryParameters.DumpsterRpcTimeoutInMSecs);
                        if (isSafetyNetRpc)
                        {
                            string[] array = null;
                            if (!inPrimaryPhase)
                            {
                                List <string> list = snInfo.PrimaryHubServers;
                                if (list == null || list.Count == 0)
                                {
                                    list = snInfo.HubServers;
                                    SafetyNetRedelivery.Tracer.TraceDebug <string, string, string>((long)config.GetHashCode(), "DumpsterResubmitRpcInternal() for {0}({1}) to HUB server {2} : PrimaryHubServers list was empty, so assuming all HubServers failed to respond to primary and will issue shadow requests for all of them.", config.Name, config.Identity, hubServer);
                                }
                                if (list != null && list.Count > 0)
                                {
                                    array = list.ToArray();
                                    unresponsivePrimaryServersStr = string.Join(",", array);
                                    if (SafetyNetRedelivery.Tracer.IsTraceEnabled(TraceType.DebugTrace))
                                    {
                                        SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "DumpsterResubmitRpcInternal() for {0}({1}) to HUB server {2} : unresponsivePrimaryServers = {3}", new object[]
                                        {
                                            config.Name,
                                            config.Identity,
                                            hubServer,
                                            unresponsivePrimaryServersStr
                                        });
                                    }
                                }
                            }
                            tempSnStatus = mailSubmissionServiceRpcClient.AddMdbResubmitRequest(Guid.Empty, config.IdentityGuid, snInfo.StartTimeUtc.Ticks, snInfo.EndTimeUtc.Ticks, array, null);
                        }
                        else
                        {
                            dpStatus = mailSubmissionServiceRpcClient.SubmitDumpsterMessages(config.DatabaseDn, snInfo.StartTimeUtc.Ticks, snInfo.EndTimeUtc.Ticks);
                        }
                    }
                }, TimeSpan.FromMilliseconds((double)RegistryParameters.DumpsterRpcTimeoutInMSecs));
                if (isSafetyNetRpc)
                {
                    snStatus = tempSnStatus;
                    if (snStatus == AddResubmitRequestStatus.DuplicateRequest)
                    {
                        ReplayCrimsonEvents.DumpsterRedeliverySpecificRequestDuplicate.Log <string, Guid, DateTime, DateTime, DateTime, string>(config.DatabaseName, config.IdentityGuid, snKey.RequestCreationTimeUtc, snInfo.StartTimeUtc, snInfo.EndTimeUtc, hubServer);
                    }
                    else if (snStatus != AddResubmitRequestStatus.Success && snStatus != AddResubmitRequestStatus.Disabled)
                    {
                        ex = new DumpsterSafetyNetRpcFailedException(hubServer, tempSnStatus.ToString());
                        return(ex);
                    }
                }
                TimeSpan timeSpan = DateTime.UtcNow.Subtract(snKey.RequestCreationTimeUtc);
                SafetyNetRedelivery.Tracer.TraceDebug((long)config.GetHashCode(), "DumpsterResubmitRpcInternal() succeeded for {0}({1}) to HUB server {2} after {3}. isSafetyNetRpc={4}. snStatus returned = {5}.", new object[]
                {
                    config.Name,
                    config.Identity,
                    hubServer,
                    timeSpan,
                    isSafetyNetRpc,
                    snStatus
                });
                ReplayCrimsonEvents.DumpsterRedeliverySpecificRequestRPCSucceeded.Log <string, Guid, bool, DateTime, DateTime, DateTime, string, SafetyNetRequestKey, string, TimeSpan, bool, bool, string>(config.DatabaseName, config.IdentityGuid, false, snKey.RequestCreationTimeUtc, snInfo.StartTimeUtc, snInfo.EndTimeUtc, hubServer, snKey, snInfo.GetSerializedForm(), timeSpan, isSafetyNetRpc, inPrimaryPhase, unresponsivePrimaryServersStr);
                ReplayEventLogConstants.Tuple_DatabaseSubmitDumpsterMessages.LogEvent(config.IdentityGuid + hubServer, new object[]
                {
                    hubServer,
                    snInfo.StartTimeUtc,
                    snInfo.EndTimeUtc,
                    config.Name
                });
            }
            catch (RpcException ex2)
            {
                ex = ex2;
            }
            catch (DumpsterCouldNotFindHubServerException ex3)
            {
                ex = ex3;
            }
            catch (TimeoutException ex4)
            {
                ex = ex4;
            }
            finally
            {
                if (ex != null)
                {
                    SafetyNetRedelivery.LogResubmitToServerException(isSafetyNetRpc, hubServer, config, snKey, snInfo, inPrimaryPhase, ex, unresponsivePrimaryServersStr);
                }
            }
            return(ex);
        }
Exemplo n.º 15
0
        private static Exception DumpsterResubmitRpc(string hubServer, ReplayConfiguration config, SafetyNetRequestKey snKey, SafetyNetInfo snInfo, IMonitoringADConfig adConfig, bool inPrimaryPhase)
        {
            bool      flag = false;
            Exception ex   = null;

            SafetyNetRedelivery.Tracer.TraceDebug <string, string, string>((long)config.GetHashCode(), "DumpsterResubmitRpc() called for {0}({1}) to HUB server {2}.", config.Name, config.Identity, hubServer);
            if (SafetyNetRedelivery.IsSafetyNetRedeliveryRpcSupportedOnHubServer(hubServer, adConfig, out ex))
            {
                AddResubmitRequestStatus addResubmitRequestStatus;
                ex = SafetyNetRedelivery.DumpsterResubmitRpcInternal(true, hubServer, config, snKey, snInfo, inPrimaryPhase, out addResubmitRequestStatus);
                if (addResubmitRequestStatus == AddResubmitRequestStatus.Disabled)
                {
                    flag = true;
                    SafetyNetRedelivery.Tracer.TraceDebug <string, string, string>((long)config.GetHashCode(), "DumpsterResubmitRpc() requested from SafetyNet for {0}({1}) to HUB server {2}, but it is Disabled. Falling back to classic Dumpster...", config.Name, config.Identity, hubServer);
                }
                else if (addResubmitRequestStatus == AddResubmitRequestStatus.DuplicateRequest)
                {
                    SafetyNetRedelivery.Tracer.TraceDebug <string, string, string>((long)config.GetHashCode(), "DumpsterResubmitRpc() requested from SafetyNet for {0}({1}) to HUB server {2}, but it is DuplicateRequest. Treating this duplicate RPC as successful.", config.Name, config.Identity, hubServer);
                }
            }
            else if (ex != null)
            {
                SafetyNetRedelivery.LogResubmitToServerException(true, hubServer, config, snKey, snInfo, inPrimaryPhase, ex, string.Empty);
            }
            else
            {
                flag = true;
            }
            if (flag)
            {
                AddResubmitRequestStatus addResubmitRequestStatus;
                ex = SafetyNetRedelivery.DumpsterResubmitRpcInternal(false, hubServer, config, snKey, snInfo, inPrimaryPhase, out addResubmitRequestStatus);
            }
            return(ex);
        }
Exemplo n.º 16
0
 private static void LogSpecificRequestFailedEvent(ReplayConfiguration config, SafetyNetRequestKey snKey, SafetyNetInfo snInfo, string errorMessageFormatStr, params object[] messageParams)
 {
     if (SafetyNetRedelivery.Tracer.IsTraceEnabled(TraceType.ErrorTrace))
     {
         SafetyNetRedelivery.Tracer.TraceError((long)config.GetHashCode(), "ProcessSingleRequest: Redelivery request ({2}) for {0}({1}) failed. Error: {3}", new object[]
         {
             config.Name,
             config.Identity,
             snKey,
             string.Format(errorMessageFormatStr, messageParams)
         });
     }
     ReplayCrimsonEvents.DumpsterRedeliverySpecificRequestFailed.LogPeriodic <string, Guid, bool, DateTime, SafetyNetRequestKey, string, string>(config.Identity + snKey.ToString(), DiagCore.DefaultEventSuppressionInterval, config.DatabaseName, config.IdentityGuid, false, snKey.RequestCreationTimeUtc, snKey, snInfo.GetSerializedForm(), string.Format(errorMessageFormatStr, messageParams));
 }
Exemplo n.º 17
0
        private static void LogResubmitToServerException(bool isSafetyNetRpc, string hubServer, ReplayConfiguration config, SafetyNetRequestKey snKey, SafetyNetInfo snInfo, bool inPrimaryPhase, Exception exception, string unresponsivePrimaryServersStr)
        {
            string text = string.Format("{0}{1}{2}{3}", new object[]
            {
                config.Identity,
                snKey.ToString(),
                hubServer,
                isSafetyNetRpc.ToString(CultureInfo.InvariantCulture)
            });

            SafetyNetRedelivery.Tracer.TraceError((long)config.GetHashCode(), "DumpsterResubmitRpc() made for {0}({1}) to HUB server {2} FAILED! isSafetyNetRpc={3}. Exception: {4}", new object[]
            {
                config.Name,
                config.Identity,
                hubServer,
                isSafetyNetRpc,
                exception
            });
            ReplayCrimsonEvents.DumpsterRedeliverySpecificRequestRPCFailed.LogPeriodic <string, Guid, bool, DateTime, DateTime, DateTime, string, SafetyNetRequestKey, string, string, bool, bool, string>(text, DiagCore.DefaultEventSuppressionInterval, config.DatabaseName, config.IdentityGuid, false, snKey.RequestCreationTimeUtc, snInfo.StartTimeUtc, snInfo.EndTimeUtc, hubServer, snKey, snInfo.GetSerializedForm(), exception.Message, isSafetyNetRpc, inPrimaryPhase, unresponsivePrimaryServersStr);
            ReplayEventLogConstants.Tuple_SubmitDumpsterMessagesFailed.LogEvent(text, new object[]
            {
                hubServer,
                snInfo.StartTimeUtc,
                snInfo.EndTimeUtc,
                config.Name,
                exception.Message
            });
        }