influxdata / influxdata/influxdb-client-python

Exception from backslash followed by space in field key

Ouverte
#660 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug
Langage dominant
Python
Étoiles
793
Forks
186
Merge moyen
3 h 2 min
PR mergées (30 j)
1

Description

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.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par Point.from_dict et to_line_protocol, puis suivez la manière dont la clé du champ est échappée avant que write n’envoie le line protocol à InfluxDB. Reproduisez le cas barre oblique inverse-espace de l’issue et assurez-vous que la sérialisation produise un line protocol valide ou lève une erreur claire avant l’envoi de la requête.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
api
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.