Fixed: Client hangs after executing PROXYSQL RESTART and attempt reconnection#5087
Fixed: Client hangs after executing PROXYSQL RESTART and attempt reconnection#5087renecannao merged 1 commit intov3.0from
Conversation
There was a problem hiding this comment.
Summary of Changes
Hello @rahim-kanji, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request addresses a client hang issue with PostgreSQL after a ProxySQL restart by improving the internal handling of PostgreSQL-related threads and global resources. The changes involve refactoring thread management within the PostgreSQL Host Group Manager, introducing a dedicated mutex for PostgreSQL global thread variables, correcting mutex usage in the PostgreSQL thread, and enhancing the overall shutdown procedure to ensure proper cleanup and deallocation of PostgreSQL components. These updates aim to prevent client hangs and facilitate smoother reconnection attempts.
Highlights
- Refactored PostgreSQL Thread Management: The management of PostgreSQL-related threads has been refactored within
PgSQL_HostGroups_Manager, removing directstd::threadmembers and their associatedjoin/deletecalls. This suggests a shift in how these threads are managed or their responsibilities within the system. - New Dedicated Mutex for PostgreSQL Threads: A new
pthread_mutex_t,ext_glopth_mutex, has been introduced and initialized. This mutex is specifically designed to protect global variables related to PostgreSQL threads, ensuring thread-safe access. - Corrected Mutex Usage in PgSQL Thread: The
PgSQL_Thread::refresh_variables()method now correctly uses the newext_glopth_mutexinstead of the MySQL-specificext_glomth_mutex. This resolves a potential synchronization issue by ensuring that PostgreSQL global thread variables are protected by the appropriate mutex. - Improved PostgreSQL Component Shutdown: The shutdown procedure in
main.cpphas been enhanced to properly deallocateGloPTH(PostgreSQL Thread Handler) andPgHGM(PostgreSQL Host Group Manager). This includes acquiring the newext_glopth_mutexforGloPTHcleanup and explicitly callingPgHGM->shutdown()before deletion, ensuring a cleaner and more robust shutdown process for PostgreSQL components.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Code Review
This pull request correctly addresses a potential client hang on ProxySQL restart by implementing a proper shutdown sequence for the PostgreSQL modules. The introduction of a dedicated mutex for the PostgreSQL thread handler (ext_glopth_mutex) and centralizing the shutdown logic in main.cpp are excellent improvements for robustness and preventing race conditions. The changes are logical and well-targeted. I have one suggestion to further improve the consistency and safety of the shutdown code.
1003b20 to
8d8577b
Compare
… released when ProxySQL shuts down or restarts.
|



Closes #5086