From 76af19b10857a05f8100ec984c8be7b6d6c8b15d Mon Sep 17 00:00:00 2001 From: sankari gopalakrishnan Date: Mon, 7 Oct 2024 11:00:30 +0200 Subject: [PATCH 1/3] [Wf-Diagnostics] Refactor to move all timeout related checks under one directory --- service/worker/diagnostics/activities.go | 5 +- service/worker/diagnostics/activities_test.go | 11 ++-- .../diagnostics/invariants/invariant.go | 17 ++++++- .../invariants/{ => timeouts}/timeout.go | 51 ++++++++++--------- .../invariants/{ => timeouts}/timeout_test.go | 51 ++++++++++--------- .../{ => timeouts}/timeout_utils.go | 2 +- .../invariants/{ => timeouts}/types.go | 15 +----- service/worker/diagnostics/workflow.go | 33 ++++++------ service/worker/diagnostics/workflow_test.go | 43 ++++++++-------- 9 files changed, 118 insertions(+), 110 deletions(-) rename service/worker/diagnostics/invariants/{ => timeouts}/timeout.go (78%) rename service/worker/diagnostics/invariants/{ => timeouts}/timeout_test.go (91%) rename service/worker/diagnostics/invariants/{ => timeouts}/timeout_utils.go (99%) rename service/worker/diagnostics/invariants/{ => timeouts}/types.go (80%) diff --git a/service/worker/diagnostics/activities.go b/service/worker/diagnostics/activities.go index ef47a8abcce..68376d5a4aa 100644 --- a/service/worker/diagnostics/activities.go +++ b/service/worker/diagnostics/activities.go @@ -24,6 +24,7 @@ package diagnostics import ( "context" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "github.com/uber/cadence/common/messaging" "github.com/uber/cadence/common/messaging/kafka" @@ -56,7 +57,7 @@ type identifyTimeoutsInputParams struct { } func (w *dw) identifyTimeouts(ctx context.Context, info identifyTimeoutsInputParams) ([]invariants.InvariantCheckResult, error) { - timeoutInvariant := invariants.NewTimeout(invariants.NewTimeoutParams{ + timeoutInvariant := timeouts.NewTimeout(timeouts.NewTimeoutParams{ WorkflowExecutionHistory: info.History, Domain: info.Domain, ClientBean: w.clientBean, @@ -71,7 +72,7 @@ type rootCauseTimeoutsParams struct { } func (w *dw) rootCauseTimeouts(ctx context.Context, info rootCauseTimeoutsParams) ([]invariants.InvariantRootCauseResult, error) { - timeoutInvariant := invariants.NewTimeout(invariants.NewTimeoutParams{ + timeoutInvariant := timeouts.NewTimeout(timeouts.NewTimeoutParams{ WorkflowExecutionHistory: info.History, ClientBean: w.clientBean, Domain: info.Domain, diff --git a/service/worker/diagnostics/activities_test.go b/service/worker/diagnostics/activities_test.go index abcefcf3197..5742b955303 100644 --- a/service/worker/diagnostics/activities_test.go +++ b/service/worker/diagnostics/activities_test.go @@ -25,6 +25,7 @@ package diagnostics import ( "context" "encoding/json" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "testing" "time" @@ -61,7 +62,7 @@ func Test__retrieveExecutionHistory(t *testing.T) { func Test__identifyTimeouts(t *testing.T) { dwtest := testDiagnosticWorkflow(t) - workflowTimeoutData := invariants.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -76,7 +77,7 @@ func Test__identifyTimeouts(t *testing.T) { require.NoError(t, err) expectedResult := []invariants.InvariantCheckResult{ { - InvariantType: invariants.TimeoutTypeExecution.String(), + InvariantType: timeouts.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, @@ -88,7 +89,7 @@ func Test__identifyTimeouts(t *testing.T) { func Test__rootCauseTimeouts(t *testing.T) { dwtest := testDiagnosticWorkflow(t) - workflowTimeoutData := invariants.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -107,13 +108,13 @@ func Test__rootCauseTimeouts(t *testing.T) { require.NoError(t, err) issues := []invariants.InvariantCheckResult{ { - InvariantType: invariants.TimeoutTypeExecution.String(), + InvariantType: timeouts.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, } taskListBacklog := int64(10) - taskListBacklogInBytes, err := json.Marshal(invariants.PollersMetadata{TaskListBacklog: taskListBacklog}) + taskListBacklogInBytes, err := json.Marshal(timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}) require.NoError(t, err) expectedRootCause := []invariants.InvariantRootCauseResult{ { diff --git a/service/worker/diagnostics/invariants/invariant.go b/service/worker/diagnostics/invariants/invariant.go index 6854ab0870d..bd9a4af699b 100644 --- a/service/worker/diagnostics/invariants/invariant.go +++ b/service/worker/diagnostics/invariants/invariant.go @@ -22,7 +22,9 @@ package invariants -import "context" +import ( + "context" +) // InvariantCheckResult is the result from the invariant check type InvariantCheckResult struct { @@ -37,6 +39,19 @@ type InvariantRootCauseResult struct { Metadata []byte } +type RootCause string + +const ( + RootCauseTypeMissingPollers RootCause = "There are no pollers for the tasklist" + RootCauseTypePollersStatus RootCause = "There are pollers for the tasklist. Check backlog status" + RootCauseTypeHeartBeatingNotEnabled RootCause = "HeartBeating not enabled for activity" + RootCauseTypeHeartBeatingEnabledMissingHeartbeat RootCause = "HeartBeating enabled for activity but timed out due to missing heartbeat" +) + +func (r RootCause) String() string { + return string(r) +} + // Invariant represents a condition of a workflow execution. type Invariant interface { Check(context.Context) ([]InvariantCheckResult, error) diff --git a/service/worker/diagnostics/invariants/timeout.go b/service/worker/diagnostics/invariants/timeouts/timeout.go similarity index 78% rename from service/worker/diagnostics/invariants/timeout.go rename to service/worker/diagnostics/invariants/timeouts/timeout.go index bc98c7fe27e..1de72238cd0 100644 --- a/service/worker/diagnostics/invariants/timeout.go +++ b/service/worker/diagnostics/invariants/timeouts/timeout.go @@ -20,19 +20,20 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package invariants +package timeouts import ( "context" "encoding/json" "fmt" + "github.com/uber/cadence/service/worker/diagnostics/invariants" "time" "github.com/uber/cadence/client" "github.com/uber/cadence/common/types" ) -type Timeout Invariant +type Timeout invariants.Invariant type timeout struct { workflowExecutionHistory *types.GetWorkflowExecutionHistoryResponse @@ -46,7 +47,7 @@ type NewTimeoutParams struct { ClientBean client.Bean } -func NewTimeout(p NewTimeoutParams) Invariant { +func NewTimeout(p NewTimeoutParams) invariants.Invariant { return &timeout{ workflowExecutionHistory: p.WorkflowExecutionHistory, domain: p.Domain, @@ -54,8 +55,8 @@ func NewTimeout(p NewTimeoutParams) Invariant { } } -func (t *timeout) Check(context.Context) ([]InvariantCheckResult, error) { - result := make([]InvariantCheckResult, 0) +func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, error) { + result := make([]invariants.InvariantCheckResult, 0) events := t.workflowExecutionHistory.GetHistory().GetEvents() for _, event := range events { if event.WorkflowExecutionTimedOutEventAttributes != nil { @@ -66,7 +67,7 @@ func (t *timeout) Check(context.Context) ([]InvariantCheckResult, error) { LastOngoingEvent: events[len(events)-2], Tasklist: getWorkflowExecutionTasklist(events), } - result = append(result, InvariantCheckResult{ + result = append(result, invariants.InvariantCheckResult{ InvariantType: TimeoutTypeExecution.String(), Reason: event.GetWorkflowExecutionTimedOutEventAttributes().GetTimeoutType().String(), Metadata: marshalData(data), @@ -77,7 +78,7 @@ func (t *timeout) Check(context.Context) ([]InvariantCheckResult, error) { if err != nil { return nil, err } - result = append(result, InvariantCheckResult{ + result = append(result, invariants.InvariantCheckResult{ InvariantType: TimeoutTypeActivity.String(), Reason: event.GetActivityTaskTimedOutEventAttributes().GetTimeoutType().String(), Metadata: marshalData(metadata), @@ -85,7 +86,7 @@ func (t *timeout) Check(context.Context) ([]InvariantCheckResult, error) { } if event.DecisionTaskTimedOutEventAttributes != nil { reason, metadata := reasonForDecisionTaskTimeouts(event, events) - result = append(result, InvariantCheckResult{ + result = append(result, invariants.InvariantCheckResult{ InvariantType: TimeoutTypeDecision.String(), Reason: reason, Metadata: marshalData(metadata), @@ -98,7 +99,7 @@ func (t *timeout) Check(context.Context) ([]InvariantCheckResult, error) { ConfiguredTimeout: time.Duration(timeoutLimit) * time.Second, Execution: event.GetChildWorkflowExecutionTimedOutEventAttributes().WorkflowExecution, } - result = append(result, InvariantCheckResult{ + result = append(result, invariants.InvariantCheckResult{ InvariantType: TimeoutTypeChildWorkflow.String(), Reason: event.GetChildWorkflowExecutionTimedOutEventAttributes().TimeoutType.String(), Metadata: marshalData(data), @@ -108,8 +109,8 @@ func (t *timeout) Check(context.Context) ([]InvariantCheckResult, error) { return result, nil } -func (t *timeout) RootCause(ctx context.Context, issues []InvariantCheckResult) ([]InvariantRootCauseResult, error) { - result := make([]InvariantRootCauseResult, 0) +func (t *timeout) RootCause(ctx context.Context, issues []invariants.InvariantCheckResult) ([]invariants.InvariantRootCauseResult, error) { + result := make([]invariants.InvariantRootCauseResult, 0) for _, issue := range issues { pollerStatus, err := t.checkTasklist(ctx, issue) if err != nil { @@ -129,7 +130,7 @@ func (t *timeout) RootCause(ctx context.Context, issues []InvariantCheckResult) return result, nil } -func (t *timeout) checkTasklist(ctx context.Context, issue InvariantCheckResult) (InvariantRootCauseResult, error) { +func (t *timeout) checkTasklist(ctx context.Context, issue invariants.InvariantCheckResult) (invariants.InvariantRootCauseResult, error) { var taskList *types.TaskList var tasklistType *types.TaskListType switch issue.InvariantType { @@ -137,7 +138,7 @@ func (t *timeout) checkTasklist(ctx context.Context, issue InvariantCheckResult) var metadata ExecutionTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { - return InvariantRootCauseResult{}, err + return invariants.InvariantRootCauseResult{}, err } taskList = metadata.Tasklist tasklistType = types.TaskListTypeDecision.Ptr() @@ -145,13 +146,13 @@ func (t *timeout) checkTasklist(ctx context.Context, issue InvariantCheckResult) var metadata ActivityTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { - return InvariantRootCauseResult{}, err + return invariants.InvariantRootCauseResult{}, err } taskList = metadata.Tasklist tasklistType = types.TaskListTypeActivity.Ptr() } if taskList == nil { - return InvariantRootCauseResult{}, fmt.Errorf("tasklist not set") + return invariants.InvariantRootCauseResult{}, fmt.Errorf("tasklist not set") } frontendClient := t.clientBean.GetFrontendClient() @@ -161,25 +162,25 @@ func (t *timeout) checkTasklist(ctx context.Context, issue InvariantCheckResult) TaskListType: tasklistType, }) if err != nil { - return InvariantRootCauseResult{}, err + return invariants.InvariantRootCauseResult{}, err } tasklistBacklog := resp.GetTaskListStatus().GetBacklogCountHint() polllersMetadataInBytes := marshalData(PollersMetadata{TaskListBacklog: tasklistBacklog}) if len(resp.GetPollers()) == 0 { - return InvariantRootCauseResult{ - RootCause: RootCauseTypeMissingPollers, + return invariants.InvariantRootCauseResult{ + RootCause: invariants.RootCauseTypeMissingPollers, Metadata: polllersMetadataInBytes, }, nil } - return InvariantRootCauseResult{ - RootCause: RootCauseTypePollersStatus, + return invariants.InvariantRootCauseResult{ + RootCause: invariants.RootCauseTypePollersStatus, Metadata: polllersMetadataInBytes, }, nil } -func checkHeartbeatStatus(issue InvariantCheckResult) ([]InvariantRootCauseResult, error) { +func checkHeartbeatStatus(issue invariants.InvariantCheckResult) ([]invariants.InvariantRootCauseResult, error) { var metadata ActivityTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { @@ -189,18 +190,18 @@ func checkHeartbeatStatus(issue InvariantCheckResult) ([]InvariantRootCauseResul heartbeatingMetadataInBytes := marshalData(HeartbeatingMetadata{TimeElapsed: metadata.TimeElapsed}) if metadata.HeartBeatTimeout == 0 && activityStarted(metadata) { - return []InvariantRootCauseResult{ + return []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypeHeartBeatingNotEnabled, + RootCause: invariants.RootCauseTypeHeartBeatingNotEnabled, Metadata: heartbeatingMetadataInBytes, }, }, nil } if metadata.HeartBeatTimeout > 0 && metadata.TimeoutType.String() == types.TimeoutTypeHeartbeat.String() { - return []InvariantRootCauseResult{ + return []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypeHeartBeatingEnabledMissingHeartbeat, + RootCause: invariants.RootCauseTypeHeartBeatingEnabledMissingHeartbeat, Metadata: heartbeatingMetadataInBytes, }, }, nil diff --git a/service/worker/diagnostics/invariants/timeout_test.go b/service/worker/diagnostics/invariants/timeouts/timeout_test.go similarity index 91% rename from service/worker/diagnostics/invariants/timeout_test.go rename to service/worker/diagnostics/invariants/timeouts/timeout_test.go index 3a420ebbb98..cd109662e60 100644 --- a/service/worker/diagnostics/invariants/timeout_test.go +++ b/service/worker/diagnostics/invariants/timeouts/timeout_test.go @@ -20,11 +20,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package invariants +package timeouts import ( "context" "encoding/json" + "github.com/uber/cadence/service/worker/diagnostics/invariants" "testing" "time" @@ -54,13 +55,13 @@ func Test__Check(t *testing.T) { testCases := []struct { name string testData *types.GetWorkflowExecutionHistoryResponse - expectedResult []InvariantCheckResult + expectedResult []invariants.InvariantCheckResult err error }{ { name: "workflow execution timeout", testData: wfTimeoutHistory(), - expectedResult: []InvariantCheckResult{ + expectedResult: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", @@ -72,7 +73,7 @@ func Test__Check(t *testing.T) { { name: "child workflow execution timeout", testData: childWfTimeoutHistory(), - expectedResult: []InvariantCheckResult{ + expectedResult: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeChildWorkflow.String(), Reason: "START_TO_CLOSE", @@ -84,7 +85,7 @@ func Test__Check(t *testing.T) { { name: "activity timeout", testData: activityTimeoutHistory(), - expectedResult: []InvariantCheckResult{ + expectedResult: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "SCHEDULE_TO_START", @@ -101,7 +102,7 @@ func Test__Check(t *testing.T) { { name: "decision timeout", testData: decisionTimeoutHistory(), - expectedResult: []InvariantCheckResult{ + expectedResult: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeDecision.String(), Reason: "START_TO_CLOSE", @@ -383,14 +384,14 @@ func Test__RootCause(t *testing.T) { require.NoError(t, err) testCases := []struct { name string - input []InvariantCheckResult + input []invariants.InvariantCheckResult clientExpects func(*frontend.MockClient) - expectedResult []InvariantRootCauseResult + expectedResult []invariants.InvariantRootCauseResult err error }{ { name: "workflow execution timeout without pollers", - input: []InvariantCheckResult{ + input: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", @@ -405,9 +406,9 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []InvariantRootCauseResult{ + expectedResult: []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypeMissingPollers, + RootCause: invariants.RootCauseTypeMissingPollers, Metadata: pollersMetadataInBytes, }, }, @@ -415,7 +416,7 @@ func Test__RootCause(t *testing.T) { }, { name: "workflow execution timeout with pollers", - input: []InvariantCheckResult{ + input: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", @@ -434,9 +435,9 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []InvariantRootCauseResult{ + expectedResult: []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypePollersStatus, + RootCause: invariants.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, }, @@ -444,7 +445,7 @@ func Test__RootCause(t *testing.T) { }, { name: "activity timeout and heart beating not enabled", - input: []InvariantCheckResult{ + input: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", @@ -463,13 +464,13 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []InvariantRootCauseResult{ + expectedResult: []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypePollersStatus, + RootCause: invariants.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, { - RootCause: RootCauseTypeHeartBeatingNotEnabled, + RootCause: invariants.RootCauseTypeHeartBeatingNotEnabled, Metadata: heartBeatingMetadataInBytes, }, }, @@ -477,7 +478,7 @@ func Test__RootCause(t *testing.T) { }, { name: "activity schedule to start timeout", - input: []InvariantCheckResult{ + input: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "SCHEDULE_TO_START", @@ -496,9 +497,9 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []InvariantRootCauseResult{ + expectedResult: []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypePollersStatus, + RootCause: invariants.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, }, @@ -506,7 +507,7 @@ func Test__RootCause(t *testing.T) { }, { name: "activity timeout and heart beating enabled", - input: []InvariantCheckResult{ + input: []invariants.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", @@ -525,13 +526,13 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []InvariantRootCauseResult{ + expectedResult: []invariants.InvariantRootCauseResult{ { - RootCause: RootCauseTypePollersStatus, + RootCause: invariants.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, { - RootCause: RootCauseTypeHeartBeatingEnabledMissingHeartbeat, + RootCause: invariants.RootCauseTypeHeartBeatingEnabledMissingHeartbeat, Metadata: heartBeatingMetadataInBytes, }, }, diff --git a/service/worker/diagnostics/invariants/timeout_utils.go b/service/worker/diagnostics/invariants/timeouts/timeout_utils.go similarity index 99% rename from service/worker/diagnostics/invariants/timeout_utils.go rename to service/worker/diagnostics/invariants/timeouts/timeout_utils.go index efe1031f86a..ae526034dcf 100644 --- a/service/worker/diagnostics/invariants/timeout_utils.go +++ b/service/worker/diagnostics/invariants/timeouts/timeout_utils.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package invariants +package timeouts import ( "encoding/json" diff --git a/service/worker/diagnostics/invariants/types.go b/service/worker/diagnostics/invariants/timeouts/types.go similarity index 80% rename from service/worker/diagnostics/invariants/types.go rename to service/worker/diagnostics/invariants/timeouts/types.go index 6eca2be4099..34b98e29dea 100644 --- a/service/worker/diagnostics/invariants/types.go +++ b/service/worker/diagnostics/invariants/timeouts/types.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package invariants +package timeouts import ( "time" @@ -37,23 +37,10 @@ const ( TimeoutTypeChildWorkflow TimeoutType = "Child Workflow Execution has timed out" ) -type RootCause string - -const ( - RootCauseTypeMissingPollers RootCause = "There are no pollers for the tasklist" - RootCauseTypePollersStatus RootCause = "There are pollers for the tasklist. Check backlog status" - RootCauseTypeHeartBeatingNotEnabled RootCause = "HeartBeating not enabled for activity" - RootCauseTypeHeartBeatingEnabledMissingHeartbeat RootCause = "HeartBeating enabled for activity but timed out due to missing heartbeat" -) - func (tt TimeoutType) String() string { return string(tt) } -func (r RootCause) String() string { - return string(r) -} - type ExecutionTimeoutMetadata struct { ExecutionTime time.Duration ConfiguredTimeout time.Duration diff --git a/service/worker/diagnostics/workflow.go b/service/worker/diagnostics/workflow.go index cc9954030c3..9bc88bfb943 100644 --- a/service/worker/diagnostics/workflow.go +++ b/service/worker/diagnostics/workflow.go @@ -25,6 +25,7 @@ package diagnostics import ( "encoding/json" "fmt" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "time" "go.uber.org/cadence/workflow" @@ -62,16 +63,16 @@ type timeoutDiagnostics struct { type timeoutIssuesResult struct { InvariantType string Reason string - ExecutionTimeout *invariants.ExecutionTimeoutMetadata - ActivityTimeout *invariants.ActivityTimeoutMetadata - ChildWfTimeout *invariants.ChildWfTimeoutMetadata - DecisionTimeout *invariants.DecisionTimeoutMetadata + ExecutionTimeout *timeouts.ExecutionTimeoutMetadata + ActivityTimeout *timeouts.ActivityTimeoutMetadata + ChildWfTimeout *timeouts.ChildWfTimeoutMetadata + DecisionTimeout *timeouts.DecisionTimeoutMetadata } type timeoutRootCauseResult struct { RootCauseType string - PollersMetadata *invariants.PollersMetadata - HeartBeatingMetadata *invariants.HeartbeatingMetadata + PollersMetadata *timeouts.PollersMetadata + HeartBeatingMetadata *timeouts.HeartbeatingMetadata } func (w *dw) DiagnosticsWorkflow(ctx workflow.Context, params DiagnosticsWorkflowInput) (*DiagnosticsWorkflowResult, error) { @@ -140,8 +141,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout result := make([]*timeoutIssuesResult, 0) for _, issue := range issues { switch issue.InvariantType { - case invariants.TimeoutTypeExecution.String(): - var metadata invariants.ExecutionTimeoutMetadata + case timeouts.TimeoutTypeExecution.String(): + var metadata timeouts.ExecutionTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -151,8 +152,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout Reason: issue.Reason, ExecutionTimeout: &metadata, }) - case invariants.TimeoutTypeActivity.String(): - var metadata invariants.ActivityTimeoutMetadata + case timeouts.TimeoutTypeActivity.String(): + var metadata timeouts.ActivityTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -162,8 +163,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout Reason: issue.Reason, ActivityTimeout: &metadata, }) - case invariants.TimeoutTypeChildWorkflow.String(): - var metadata invariants.ChildWfTimeoutMetadata + case timeouts.TimeoutTypeChildWorkflow.String(): + var metadata timeouts.ChildWfTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -173,8 +174,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout Reason: issue.Reason, ChildWfTimeout: &metadata, }) - case invariants.TimeoutTypeDecision.String(): - var metadata invariants.DecisionTimeoutMetadata + case timeouts.TimeoutTypeDecision.String(): + var metadata timeouts.DecisionTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -194,7 +195,7 @@ func retrieveTimeoutRootCause(rootCause []invariants.InvariantRootCauseResult) ( for _, rc := range rootCause { switch rc.RootCause { case invariants.RootCauseTypePollersStatus, invariants.RootCauseTypeMissingPollers: - var metadata invariants.PollersMetadata + var metadata timeouts.PollersMetadata err := json.Unmarshal(rc.Metadata, &metadata) if err != nil { return nil, err @@ -204,7 +205,7 @@ func retrieveTimeoutRootCause(rootCause []invariants.InvariantRootCauseResult) ( PollersMetadata: &metadata, }) case invariants.RootCauseTypeHeartBeatingNotEnabled, invariants.RootCauseTypeHeartBeatingEnabledMissingHeartbeat: - var metadata invariants.HeartbeatingMetadata + var metadata timeouts.HeartbeatingMetadata err := json.Unmarshal(rc.Metadata, &metadata) if err != nil { return nil, err diff --git a/service/worker/diagnostics/workflow_test.go b/service/worker/diagnostics/workflow_test.go index 9530e0ae27a..90a6c02f570 100644 --- a/service/worker/diagnostics/workflow_test.go +++ b/service/worker/diagnostics/workflow_test.go @@ -26,6 +26,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "testing" "time" @@ -87,7 +88,7 @@ func (s *diagnosticsWorkflowTestSuite) TestWorkflow() { WorkflowID: "123", RunID: "abc", } - workflowTimeoutData := invariants.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -102,20 +103,20 @@ func (s *diagnosticsWorkflowTestSuite) TestWorkflow() { s.NoError(err) issues := []invariants.InvariantCheckResult{ { - InvariantType: invariants.TimeoutTypeExecution.String(), + InvariantType: timeouts.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, } timeoutIssues := []*timeoutIssuesResult{ { - InvariantType: invariants.TimeoutTypeExecution.String(), + InvariantType: timeouts.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", ExecutionTimeout: &workflowTimeoutData, }, } taskListBacklog := int64(10) - pollersMetadataInBytes, err := json.Marshal(invariants.PollersMetadata{TaskListBacklog: taskListBacklog}) + pollersMetadataInBytes, err := json.Marshal(timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}) s.NoError(err) rootCause := []invariants.InvariantRootCauseResult{ { @@ -126,7 +127,7 @@ func (s *diagnosticsWorkflowTestSuite) TestWorkflow() { timeoutRootCause := []*timeoutRootCauseResult{ { RootCauseType: invariants.RootCauseTypePollersStatus.String(), - PollersMetadata: &invariants.PollersMetadata{TaskListBacklog: taskListBacklog}, + PollersMetadata: &timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}, }, } s.workflowEnv.OnActivity(retrieveWfExecutionHistoryActivity, mock.Anything, mock.Anything).Return(nil, nil) @@ -172,7 +173,7 @@ func (s *diagnosticsWorkflowTestSuite) queryDiagnostics() DiagnosticsStarterWork } func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { - workflowTimeoutData := invariants.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -185,13 +186,13 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { } workflowTimeoutDataInBytes, err := json.Marshal(workflowTimeoutData) s.NoError(err) - childWorkflowTimeoutData := invariants.ChildWfTimeoutMetadata{ + childWorkflowTimeoutData := timeouts.ChildWfTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, } childWorkflowTimeoutDataInBytes, err := json.Marshal(childWorkflowTimeoutData) s.NoError(err) - activityTimeoutData := invariants.ActivityTimeoutMetadata{ + activityTimeoutData := timeouts.ActivityTimeoutMetadata{ TimeoutType: types.TimeoutTypeStartToClose.Ptr(), ConfiguredTimeout: 5 * time.Second, TimeElapsed: 5 * time.Second, @@ -199,51 +200,51 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { } activityTimeoutDataInBytes, err := json.Marshal(activityTimeoutData) s.NoError(err) - descTimeoutData := invariants.DecisionTimeoutMetadata{ + descTimeoutData := timeouts.DecisionTimeoutMetadata{ ConfiguredTimeout: 5 * time.Second, } descTimeoutDataInBytes, err := json.Marshal(activityTimeoutData) s.NoError(err) issues := []invariants.InvariantCheckResult{ { - InvariantType: invariants.TimeoutTypeExecution.String(), + InvariantType: timeouts.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, { - InvariantType: invariants.TimeoutTypeActivity.String(), + InvariantType: timeouts.TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", Metadata: activityTimeoutDataInBytes, }, { - InvariantType: invariants.TimeoutTypeDecision.String(), + InvariantType: timeouts.TimeoutTypeDecision.String(), Reason: "START_TO_CLOSE", Metadata: descTimeoutDataInBytes, }, { - InvariantType: invariants.TimeoutTypeChildWorkflow.String(), + InvariantType: timeouts.TimeoutTypeChildWorkflow.String(), Reason: "START_TO_CLOSE", Metadata: childWorkflowTimeoutDataInBytes, }, } timeoutIssues := []*timeoutIssuesResult{ { - InvariantType: invariants.TimeoutTypeExecution.String(), + InvariantType: timeouts.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", ExecutionTimeout: &workflowTimeoutData, }, { - InvariantType: invariants.TimeoutTypeActivity.String(), + InvariantType: timeouts.TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", ActivityTimeout: &activityTimeoutData, }, { - InvariantType: invariants.TimeoutTypeDecision.String(), + InvariantType: timeouts.TimeoutTypeDecision.String(), Reason: "START_TO_CLOSE", DecisionTimeout: &descTimeoutData, }, { - InvariantType: invariants.TimeoutTypeChildWorkflow.String(), + InvariantType: timeouts.TimeoutTypeChildWorkflow.String(), Reason: "START_TO_CLOSE", ChildWfTimeout: &childWorkflowTimeoutData, }, @@ -255,9 +256,9 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutRootCause() { taskListBacklog := int64(10) - pollersMetadataInBytes, err := json.Marshal(invariants.PollersMetadata{TaskListBacklog: taskListBacklog}) + pollersMetadataInBytes, err := json.Marshal(timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}) s.NoError(err) - heartBeatingMetadataInBytes, err := json.Marshal(invariants.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}) + heartBeatingMetadataInBytes, err := json.Marshal(timeouts.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}) s.NoError(err) rootCause := []invariants.InvariantRootCauseResult{ { @@ -272,11 +273,11 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutRootCause() { timeoutRootCause := []*timeoutRootCauseResult{ { RootCauseType: invariants.RootCauseTypePollersStatus.String(), - PollersMetadata: &invariants.PollersMetadata{TaskListBacklog: taskListBacklog}, + PollersMetadata: &timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}, }, { RootCauseType: invariants.RootCauseTypeHeartBeatingNotEnabled.String(), - HeartBeatingMetadata: &invariants.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}, + HeartBeatingMetadata: &timeouts.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}, }, } result, err := retrieveTimeoutRootCause(rootCause) From 873d09ab7a305841eb6d5f4e65944a76d3cbd4f8 Mon Sep 17 00:00:00 2001 From: sankari gopalakrishnan Date: Mon, 7 Oct 2024 11:14:40 +0200 Subject: [PATCH 2/3] fix lint errors --- service/worker/diagnostics/activities.go | 2 +- service/worker/diagnostics/activities_test.go | 2 +- service/worker/diagnostics/invariants/timeouts/timeout.go | 2 +- service/worker/diagnostics/invariants/timeouts/timeout_test.go | 2 +- service/worker/diagnostics/workflow.go | 2 +- service/worker/diagnostics/workflow_test.go | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/service/worker/diagnostics/activities.go b/service/worker/diagnostics/activities.go index 68376d5a4aa..e363c99e7b1 100644 --- a/service/worker/diagnostics/activities.go +++ b/service/worker/diagnostics/activities.go @@ -24,13 +24,13 @@ package diagnostics import ( "context" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "github.com/uber/cadence/common/messaging" "github.com/uber/cadence/common/messaging/kafka" "github.com/uber/cadence/common/types" "github.com/uber/cadence/service/worker/diagnostics/analytics" "github.com/uber/cadence/service/worker/diagnostics/invariants" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" ) const ( diff --git a/service/worker/diagnostics/activities_test.go b/service/worker/diagnostics/activities_test.go index 5742b955303..dc221d94632 100644 --- a/service/worker/diagnostics/activities_test.go +++ b/service/worker/diagnostics/activities_test.go @@ -25,7 +25,6 @@ package diagnostics import ( "context" "encoding/json" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "testing" "time" @@ -39,6 +38,7 @@ import ( "github.com/uber/cadence/common/types" "github.com/uber/cadence/service/worker/diagnostics/analytics" "github.com/uber/cadence/service/worker/diagnostics/invariants" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" ) const ( diff --git a/service/worker/diagnostics/invariants/timeouts/timeout.go b/service/worker/diagnostics/invariants/timeouts/timeout.go index 1de72238cd0..5b46eef170c 100644 --- a/service/worker/diagnostics/invariants/timeouts/timeout.go +++ b/service/worker/diagnostics/invariants/timeouts/timeout.go @@ -26,11 +26,11 @@ import ( "context" "encoding/json" "fmt" - "github.com/uber/cadence/service/worker/diagnostics/invariants" "time" "github.com/uber/cadence/client" "github.com/uber/cadence/common/types" + "github.com/uber/cadence/service/worker/diagnostics/invariants" ) type Timeout invariants.Invariant diff --git a/service/worker/diagnostics/invariants/timeouts/timeout_test.go b/service/worker/diagnostics/invariants/timeouts/timeout_test.go index cd109662e60..41f2a878c59 100644 --- a/service/worker/diagnostics/invariants/timeouts/timeout_test.go +++ b/service/worker/diagnostics/invariants/timeouts/timeout_test.go @@ -25,7 +25,6 @@ package timeouts import ( "context" "encoding/json" - "github.com/uber/cadence/service/worker/diagnostics/invariants" "testing" "time" @@ -36,6 +35,7 @@ import ( "github.com/uber/cadence/client/frontend" "github.com/uber/cadence/common" "github.com/uber/cadence/common/types" + "github.com/uber/cadence/service/worker/diagnostics/invariants" ) const ( diff --git a/service/worker/diagnostics/workflow.go b/service/worker/diagnostics/workflow.go index 9bc88bfb943..155a7618b4a 100644 --- a/service/worker/diagnostics/workflow.go +++ b/service/worker/diagnostics/workflow.go @@ -25,7 +25,6 @@ package diagnostics import ( "encoding/json" "fmt" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "time" "go.uber.org/cadence/workflow" @@ -33,6 +32,7 @@ import ( "github.com/uber/cadence/common/metrics" "github.com/uber/cadence/common/types" "github.com/uber/cadence/service/worker/diagnostics/invariants" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" ) const ( diff --git a/service/worker/diagnostics/workflow_test.go b/service/worker/diagnostics/workflow_test.go index 90a6c02f570..d9a1106860e 100644 --- a/service/worker/diagnostics/workflow_test.go +++ b/service/worker/diagnostics/workflow_test.go @@ -26,7 +26,6 @@ import ( "encoding/json" "errors" "fmt" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" "testing" "time" @@ -42,6 +41,7 @@ import ( "github.com/uber/cadence/common/resource" "github.com/uber/cadence/common/types" "github.com/uber/cadence/service/worker/diagnostics/invariants" + "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" ) type diagnosticsWorkflowTestSuite struct { From a1f097ffb3251247b01b48f59c7e0319541cbcc2 Mon Sep 17 00:00:00 2001 From: sankari gopalakrishnan Date: Mon, 7 Oct 2024 13:01:52 +0200 Subject: [PATCH 3/3] address cmnts --- service/worker/diagnostics/activities.go | 14 ++-- service/worker/diagnostics/activities_test.go | 22 +++---- .../diagnostics/analytics/emitter_test.go | 2 +- .../invariant.go => invariant/interface.go} | 2 +- .../timeouts => invariant/timeout}/timeout.go | 52 +++++++-------- .../timeout}/timeout_test.go | 56 ++++++++-------- .../timeout}/timeout_utils.go | 2 +- .../timeouts => invariant/timeout}/types.go | 2 +- service/worker/diagnostics/workflow.go | 48 +++++++------- service/worker/diagnostics/workflow_test.go | 66 +++++++++---------- 10 files changed, 133 insertions(+), 133 deletions(-) rename service/worker/diagnostics/{invariants/invariant.go => invariant/interface.go} (99%) rename service/worker/diagnostics/{invariants/timeouts => invariant/timeout}/timeout.go (79%) rename service/worker/diagnostics/{invariants/timeouts => invariant/timeout}/timeout_test.go (91%) rename service/worker/diagnostics/{invariants/timeouts => invariant/timeout}/timeout_utils.go (99%) rename service/worker/diagnostics/{invariants/timeouts => invariant/timeout}/types.go (99%) diff --git a/service/worker/diagnostics/activities.go b/service/worker/diagnostics/activities.go index e363c99e7b1..9eb144014ed 100644 --- a/service/worker/diagnostics/activities.go +++ b/service/worker/diagnostics/activities.go @@ -29,8 +29,8 @@ import ( "github.com/uber/cadence/common/messaging/kafka" "github.com/uber/cadence/common/types" "github.com/uber/cadence/service/worker/diagnostics/analytics" - "github.com/uber/cadence/service/worker/diagnostics/invariants" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" + "github.com/uber/cadence/service/worker/diagnostics/invariant" + "github.com/uber/cadence/service/worker/diagnostics/invariant/timeout" ) const ( @@ -56,8 +56,8 @@ type identifyTimeoutsInputParams struct { Domain string } -func (w *dw) identifyTimeouts(ctx context.Context, info identifyTimeoutsInputParams) ([]invariants.InvariantCheckResult, error) { - timeoutInvariant := timeouts.NewTimeout(timeouts.NewTimeoutParams{ +func (w *dw) identifyTimeouts(ctx context.Context, info identifyTimeoutsInputParams) ([]invariant.InvariantCheckResult, error) { + timeoutInvariant := timeout.NewInvariant(timeout.NewTimeoutParams{ WorkflowExecutionHistory: info.History, Domain: info.Domain, ClientBean: w.clientBean, @@ -68,11 +68,11 @@ func (w *dw) identifyTimeouts(ctx context.Context, info identifyTimeoutsInputPar type rootCauseTimeoutsParams struct { History *types.GetWorkflowExecutionHistoryResponse Domain string - Issues []invariants.InvariantCheckResult + Issues []invariant.InvariantCheckResult } -func (w *dw) rootCauseTimeouts(ctx context.Context, info rootCauseTimeoutsParams) ([]invariants.InvariantRootCauseResult, error) { - timeoutInvariant := timeouts.NewTimeout(timeouts.NewTimeoutParams{ +func (w *dw) rootCauseTimeouts(ctx context.Context, info rootCauseTimeoutsParams) ([]invariant.InvariantRootCauseResult, error) { + timeoutInvariant := timeout.NewInvariant(timeout.NewTimeoutParams{ WorkflowExecutionHistory: info.History, ClientBean: w.clientBean, Domain: info.Domain, diff --git a/service/worker/diagnostics/activities_test.go b/service/worker/diagnostics/activities_test.go index dc221d94632..d2c9a385e98 100644 --- a/service/worker/diagnostics/activities_test.go +++ b/service/worker/diagnostics/activities_test.go @@ -37,8 +37,8 @@ import ( "github.com/uber/cadence/common/messaging" "github.com/uber/cadence/common/types" "github.com/uber/cadence/service/worker/diagnostics/analytics" - "github.com/uber/cadence/service/worker/diagnostics/invariants" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" + "github.com/uber/cadence/service/worker/diagnostics/invariant" + "github.com/uber/cadence/service/worker/diagnostics/invariant/timeout" ) const ( @@ -62,7 +62,7 @@ func Test__retrieveExecutionHistory(t *testing.T) { func Test__identifyTimeouts(t *testing.T) { dwtest := testDiagnosticWorkflow(t) - workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeout.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -75,9 +75,9 @@ func Test__identifyTimeouts(t *testing.T) { } workflowTimeoutDataInBytes, err := json.Marshal(workflowTimeoutData) require.NoError(t, err) - expectedResult := []invariants.InvariantCheckResult{ + expectedResult := []invariant.InvariantCheckResult{ { - InvariantType: timeouts.TimeoutTypeExecution.String(), + InvariantType: timeout.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, @@ -89,7 +89,7 @@ func Test__identifyTimeouts(t *testing.T) { func Test__rootCauseTimeouts(t *testing.T) { dwtest := testDiagnosticWorkflow(t) - workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeout.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -106,19 +106,19 @@ func Test__rootCauseTimeouts(t *testing.T) { } workflowTimeoutDataInBytes, err := json.Marshal(workflowTimeoutData) require.NoError(t, err) - issues := []invariants.InvariantCheckResult{ + issues := []invariant.InvariantCheckResult{ { - InvariantType: timeouts.TimeoutTypeExecution.String(), + InvariantType: timeout.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, } taskListBacklog := int64(10) - taskListBacklogInBytes, err := json.Marshal(timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}) + taskListBacklogInBytes, err := json.Marshal(timeout.PollersMetadata{TaskListBacklog: taskListBacklog}) require.NoError(t, err) - expectedRootCause := []invariants.InvariantRootCauseResult{ + expectedRootCause := []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: taskListBacklogInBytes, }, } diff --git a/service/worker/diagnostics/analytics/emitter_test.go b/service/worker/diagnostics/analytics/emitter_test.go index 04f1a24bfd3..eb267fdacc1 100644 --- a/service/worker/diagnostics/analytics/emitter_test.go +++ b/service/worker/diagnostics/analytics/emitter_test.go @@ -42,7 +42,7 @@ func Test__EmitUsageData(t *testing.T) { WorkflowID: "wid", RunID: "rid", Identity: "test@uber.com", - IssueType: "timeouts", + IssueType: "timeout", DiagnosticsWorkflowID: "diagnostics-wid", DiagnosticsRunID: "diagnostics-rid", Environment: "test-env", diff --git a/service/worker/diagnostics/invariants/invariant.go b/service/worker/diagnostics/invariant/interface.go similarity index 99% rename from service/worker/diagnostics/invariants/invariant.go rename to service/worker/diagnostics/invariant/interface.go index bd9a4af699b..4d1a8f8da3c 100644 --- a/service/worker/diagnostics/invariants/invariant.go +++ b/service/worker/diagnostics/invariant/interface.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package invariants +package invariant import ( "context" diff --git a/service/worker/diagnostics/invariants/timeouts/timeout.go b/service/worker/diagnostics/invariant/timeout/timeout.go similarity index 79% rename from service/worker/diagnostics/invariants/timeouts/timeout.go rename to service/worker/diagnostics/invariant/timeout/timeout.go index 5b46eef170c..153423e4548 100644 --- a/service/worker/diagnostics/invariants/timeouts/timeout.go +++ b/service/worker/diagnostics/invariant/timeout/timeout.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package timeouts +package timeout import ( "context" @@ -30,10 +30,10 @@ import ( "github.com/uber/cadence/client" "github.com/uber/cadence/common/types" - "github.com/uber/cadence/service/worker/diagnostics/invariants" + "github.com/uber/cadence/service/worker/diagnostics/invariant" ) -type Timeout invariants.Invariant +type Timeout invariant.Invariant type timeout struct { workflowExecutionHistory *types.GetWorkflowExecutionHistoryResponse @@ -47,7 +47,7 @@ type NewTimeoutParams struct { ClientBean client.Bean } -func NewTimeout(p NewTimeoutParams) invariants.Invariant { +func NewInvariant(p NewTimeoutParams) invariant.Invariant { return &timeout{ workflowExecutionHistory: p.WorkflowExecutionHistory, domain: p.Domain, @@ -55,8 +55,8 @@ func NewTimeout(p NewTimeoutParams) invariants.Invariant { } } -func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, error) { - result := make([]invariants.InvariantCheckResult, 0) +func (t *timeout) Check(context.Context) ([]invariant.InvariantCheckResult, error) { + result := make([]invariant.InvariantCheckResult, 0) events := t.workflowExecutionHistory.GetHistory().GetEvents() for _, event := range events { if event.WorkflowExecutionTimedOutEventAttributes != nil { @@ -67,7 +67,7 @@ func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, err LastOngoingEvent: events[len(events)-2], Tasklist: getWorkflowExecutionTasklist(events), } - result = append(result, invariants.InvariantCheckResult{ + result = append(result, invariant.InvariantCheckResult{ InvariantType: TimeoutTypeExecution.String(), Reason: event.GetWorkflowExecutionTimedOutEventAttributes().GetTimeoutType().String(), Metadata: marshalData(data), @@ -78,7 +78,7 @@ func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, err if err != nil { return nil, err } - result = append(result, invariants.InvariantCheckResult{ + result = append(result, invariant.InvariantCheckResult{ InvariantType: TimeoutTypeActivity.String(), Reason: event.GetActivityTaskTimedOutEventAttributes().GetTimeoutType().String(), Metadata: marshalData(metadata), @@ -86,7 +86,7 @@ func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, err } if event.DecisionTaskTimedOutEventAttributes != nil { reason, metadata := reasonForDecisionTaskTimeouts(event, events) - result = append(result, invariants.InvariantCheckResult{ + result = append(result, invariant.InvariantCheckResult{ InvariantType: TimeoutTypeDecision.String(), Reason: reason, Metadata: marshalData(metadata), @@ -99,7 +99,7 @@ func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, err ConfiguredTimeout: time.Duration(timeoutLimit) * time.Second, Execution: event.GetChildWorkflowExecutionTimedOutEventAttributes().WorkflowExecution, } - result = append(result, invariants.InvariantCheckResult{ + result = append(result, invariant.InvariantCheckResult{ InvariantType: TimeoutTypeChildWorkflow.String(), Reason: event.GetChildWorkflowExecutionTimedOutEventAttributes().TimeoutType.String(), Metadata: marshalData(data), @@ -109,8 +109,8 @@ func (t *timeout) Check(context.Context) ([]invariants.InvariantCheckResult, err return result, nil } -func (t *timeout) RootCause(ctx context.Context, issues []invariants.InvariantCheckResult) ([]invariants.InvariantRootCauseResult, error) { - result := make([]invariants.InvariantRootCauseResult, 0) +func (t *timeout) RootCause(ctx context.Context, issues []invariant.InvariantCheckResult) ([]invariant.InvariantRootCauseResult, error) { + result := make([]invariant.InvariantRootCauseResult, 0) for _, issue := range issues { pollerStatus, err := t.checkTasklist(ctx, issue) if err != nil { @@ -130,7 +130,7 @@ func (t *timeout) RootCause(ctx context.Context, issues []invariants.InvariantCh return result, nil } -func (t *timeout) checkTasklist(ctx context.Context, issue invariants.InvariantCheckResult) (invariants.InvariantRootCauseResult, error) { +func (t *timeout) checkTasklist(ctx context.Context, issue invariant.InvariantCheckResult) (invariant.InvariantRootCauseResult, error) { var taskList *types.TaskList var tasklistType *types.TaskListType switch issue.InvariantType { @@ -138,7 +138,7 @@ func (t *timeout) checkTasklist(ctx context.Context, issue invariants.InvariantC var metadata ExecutionTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { - return invariants.InvariantRootCauseResult{}, err + return invariant.InvariantRootCauseResult{}, err } taskList = metadata.Tasklist tasklistType = types.TaskListTypeDecision.Ptr() @@ -146,13 +146,13 @@ func (t *timeout) checkTasklist(ctx context.Context, issue invariants.InvariantC var metadata ActivityTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { - return invariants.InvariantRootCauseResult{}, err + return invariant.InvariantRootCauseResult{}, err } taskList = metadata.Tasklist tasklistType = types.TaskListTypeActivity.Ptr() } if taskList == nil { - return invariants.InvariantRootCauseResult{}, fmt.Errorf("tasklist not set") + return invariant.InvariantRootCauseResult{}, fmt.Errorf("tasklist not set") } frontendClient := t.clientBean.GetFrontendClient() @@ -162,25 +162,25 @@ func (t *timeout) checkTasklist(ctx context.Context, issue invariants.InvariantC TaskListType: tasklistType, }) if err != nil { - return invariants.InvariantRootCauseResult{}, err + return invariant.InvariantRootCauseResult{}, err } tasklistBacklog := resp.GetTaskListStatus().GetBacklogCountHint() polllersMetadataInBytes := marshalData(PollersMetadata{TaskListBacklog: tasklistBacklog}) if len(resp.GetPollers()) == 0 { - return invariants.InvariantRootCauseResult{ - RootCause: invariants.RootCauseTypeMissingPollers, + return invariant.InvariantRootCauseResult{ + RootCause: invariant.RootCauseTypeMissingPollers, Metadata: polllersMetadataInBytes, }, nil } - return invariants.InvariantRootCauseResult{ - RootCause: invariants.RootCauseTypePollersStatus, + return invariant.InvariantRootCauseResult{ + RootCause: invariant.RootCauseTypePollersStatus, Metadata: polllersMetadataInBytes, }, nil } -func checkHeartbeatStatus(issue invariants.InvariantCheckResult) ([]invariants.InvariantRootCauseResult, error) { +func checkHeartbeatStatus(issue invariant.InvariantCheckResult) ([]invariant.InvariantRootCauseResult, error) { var metadata ActivityTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { @@ -190,18 +190,18 @@ func checkHeartbeatStatus(issue invariants.InvariantCheckResult) ([]invariants.I heartbeatingMetadataInBytes := marshalData(HeartbeatingMetadata{TimeElapsed: metadata.TimeElapsed}) if metadata.HeartBeatTimeout == 0 && activityStarted(metadata) { - return []invariants.InvariantRootCauseResult{ + return []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypeHeartBeatingNotEnabled, + RootCause: invariant.RootCauseTypeHeartBeatingNotEnabled, Metadata: heartbeatingMetadataInBytes, }, }, nil } if metadata.HeartBeatTimeout > 0 && metadata.TimeoutType.String() == types.TimeoutTypeHeartbeat.String() { - return []invariants.InvariantRootCauseResult{ + return []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypeHeartBeatingEnabledMissingHeartbeat, + RootCause: invariant.RootCauseTypeHeartBeatingEnabledMissingHeartbeat, Metadata: heartbeatingMetadataInBytes, }, }, nil diff --git a/service/worker/diagnostics/invariants/timeouts/timeout_test.go b/service/worker/diagnostics/invariant/timeout/timeout_test.go similarity index 91% rename from service/worker/diagnostics/invariants/timeouts/timeout_test.go rename to service/worker/diagnostics/invariant/timeout/timeout_test.go index 41f2a878c59..4504dac1ef7 100644 --- a/service/worker/diagnostics/invariants/timeouts/timeout_test.go +++ b/service/worker/diagnostics/invariant/timeout/timeout_test.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package timeouts +package timeout import ( "context" @@ -35,7 +35,7 @@ import ( "github.com/uber/cadence/client/frontend" "github.com/uber/cadence/common" "github.com/uber/cadence/common/types" - "github.com/uber/cadence/service/worker/diagnostics/invariants" + "github.com/uber/cadence/service/worker/diagnostics/invariant" ) const ( @@ -55,13 +55,13 @@ func Test__Check(t *testing.T) { testCases := []struct { name string testData *types.GetWorkflowExecutionHistoryResponse - expectedResult []invariants.InvariantCheckResult + expectedResult []invariant.InvariantCheckResult err error }{ { name: "workflow execution timeout", testData: wfTimeoutHistory(), - expectedResult: []invariants.InvariantCheckResult{ + expectedResult: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", @@ -73,7 +73,7 @@ func Test__Check(t *testing.T) { { name: "child workflow execution timeout", testData: childWfTimeoutHistory(), - expectedResult: []invariants.InvariantCheckResult{ + expectedResult: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeChildWorkflow.String(), Reason: "START_TO_CLOSE", @@ -85,7 +85,7 @@ func Test__Check(t *testing.T) { { name: "activity timeout", testData: activityTimeoutHistory(), - expectedResult: []invariants.InvariantCheckResult{ + expectedResult: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "SCHEDULE_TO_START", @@ -102,7 +102,7 @@ func Test__Check(t *testing.T) { { name: "decision timeout", testData: decisionTimeoutHistory(), - expectedResult: []invariants.InvariantCheckResult{ + expectedResult: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeDecision.String(), Reason: "START_TO_CLOSE", @@ -120,7 +120,7 @@ func Test__Check(t *testing.T) { ctrl := gomock.NewController(t) mockClientBean := client.NewMockBean(ctrl) for _, tc := range testCases { - inv := NewTimeout(NewTimeoutParams{ + inv := NewInvariant(NewTimeoutParams{ WorkflowExecutionHistory: tc.testData, Domain: testDomain, ClientBean: mockClientBean, @@ -384,14 +384,14 @@ func Test__RootCause(t *testing.T) { require.NoError(t, err) testCases := []struct { name string - input []invariants.InvariantCheckResult + input []invariant.InvariantCheckResult clientExpects func(*frontend.MockClient) - expectedResult []invariants.InvariantRootCauseResult + expectedResult []invariant.InvariantRootCauseResult err error }{ { name: "workflow execution timeout without pollers", - input: []invariants.InvariantCheckResult{ + input: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", @@ -406,9 +406,9 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []invariants.InvariantRootCauseResult{ + expectedResult: []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypeMissingPollers, + RootCause: invariant.RootCauseTypeMissingPollers, Metadata: pollersMetadataInBytes, }, }, @@ -416,7 +416,7 @@ func Test__RootCause(t *testing.T) { }, { name: "workflow execution timeout with pollers", - input: []invariants.InvariantCheckResult{ + input: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", @@ -435,9 +435,9 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []invariants.InvariantRootCauseResult{ + expectedResult: []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, }, @@ -445,7 +445,7 @@ func Test__RootCause(t *testing.T) { }, { name: "activity timeout and heart beating not enabled", - input: []invariants.InvariantCheckResult{ + input: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", @@ -464,13 +464,13 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []invariants.InvariantRootCauseResult{ + expectedResult: []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, { - RootCause: invariants.RootCauseTypeHeartBeatingNotEnabled, + RootCause: invariant.RootCauseTypeHeartBeatingNotEnabled, Metadata: heartBeatingMetadataInBytes, }, }, @@ -478,7 +478,7 @@ func Test__RootCause(t *testing.T) { }, { name: "activity schedule to start timeout", - input: []invariants.InvariantCheckResult{ + input: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "SCHEDULE_TO_START", @@ -497,9 +497,9 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []invariants.InvariantRootCauseResult{ + expectedResult: []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, }, @@ -507,7 +507,7 @@ func Test__RootCause(t *testing.T) { }, { name: "activity timeout and heart beating enabled", - input: []invariants.InvariantCheckResult{ + input: []invariant.InvariantCheckResult{ { InvariantType: TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", @@ -526,13 +526,13 @@ func Test__RootCause(t *testing.T) { }, }, nil) }, - expectedResult: []invariants.InvariantRootCauseResult{ + expectedResult: []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, { - RootCause: invariants.RootCauseTypeHeartBeatingEnabledMissingHeartbeat, + RootCause: invariant.RootCauseTypeHeartBeatingEnabledMissingHeartbeat, Metadata: heartBeatingMetadataInBytes, }, }, @@ -543,7 +543,7 @@ func Test__RootCause(t *testing.T) { mockClientBean := client.NewMockBean(ctrl) mockFrontendClient := frontend.NewMockClient(ctrl) mockClientBean.EXPECT().GetFrontendClient().Return(mockFrontendClient).AnyTimes() - inv := NewTimeout(NewTimeoutParams{ + inv := NewInvariant(NewTimeoutParams{ Domain: testDomain, ClientBean: mockClientBean, }) diff --git a/service/worker/diagnostics/invariants/timeouts/timeout_utils.go b/service/worker/diagnostics/invariant/timeout/timeout_utils.go similarity index 99% rename from service/worker/diagnostics/invariants/timeouts/timeout_utils.go rename to service/worker/diagnostics/invariant/timeout/timeout_utils.go index ae526034dcf..d5f600eca3a 100644 --- a/service/worker/diagnostics/invariants/timeouts/timeout_utils.go +++ b/service/worker/diagnostics/invariant/timeout/timeout_utils.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package timeouts +package timeout import ( "encoding/json" diff --git a/service/worker/diagnostics/invariants/timeouts/types.go b/service/worker/diagnostics/invariant/timeout/types.go similarity index 99% rename from service/worker/diagnostics/invariants/timeouts/types.go rename to service/worker/diagnostics/invariant/timeout/types.go index 34b98e29dea..8be2c97ac0b 100644 --- a/service/worker/diagnostics/invariants/timeouts/types.go +++ b/service/worker/diagnostics/invariant/timeout/types.go @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -package timeouts +package timeout import ( "time" diff --git a/service/worker/diagnostics/workflow.go b/service/worker/diagnostics/workflow.go index 155a7618b4a..f73f3b04b52 100644 --- a/service/worker/diagnostics/workflow.go +++ b/service/worker/diagnostics/workflow.go @@ -31,8 +31,8 @@ import ( "github.com/uber/cadence/common/metrics" "github.com/uber/cadence/common/types" - "github.com/uber/cadence/service/worker/diagnostics/invariants" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" + "github.com/uber/cadence/service/worker/diagnostics/invariant" + "github.com/uber/cadence/service/worker/diagnostics/invariant/timeout" ) const ( @@ -63,16 +63,16 @@ type timeoutDiagnostics struct { type timeoutIssuesResult struct { InvariantType string Reason string - ExecutionTimeout *timeouts.ExecutionTimeoutMetadata - ActivityTimeout *timeouts.ActivityTimeoutMetadata - ChildWfTimeout *timeouts.ChildWfTimeoutMetadata - DecisionTimeout *timeouts.DecisionTimeoutMetadata + ExecutionTimeout *timeout.ExecutionTimeoutMetadata + ActivityTimeout *timeout.ActivityTimeoutMetadata + ChildWfTimeout *timeout.ChildWfTimeoutMetadata + DecisionTimeout *timeout.DecisionTimeoutMetadata } type timeoutRootCauseResult struct { RootCauseType string - PollersMetadata *timeouts.PollersMetadata - HeartBeatingMetadata *timeouts.HeartbeatingMetadata + PollersMetadata *timeout.PollersMetadata + HeartBeatingMetadata *timeout.HeartbeatingMetadata } func (w *dw) DiagnosticsWorkflow(ctx workflow.Context, params DiagnosticsWorkflowInput) (*DiagnosticsWorkflowResult, error) { @@ -102,7 +102,7 @@ func (w *dw) DiagnosticsWorkflow(ctx workflow.Context, params DiagnosticsWorkflo timeoutsResult.Runbooks = []string{linkToTimeoutsRunbook} - var checkResult []invariants.InvariantCheckResult + var checkResult []invariant.InvariantCheckResult err = workflow.ExecuteActivity(activityCtx, w.identifyTimeouts, identifyTimeoutsInputParams{ History: wfExecutionHistory, Domain: params.Domain, @@ -117,7 +117,7 @@ func (w *dw) DiagnosticsWorkflow(ctx workflow.Context, params DiagnosticsWorkflo } timeoutsResult.Issues = timeoutIssues - var rootCauseResult []invariants.InvariantRootCauseResult + var rootCauseResult []invariant.InvariantRootCauseResult err = workflow.ExecuteActivity(activityCtx, w.rootCauseTimeouts, rootCauseTimeoutsParams{ History: wfExecutionHistory, Domain: params.Domain, @@ -137,12 +137,12 @@ func (w *dw) DiagnosticsWorkflow(ctx workflow.Context, params DiagnosticsWorkflo return &DiagnosticsWorkflowResult{Timeouts: &timeoutsResult}, nil } -func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeoutIssuesResult, error) { +func retrieveTimeoutIssues(issues []invariant.InvariantCheckResult) ([]*timeoutIssuesResult, error) { result := make([]*timeoutIssuesResult, 0) for _, issue := range issues { switch issue.InvariantType { - case timeouts.TimeoutTypeExecution.String(): - var metadata timeouts.ExecutionTimeoutMetadata + case timeout.TimeoutTypeExecution.String(): + var metadata timeout.ExecutionTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -152,8 +152,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout Reason: issue.Reason, ExecutionTimeout: &metadata, }) - case timeouts.TimeoutTypeActivity.String(): - var metadata timeouts.ActivityTimeoutMetadata + case timeout.TimeoutTypeActivity.String(): + var metadata timeout.ActivityTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -163,8 +163,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout Reason: issue.Reason, ActivityTimeout: &metadata, }) - case timeouts.TimeoutTypeChildWorkflow.String(): - var metadata timeouts.ChildWfTimeoutMetadata + case timeout.TimeoutTypeChildWorkflow.String(): + var metadata timeout.ChildWfTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -174,8 +174,8 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout Reason: issue.Reason, ChildWfTimeout: &metadata, }) - case timeouts.TimeoutTypeDecision.String(): - var metadata timeouts.DecisionTimeoutMetadata + case timeout.TimeoutTypeDecision.String(): + var metadata timeout.DecisionTimeoutMetadata err := json.Unmarshal(issue.Metadata, &metadata) if err != nil { return nil, err @@ -190,12 +190,12 @@ func retrieveTimeoutIssues(issues []invariants.InvariantCheckResult) ([]*timeout return result, nil } -func retrieveTimeoutRootCause(rootCause []invariants.InvariantRootCauseResult) ([]*timeoutRootCauseResult, error) { +func retrieveTimeoutRootCause(rootCause []invariant.InvariantRootCauseResult) ([]*timeoutRootCauseResult, error) { result := make([]*timeoutRootCauseResult, 0) for _, rc := range rootCause { switch rc.RootCause { - case invariants.RootCauseTypePollersStatus, invariants.RootCauseTypeMissingPollers: - var metadata timeouts.PollersMetadata + case invariant.RootCauseTypePollersStatus, invariant.RootCauseTypeMissingPollers: + var metadata timeout.PollersMetadata err := json.Unmarshal(rc.Metadata, &metadata) if err != nil { return nil, err @@ -204,8 +204,8 @@ func retrieveTimeoutRootCause(rootCause []invariants.InvariantRootCauseResult) ( RootCauseType: rc.RootCause.String(), PollersMetadata: &metadata, }) - case invariants.RootCauseTypeHeartBeatingNotEnabled, invariants.RootCauseTypeHeartBeatingEnabledMissingHeartbeat: - var metadata timeouts.HeartbeatingMetadata + case invariant.RootCauseTypeHeartBeatingNotEnabled, invariant.RootCauseTypeHeartBeatingEnabledMissingHeartbeat: + var metadata timeout.HeartbeatingMetadata err := json.Unmarshal(rc.Metadata, &metadata) if err != nil { return nil, err diff --git a/service/worker/diagnostics/workflow_test.go b/service/worker/diagnostics/workflow_test.go index d9a1106860e..3bc933424ca 100644 --- a/service/worker/diagnostics/workflow_test.go +++ b/service/worker/diagnostics/workflow_test.go @@ -40,8 +40,8 @@ import ( "github.com/uber/cadence/common/metrics" "github.com/uber/cadence/common/resource" "github.com/uber/cadence/common/types" - "github.com/uber/cadence/service/worker/diagnostics/invariants" - "github.com/uber/cadence/service/worker/diagnostics/invariants/timeouts" + "github.com/uber/cadence/service/worker/diagnostics/invariant" + "github.com/uber/cadence/service/worker/diagnostics/invariant/timeout" ) type diagnosticsWorkflowTestSuite struct { @@ -88,7 +88,7 @@ func (s *diagnosticsWorkflowTestSuite) TestWorkflow() { WorkflowID: "123", RunID: "abc", } - workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeout.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -101,33 +101,33 @@ func (s *diagnosticsWorkflowTestSuite) TestWorkflow() { } workflowTimeoutDataInBytes, err := json.Marshal(workflowTimeoutData) s.NoError(err) - issues := []invariants.InvariantCheckResult{ + issues := []invariant.InvariantCheckResult{ { - InvariantType: timeouts.TimeoutTypeExecution.String(), + InvariantType: timeout.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, } timeoutIssues := []*timeoutIssuesResult{ { - InvariantType: timeouts.TimeoutTypeExecution.String(), + InvariantType: timeout.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", ExecutionTimeout: &workflowTimeoutData, }, } taskListBacklog := int64(10) - pollersMetadataInBytes, err := json.Marshal(timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}) + pollersMetadataInBytes, err := json.Marshal(timeout.PollersMetadata{TaskListBacklog: taskListBacklog}) s.NoError(err) - rootCause := []invariants.InvariantRootCauseResult{ + rootCause := []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, } timeoutRootCause := []*timeoutRootCauseResult{ { - RootCauseType: invariants.RootCauseTypePollersStatus.String(), - PollersMetadata: &timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}, + RootCauseType: invariant.RootCauseTypePollersStatus.String(), + PollersMetadata: &timeout.PollersMetadata{TaskListBacklog: taskListBacklog}, }, } s.workflowEnv.OnActivity(retrieveWfExecutionHistoryActivity, mock.Anything, mock.Anything).Return(nil, nil) @@ -173,7 +173,7 @@ func (s *diagnosticsWorkflowTestSuite) queryDiagnostics() DiagnosticsStarterWork } func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { - workflowTimeoutData := timeouts.ExecutionTimeoutMetadata{ + workflowTimeoutData := timeout.ExecutionTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, LastOngoingEvent: &types.HistoryEvent{ @@ -186,13 +186,13 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { } workflowTimeoutDataInBytes, err := json.Marshal(workflowTimeoutData) s.NoError(err) - childWorkflowTimeoutData := timeouts.ChildWfTimeoutMetadata{ + childWorkflowTimeoutData := timeout.ChildWfTimeoutMetadata{ ExecutionTime: 110 * time.Second, ConfiguredTimeout: 110 * time.Second, } childWorkflowTimeoutDataInBytes, err := json.Marshal(childWorkflowTimeoutData) s.NoError(err) - activityTimeoutData := timeouts.ActivityTimeoutMetadata{ + activityTimeoutData := timeout.ActivityTimeoutMetadata{ TimeoutType: types.TimeoutTypeStartToClose.Ptr(), ConfiguredTimeout: 5 * time.Second, TimeElapsed: 5 * time.Second, @@ -200,51 +200,51 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { } activityTimeoutDataInBytes, err := json.Marshal(activityTimeoutData) s.NoError(err) - descTimeoutData := timeouts.DecisionTimeoutMetadata{ + descTimeoutData := timeout.DecisionTimeoutMetadata{ ConfiguredTimeout: 5 * time.Second, } descTimeoutDataInBytes, err := json.Marshal(activityTimeoutData) s.NoError(err) - issues := []invariants.InvariantCheckResult{ + issues := []invariant.InvariantCheckResult{ { - InvariantType: timeouts.TimeoutTypeExecution.String(), + InvariantType: timeout.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", Metadata: workflowTimeoutDataInBytes, }, { - InvariantType: timeouts.TimeoutTypeActivity.String(), + InvariantType: timeout.TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", Metadata: activityTimeoutDataInBytes, }, { - InvariantType: timeouts.TimeoutTypeDecision.String(), + InvariantType: timeout.TimeoutTypeDecision.String(), Reason: "START_TO_CLOSE", Metadata: descTimeoutDataInBytes, }, { - InvariantType: timeouts.TimeoutTypeChildWorkflow.String(), + InvariantType: timeout.TimeoutTypeChildWorkflow.String(), Reason: "START_TO_CLOSE", Metadata: childWorkflowTimeoutDataInBytes, }, } timeoutIssues := []*timeoutIssuesResult{ { - InvariantType: timeouts.TimeoutTypeExecution.String(), + InvariantType: timeout.TimeoutTypeExecution.String(), Reason: "START_TO_CLOSE", ExecutionTimeout: &workflowTimeoutData, }, { - InvariantType: timeouts.TimeoutTypeActivity.String(), + InvariantType: timeout.TimeoutTypeActivity.String(), Reason: "START_TO_CLOSE", ActivityTimeout: &activityTimeoutData, }, { - InvariantType: timeouts.TimeoutTypeDecision.String(), + InvariantType: timeout.TimeoutTypeDecision.String(), Reason: "START_TO_CLOSE", DecisionTimeout: &descTimeoutData, }, { - InvariantType: timeouts.TimeoutTypeChildWorkflow.String(), + InvariantType: timeout.TimeoutTypeChildWorkflow.String(), Reason: "START_TO_CLOSE", ChildWfTimeout: &childWorkflowTimeoutData, }, @@ -256,28 +256,28 @@ func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutIssues() { func (s *diagnosticsWorkflowTestSuite) Test__retrieveTimeoutRootCause() { taskListBacklog := int64(10) - pollersMetadataInBytes, err := json.Marshal(timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}) + pollersMetadataInBytes, err := json.Marshal(timeout.PollersMetadata{TaskListBacklog: taskListBacklog}) s.NoError(err) - heartBeatingMetadataInBytes, err := json.Marshal(timeouts.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}) + heartBeatingMetadataInBytes, err := json.Marshal(timeout.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}) s.NoError(err) - rootCause := []invariants.InvariantRootCauseResult{ + rootCause := []invariant.InvariantRootCauseResult{ { - RootCause: invariants.RootCauseTypePollersStatus, + RootCause: invariant.RootCauseTypePollersStatus, Metadata: pollersMetadataInBytes, }, { - RootCause: invariants.RootCauseTypeHeartBeatingNotEnabled, + RootCause: invariant.RootCauseTypeHeartBeatingNotEnabled, Metadata: heartBeatingMetadataInBytes, }, } timeoutRootCause := []*timeoutRootCauseResult{ { - RootCauseType: invariants.RootCauseTypePollersStatus.String(), - PollersMetadata: &timeouts.PollersMetadata{TaskListBacklog: taskListBacklog}, + RootCauseType: invariant.RootCauseTypePollersStatus.String(), + PollersMetadata: &timeout.PollersMetadata{TaskListBacklog: taskListBacklog}, }, { - RootCauseType: invariants.RootCauseTypeHeartBeatingNotEnabled.String(), - HeartBeatingMetadata: &timeouts.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}, + RootCauseType: invariant.RootCauseTypeHeartBeatingNotEnabled.String(), + HeartBeatingMetadata: &timeout.HeartbeatingMetadata{TimeElapsed: 5 * time.Second}, }, } result, err := retrieveTimeoutRootCause(rootCause)