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

BugFix: Add support for both IPv4 and IPv6 connections #229

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

sparrovv
Copy link

@sparrovv sparrovv commented Jul 23, 2024

Description

At my company we started using VPN that only works over IPv6. Since that we started seeing below errors when connecting:

 08:57:16 Encountered an error: Database Error ('communication error', gaierror(8, 'nodename nor servname provided, or not known'))

Mainly played around and used chat GPT to make the above changes, so please let me know if they look fine with you.

Details

  • Updated the method __get_host_address_info to support returning both IPv4 and IPv6 address information.

    • The method now returns a tuple containing the address (sockaddr) and the address family (af).
    • This allows the caller to handle the address appropriately based on its type.
  • Modified the initializer to handle both IPv4 and IPv6 addresses.

    • The method __get_host_address_info is called and its response is unpacked into hostport and address_family.
    • Created a socket using the correct address family (AF_INET for IPv4 and AF_INET6 for IPv6).
    • Ensured that the socket is connected using the hostport which now correctly handles both address types.

Motivation and Context

Testing

I've tried to connect both on new and old VPN and this snipped doesn't return an error anymore:

password = os.environ.get("REDSHIFT_PASSWORD")
user = os.environ.get("REDSHIFT_USER")
databse = os.environ.get("REDSHIFT_DATABASE")
host = os.environ.get("REDSHIFT_HOST")

conn = redshift_connector.connect(
    host=host,
    database=databse,
    user=user,
    password=password,
)

cursor: redshift_connector.Cursor = conn.cursor()
cursor.execute("select 1")
result: tuple = cursor.fetchall()
print(result)
cursor.close()

Screenshots (if appropriate)

Types of changes

  • Bug fix (non-breaking change which fixes an issue)

Checklist

  • Local run of ./build.sh succeeds
  • Code changes have been run against the repository's pre-commit hooks
  • Commit messages follow Conventional Commit Specification
  • I have read the README document
  • I have added tests to cover my changes
  • I have run all unit tests using pytest test/unit and they are passing.
  • By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

- Updated the method `__get_host_address_info` to support returning both IPv4 and IPv6 address information.
  - The method now returns a tuple containing the address (sockaddr) and the address family (af).
  - This allows the caller to handle the address appropriately based on its type.

- Modified the initializer to handle both IPv4 and IPv6 addresses.
  - The method `__get_host_address_info` is called and its response is unpacked into `hostport` and `address_family`.
  - Created a socket using the correct address family (`AF_INET` for IPv4 and `AF_INET6` for IPv6).
  - Ensured that the socket is connected using the `hostport` which now correctly handles both address types.
@sparrovv sparrovv marked this pull request as draft July 25, 2024 13:04
@sparrovv sparrovv mentioned this pull request Jul 25, 2024
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.

1 participant