@@ -324,14 +324,27 @@ func (p *taskProcessorImpl) handleSyncShardStatus(
324
324
func (p * taskProcessorImpl ) handleReplicationTask (
325
325
ctx context.Context ,
326
326
replicationTask * replicationspb.ReplicationTask ,
327
- ) error {
327
+ ) ( retErr error ) {
328
328
_ = p .rateLimiter .Wait (ctx )
329
329
330
+ operationTagValue := p .getOperationTagValue (replicationTask )
331
+
330
332
operation := func () error {
331
- operation , err := p .replicationTaskExecutor .Execute (ctx , replicationTask , false )
332
- p .emitTaskMetrics (operation , err )
333
+ err := p .replicationTaskExecutor .Execute (ctx , replicationTask , false )
334
+ p .emitTaskMetrics (operationTagValue , err )
333
335
return err
334
336
}
337
+
338
+ var panicErr error
339
+ defer func () {
340
+ if panicErr != nil {
341
+ retErr = panicErr
342
+ p .emitTaskMetrics (operationTagValue , panicErr )
343
+ }
344
+ }()
345
+
346
+ defer log .CapturePanic (p .logger , & panicErr )
347
+
335
348
return backoff .ThrottleRetry (operation , p .taskRetryPolicy , p .isRetryableError )
336
349
}
337
350
@@ -526,6 +539,25 @@ func (p *taskProcessorImpl) emitTaskMetrics(operation string, err error) {
526
539
metricsScope .Counter (metrics .ReplicationTasksFailed .GetMetricName ()).Record (1 )
527
540
}
528
541
542
+ func (p * taskProcessorImpl ) getOperationTagValue (
543
+ replicationTask * replicationspb.ReplicationTask ,
544
+ ) string {
545
+ switch replicationTask .GetTaskType () {
546
+ case enumsspb .REPLICATION_TASK_TYPE_SYNC_SHARD_STATUS_TASK :
547
+ return metrics .SyncShardTaskScope
548
+ case enumsspb .REPLICATION_TASK_TYPE_SYNC_ACTIVITY_TASK :
549
+ return metrics .SyncActivityTaskScope
550
+ case enumsspb .REPLICATION_TASK_TYPE_HISTORY_METADATA_TASK :
551
+ return metrics .HistoryMetadataReplicationTaskScope
552
+ case enumsspb .REPLICATION_TASK_TYPE_HISTORY_V2_TASK :
553
+ return metrics .HistoryReplicationTaskScope
554
+ case enumsspb .REPLICATION_TASK_TYPE_SYNC_WORKFLOW_STATE_TASK :
555
+ return metrics .SyncWorkflowStateTaskScope
556
+ default :
557
+ return metrics .ReplicatorScope
558
+ }
559
+ }
560
+
529
561
func (p * taskProcessorImpl ) isStopped () bool {
530
562
return atomic .LoadInt32 (& p .status ) == common .DaemonStatusStopped
531
563
}
0 commit comments