Skip to content

Fixed: Client hangs after executing PROXYSQL RESTART and attempt reconnection#5087

Merged
renecannao merged 1 commit intov3.0from
v3.0_fix_issue_5086
Aug 29, 2025
Merged

Fixed: Client hangs after executing PROXYSQL RESTART and attempt reconnection#5087
renecannao merged 1 commit intov3.0from
v3.0_fix_issue_5086

Conversation

@rahim-kanji
Copy link
Collaborator

Closes #5086

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 direct std::thread members and their associated join/delete calls. 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 new ext_glopth_mutex instead of the MySQL-specific ext_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.cpp has been enhanced to properly deallocate GloPTH (PostgreSQL Thread Handler) and PgHGM (PostgreSQL Host Group Manager). This includes acquiring the new ext_glopth_mutex for GloPTH cleanup and explicitly calling PgHGM->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

  1. 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.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

… released when ProxySQL shuts down or restarts.
@sonarqubecloud
Copy link

@rahim-kanji rahim-kanji changed the title Fix psql client hang after PROXYSQL RESTART and attempt reconnection Fixed: Client hangs after executing PROXYSQL RESTART and attempt reconnection Aug 28, 2025
@renecannao renecannao merged commit 4252a69 into v3.0 Aug 29, 2025
26 of 161 checks passed
@noizu noizu added this to the Release 3.0.3 milestone Sep 30, 2025
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

Successfully merging this pull request may close these issues.

worker threads for postgresql are not terminated properly on PROXYSQL RESTART;

3 participants