Skip to content

Commit

Permalink
Improvements on schema loading and error handling (#7447)
Browse files Browse the repository at this point in the history
* Perf optimizations - avoid async/await

* Go

* More

* Bump federation

* chore(dependencies): updated changesets for modified dependencies

* More messages when supergraph fails to load

* ..

* Go

* Typings

* Improve tests

* Go

* Go

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
  • Loading branch information
ardatan and github-actions[bot] authored Aug 2, 2024
1 parent ef12ee6 commit 6c67e77
Show file tree
Hide file tree
Showing 82 changed files with 1,463 additions and 542 deletions.
6 changes: 6 additions & 0 deletions .changeset/@graphql-mesh_fusion-runtime-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@graphql-mesh/fusion-runtime": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
- Updated dependency [`@graphql-tools/federation@^2.2.4` ↗︎](https://www.npmjs.com/package/@graphql-tools/federation/v/2.2.4) (from `^2.2.3`, in `dependencies`)
6 changes: 6 additions & 0 deletions .changeset/@graphql-mesh_graphql-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@graphql-mesh/graphql": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
- Updated dependency [`@graphql-tools/federation@^2.2.4` ↗︎](https://www.npmjs.com/package/@graphql-tools/federation/v/2.2.4) (from `^2.2.3`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/merger-stitching": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_odata-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/odata": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_postgraphile-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/postgraphile": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_runtime-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/runtime": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
6 changes: 6 additions & 0 deletions .changeset/@graphql-mesh_serve-runtime-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@graphql-mesh/serve-runtime": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
- Updated dependency [`@graphql-tools/federation@^2.2.4` ↗︎](https://www.npmjs.com/package/@graphql-tools/federation/v/2.2.4) (from `^2.2.3`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_supergraph-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/supergraph": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/federation@^2.2.4` ↗︎](https://www.npmjs.com/package/@graphql-tools/federation/v/2.2.4) (from `^2.2.3`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-encapsulate": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-federation": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-filter-schema": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_transform-hive-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-hive": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-hoist-field": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-naming-convention": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-prefix": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-rename": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transform-type-merging": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transport-common": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_transport-mysql-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transport-mysql": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_transport-neo4j-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/transport-neo4j": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_types-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/types": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@graphql-mesh_utils-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@graphql-mesh/utils": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@omnigraph_json-schema-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@omnigraph/json-schema": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@omnigraph_mysql-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@omnigraph/mysql": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@omnigraph_neo4j-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@omnigraph/neo4j": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@omnigraph_openapi-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@omnigraph/openapi": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@omnigraph_raml-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@omnigraph/raml": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/@omnigraph_sqlite-7447-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@omnigraph/sqlite": patch
---
dependencies updates:
- Updated dependency [`@graphql-tools/delegate@^10.0.17` ↗︎](https://www.npmjs.com/package/@graphql-tools/delegate/v/10.0.17) (from `^10.0.16`, in `dependencies`)
5 changes: 5 additions & 0 deletions .changeset/gorgeous-birds-knock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphql-mesh/utils': patch
---

Accept `errorMapper` in `mapMaybePromise`
7 changes: 7 additions & 0 deletions .changeset/silent-mugs-act.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@graphql-mesh/serve-runtime': patch
'@graphql-mesh/serve-cli': patch
---

Export \`MeshServeConfigContext`\, \`useContentEncoding\` and \`useUpstreamCancel\` from
\`serve-cli\` and \`serve-runtime\`
5 changes: 5 additions & 0 deletions .changeset/spicy-beds-applaud.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphql-mesh/serve-runtime': patch
---

Fix the wrong information on the landing page
8 changes: 8 additions & 0 deletions .changeset/three-crabs-brake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@graphql-mesh/transport-common': patch
'@graphql-mesh/transport-http': patch
'@graphql-mesh/fusion-runtime': patch
'@graphql-mesh/serve-runtime': patch
---

Improvements on schema loading handling
5 changes: 5 additions & 0 deletions .changeset/wet-hounds-reflect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphql-mesh/serve-runtime': patch
---

Log debug messages when readiness check fails
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { setTimeout } from 'timers/promises';
import { createClient, type Client } from 'graphql-sse';
import { createTenv, getAvailablePort } from '@e2e/tenv';
import { fetch } from '@whatwg-node/fetch';
import { TOKEN } from './services/products/server';

const { composeWithApollo, service, serve } = createTenv(__dirname);
Expand Down Expand Up @@ -108,6 +109,7 @@ it('should recycle websocket connections', async () => {
headers: {
Authorization: TOKEN,
},
fetchFn: fetch,
});

const query = /* GraphQL */ `
Expand Down Expand Up @@ -153,6 +155,7 @@ it('should subscribe and resolve via http callbacks', async () => {
client = createClient({
url: `${publicUrl}/graphql`,
retryAttempts: 0,
fetchFn: fetch,
});
const sub = client.iterate({
query: /* GraphQL */ `
Expand Down
4 changes: 2 additions & 2 deletions packages/fusion/runtime/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@
"@graphql-mesh/transport-common": "^0.4.5",
"@graphql-mesh/types": "^0.99.5",
"@graphql-mesh/utils": "^0.99.5",
"@graphql-tools/delegate": "^10.0.16",
"@graphql-tools/delegate": "^10.0.17",
"@graphql-tools/executor": "^1.3.0",
"@graphql-tools/federation": "^2.2.3",
"@graphql-tools/federation": "^2.2.4",
"@graphql-tools/stitch": "^9.2.10",
"@graphql-tools/stitching-directives": "^3.1.2",
"@graphql-tools/utils": "^10.2.3",
Expand Down
19 changes: 16 additions & 3 deletions packages/fusion/runtime/src/unifiedGraphManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ export interface UnifiedGraphManagerOptions<TContext> {
getUnifiedGraph(ctx: TransportContext): MaybePromise<GraphQLSchema | string | DocumentNode>;
// Handle the unified graph by any specification
handleUnifiedGraph?: UnifiedGraphHandler;
onSchemaChange?(unifiedGraph: GraphQLSchema): void;
transports?: Transports;
transportEntryAdditions?: TransportEntryAdditions;
polling?: number;
Expand All @@ -78,7 +79,7 @@ export class UnifiedGraphManager<TContext> {
private inContextSDK;
private initialUnifiedGraph$: MaybePromise<true>;
private disposableStack = new AsyncDisposableStack();
_transportEntryMap: Record<string, TransportEntry>;
private _transportEntryMap: Record<string, TransportEntry>;
private _transportExecutorStack: AsyncDisposableStack;
constructor(private opts: UnifiedGraphManagerOptions<TContext>) {
this.handleUnifiedGraph = opts.handleUnifiedGraph || handleFederationSupergraph;
Expand Down Expand Up @@ -110,13 +111,13 @@ export class UnifiedGraphManager<TContext> {
}

private ensureUnifiedGraph() {
if (!this.initialUnifiedGraph$) {
if (!this.initialUnifiedGraph$ && !this.unifiedGraph) {
this.initialUnifiedGraph$ = this.getAndSetUnifiedGraph();
}
return this.initialUnifiedGraph$;
}

private getAndSetUnifiedGraph() {
private getAndSetUnifiedGraph(): MaybePromise<true> {
this.pausePolling();
return mapMaybePromise(
this.opts.getUnifiedGraph(this.opts.transportContext),
Expand Down Expand Up @@ -181,8 +182,16 @@ export class UnifiedGraphManager<TContext> {
}
this.continuePolling();
this._transportEntryMap = transportEntryMap;
this.opts.onSchemaChange?.(this.unifiedGraph);
return cleanupJob$ || true;
},
err => {
this.opts.transportContext?.logger?.error('Failed to load Supergraph', err);
if (!this.unifiedGraph) {
throw err;
}
return true;
},
);
}

Expand All @@ -200,6 +209,10 @@ export class UnifiedGraphManager<TContext> {
});
}

public getTransportEntryMap() {
return mapMaybePromise(this.ensureUnifiedGraph(), () => this._transportEntryMap);
}

invalidateUnifiedGraph() {
return this.getAndSetUnifiedGraph();
}
Expand Down
Loading

0 comments on commit 6c67e77

Please sign in to comment.