amazon-redshift-python-driver
amazon-redshift-python-driver copied to clipboard
BugFix: Add support for both IPv4 and IPv6 connections
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 intohostport
andaddress_family
. - Created a socket using the correct address family (
AF_INET
for IPv4 andAF_INET6
for IPv6). - Ensured that the socket is connected using the
hostport
which now correctly handles both address types.
- The method
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.