You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
LiveQueryServer crashes when configured to run with Redis cacheAdapter #9432
error: RedisCacheAdapter error on get {"error":{}}
error: RedisCacheAdapter error on get {"error":{}}
An uncaught exception occurred: The client is closedStack Trace:
Error: The client is closed
at Commander._RedisClient_sendCommand (/parse-server/node_modules/@redis/client/dist/lib/client/index.js:510:31)
at Commander.commandsExecutor (/parse-server/node_modules/@redis/client/dist/lib/client/index.js:190:154)
at BaseClass.<computed> [as set] (/parse-server/node_modules/@redis/client/dist/lib/commander.js:8:29)
at RedisCacheAdapter.put (/parse-server/lib/Adapters/Cache/RedisCacheAdapter.js:85:24)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Expected Outcome
LiveQueryServer post update to client
Environment
Server
Parse Server version: 7.4.0-alpha.5
Local or remote host (AWS, Azure, Google Cloud, Heroku, Digital Ocean, etc): Azure
but that instance connect() is never called. The regular ParseServer does call connect() on its own instance of the cache when initializing the startup promises.
This used to work in earlier versions of parse-server, before we switched to redis 4 client as redis 4 requires the async connect() to be explicitly called before using the client, whereas redis 3 automatically called connect() if the client was not connected.
One simple fix would be to add initialization await this.cacheController.connect() here:
Activity
parse-github-assistant commentedon Nov 13, 2024
Thanks for opening this issue!
evtimmy commentedon Nov 13, 2024
I did debug the initialization of the server and saw that ParseLiveQueryServer creates its own cacheController instance:
parse-server/src/LiveQuery/ParseLiveQueryServer.js
Line 62 in 91f9aca
but that instance connect() is never called. The regular ParseServer does call connect() on its own instance of the cache when initializing the startup promises.
This used to work in earlier versions of parse-server, before we switched to redis 4 client as redis 4 requires the async connect() to be explicitly called before using the client, whereas redis 3 automatically called connect() if the client was not connected.
One simple fix would be to add initialization
await this.cacheController.connect()here:parse-server/src/LiveQuery/ParseLiveQueryServer.js
Lines 84 to 94 in 91f9aca
I'm just not clear on why we check this.subscriber.isOpen and if this connect() may be called multiple times, or only on startup?
Chilldev commentedon Jan 26, 2025
The crash is coming from:
parse-server/src/Adapters/PubSub/RedisPubSub.js
Lines 1 to 11 in 5ca0aa3
Connections do not have an error handler.
In my case it was happening when redis crashed unexpectdly or was unreachable.
I am not sure if this issue is related:
redis/node-redis#2624
I created a patch to listen to connection errors and the server is no longer crashing.
gcarpi commentedon Feb 13, 2025
Any update? I need this fix
parseplatformorg commentedon Feb 24, 2025
🎉 This change has been released in version 8.0.0-alpha.12
parseplatformorg commentedon Mar 12, 2025
🎉 This change has been released in version 7.5.0