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

Exception from backslash followed by space in field key #660

Open
thormick opened this issue Jun 26, 2024 · 0 comments
Open

Exception from backslash followed by space in field key #660

thormick opened this issue Jun 26, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@thormick
Copy link

thormick commented Jun 26, 2024

Specifications

  • Client Version: 1.44.0
  • InfluxDB Version: 2.7.6
  • Platform: Linux

Code sample to reproduce problem

#!/usr/bin/env python3
from os import getenv

from influxdb_client import InfluxDBClient
from influxdb_client.client.write.point import Point
from influxdb_client.client.write_api import SYNCHRONOUS


influx_db_client = InfluxDBClient(
    url="http://localhost:8086",
    token=getenv("TEST_TOKEN"),
    org=getenv("TEST_ORG"),
)

write_api = influx_db_client.write_api(write_options=SYNCHRONOUS)

broken_line_protocol_line = Point.from_dict(
        {
            "measurement": "test-measurement-1",
            "tags": {"test-tag-key-X": "test-tag-value-X"},
            "fields": {r"this doesnt \ work": 666},
        }
    ).to_line_protocol()

result = write_api.write(
    getenv("TEST_BUCKET", "missing"),
    getenv("TEST_ORG"),
    broken_line_protocol_line,
)

print(f"result: {result}")

Expected behavior

Either that the data is accepted, or that I get a clear error message that a field keys with a single backslash followed by space is unsupported by Influx. I particularly expect that I get an exception from to_line_protocol rather than that it returns something that is invalid according to Influx and that Influx rejects with "invalid field format".

This problem also arises if giving the point object directly to write rather than going via to_line_protocol, this approach just makes it clear that it can return an invalid line protocol string.

Actual behavior

influxdb_client.rest.ApiException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json; charset=utf-8', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': 'v2.7.6', 'X-Platform-Error-Code': 'invalid', 'Date': 'Wed, 26 Jun 2024 13:28:23 GMT', 'Content-Length': '152'})
HTTP response body: {"code":"invalid","message":"unable to parse 'test-measurement-1,test-tag-key-X=test-tag-value-X this\\ doesnt\\ \\\\ work=666i': invalid field format"}

If I remove either the slash followed by space or the space, it works.

Additional info

AFAIK Influx doesn't support field keys that have a single backslash followed by a space? I intend to replace backslash-space with double-backslash-space on my end for backwards compatibility either way, but this tripped up four people at work when they upgraded and something that used to work (albeit by subtly turning a single into a double backslash) instead blew up with an exception.

influxdb-client 1.19.0 doesn't report an error and the values end up in the database, but it ends up with double backslashes for fields and tags.

@thormick thormick added the bug Something isn't working label Jun 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant