Skip to content

Commit c67f718

Browse files
committed
grpc-js: Properly unwrap subchannel in WRR picker
1 parent 1ec5996 commit c67f718

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

packages/grpc-js/src/load-balancer-weighted-round-robin.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { ChannelControlHelper, createChildChannelControlHelper, LoadBalancer, re
2525
import { LeafLoadBalancer } from './load-balancer-pick-first';
2626
import * as logging from './logging';
2727
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';
2929
import { PriorityQueue } from './priority-queue';
3030
import { 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
}

packages/grpc-js/src/orca.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,10 @@ export class OrcaOobMetricsSubchannelWrapper extends BaseSubchannelWrapper {
338338
super(child);
339339
this.addDataWatcher(new OobMetricsDataWatcher(metricsListener, intervalMs));
340340
}
341+
342+
getWrappedSubchannel(): SubchannelInterface {
343+
return this.child;
344+
}
341345
}
342346

343347
function createOobMetricsDataProducer(subchannel: Subchannel) {

0 commit comments

Comments
 (0)