From f898d201057e3879f0a8487bdf355c4de0ad7755 Mon Sep 17 00:00:00 2001 From: Josh GM Walker <56300765+Josh-Walker-GM@users.noreply.github.com> Date: Fri, 11 Aug 2023 19:23:08 +0100 Subject: [PATCH] fix(graphql-server): Improve GraphQL API performance by not accessing project config in makeMergedSchema (#9032) **Problem** The toml config is not always available in serverless deploy environments and because `makeMergedSchema` is called on every request (in such deploy environments) then throwing & catching a JS error causes a heavy performance decrease. **Changes** 1. Base the opentelemetry functionality on the graphql plugin options alone. **Notes** 1. Will have to update the experimental docs. You must disable both toml and graphql options now as toml does not override/impact the functionality. --- packages/graphql-server/package.json | 2 +- packages/graphql-server/src/makeMergedSchema.ts | 15 +-------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/packages/graphql-server/package.json b/packages/graphql-server/package.json index b85678503e14..229f8a2b90c0 100644 --- a/packages/graphql-server/package.json +++ b/packages/graphql-server/package.json @@ -34,7 +34,6 @@ "@graphql-tools/utils": "10.0.1", "@opentelemetry/api": "1.4.1", "@redwoodjs/api": "6.0.5", - "@redwoodjs/project-config": "6.0.5", "core-js": "3.31.1", "graphql": "16.7.1", "graphql-scalars": "1.22.2", @@ -48,6 +47,7 @@ "@babel/core": "7.22.9", "@envelop/testing": "6.0.0", "@envelop/types": "4.0.0", + "@redwoodjs/project-config": "6.0.5", "@redwoodjs/realtime": "6.0.5", "@types/jsonwebtoken": "9.0.2", "@types/lodash": "4.14.195", diff --git a/packages/graphql-server/src/makeMergedSchema.ts b/packages/graphql-server/src/makeMergedSchema.ts index 7ffcbd24eee9..08607b8bd4fd 100644 --- a/packages/graphql-server/src/makeMergedSchema.ts +++ b/packages/graphql-server/src/makeMergedSchema.ts @@ -15,8 +15,6 @@ import type { } from 'graphql' import { merge, omitBy } from 'lodash' -import { getConfig } from '@redwoodjs/project-config' - import type { RedwoodDirective } from './plugins/useRedwoodDirective' import * as rootGqlSchema from './rootSchema' import type { RedwoodSubscription } from './subscriptions/makeSubscriptions' @@ -104,22 +102,11 @@ const mapFieldsToService = ({ context: unknown, info: unknown ) => { - // In serverless deploys like Netilfy and Vercel, the redwood.toml file may not be present, - // so we need to try-catch the attempt here to read it - let experimentalOpenTelemetryEnabled = false - - try { - experimentalOpenTelemetryEnabled = - getConfig().experimental.opentelemetry.enabled - } catch (e) { - // Swallow the error for now - } - const captureResolvers = // @ts-expect-error context is unknown context && context['OPEN_TELEMETRY_GRAPHQL'] !== undefined - if (experimentalOpenTelemetryEnabled && captureResolvers) { + if (captureResolvers) { return wrapWithOpenTelemetry( services[name], args,