Core: TableMetadata.Builder allows adding encryption keys to v1/v2 tables
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Leggi core/src/main/java/org/apache/iceberg/TableMetadata.java, soprattutto TableMetadata.Builder.addEncryptionKey e i controlli di versione vicini citati nell’issue. Aggiungi un controllo della versione del formato v3 che rifiuti l’aggiunta di chiavi di crittografia al di sotto di v3, poi esamina i test esistenti per gli aggiornamenti del builder di TableMetadata e aggiungi casi per il rifiuto in v1/v2 e l’accettazione in v3. Il lavoro è completato quando il builder applica la regola sulla versione, mentre la rimozione e il parsing restano permissivi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Apache Iceberg version
main (development)
Query engine
Other
Please describe the bug 🐞
encryption-keys is v3-only, but TableMetadata.Builder.addEncryptionKey doesn't check the format version. REST servers built on CatalogHandlers accept add-encryption-key from any client and write it into v1/v2 metadata.
Proposed fix
Reject in TableMetadata.Builder.addEncryptionKey below v3. This covers Java clients and REST servers, since both go through the builder. removeEncryptionKey and parsing should stay lenient so existing tables can be cleaned up.
Repro (REST fixture)
docker run -d --rm -p 8181:8181 apache/iceberg-rest-fixture
H='Content-Type: application/json'; U=localhost:8181/v1
curl -s -XPOST $U/namespaces -H "$H" -d '{"namespace":["ns"]}'
curl -s -XPOST $U/namespaces/ns/tables -H "$H" -d '{"name":"t","schema":{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false}]},"properties":{"format-version":"2"}}'
curl -s -XPOST $U/namespaces/ns/tables/t -H "$H" -d '{"requirements":[],"updates":[{"action":"add-encryption-key","encryption-key":{"key-id":"kek","encrypted-key-metadata":"a2V5"}}]}'
# 200, "format-version": 2 with "encryption-keys"
Existing version checks in TableMetadata.Builder
addSnapshot: requiresfirst-row-idon v3addSchemaInternal: rejects v3 types and non-null initial defaults below v3addPartitionSpecInternal: requires sequential IDs on v1
More context
Java's own writers don't check the version either (manifest list encryption), they rely on encryption.key-id being rejected on v1/v2 at create (#14668).
Other implementations:
- iceberg-go: rejects
- PyIceberg: rejects (apache/iceberg-python#4148)
Related:
- #18646: other format version checks missing in
TableMetadata.Builder - apache/iceberg-python#4156: same rules for PyIceberg
- #14403 / #14668: encryption properties on v1/v2, create only
- #17728: client-side format version checks on create
- #16353: encryption key cleanup in
TableMetadata
Willingness to contribute
- I can contribute a fix for this bug independently
- I would be willing to contribute a fix for this bug with guidance from the Iceberg community
- I cannot contribute a fix for this bug at this time
- Lingua principale
- Java
- Stelle
- 9.4k
- Fork
- 3.6k
- Merge medio
- 3g 17h
- PR unite (30g)
- 143
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
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 apache/iceberg
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Kafka: Filter empty strings and whitespace in IcebergSinkConfig stringToListForse già presa @mohamed-elbrik l’ha presa 16 giorni fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Parquet TIME_MILLIS statistics are not converted to microsecondsForse già presa @chenjian2664 l’ha presa 25 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Temporal transforms put pre-epoch timestamps at `.999999` into the previous unitForse già presa @gitedmond l’ha presa 32 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
apache/iceberg#18371 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
OpenAPI: Remove deprecated TrueExpression and FalseExpressionForse già presa @zhang-arvin l’ha presa 28 giorni fa. Apertaimprovement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/iceberg#18351 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/iceberg
Issue simili
-
hermes-queue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
chrisalunlloyd2-sudo/mindpalace#337 ·
I maintainer di solito rispondono entro 1 giorno
-
[Regression][98.0.0] Android I/flutter logs are automatically folded by FlutterConsoleFoldingAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
flutter/flutter-intellij#9221 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ucsb-cs156/proj-frontiers#844 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 74/100
AllTheMods/ATM10-Aeronautics#159 ·
I maintainer di solito rispondono entro 6 giorni
-
Update spring-ldap to 4.0.7Apertatype: dependency-upgrade
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
spring-projects/spring-security#20057 ·
I maintainer di solito rispondono entro 1 giorno