Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix connection not release bug #353

Merged
merged 6 commits into from
Aug 12, 2024

Conversation

ghjhhyuyuy
Copy link
Contributor

What type of PR is this?

  • bug
  • feature
  • enhancement

What problem(s) does this PR solve?

Issue(s) number:

Description:

When authenticate to graphd failed,the status of the connection has not been modified, resulting in the inability to continue using it in the future.I encountered this issue and thinking this commit can fix it.

How do you solve it?

Modify connection status is_used to False

Special notes for your reviewer, ex. impact of this fix, design document, etc:

@CLAassistant
Copy link

CLAassistant commented Jun 7, 2024

CLA assistant check
All committers have signed the CLA.

wey-gu
wey-gu previously approved these changes Jun 13, 2024
Copy link
Contributor

@wey-gu wey-gu left a comment

Choose a reason for hiding this comment

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

Great catch and fix, thanks for the contribution!

@wey-gu wey-gu requested review from Nicole00 and HarrisChu July 15, 2024 07:37
@@ -171,6 +171,8 @@ def authenticate(self, user_name, password):
try:
resp = self._connection.authenticate(user_name, password)
if resp.error_code != ErrorCode.SUCCEEDED:
self._connection.is_used = False
Copy link
Contributor

Choose a reason for hiding this comment

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

the transport is not closed, prefer self.close()

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is it necessary to close the connection here? I tend to release the connection back to the connection pool and wait for the next authenticate

@@ -171,6 +171,8 @@ def authenticate(self, user_name, password):
try:
resp = self._connection.authenticate(user_name, password)
if resp.error_code != ErrorCode.SUCCEEDED:
self._connection.is_used = False
self._connection = None
Copy link
Contributor

Choose a reason for hiding this comment

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

Authenticate failed does not mean the connection is broken, Why set _connection = None, we can just set _connection.is_used as False.

Let's see the connection pool how to call authenticate function:

    def get_session(self, user_name, password, retry_connect=True):
        """get session

        :param user_name: the user name to authenticate graphd
        :param password: the password to authenticate graphd
        :param retry_connect:
        :return: Session
        """
        connection = self.get_connection()
        if connection is None:
            raise NotValidConnectionException()
        try:
            auth_result = connection.authenticate(user_name, password)
            return Session(connection, auth_result, self, retry_connect)
        except Exception:
            raise

the auth operation is undependent with connection, so auth failed does not Influence the connection unless there are IO Error.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I refer to the code under release function of session.py. I think you may right, self._connection.is_used = False is enought here

Copy link
Contributor

Choose a reason for hiding this comment

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

Done as agreed.

@codecov-commenter
Copy link

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

Attention: Patch coverage is 0% with 2 lines in your changes missing coverage. Please review.

Project coverage is 75.36%. Comparing base (8560e0e) to head (2923348).

Files Patch % Lines
nebula3/gclient/net/Connection.py 0.00% 2 Missing ⚠️

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #353   +/-   ##
=======================================
  Coverage   75.36%   75.36%           
=======================================
  Files          19       19           
  Lines        2724     2724           
=======================================
  Hits         2053     2053           
  Misses        671      671           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@wey-gu
Copy link
Contributor

wey-gu commented Aug 9, 2024

@HarrisChu @Nicole00 kindly check the change now, what do you think?

@Nicole00 Nicole00 merged commit 6183064 into vesoft-inc:master Aug 12, 2024
10 checks passed
wey-gu added a commit that referenced this pull request Aug 12, 2024
* fix connection not release bug

* Address Nicole00's comment as agreed in review

---------

Co-authored-by: Wey Gu <[email protected]>
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.

6 participants