influxdata / influxdata/influxdb-client-python

Exception from backslash followed by space in field key

Abierto
#660 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug
Lenguaje dominante
Python
Estrellas
793
Forks
186
Merge medio
3 h 2 min
PR fusionados (30 d)
1

Descripción

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.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Empieza con Point.from_dict y to_line_protocol; después, sigue el proceso de escape de la clave del campo antes de que write envíe el line protocol a InfluxDB. Reproduce el caso de barra invertida y espacio del issue y asegúrate de que la serialización produzca un line protocol válido o genere un error claro antes de enviar la solicitud.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
api
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
48/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.