mirror of https://github.com/grpc/grpc-node.git
grpc-js: Properly unwrap subchannel in WRR picker
This commit is contained in:
parent
1ec5996769
commit
c67f7183b2
|
@ -25,7 +25,7 @@ import { ChannelControlHelper, createChildChannelControlHelper, LoadBalancer, re
|
||||||
import { LeafLoadBalancer } from './load-balancer-pick-first';
|
import { LeafLoadBalancer } from './load-balancer-pick-first';
|
||||||
import * as logging from './logging';
|
import * as logging from './logging';
|
||||||
import { createMetricsReader, MetricsListener, OrcaOobMetricsSubchannelWrapper } from './orca';
|
import { createMetricsReader, MetricsListener, OrcaOobMetricsSubchannelWrapper } from './orca';
|
||||||
import { PickArgs, Picker, PickResult, QueuePicker, UnavailablePicker } from './picker';
|
import { PickArgs, Picker, PickResult, PickResultType, QueuePicker, UnavailablePicker } from './picker';
|
||||||
import { PriorityQueue } from './priority-queue';
|
import { PriorityQueue } from './priority-queue';
|
||||||
import { Endpoint, endpointToString } from './subchannel-address';
|
import { Endpoint, endpointToString } from './subchannel-address';
|
||||||
|
|
||||||
|
@ -209,11 +209,19 @@ class WeightedRoundRobinPicker implements Picker {
|
||||||
deadline: entry.deadline + entry.period
|
deadline: entry.deadline + entry.period
|
||||||
})
|
})
|
||||||
const childPick = entry.picker.pick(pickArgs);
|
const childPick = entry.picker.pick(pickArgs);
|
||||||
if (this.metricsHandler) {
|
if (childPick.pickResultType === PickResultType.COMPLETE) {
|
||||||
return {
|
if (this.metricsHandler) {
|
||||||
...childPick,
|
return {
|
||||||
onCallEnded: createMetricsReader(loadReport => this.metricsHandler!(loadReport, entry.endpointName), childPick.onCallEnded)
|
...childPick,
|
||||||
};
|
onCallEnded: createMetricsReader(loadReport => this.metricsHandler!(loadReport, entry.endpointName), childPick.onCallEnded)
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
const subchannelWrapper = childPick.subchannel as OrcaOobMetricsSubchannelWrapper;
|
||||||
|
return {
|
||||||
|
...childPick,
|
||||||
|
subchannel: subchannelWrapper.getWrappedSubchannel()
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return childPick;
|
return childPick;
|
||||||
}
|
}
|
||||||
|
|
|
@ -338,6 +338,10 @@ export class OrcaOobMetricsSubchannelWrapper extends BaseSubchannelWrapper {
|
||||||
super(child);
|
super(child);
|
||||||
this.addDataWatcher(new OobMetricsDataWatcher(metricsListener, intervalMs));
|
this.addDataWatcher(new OobMetricsDataWatcher(metricsListener, intervalMs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getWrappedSubchannel(): SubchannelInterface {
|
||||||
|
return this.child;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createOobMetricsDataProducer(subchannel: Subchannel) {
|
function createOobMetricsDataProducer(subchannel: Subchannel) {
|
||||||
|
|
Loading…
Reference in New Issue