amazon-redshift-python-driver icon indicating copy to clipboard operation
amazon-redshift-python-driver copied to clipboard

BugFix: Add support for both IPv4 and IPv6 connections

Open sparrovv opened this issue 7 months ago • 0 comments

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

  • [x] Local run of ./build.sh succeeds
  • [x] Code changes have been run against the repository's pre-commit hooks
  • [x] 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.

sparrovv avatar Jul 23 '24 07:07 sparrovv