-
Bug Report
-
Resolution: None
-
L3 - Default
-
None
-
7.16.0
Environment (Required on creation):
Docker on Ubuntu
Description (Required on creation; please attach any relevant screenshots, stacktraces, log files, etc. to the ticket):
Camunda lost connection to MySQL after idle for 8 hours (default wait_timeout of MySQL). Once the connection is closed by MySQL, Camunda cannot restore it and eventually run into dead.
Steps to reproduce (Required on creation):
- docker-compose up -d;
- login to http://localhost:50100/camunda/app/cockpit/default/#/processes
- enter "Invoice Receipt"
- enter arbitrary ID
- you will find that everything is smooth (successful scenario)
- close current tab and wait for 6 minutes
- repeat from step 2 again and you will find error message prompted (An exception occurred in the persistence layer. Please check the server logs for a detailed message and the entire exception stack trace.)
- go to home and you will find 500 error
Observed Behavior (Required on creation):
Camunda prompt out error message on page and then throw 500 error on main page.
Expected behavior (Required on creation):
Camunda can still run without error.
Root Cause (Required on prioritization): MySQL closes the connection after idle for 8 hours and Camunda does not have mechanism to handle it.
Solution Ideas (Optional):
Hints (optional):
In order to make developer to test it more efficient, the --wait_timeout=300 command of MySQL service inside attached docker-compose.yml is set to 300 (5 minutes) (default is 28800 (8 hours)) so that you may let it idle for 5 minutes after startup and replay the error.
The error message says: "(An exception occurred in the persistence layer. Please check the server logs for a detailed message and the entire exception stack trace.)".
Do you see an error similar to this in the server log?
“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 54,607,614 milliseconds ago.The last packet sent successfully to the server was 54,607,614 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.”
How have you configured the DB url? Try:
mysql://db_user:db_user@localhost/mydb?autoReconnect=true
See: https://dev.mysql.com/doc/c-api/8.0/en/c-api-auto-reconnect.html