@@ -25,7 +25,7 @@ import { ChannelControlHelper, createChildChannelControlHelper, LoadBalancer, re
2525import { LeafLoadBalancer } from './load-balancer-pick-first' ;
2626import * as logging from './logging' ;
2727import { createMetricsReader , MetricsListener , OrcaOobMetricsSubchannelWrapper } from './orca' ;
28- import { PickArgs , Picker , PickResult , QueuePicker , UnavailablePicker } from './picker' ;
28+ import { PickArgs , Picker , PickResult , PickResultType , QueuePicker , UnavailablePicker } from './picker' ;
2929import { PriorityQueue } from './priority-queue' ;
3030import { Endpoint , endpointToString } from './subchannel-address' ;
3131
@@ -209,11 +209,19 @@ class WeightedRoundRobinPicker implements Picker {
209209 deadline : entry . deadline + entry . period
210210 } )
211211 const childPick = entry . picker . pick ( pickArgs ) ;
212- if ( this . metricsHandler ) {
213- return {
214- ...childPick ,
215- onCallEnded : createMetricsReader ( loadReport => this . metricsHandler ! ( loadReport , entry . endpointName ) , childPick . onCallEnded )
216- } ;
212+ if ( childPick . pickResultType === PickResultType . COMPLETE ) {
213+ if ( this . metricsHandler ) {
214+ return {
215+ ...childPick ,
216+ onCallEnded : createMetricsReader ( loadReport => this . metricsHandler ! ( loadReport , entry . endpointName ) , childPick . onCallEnded )
217+ } ;
218+ } else {
219+ const subchannelWrapper = childPick . subchannel as OrcaOobMetricsSubchannelWrapper ;
220+ return {
221+ ...childPick ,
222+ subchannel : subchannelWrapper . getWrappedSubchannel ( )
223+ }
224+ }
217225 } else {
218226 return childPick ;
219227 }
0 commit comments