@@ -284,6 +284,12 @@ func (e *executableImpl) HandleErr(err error) (retErr error) {
284
284
return nil
285
285
}
286
286
287
+ if err .Error () == consts .ErrNamespaceHandover .Error () {
288
+ e .taggedMetricsHandler .Counter (metrics .TaskNamespaceHandoverCounter .GetMetricName ()).Record (1 )
289
+ err = consts .ErrNamespaceHandover
290
+ return err
291
+ }
292
+
287
293
if _ , ok := err .(* serviceerror.NamespaceNotActive ); ok {
288
294
// TODO remove this error check special case after multi-cursor is enabled by default,
289
295
// since the new task life cycle will not give up until task processed / verified
@@ -325,7 +331,10 @@ func (e *executableImpl) IsRetryableError(err error) bool {
325
331
// ErrTaskRetry means mutable state is not ready for standby task processing
326
332
// there's no point for retrying the task immediately which will hold the worker corouinte
327
333
// TODO: change ErrTaskRetry to a better name
328
- return err != consts .ErrTaskRetry && err != consts .ErrWorkflowBusy && err != consts .ErrDependencyTaskNotCompleted
334
+ return err != consts .ErrTaskRetry &&
335
+ err != consts .ErrWorkflowBusy &&
336
+ err != consts .ErrDependencyTaskNotCompleted &&
337
+ err != consts .ErrNamespaceHandover
329
338
}
330
339
331
340
func (e * executableImpl ) RetryPolicy () backoff.RetryPolicy {
@@ -449,7 +458,9 @@ func (e *executableImpl) shouldResubmitOnNack(attempt int, err error) bool {
449
458
return false
450
459
}
451
460
452
- return err != consts .ErrTaskRetry && err != consts .ErrDependencyTaskNotCompleted
461
+ return err != consts .ErrTaskRetry &&
462
+ err != consts .ErrDependencyTaskNotCompleted &&
463
+ err != consts .ErrNamespaceHandover
453
464
}
454
465
455
466
func (e * executableImpl ) rescheduleTime (
@@ -459,12 +470,14 @@ func (e *executableImpl) rescheduleTime(
459
470
// elapsedTime (the first parameter in ComputeNextDelay) is not relevant here
460
471
// since reschedule policy has no expiration interval.
461
472
462
- if err == consts .ErrTaskRetry {
473
+ if err == consts .ErrTaskRetry || err == consts . ErrNamespaceHandover {
463
474
// using a different reschedule policy to slow down retry
464
- // as the error means mutable state is not ready to handle the task,
475
+ // as the error means mutable state or namespace is not ready to handle the task,
465
476
// need to wait for replication.
466
477
return e .timeSource .Now ().Add (taskNotReadyReschedulePolicy .ComputeNextDelay (0 , attempt ))
467
- } else if err == consts .ErrDependencyTaskNotCompleted {
478
+ }
479
+
480
+ if err == consts .ErrDependencyTaskNotCompleted {
468
481
return e .timeSource .Now ().Add (dependencyTaskNotCompletedReschedulePolicy .ComputeNextDelay (0 , attempt ))
469
482
}
470
483
0 commit comments