@@ -372,20 +372,8 @@ private void setFinalResult(
372
372
completionTimeNanos = System .nanoTime ();
373
373
totalLatencyNanos = completionTimeNanos - startTimeNanos ;
374
374
long nodeLatencyNanos = completionTimeNanos - callback .nodeStartTimeNanos ;
375
- requestTracker .onNodeSuccess (
376
- callback .statement ,
377
- nodeLatencyNanos ,
378
- executionProfile ,
379
- callback .node ,
380
- executionInfo ,
381
- logPrefix );
382
- requestTracker .onSuccess (
383
- callback .statement ,
384
- totalLatencyNanos ,
385
- executionProfile ,
386
- callback .node ,
387
- executionInfo ,
388
- logPrefix );
375
+ requestTracker .onNodeSuccess (nodeLatencyNanos , executionInfo , logPrefix );
376
+ requestTracker .onSuccess (totalLatencyNanos , executionInfo , logPrefix );
389
377
}
390
378
if (sessionMetricUpdater .isEnabled (
391
379
DseSessionMetric .GRAPH_REQUESTS , executionProfile .getName ())) {
@@ -471,8 +459,7 @@ private void setFinalError(
471
459
cancelScheduledTasks ();
472
460
if (!(requestTracker instanceof NoopRequestTracker )) {
473
461
long latencyNanos = System .nanoTime () - startTimeNanos ;
474
- requestTracker .onError (
475
- statement , error , latencyNanos , executionProfile , node , executionInfo , logPrefix );
462
+ requestTracker .onError (latencyNanos , executionInfo , logPrefix );
476
463
}
477
464
if (error instanceof DriverTimeoutException ) {
478
465
throttler .signalTimeout (this );
@@ -534,7 +521,7 @@ public void operationComplete(Future<java.lang.Void> future) {
534
521
Throwable error = future .cause ();
535
522
if (error instanceof EncoderException
536
523
&& error .getCause () instanceof FrameTooLongException ) {
537
- trackNodeError (node , error .getCause (), NANOTIME_NOT_MEASURED_YET );
524
+ trackNodeError (this , error .getCause (), NANOTIME_NOT_MEASURED_YET , null );
538
525
setFinalError (statement , error .getCause (), node , execution );
539
526
} else {
540
527
LOG .trace (
@@ -543,7 +530,7 @@ public void operationComplete(Future<java.lang.Void> future) {
543
530
channel ,
544
531
error );
545
532
recordError (node , error );
546
- trackNodeError (node , error , NANOTIME_NOT_MEASURED_YET );
533
+ trackNodeError (this , error , NANOTIME_NOT_MEASURED_YET , null );
547
534
((DefaultNode ) node )
548
535
.getMetricUpdater ()
549
536
.incrementCounter (DefaultNodeMetric .UNSENT_REQUESTS , executionProfile .getName ());
@@ -651,38 +638,39 @@ public void onResponse(Frame responseFrame) {
651
638
setFinalResult ((Result ) responseMessage , responseFrame , this );
652
639
} else if (responseMessage instanceof Error ) {
653
640
LOG .trace ("[{}] Got error response, processing" , logPrefix );
654
- processErrorResponse ((Error ) responseMessage );
641
+ processErrorResponse ((Error ) responseMessage , responseFrame );
655
642
} else {
656
643
trackNodeError (
657
- node ,
644
+ this ,
658
645
new IllegalStateException ("Unexpected response " + responseMessage ),
659
- nodeResponseTimeNanos );
646
+ nodeResponseTimeNanos ,
647
+ responseFrame );
660
648
setFinalError (
661
649
statement ,
662
650
new IllegalStateException ("Unexpected response " + responseMessage ),
663
651
node ,
664
652
execution );
665
653
}
666
654
} catch (Throwable t ) {
667
- trackNodeError (node , t , nodeResponseTimeNanos );
655
+ trackNodeError (this , t , nodeResponseTimeNanos , responseFrame );
668
656
setFinalError (statement , t , node , execution );
669
657
}
670
658
}
671
659
672
- private void processErrorResponse (Error errorMessage ) {
660
+ private void processErrorResponse (Error errorMessage , Frame responseFrame ) {
673
661
CoordinatorException error = Conversions .toThrowable (node , errorMessage , context );
674
662
NodeMetricUpdater metricUpdater = ((DefaultNode ) node ).getMetricUpdater ();
675
663
if (error instanceof BootstrappingException ) {
676
664
LOG .trace ("[{}] {} is bootstrapping, trying next node" , logPrefix , node );
677
665
recordError (node , error );
678
- trackNodeError (node , error , NANOTIME_NOT_MEASURED_YET );
666
+ trackNodeError (this , error , NANOTIME_NOT_MEASURED_YET , responseFrame );
679
667
sendRequest (statement , null , queryPlan , execution , retryCount , false );
680
668
} else if (error instanceof QueryValidationException
681
669
|| error instanceof FunctionFailureException
682
670
|| error instanceof ProtocolError ) {
683
671
LOG .trace ("[{}] Unrecoverable error, rethrowing" , logPrefix );
684
672
metricUpdater .incrementCounter (DefaultNodeMetric .OTHER_ERRORS , executionProfile .getName ());
685
- trackNodeError (node , error , NANOTIME_NOT_MEASURED_YET );
673
+ trackNodeError (this , error , NANOTIME_NOT_MEASURED_YET , responseFrame );
686
674
setFinalError (statement , error , node , execution );
687
675
} else {
688
676
RetryPolicy retryPolicy = Conversions .resolveRetryPolicy (context , executionProfile );
@@ -757,7 +745,7 @@ private void processRetryVerdict(RetryVerdict verdict, Throwable error) {
757
745
switch (verdict .getRetryDecision ()) {
758
746
case RETRY_SAME :
759
747
recordError (node , error );
760
- trackNodeError (node , error , NANOTIME_NOT_MEASURED_YET );
748
+ trackNodeError (this , error , NANOTIME_NOT_MEASURED_YET , null );
761
749
sendRequest (
762
750
verdict .getRetryRequest (statement ),
763
751
node ,
@@ -768,7 +756,7 @@ private void processRetryVerdict(RetryVerdict verdict, Throwable error) {
768
756
break ;
769
757
case RETRY_NEXT :
770
758
recordError (node , error );
771
- trackNodeError (node , error , NANOTIME_NOT_MEASURED_YET );
759
+ trackNodeError (this , error , NANOTIME_NOT_MEASURED_YET , null );
772
760
sendRequest (
773
761
verdict .getRetryRequest (statement ),
774
762
null ,
@@ -778,7 +766,7 @@ private void processRetryVerdict(RetryVerdict verdict, Throwable error) {
778
766
false );
779
767
break ;
780
768
case RETHROW :
781
- trackNodeError (node , error , NANOTIME_NOT_MEASURED_YET );
769
+ trackNodeError (this , error , NANOTIME_NOT_MEASURED_YET , null );
782
770
setFinalError (statement , error , node , execution );
783
771
break ;
784
772
case IGNORE :
@@ -857,16 +845,29 @@ void cancel() {
857
845
* measured. If {@link #NANOTIME_NOT_MEASURED_YET}, it hasn't and we need to measure it now
858
846
* (this is to avoid unnecessary calls to System.nanoTime)
859
847
*/
860
- private void trackNodeError (Node node , Throwable error , long nodeResponseTimeNanos ) {
848
+ private void trackNodeError (
849
+ NodeResponseCallback callback , Throwable error , long nodeResponseTimeNanos , Frame frame ) {
861
850
if (requestTracker instanceof NoopRequestTracker ) {
862
851
return ;
863
852
}
864
853
if (nodeResponseTimeNanos == NANOTIME_NOT_MEASURED_YET ) {
865
854
nodeResponseTimeNanos = System .nanoTime ();
866
855
}
856
+ ExecutionInfo executionInfo =
857
+ DefaultExecutionInfo .builder (
858
+ callback .statement ,
859
+ callback .node ,
860
+ startedSpeculativeExecutionsCount .get (),
861
+ callback .execution ,
862
+ error ,
863
+ errors ,
864
+ session ,
865
+ context ,
866
+ callback .executionProfile )
867
+ .withServerResponse (null , frame )
868
+ .build ();
867
869
long latencyNanos = nodeResponseTimeNanos - this .nodeStartTimeNanos ;
868
- requestTracker .onNodeError (
869
- statement , error , latencyNanos , executionProfile , node , null , logPrefix );
870
+ requestTracker .onNodeError (latencyNanos , executionInfo , logPrefix );
870
871
}
871
872
872
873
@ Override
0 commit comments