Closed kamalnathlp closed 1 year ago
@kamalnathlp did you mange to solve this? I'm getting the same behavior here
Looking into this 👀
@kamalnathlp did you mange to solve this? I'm getting the same behavior here
Hey @marcos-instaviagem can you try to install https://github.com/jeremydaly/serverless-mysql/tree/resolve-fatal-error
in your package json and see if my change fixed your issue?
Also, can you specify your configuration so I can try and re-produce this issue using the same one?
@naorpeled I installed this branch on a test env here, I'll check the results and reply to you asap
i'm working on cloud functions (nodejs16) + mysql, the log of the error that I receive is this:
Error: Cannot enqueue Query after fatal error.
at Protocol._validateEnqueue (/workspace/node_modules/mysql/lib/protocol/Protocol.js:212:16)
at Protocol._enqueue (/workspace/node_modules/mysql/lib/protocol/Protocol.js:138:13)
at Connection.query (/workspace/node_modules/mysql/lib/Connection.js:198:25)
at /workspace/index.js:322:22
at runMicrotasks (<anonymous>)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
not 100% sure, but it appears that if any error occurs on the instance and the next execution (on the same instance) uses serverless-mysql, then the query is not executed and it throws this error. therefore, the query will only work when this instance is shut down and a new healthy one is up, all queries will crash during this period
@naorpeled I installed this branch on a test env here, I'll check the results and reply to you asap
i'm working on cloud functions (nodejs16) + mysql, the log of the error that I receive is this:
Error: Cannot enqueue Query after fatal error. at Protocol._validateEnqueue (/workspace/node_modules/mysql/lib/protocol/Protocol.js:212:16) at Protocol._enqueue (/workspace/node_modules/mysql/lib/protocol/Protocol.js:138:13) at Connection.query (/workspace/node_modules/mysql/lib/Connection.js:198:25) at /workspace/index.js:322:22 at runMicrotasks (<anonymous>) at processTicksAndRejections (node:internal/process/task_queues:96:5)
not 100% sure, but it appears that if any error occurs on the instance and the next execution (on the same instance) uses serverless-mysql, then the query is not executed and it throws this error
Hmmm, I see. Will aim to take a look at this sometime the next few days.
Will keep you posted
ok, so I monitored my function for a couple of hours and it looks like it solved this issue after I deployed this branch!
while checking logs of other functions I noticed that I also received this kind of error as well. do you know if this could be a similar type of error?
Error: ER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction
at Query.Sequence._packetToError (/workspace/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
at Query.ErrorPacket (/workspace/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
at Protocol._parsePacket (/workspace/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/workspace/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/workspace/node_modules/mysql/lib/protocol/Parser.js:43:10)
at Protocol.write (/workspace/node_modules/mysql/lib/protocol/Protocol.js:38:16)
at Socket.<anonymous> (/workspace/node_modules/mysql/lib/Connection.js:88:28)
at Socket.<anonymous> (/workspace/node_modules/mysql/lib/Connection.js:523:10)
at Socket.emit (events.js:198:13)
at Socket.EventEmitter.emit (domain.js:466:23)
while checking logs of other functions I noticed that I also received this kind of error as well. do you know if this could be a similar type of error?
Error: ER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction at Query.Sequence._packetToError (/workspace/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14) at Query.ErrorPacket (/workspace/node_modules/mysql/lib/protocol/sequences/Query.js:79:18) at Protocol._parsePacket (/workspace/node_modules/mysql/lib/protocol/Protocol.js:291:23) at Parser._parsePacket (/workspace/node_modules/mysql/lib/protocol/Parser.js:433:10) at Parser.write (/workspace/node_modules/mysql/lib/protocol/Parser.js:43:10) at Protocol.write (/workspace/node_modules/mysql/lib/protocol/Protocol.js:38:16) at Socket.<anonymous> (/workspace/node_modules/mysql/lib/Connection.js:88:28) at Socket.<anonymous> (/workspace/node_modules/mysql/lib/Connection.js:523:10) at Socket.emit (events.js:198:13) at Socket.EventEmitter.emit (domain.js:466:23)
I think that this is a bit different because this is something that seems more related to transactions and not initiating a connection. My guess is that we'd need to change something else in the lib's implementation to make this work.
I'll aim to take a further look at this in one of the next few days if that's alright.
sure, no problem! thanks for your support
On this case is a unique query with a multipleStatements model: a combined select and then an update query. Most of the time it works, but sometimes returns this mentioned error before.
connection_serverless.query(`SELECT * FROM table WHERE id = ?;
UPDATE table SET field=? WHERE id = ?; `,
Should it be transformed into a transaction model instead (separated queries) in order to reduce errors?
sure, no problem! thanks for your support
On this case is a unique query with a multipleStatements model: a combined select and then an update query. Most of the time it works, but sometimes returns this mentioned error before.
connection_serverless.query(`SELECT * FROM table WHERE id = ?; UPDATE table SET field=? WHERE id = ?; `,
Should it be transformed into a transaction model instead (separated queries) in order to reduce errors?
Hmm, I think the error is more related to a non rollbacked/committed transaction, and not this specific query, so I'd make sure that all transactions are properly closed.
Hey, i'm closing this issue as completed for now. Feel free to ping me if you need anything else.
should I keep using that branch tree or did you merge it into a release? thanks
should I keep using that branch tree or did you merge it into a release? thanks
Hey, I haven't merged the change yet, need to do a bit more investigation. Will get to it in few days and ping you when I reach a conclusion. I hope that's okay
We are getting the PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR issue, i have checked the mysql active connections, it is used below 10%. But still we are getting the issue.