[Bug] copy-file --tag replaces a file's whole tag set, and --to-stdout ignores --layer-id
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
Direzione di ricerca
Start at the fs copy-file command entry point and trace how repeated --tag values are handled for an existing remote path, then compare --to-stdout with the existing --to-local layer-id validation. Add regression coverage for preserving or explicitly rejecting existing tags and for refusing or honoring --layer-id on stdout; done means neither request silently loses data or returns exit 0 with the wrong result.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
ti version
0.2.7 (6c950c77a601d0d55394c4b2f64483ae93d522db, 2026-09-27), bundled ti-drive9 companion 60b63d6
Command family
fs
Operating system and architecture
macOS 14.6, darwin/arm64, for the tag behaviour. Ubuntu, linux/amd64, for the layer behaviour.
Summary
Two copy-file behaviours lose data or return wrong data, and both exit 0 with no warning. A
caller has no signal that anything went wrong.
Covers observations 13 and 9 from a review of the TiDB Cloud Filesystem documentation.
Problem 1: --tag replaces the existing tags instead of adding to them
Command
ti fs copy-file --from-local ./a.txt --to-remote /a.txt --tag stage=review --tag owner=alice
ti fs copy-file --from-local ./a.txt --to-remote /a.txt --tag team=docs
Reproduction steps
- Create a file system and upload a file with two tags.
- Upload to the same remote path again, supplying one different tag.
- Inspect the tags with
describe-file, and search for the original tag withfind-files.
Expected behavior
Either the new tag is added to the existing set, or the command refuses and says that
supplying --tag on an existing path will discard the current tags.
Actual behavior
The original tags are discarded silently, at exit 0. Searches that relied on them stop
matching.
$ ti fs copy-file --from-local ./a.txt --to-remote /a.txt --tag stage=review --tag owner=alice
exit=0
tags: {'owner': 'alice', 'stage': 'review'}
$ ti fs copy-file --from-local ./a.txt --to-remote /a.txt --tag team=docs
exit=0
tags: {'team': 'docs'}
$ ti fs find-files --path / --tag stage=review --output text
PATH NAME SIZE SCORE
Related observations from the same testing:
- Omitting
--tagon the re-upload preserves the existing tags, so the loss happens only
when--tagis supplied. --tag ""is accepted at exit 0 and ignored, so there is no way to clear tags.- Re-uploading over an existing path succeeds without
--overwrite. - Of all
ti fssubcommands, onlycopy-file,create-layer, andfind-filesaccept
--tag. Nothing tags a file that already exists, so re-uploading is the only way to change
a tag, which is exactly the path that discards the others.
Problem 2: --to-stdout ignores --layer-id and returns base content
Command
ti fs copy-file --from-remote /file.txt --to-stdout --layer-id "<layer-id>"
Reproduction steps
- Create a file whose base content and layer content differ.
- Read it with
--to-stdout --layer-id <layer-id>. - Compare with the same read using
--to-local.
Expected behavior
Either the layer content is returned, or the command refuses, as it already does for
--to-local.
Actual behavior
The base content is printed at exit 0. The layer selection is silently discarded. The same
request with --to-local is refused, with --layer is only supported for uploads or remote-to-remote copy targets, so the rejection exists but does not cover the stdout path.
A caller reading a layer this way receives the wrong data and is told nothing.
Why these are grouped
Both are copy-file returning success while quietly doing something other than what was
asked. Problem 1 destroys metadata, problem 2 returns the wrong bytes. Either would be caught
immediately if the command refused instead.
Sensitive-data confirmation
No API keys, file system or Vault tokens, database credentials, connection strings, SQL, or
customer data appear above. File systems used for these measurements were deleted afterwards.
- Lingua principale
- Go
- Stelle
- 3
- Fork
- 4
- Merge medio
- 3g 19h
- PR unite (30g)
- 5
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di tidbcloud/ti-cli
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di tidbcloud/ti-cli
Issue simili
-
area: metrics area: tracing contribfest enhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
open-telemetry/opentelemetry-ebpf-instrumentation#4188 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
blinklabs-io/dingo#6074 ·
I maintainer di solito rispondono entro 1 giorno
-
kind/bug remote
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
podman-container-tools/podman#30143 ·
I maintainer di solito rispondono entro 1 giorno
-
component/mesheryctl kind/bug language/go
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
meshery/meshery#22993 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100