@@ -462,13 +462,13 @@ export class RunsReplicationService {
462
462
463
463
// Insert task runs and payloads with retry logic for connection errors
464
464
const [ taskRunError , taskRunResult ] = await this . #insertWithRetry(
465
- ( ) => this . #insertTaskRunInserts( taskRunInserts ) ,
465
+ ( attempt ) => this . #insertTaskRunInserts( taskRunInserts , attempt ) ,
466
466
"task run inserts" ,
467
467
flushId
468
468
) ;
469
469
470
470
const [ payloadError , payloadResult ] = await this . #insertWithRetry(
471
- ( ) => this . #insertPayloadInserts( payloadInserts ) ,
471
+ ( attempt ) => this . #insertPayloadInserts( payloadInserts , attempt ) ,
472
472
"payload inserts" ,
473
473
flushId
474
474
) ;
@@ -502,24 +502,25 @@ export class RunsReplicationService {
502
502
503
503
// New method to handle inserts with retry logic for connection errors
504
504
async #insertWithRetry< T > (
505
- insertFn : ( ) => Promise < T > ,
505
+ insertFn : ( attempt : number ) => Promise < T > ,
506
506
operationName : string ,
507
507
flushId : string
508
508
) : Promise < [ Error | null , T | null ] > {
509
509
let lastError : Error | null = null ;
510
510
511
511
for ( let attempt = 1 ; attempt <= this . _insertMaxRetries ; attempt ++ ) {
512
512
try {
513
- const result = await insertFn ( ) ;
513
+ const result = await insertFn ( attempt ) ;
514
514
return [ null , result ] ;
515
515
} catch ( error ) {
516
516
lastError = error instanceof Error ? error : new Error ( String ( error ) ) ;
517
517
518
518
// Check if this is a retryable connection error
519
- if ( this . #isRetryableConnectionError( lastError ) && attempt < this . _insertMaxRetries ) {
519
+ if ( this . #isRetryableConnectionError( lastError ) ) {
520
520
const delay = this . #calculateConnectionRetryDelay( attempt ) ;
521
521
522
- this . logger . warn ( `Retrying ${ operationName } due to connection error` , {
522
+ this . logger . warn ( `Retrying RunReplication insert due to connection error` , {
523
+ operationName,
523
524
flushId,
524
525
attempt,
525
526
maxRetries : this . _insertMaxRetries ,
@@ -567,7 +568,7 @@ export class RunsReplicationService {
567
568
return delay + jitter ;
568
569
}
569
570
570
- async #insertTaskRunInserts( taskRunInserts : TaskRunV2 [ ] ) {
571
+ async #insertTaskRunInserts( taskRunInserts : TaskRunV2 [ ] , attempt : number ) {
571
572
return await startSpan ( this . _tracer , "insertTaskRunsInserts" , async ( span ) => {
572
573
const [ insertError , insertResult ] = await this . options . clickhouse . taskRuns . insert (
573
574
taskRunInserts ,
@@ -581,18 +582,20 @@ export class RunsReplicationService {
581
582
) ;
582
583
583
584
if ( insertError ) {
584
- this . logger . error ( "Error inserting task run inserts" , {
585
+ this . logger . error ( "Error inserting task run inserts attempt " , {
585
586
error : insertError ,
587
+ attempt,
586
588
} ) ;
587
589
588
590
recordSpanError ( span , insertError ) ;
591
+ throw insertError ;
589
592
}
590
593
591
594
return insertResult ;
592
595
} ) ;
593
596
}
594
597
595
- async #insertPayloadInserts( payloadInserts : RawTaskRunPayloadV1 [ ] ) {
598
+ async #insertPayloadInserts( payloadInserts : RawTaskRunPayloadV1 [ ] , attempt : number ) {
596
599
return await startSpan ( this . _tracer , "insertPayloadInserts" , async ( span ) => {
597
600
const [ insertError , insertResult ] = await this . options . clickhouse . taskRuns . insertPayloads (
598
601
payloadInserts ,
@@ -606,11 +609,13 @@ export class RunsReplicationService {
606
609
) ;
607
610
608
611
if ( insertError ) {
609
- this . logger . error ( "Error inserting payload inserts" , {
612
+ this . logger . error ( "Error inserting payload inserts attempt " , {
610
613
error : insertError ,
614
+ attempt,
611
615
} ) ;
612
616
613
617
recordSpanError ( span , insertError ) ;
618
+ throw insertError ;
614
619
}
615
620
616
621
return insertResult ;
0 commit comments