Skip to content

fix(etcd): read and write keys as bytes, not text - #4023

Merged
datlechin merged 8 commits into
mainfrom
fix/etcd-key-bytes
Nov 4, 2026
Merged

datlechin merged 8 commits into
mainfrom
fix/etcd-key-bytes

Conversation

@datlechin

@datlechin datlechin commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Keep etcd keys, values and prefix range ends as bytes so reads, edits and deletes target the stored keys.
  • Preserve non-UTF-8 keys, leading byte order marks, invisible characters and keys starting with -- through generated commands.
  • Read command verbs literally and decode byte escapes only for key and value arguments, including when a newer plugin runs on an older app.
  • Enforce the app's read-only and delete limits on every command execution path.
  • Reject negative or overflowing page bounds in tagged range queries.
  • Pair with docs(databases): describe etcd byte keys and quoting docs#175.

Test plan

  • Byte-range and quote/parse regressions cover every byte, binary values, empty prefixes and Unicode edge characters.
  • Parser regressions cover literal verbs, released-host command rules, command tiers and read-only/delete limits.
  • Page-bound probe compiles the real driver parser and checks invalid bounds and valid boundary values.
  • Update QueryClassifierNonSqlTests.etcdDestructiveSubcommands and etcdReadSubcommands for the deliberate bare-verb rule; etcdQuotedVerbs now checks the quoted cases stay unknown and cannot execute.
  • After merging main, the app and etcd plugin build. All 286 selected tests pass: 212 hosted parser/classifier tests, 26 etcd core tests and 48 DuckDB core tests.
  • Project generation, manifest lint and plugin linkage checks pass after the merge. The earlier 10-case page-bound probe, docs and localization checks pass. The all-plugin build still lacks the local Dameng archive.

@datlechin datlechin added backport release/0.84 Merged into main; pick onto release/0.84 backport release/0.85 Merged into main; pick onto release/0.85 labels Nov 3, 2026
@datlechin
datlechin enabled auto-merge (squash) November 3, 2026 17:18
@datlechin datlechin removed backport release/0.84 Merged into main; pick onto release/0.84 backport release/0.85 Merged into main; pick onto release/0.85 labels Nov 3, 2026
@datlechin
datlechin disabled auto-merge November 3, 2026 18:22
@datlechin datlechin added backport release/0.84 Merged into main; pick onto release/0.84 backport release/0.85 Merged into main; pick onto release/0.85 labels Nov 3, 2026
@datlechin
datlechin enabled auto-merge (squash) November 3, 2026 19:16
@datlechin
datlechin merged commit 929e68a into main Nov 4, 2026
10 of 11 checks passed
@datlechin
datlechin deleted the fix/etcd-key-bytes branch November 4, 2026 08:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport release/0.84 Merged into main; pick onto release/0.84 backport release/0.85 Merged into main; pick onto release/0.85

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant