Skip to content

Commit 22ec320

Browse files
authored
Fixes issue where NonRetryableErrorTypes was getting dropped during activity info validation
1 parent 10de202 commit 22ec320

File tree

5 files changed

+34
-32
lines changed

5 files changed

+34
-32
lines changed

common/defaultActivityRetrySettings.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package common
22

33
// DefaultActivityRetrySettings indicates what the "default" activity retry settings
4-
// are of it is not specified on an Activity
4+
// are if it is not specified on an Activity
55
type DefaultActivityRetrySettings struct {
66
InitialIntervalInSeconds int32
77
MaximumIntervalCoefficient float64

common/util.go

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -368,35 +368,22 @@ func SortInt64Slice(slice []int64) {
368368
}
369369

370370
// EnsureRetryPolicyDefaults ensures the policy subfields, if not explicitly set, are set to the specified defaults
371-
func EnsureRetryPolicyDefaults(originalPolicy *commonpb.RetryPolicy, defaultSettings DefaultActivityRetrySettings) *commonpb.RetryPolicy {
372-
var merged *commonpb.RetryPolicy = &commonpb.RetryPolicy{}
373-
374-
if originalPolicy != nil {
375-
merged = &commonpb.RetryPolicy{
376-
BackoffCoefficient: originalPolicy.GetBackoffCoefficient(),
377-
InitialIntervalInSeconds: originalPolicy.GetInitialIntervalInSeconds(),
378-
MaximumIntervalInSeconds: originalPolicy.GetMaximumIntervalInSeconds(),
379-
MaximumAttempts: originalPolicy.GetMaximumAttempts(),
380-
}
381-
}
382-
383-
if merged.GetMaximumAttempts() == 0 {
384-
merged.MaximumAttempts = int32(defaultSettings.MaximumAttempts)
371+
func EnsureRetryPolicyDefaults(originalPolicy *commonpb.RetryPolicy, defaultSettings DefaultActivityRetrySettings) {
372+
if originalPolicy.GetMaximumAttempts() == 0 {
373+
originalPolicy.MaximumAttempts = int32(defaultSettings.MaximumAttempts)
385374
}
386375

387-
if merged.GetInitialIntervalInSeconds() == 0 {
388-
merged.InitialIntervalInSeconds = int32(defaultSettings.InitialIntervalInSeconds)
376+
if originalPolicy.GetInitialIntervalInSeconds() == 0 {
377+
originalPolicy.InitialIntervalInSeconds = int32(defaultSettings.InitialIntervalInSeconds)
389378
}
390379

391-
if merged.GetMaximumIntervalInSeconds() == 0 {
392-
merged.MaximumIntervalInSeconds = int32(defaultSettings.MaximumIntervalCoefficient * float64(merged.GetInitialIntervalInSeconds()))
380+
if originalPolicy.GetMaximumIntervalInSeconds() == 0 {
381+
originalPolicy.MaximumIntervalInSeconds = int32(defaultSettings.MaximumIntervalCoefficient * float64(originalPolicy.GetInitialIntervalInSeconds()))
393382
}
394383

395-
if merged.GetBackoffCoefficient() == 0 {
396-
merged.BackoffCoefficient = defaultSettings.BackoffCoefficient
384+
if originalPolicy.GetBackoffCoefficient() == 0 {
385+
originalPolicy.BackoffCoefficient = defaultSettings.BackoffCoefficient
397386
}
398-
399-
return merged
400387
}
401388

402389
// ValidateRetryPolicy validates a retry policy

common/util_test.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,6 @@ func TestEnsureRetryPolicyDefaults(t *testing.T) {
108108
input *commonpb.RetryPolicy
109109
want *commonpb.RetryPolicy
110110
}{
111-
{
112-
name: "nil policy is okay",
113-
input: nil,
114-
want: defaultRetryPolicy,
115-
},
116111
{
117112
name: "default fields are set ",
118113
input: &commonpb.RetryPolicy{},
@@ -166,12 +161,25 @@ func TestEnsureRetryPolicyDefaults(t *testing.T) {
166161
MaximumAttempts: 49,
167162
},
168163
},
164+
{
165+
name: "non-retryable errors are set",
166+
input: &commonpb.RetryPolicy{
167+
NonRetryableErrorTypes: []string{"testFailureType"},
168+
},
169+
want: &commonpb.RetryPolicy{
170+
InitialIntervalInSeconds: 1,
171+
MaximumIntervalInSeconds: 100,
172+
BackoffCoefficient: 2.0,
173+
MaximumAttempts: 120,
174+
NonRetryableErrorTypes: []string{"testFailureType"},
175+
},
176+
},
169177
}
170178

171179
for _, tt := range testCases {
172180
t.Run(tt.name, func(t *testing.T) {
173-
got := EnsureRetryPolicyDefaults(tt.input, defaultActivityRetrySettings)
174-
assert.Equal(t, tt.want, got)
181+
EnsureRetryPolicyDefaults(tt.input, defaultActivityRetrySettings)
182+
assert.Equal(t, tt.want, tt.input)
175183
})
176184
}
177185
}

service/history/commandChecker.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,11 @@ func (v *commandAttrValidator) validateTaskQueue(
652652
}
653653

654654
func (v *commandAttrValidator) validateActivityRetryPolicy(attributes *commandpb.ScheduleActivityTaskCommandAttributes) error {
655-
attributes.RetryPolicy = common.EnsureRetryPolicyDefaults(attributes.RetryPolicy, v.defaultActivityRetrySettings)
655+
if attributes.RetryPolicy == nil {
656+
attributes.RetryPolicy = &commonpb.RetryPolicy{}
657+
}
658+
659+
common.EnsureRetryPolicyDefaults(attributes.RetryPolicy, v.defaultActivityRetrySettings)
656660
return common.ValidateRetryPolicy(attributes.RetryPolicy)
657661
}
658662

service/history/retry.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"math"
3030
"time"
3131

32+
commonpb "go.temporal.io/api/common/v1"
3233
enumspb "go.temporal.io/api/enums/v1"
3334
failurepb "go.temporal.io/api/failure/v1"
3435

@@ -172,7 +173,9 @@ func fromConfigToDefaultActivityRetrySettings(options map[string]interface{}) co
172173
defaultSettings.MaximumAttempts = int32(maximumAttempts.(int))
173174
}
174175

175-
err := common.ValidateRetryPolicy(common.EnsureRetryPolicyDefaults(nil, defaultSettings))
176+
var empty commonpb.RetryPolicy
177+
common.EnsureRetryPolicyDefaults(&empty, defaultSettings)
178+
err := common.ValidateRetryPolicy(&empty)
176179
if err != nil {
177180
panic(
178181
fmt.Sprintf(

0 commit comments

Comments
 (0)