@@ -25,7 +25,7 @@ import { ChannelControlHelper, createChildChannelControlHelper, LoadBalancer, re
25
25
import { LeafLoadBalancer } from './load-balancer-pick-first' ;
26
26
import * as logging from './logging' ;
27
27
import { createMetricsReader , MetricsListener , OrcaOobMetricsSubchannelWrapper } from './orca' ;
28
- import { PickArgs , Picker , PickResult , QueuePicker , UnavailablePicker } from './picker' ;
28
+ import { PickArgs , Picker , PickResult , PickResultType , QueuePicker , UnavailablePicker } from './picker' ;
29
29
import { PriorityQueue } from './priority-queue' ;
30
30
import { Endpoint , endpointToString } from './subchannel-address' ;
31
31
@@ -209,11 +209,19 @@ class WeightedRoundRobinPicker implements Picker {
209
209
deadline : entry . deadline + entry . period
210
210
} )
211
211
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
+ }
217
225
} else {
218
226
return childPick ;
219
227
}
0 commit comments