influxdata / influxdata/influxdb-client-python
Exception from backslash followed by space in field key
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 793
- フォーク
- 186
- 平均マージ
- 3時間 2分
- マージ済み PR(30日)
- 1
説明
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.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
Point.from_dict と to_line_protocol から始め、write が line protocol を InfluxDB に送信する前に、フィールドキーがどのようにエスケープされるかを追跡してください。issue にあるバックスラッシュとスペースのケースを再現し、シリアライズによって有効な line protocol が生成されるか、リクエストが送信される前に明確なエラーが発生することを確認してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- api
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100