private static SeederRpcFlags GetReseedRPCReason(CatalogAutoReseedWorkflow.CatalogAutoReseedReason reason) { switch (reason) { case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.BehindBacklog: return(SeederRpcFlags.CIAutoReseedReasonBehindBacklog); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.BehindRetry: return(SeederRpcFlags.CIAutoReseedReasonBehindRetry); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.Upgrade: return(SeederRpcFlags.CIAutoReseedReasonUpgrade); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.CatalogCorruptionWhenFeedingStarts: return(SeederRpcFlags.CatalogCorruptionWhenFeedingStarts); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.CatalogCorruptionWhenFeedingCompletes: return(SeederRpcFlags.CatalogCorruptionWhenFeedingCompletes); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.EventsMissingWithNotificationsWatermark: return(SeederRpcFlags.EventsMissingWithNotificationsWatermark); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.CrawlOnNonPreferredActiveWithNotificationsWatermark: return(SeederRpcFlags.CrawlOnNonPreferredActiveWithNotificationsWatermark); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.CrawlOnNonPreferredActiveWithTooManyNotificationEvents: return(SeederRpcFlags.CrawlOnNonPreferredActiveWithTooManyNotificationEvents); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.CrawlOnPassive: return(SeederRpcFlags.CrawlOnPassive); case CatalogAutoReseedWorkflow.CatalogAutoReseedReason.Unknown: return(SeederRpcFlags.Unknown); default: return(SeederRpcFlags.None); } }
public CatalogAutoReseedWorkflow(AutoReseedContext context, CatalogAutoReseedWorkflow.CatalogAutoReseedReason catalogReseedReason, string workflowLaunchReason) : base(AutoReseedWorkflowType.CatalogAutoReseed, workflowLaunchReason, context) { this.catalogReseedReason = catalogReseedReason; }
public bool ReportWorkflowLaunchConditionMet(AutoReseedWorkflowType workflowType, Guid dbGuid, CatalogAutoReseedWorkflow.CatalogAutoReseedReason reason = CatalogAutoReseedWorkflow.CatalogAutoReseedReason.None, int activationPreference = 1) { bool flag = false; AutoReseedWorkflowSuppression.Tracer.TraceDebug((long)this.GetHashCode(), "AutoReseedWorkflowSuppression.ReportWorkflowLaunchConditionMet: Database '{0}' running workflow {1} with ActivationPreference {2} and reason {3}", new object[] { dbGuid, workflowType, activationPreference, reason }); foreach (KeyValuePair <AutoReseedWorkflowType, TransientPeriodicDatabaseErrorSuppression> keyValuePair in this.m_wfSuppressionTable) { if (keyValuePair.Key == workflowType) { TransientErrorInfo.ErrorType errorType; flag = (keyValuePair.Value.ReportFailurePeriodic(dbGuid, out errorType) && errorType == TransientErrorInfo.ErrorType.Failure); AutoReseedWorkflowSuppression.Tracer.TraceDebug((long)this.GetHashCode(), "AutoReseedWorkflowSuppression.ReportWorkflowLaunchConditionMet: Database '{0}' is reporting failure on periodic suppression fail table with ErrorType {1} for workflow {2}, shouldLaunch {3}.", new object[] { dbGuid, errorType, keyValuePair.Key, flag }); } else { TransientErrorInfo.ErrorType errorType; keyValuePair.Value.ReportSuccessPeriodic(dbGuid, out errorType); AutoReseedWorkflowSuppression.Tracer.TraceDebug <Guid, TransientErrorInfo.ErrorType, AutoReseedWorkflowType>((long)this.GetHashCode(), "AutoReseedWorkflowSuppression.ReportWorkflowLaunchConditionMet: Database '{0}' is resetting periodic suppression fail table with ErrorType {1} for workflow {2}.", dbGuid, errorType, keyValuePair.Key); } } if (flag && workflowType == AutoReseedWorkflowType.CatalogAutoReseed && reason == CatalogAutoReseedWorkflow.CatalogAutoReseedReason.Upgrade) { DateTime utcNow = DateTime.UtcNow; activationPreference = ((activationPreference <= 1) ? 1 : activationPreference); TimeSpan timeSpan = TimeSpan.FromSeconds((double)(activationPreference * (int)AutoReseedWorkflowSuppression.s_ciCatalogAutoReseedOnUpgradeInterval.TotalSeconds)); DateTime value; if (this.m_catalogAutoReseedElapsedTime.TryGetValue(dbGuid, out value)) { TimeSpan timeSpan2 = utcNow.Subtract(value); if (timeSpan2 < timeSpan) { flag = false; AutoReseedWorkflowSuppression.Tracer.TraceDebug((long)this.GetHashCode(), "AutoReseedWorkflowSuppression.ReportWorkflowLaunchConditionMet: Database '{0}' blocking reseed elapsed time {1} < delay time {2}. ActivationPref is {3}", new object[] { dbGuid, timeSpan2, timeSpan, activationPreference }); } else { this.m_catalogAutoReseedElapsedTime.Remove(dbGuid); AutoReseedWorkflowSuppression.Tracer.TraceDebug <Guid, TimeSpan, int>((long)this.GetHashCode(), "AutoReseedWorkflowSuppression.ReportWorkflowLaunchConditionMet: Database '{0}' allowing reseed at current time as a previous reseed was called and delayed {1}. ActivationPref is {2}", dbGuid, timeSpan, activationPreference); } } else { this.m_catalogAutoReseedElapsedTime[dbGuid] = utcNow; flag = false; AutoReseedWorkflowSuppression.Tracer.TraceDebug <Guid, TimeSpan, int>((long)this.GetHashCode(), "AutoReseedWorkflowSuppression.ReportWorkflowLaunchConditionMet: Database '{0}' blocking reseed for {1} as this is the first call. ActivationPref is {2}", dbGuid, timeSpan, activationPreference); } } return(flag); }