Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When Database connections fail, Graphweaver does not provide useful error messages #1195

Open
thekevinbrown opened this issue Sep 23, 2024 · 0 comments

Comments

@thekevinbrown
Copy link
Member

Describe the bug
I was looking through the mikro-orm docs and noticed that they say you can pass in the connection string as 'clientUrl' inside mikroOrmConfig.
So I set that up thinking I could get rid of the custom url parsing script:

export const getConnection = () => ({
	connectionManagerId: 'postgresql',
	mikroOrmConfig: {
		driverOptions: {
			connection: process.env.NODE_ENV === 'development' ? {} : { ssl: { rejectUnauthorized: false } },
		},
		entities: [...entities],
		clientUrl: process.env.DATABASE_URL, // postgresql://postgres:[email protected]:5432/[database name]
		driver: PostgreSqlDriver,
		pool: { min: 2, max: 50 },
	},
});

However, when I ran a simple query to list all organizations, I got this error :

{
    "errors": [
        {
            "extensions": {
                "code": "INTERNAL_SERVER_ERROR"
            },
            "message": "select distinct \"o0\".* from \"organizations\" as \"o0\" - relation \"organizations\" does not exist",
            "locations": [
                {
                    "line": 2,
                    "column": 5
                }
            ],
            "path": [
                "organizations"
            ],
            "context": {
                "message": "select distinct \"o0\".* from \"organizations\" as \"o0\" - relation \"organizations\" does not exist",
                "locations": [
                    {
                        "line": 2,
                        "column": 5
                    }
                ],
                "path": [
                    "organizations"
                ]
            }
        }
    ],
    "data": {
        "organizations": null
    }
}

API Error Message:

error: select distinct "o0".* from "organizations" as "o0" where "o0"."name" = 'cold-climate-development' order by "o0"."id" desc limit 1 - relation "organizations" does not exist
    at Parser.parseErrorMessage ([project root]node_modules/.pnpm/[email protected]/node_modules/pg-protocol/dist/parser.js:283:98)
    at Parser.handlePacket ([project root]node_modules/.pnpm/[email protected]/node_modules/pg-protocol/dist/parser.js:122:29)
    at Parser.parse ([project root]node_modules/.pnpm/[email protected]/node_modules/pg-protocol/dist/parser.js:35:38)
    at Socket.<anonymous> ([project root]node_modules/.pnpm/[email protected]/node_modules/pg-protocol/dist/index.js:11:42)
    at Socket.emit (node:events:514:28)
    at addChunk (node:internal/streams/readable:376:12)
    at readableAddChunk (node:internal/streams/readable:349:9)
    at Readable.push (node:internal/streams/readable:286:10)
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
    at TCP.callbackTrampoline (node:internal/async_hooks:130:17)

From the error log, you would think the requested org doesn't exist especially since the error is thrown when addUserToContext() attempts to get an organization by name.

const org = await provider.findOne({name: 'cold-climate-development'});

But if I revert the change in mikroOrmConfig to go back to using my custom script to parse the URL to extract the database connection values,

mikroOrmConfig: {
		driverOptions: {
			connection: process.env.NODE_ENV === 'development' ? {} : { ssl: { rejectUnauthorized: false } },
		},
		entities: [...entities],
		...connectionValues(),
		driver: PostgreSqlDriver,
		pool: { min: 2, max: 50 },
	}

then running the same query again works (notice 'cold-climate-development' exists)

{
    "data": {
        "organizations": [
            {
                "name": "fritsch-green-and-harber-llc",
                "id": "org_1RR1lEozCMv6yHMs"
            },
            {
                "name": "cold-climate-development",
                "id": "org_liq0Z0GHUJ044liS"
            }
        ]
    }
}

I realize this is possibly due to a bug in mikro-orm's parsing of the URL but just wanted to alert you to another example of the logging issue.

To Reproduce
Configure the MikroORM adapter with a clientUrl.

Expected behavior
Connection works, or a clear error message is created.

Actual behavior
pg says relation doesn't exist.

Additional context
https://graphweaver.slack.com/archives/D0730MYM74Z/p1726178289691349?thread_ts=1723672001.215299&cid=D0730MYM74Z

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant