Skip to content

Commit 3e0a037

Browse files
authored
Merge pull request #2243 from murgatroid99/grpc-js_retry
grpc-js: Big refactor in preparation for implementing retries
2 parents fd76558 + 63d9f6a commit 3e0a037

39 files changed

+2029
-2001
lines changed

packages/grpc-js-xds/src/http-filter/fault-injection-filter.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ const NUMBER_REGEX = /\d+/;
231231
let totalActiveFaults = 0;
232232

233233
class FaultInjectionFilter extends BaseFilter implements Filter {
234-
constructor(private callStream: CallStream, private config: FaultInjectionConfig) {
234+
constructor(private config: FaultInjectionConfig) {
235235
super();
236236
}
237237

@@ -316,7 +316,7 @@ class FaultInjectionFilter extends BaseFilter implements Filter {
316316
}
317317
}
318318
if (abortStatus !== null && rollRandomPercentage(numerator, denominator)) {
319-
this.callStream.cancelWithStatus(abortStatus, 'Fault injected');
319+
return Promise.reject({code: abortStatus, details: 'Fault injected', metadata: new Metadata()});
320320
}
321321
}
322322
return metadata;
@@ -333,8 +333,8 @@ class FaultInjectionFilterFactory implements FilterFactory<FaultInjectionFilter>
333333
}
334334
}
335335

336-
createFilter(callStream: experimental.CallStream): FaultInjectionFilter {
337-
return new FaultInjectionFilter(callStream, this.config);
336+
createFilter(): FaultInjectionFilter {
337+
return new FaultInjectionFilter(this.config);
338338
}
339339
}
340340

packages/grpc-js-xds/src/http-filter/router-filter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class RouterFilter extends BaseFilter implements Filter {}
2626
class RouterFilterFactory implements FilterFactory<RouterFilter> {
2727
constructor(config: HttpFilterConfig, overrideConfig?: HttpFilterConfig) {}
2828

29-
createFilter(callStream: experimental.CallStream): RouterFilter {
29+
createFilter(): RouterFilter {
3030
return new RouterFilter();
3131
}
3232
}

packages/grpc-js-xds/src/load-balancer-eds.ts

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -146,24 +146,6 @@ export class EdsLoadBalancingConfig implements LoadBalancingConfig {
146146
}
147147
}
148148

149-
class CallEndTrackingFilter extends BaseFilter implements Filter {
150-
constructor(private onCallEnd: () => void) {
151-
super();
152-
}
153-
receiveTrailers(status: StatusObject) {
154-
this.onCallEnd();
155-
return status;
156-
}
157-
}
158-
159-
class CallTrackingFilterFactory implements FilterFactory<CallEndTrackingFilter> {
160-
constructor(private onCallEnd: () => void) {}
161-
162-
createFilter(callStream: CallStream) {
163-
return new CallEndTrackingFilter(this.onCallEnd);
164-
}
165-
}
166-
167149
/**
168150
* This class load balances over a cluster by making an EDS request and then
169151
* transforming the result into a configuration for another load balancing
@@ -217,9 +199,6 @@ export class EdsLoadBalancer implements LoadBalancer {
217199
* balancer. */
218200
if (dropCategory === null) {
219201
const originalPick = originalPicker.pick(pickArgs);
220-
const trackingFilterFactory: FilterFactory<Filter> = new CallTrackingFilterFactory(() => {
221-
this.concurrentRequests -= 1;
222-
});
223202
return {
224203
pickResultType: originalPick.pickResultType,
225204
status: originalPick.status,
@@ -228,7 +207,10 @@ export class EdsLoadBalancer implements LoadBalancer {
228207
originalPick.onCallStarted?.();
229208
this.concurrentRequests += 1;
230209
},
231-
extraFilterFactories: originalPick.extraFilterFactories.concat(trackingFilterFactory)
210+
onCallEnded: status => {
211+
originalPick.onCallEnded?.(status);
212+
this.concurrentRequests -= 1;
213+
}
232214
};
233215
} else {
234216
let details: string;
@@ -247,7 +229,7 @@ export class EdsLoadBalancer implements LoadBalancer {
247229
metadata: new Metadata(),
248230
},
249231
subchannel: null,
250-
extraFilterFactories: [],
232+
onCallEnded: null,
251233
onCallStarted: null
252234
};
253235
}

packages/grpc-js-xds/src/load-balancer-lrs.ts

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -108,29 +108,6 @@ export class LrsLoadBalancingConfig implements LoadBalancingConfig {
108108
}
109109
}
110110

111-
/**
112-
* Filter class that reports when the call ends.
113-
*/
114-
class CallEndTrackingFilter extends BaseFilter implements Filter {
115-
constructor(private localityStatsReporter: XdsClusterLocalityStats) {
116-
super();
117-
}
118-
119-
receiveTrailers(status: StatusObject) {
120-
this.localityStatsReporter.addCallFinished(status.code !== Status.OK);
121-
return status;
122-
}
123-
}
124-
125-
class CallEndTrackingFilterFactory
126-
implements FilterFactory<CallEndTrackingFilter> {
127-
constructor(private localityStatsReporter: XdsClusterLocalityStats) {}
128-
129-
createFilter(callStream: Call): CallEndTrackingFilter {
130-
return new CallEndTrackingFilter(this.localityStatsReporter);
131-
}
132-
}
133-
134111
/**
135112
* Picker that delegates picking to another picker, and reports when calls
136113
* created using those picks start and end.
@@ -144,9 +121,6 @@ class LoadReportingPicker implements Picker {
144121
pick(pickArgs: PickArgs): PickResult {
145122
const wrappedPick = this.wrappedPicker.pick(pickArgs);
146123
if (wrappedPick.pickResultType === PickResultType.COMPLETE) {
147-
const trackingFilterFactory = new CallEndTrackingFilterFactory(
148-
this.localityStatsReporter
149-
);
150124
return {
151125
pickResultType: PickResultType.COMPLETE,
152126
subchannel: wrappedPick.subchannel,
@@ -155,7 +129,10 @@ class LoadReportingPicker implements Picker {
155129
wrappedPick.onCallStarted?.();
156130
this.localityStatsReporter.addCallStarted();
157131
},
158-
extraFilterFactories: wrappedPick.extraFilterFactories.concat(trackingFilterFactory),
132+
onCallEnded: status => {
133+
wrappedPick.onCallEnded?.(status);
134+
this.localityStatsReporter.addCallFinished(status !== Status.OK);
135+
}
159136
};
160137
} else {
161138
return wrappedPick;

packages/grpc-js-xds/src/load-balancer-xds-cluster-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ class XdsClusterManagerPicker implements Picker {
107107
metadata: new Metadata(),
108108
},
109109
subchannel: null,
110-
extraFilterFactories: [],
111-
onCallStarted: null
110+
onCallStarted: null,
111+
onCallEnded: null
112112
};
113113
}
114114
}

packages/grpc-js/src/call-credentials-filter.ts

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)