Skip to content

Commit 7e74cd7

Browse files
committed
mutate execution request because we strict compare
1 parent 1e63bc9 commit 7e74cd7

File tree

1 file changed

+12
-25
lines changed

1 file changed

+12
-25
lines changed

packages/runtime/src/plugins/useUpstreamRetry.ts

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
MaybeAsyncIterable,
77
} from '@graphql-tools/utils';
88
import { handleMaybePromise, MaybePromise } from '@whatwg-node/promise-helpers';
9-
import { GraphQLResolveInfo } from 'graphql';
109
import { GatewayPlugin } from '../types';
1110

1211
export const RETRY_SYMBOL = Symbol.for('@hive-gateway/runtime/upstreamRetry');
@@ -69,14 +68,11 @@ export function useUpstreamRetry<TContext extends Record<string, any>>(
6968
return {
7069
onSubgraphExecute({
7170
subgraphName,
72-
executionRequest: subgraphExecutionRequest,
71+
executionRequest,
7372
executor,
7473
setExecutor,
7574
}) {
76-
const optsForReq = retryOptions({
77-
subgraphName,
78-
executionRequest: subgraphExecutionRequest,
79-
});
75+
const optsForReq = retryOptions({ subgraphName, executionRequest });
8076
if (optsForReq) {
8177
const {
8278
maxRetries,
@@ -106,7 +102,7 @@ export function useUpstreamRetry<TContext extends Record<string, any>>(
106102
},
107103
} = optsForReq;
108104
if (maxRetries > 0) {
109-
setExecutor(function (executorExecutionRequest: ExecutionRequest) {
105+
setExecutor(function (executionRequest: ExecutionRequest) {
110106
let attemptsLeft = maxRetries + 1;
111107
let executionResult: MaybeAsyncIterable<ExecutionResult>;
112108
let currRetryDelay = retryDelay;
@@ -120,30 +116,21 @@ export function useUpstreamRetry<TContext extends Record<string, any>>(
120116
const requestTime = Date.now();
121117
attemptsLeft--;
122118

123-
const attemptExecutionRequest: RetryExecutionRequest = {
124-
...executorExecutionRequest,
125-
[RETRY_SYMBOL]: {
126-
attempt: maxRetries - attemptsLeft,
127-
executionRequest: executorExecutionRequest,
128-
},
119+
// @ts-expect-error we rather mutatate the executionRequest because we strict compare it
120+
executionRequest[RETRY_SYMBOL] = {
121+
attempt: maxRetries - attemptsLeft,
122+
executionRequest,
129123
};
130-
attemptExecutionRequest.info = {
131-
...executorExecutionRequest.info,
132-
executionRequest: attemptExecutionRequest,
133-
} as GraphQLResolveInfo;
134124

135125
return handleMaybePromise(
136-
() => {
137-
return executor(attemptExecutionRequest);
138-
},
126+
() => executor(executionRequest),
139127
(currRes) => {
140128
executionResult = currRes;
141129
let retryAfterSecondsFromHeader: number | undefined;
142-
const response = executionRequestResponseMap.get(
143-
attemptExecutionRequest,
144-
);
130+
const response =
131+
executionRequestResponseMap.get(executionRequest);
145132
// Remove the response from the map after used so we don't see it again
146-
executionRequestResponseMap.delete(attemptExecutionRequest);
133+
executionRequestResponseMap.delete(executionRequest);
147134
const retryAfterHeader =
148135
response?.headers.get('Retry-After');
149136
if (retryAfterHeader) {
@@ -161,7 +148,7 @@ export function useUpstreamRetry<TContext extends Record<string, any>>(
161148
currRetryDelay * retryDelayFactor;
162149
if (
163150
shouldRetry({
164-
executionRequest: attemptExecutionRequest,
151+
executionRequest,
165152
executionResult,
166153
response,
167154
})

0 commit comments

Comments
 (0)