You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Changing host to use IPv6 causes an error.
In version 0.12.0 and in the latest main branch (0.13.0) the first error which is encountered has to do with the way the connection string is assembled after the host and port are parsed (IPv6 loopback address ::1 requires brackets in the connection string to disambiguate)
(venv) oclyke@maggotbrain influxdb3-python % export INFLUXDB_HOST=http://[::1]:8082
(venv) oclyke@maggotbrain influxdb3-python % env | grep INFLUX
INFLUXDB_HOST=http://[::1]:8082
INFLUXDB_TOKEN=apiv3_hD5DEQJMIN2B61WNNd3oOUb_f8asn5ta804WCNnToGDHP2zBszXD2fgjpzFhBbMK1hvVflRy7NNT1aKYkTFfoA
(venv) oclyke@maggotbrain influxdb3-python % python Examples/query_async.py
Traceback (most recent call last):
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/Examples/query_async.py", line 87, in <module>
asyncio.run(main())
~~~~~~~~~~~^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py", line 194, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/base_events.py", line 721, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/Examples/query_async.py", line 71, in main
client = InfluxDBClient3(
host=config.host,
...<2 lines>...
org=config.org
)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/__init__.py", line 177, in __init__
self._query_api = _QueryApi(connection_string=connection_string, token=token,
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
flight_client_options=flight_client_options,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proxy=kwargs.get("proxy", None), options=q_opts_builder.build())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/query/query_api.py", line 149, in __init__
self._flight_client = FlightClient(connection_string, **self._flight_client_options)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_flight.pyx", line 1405, in pyarrow._flight.FlightClient.__init__
File "pyarrow/_flight.pyx", line 635, in pyarrow._flight.Location.__init__
File "pyarrow/_flight.pyx", line 78, in pyarrow._flight.check_flight_status
File "pyarrow/error.pxi", line 92, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Cannot parse URI: 'grpc+tcp://::1:8082' due to syntax error at character '' (position 19)
After #132 this syntax error is resolved but there appears to be an underlying issue with PyArrow.
As far as I can tell PyArrow is relying on gRPC which supports IPv6 hosts just like this.
Here's the error I find after resolving the syntax error (by detecting IPv6 and adding square brackets around the IP address in the connection string)
(venv) oclyke@maggotbrain influxdb3-python % python Examples/query_async.py
Traceback (most recent call last):
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connection.py", line 198, in _new_conn
sock = connection.create_connection(
(self._dns_host, self.port),
...<2 lines>...
socket_options=self.socket_options,
)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/util/connection.py", line 85, in create_connection
raise err
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/util/connection.py", line 73, in create_connection
sock.connect(sa)
~~~~~~~~~~~~^^^^
ConnectionRefusedError: [Errno 61] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/Examples/query_async.py", line 87, in <module>
asyncio.run(main())
~~~~~~~~~~~^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py", line 194, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/asyncio/base_events.py", line 721, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/Examples/query_async.py", line 78, in main
write_data(client, measurement)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/Examples/query_async.py", line 52, in write_data
client.write(data)
~~~~~~~~~~~~^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/__init__.py", line 206, in write
self._write_api.write(bucket=database, record=record, **kwargs)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/client/write_api.py", line 377, in write
results = list(map(write_payload, payloads.items()))
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/client/write_api.py", line 375, in write_payload
return self._post_write(_async_req, bucket, org, final_string, payload[0])
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/client/write_api.py", line 520, in _post_write
return self._write_service.post_write(org=org, bucket=bucket, body=body, precision=precision,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
async_req=_async_req,
^^^^^^^^^^^^^^^^^^^^^
content_type="text/plain; charset=utf-8",
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**kwargs)
^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/service/write_service.py", line 60, in post_write
(data) = self.post_write_with_http_info(org, bucket, body, **kwargs) # noqa: E501
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/service/write_service.py", line 90, in post_write_with_http_info
return self.api_client.call_api(
~~~~~~~~~~~~~~~~~~~~~~~~^
'/api/v2/write', 'POST',
^^^^^^^^^^^^^^^^^^^^^^^^
...<12 lines>...
collection_formats={},
^^^^^^^^^^^^^^^^^^^^^^
urlopen_kw=kwargs.get('urlopen_kw', None))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/_sync/api_client.py", line 343, in call_api
return self.__call_api(resource_path, method,
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
path_params, query_params, header_params,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...<2 lines>...
_return_http_data_only, collection_formats,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_preload_content, _request_timeout, urlopen_kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/_sync/api_client.py", line 173, in __call_api
response_data = self.request(
method, url, query_params=query_params, headers=header_params,
post_params=post_params, body=body,
_preload_content=_preload_content,
_request_timeout=_request_timeout, **urlopen_kw)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/_sync/api_client.py", line 388, in request
return self.rest_client.POST(url,
~~~~~~~~~~~~~~~~~~~~~^^^^^
query_params=query_params,
^^^^^^^^^^^^^^^^^^^^^^^^^^
...<4 lines>...
body=body,
^^^^^^^^^^
**urlopen_kw)
^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/_sync/rest.py", line 311, in POST
return self.request("POST", url,
~~~~~~~~~~~~^^^^^^^^^^^^^
headers=headers,
^^^^^^^^^^^^^^^^
...<4 lines>...
body=body,
^^^^^^^^^^
**urlopen_kw)
^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/write_client/_sync/rest.py", line 220, in request
r = self.pool_manager.request(
method, url,
...<3 lines>...
headers=headers,
**urlopen_kw)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/_request_methods.py", line 143, in request
return self.request_encode_body(
~~~~~~~~~~~~~~~~~~~~~~~~^
method, url, fields=fields, headers=headers, **urlopen_kw
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/_request_methods.py", line 278, in request_encode_body
return self.urlopen(method, url, **extra_kw)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/poolmanager.py", line 443, in urlopen
response = conn.urlopen(method, u.request_uri, **kw)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connectionpool.py", line 841, in urlopen
retries = retries.increment(
method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]
)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/util/retry.py", line 449, in increment
raise reraise(type(error), error, _stacktrace)
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/util/util.py", line 39, in reraise
raise value
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connectionpool.py", line 787, in urlopen
response = self._make_request(
conn,
...<10 lines>...
**response_kw,
)
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connectionpool.py", line 493, in _make_request
conn.request(
~~~~~~~~~~~~^
method,
^^^^^^^
...<6 lines>...
enforce_content_length=enforce_content_length,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connection.py", line 445, in request
self.endheaders()
~~~~~~~~~~~~~~~^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/http/client.py", line 1331, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/http/client.py", line 1091, in _send_output
self.send(msg)
~~~~~~~~~^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/http/client.py", line 1035, in send
self.connect()
~~~~~~~~~~~~^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connection.py", line 276, in connect
self.sock = self._new_conn()
~~~~~~~~~~~~~~^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/venv/lib/python3.13/site-packages/urllib3/connection.py", line 213, in _new_conn
raise NewConnectionError(
self, f"Failed to establish a new connection: {e}"
) from e
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x107b53230>: Failed to establish a new connection: [Errno 61] Connection refused
For a sanity check I restored the host env variable to using IPv4 (retaining the changes from #132) and the example still works.
Now, getting a bit further off the beaten path, here's an error encountered from PyArrow under the environment of this repository with #132 applied.
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/__init__.py", line 317, in query_async
return await self._query_api.query_async(query=query,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/query/query_api.py", line 199, in query_async
raise e
File "/Users/oclyke/Documents/github/InfluxCommunity/influxdb3-python/influxdb_client_3/query/query_api.py", line 193, in query_async
_flight_reader = await loop.run_in_executor(None,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/nix/store/b0h8ixs9h67c1ap0fa9kncyvpdvvk05y-python3-3.12.8/lib/python3.12/concurrent/futures/thread.py", line 59, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/_flight.pyx", line 1708, in pyarrow._flight.FlightClient.do_get
File "pyarrow/_flight.pyx", line 68, in pyarrow._flight.check_flight_status
pyarrow._flight.FlightUnavailableError: Flight returned unavailable error, with message: failed to connect to all addresses;
last error: UNKNOWN: ipv6:%5B::1%5D:8082: Failed to connect to remote host: Connection refused.
gRPC client debug context: UNKNOWN:failed to connect to all addresses;
last error: UNKNOWN: ipv6:%5B::1%5D:8082: Failed to connect to remote host: Connection refused {created_time:"2025-04-29T21:08:47.45304-07:00", grpc_status:14}.
Client context: IOError: Server never sent a data message. Detail: Internal
Code sample to reproduce problem
This issue is reproduced using the example Examples/query_async.py when using an IPv6 loopback address as the host, i.e. export INFLUXDB_HOST=http://[::1]:8082
Depending on whether or not #132 is applied there will be one of two issues:
Without: a syntax error is encountered with the assembled connection string "grpc+tcp://::1:8082"
With: a connection error due to "connection refused"
Expected behavior
IPv6 ip addresses should be supported in the host string, e.g.
Specifications
0.12.0, 0.13.0-dev0, 0.13.0-dev0-with-patch-132
influxdb3 3.0.1, revision e684fc1a249d5dd8564462b85e0a49f49de6b109
IPv6 host strings do not work.
Working, with host using IPv4 (everything is standard)
Changing host to use IPv6 causes an error.
In version 0.12.0 and in the latest
main
branch (0.13.0) the first error which is encountered has to do with the way the connection string is assembled after the host and port are parsed (IPv6 loopback address::1
requires brackets in the connection string to disambiguate)After #132 this syntax error is resolved but there appears to be an underlying issue with PyArrow.
As far as I can tell PyArrow is relying on gRPC which supports IPv6 hosts just like this.
Here's the error I find after resolving the syntax error (by detecting IPv6 and adding square brackets around the IP address in the connection string)
For a sanity check I restored the host env variable to using IPv4 (retaining the changes from #132) and the example still works.
Now, getting a bit further off the beaten path, here's an error encountered from PyArrow under the environment of this repository with #132 applied.
Code sample to reproduce problem
This issue is reproduced using the example
Examples/query_async.py
when using an IPv6 loopback address as the host, i.e.export INFLUXDB_HOST=http://[::1]:8082
Depending on whether or not #132 is applied there will be one of two issues:
Expected behavior
IPv6 ip addresses should be supported in the host string, e.g.
Actual behavior
Connection error thrown after working through syntax error.
Additional info
No response
The text was updated successfully, but these errors were encountered: