Skip to content

feat: add Iceberg table tag management UI and API#4164

Open
fightBoxing wants to merge 51 commits intoapache:masterfrom
fightBoxing:feature/iceberg-tag-management
Open

feat: add Iceberg table tag management UI and API#4164
fightBoxing wants to merge 51 commits intoapache:masterfrom
fightBoxing:feature/iceberg-tag-management

Conversation

@fightBoxing
Copy link
Copy Markdown

Summary

  • Add createTag and deleteTag API endpoints for Iceberg tables (POST/DELETE /ams/v1/tables/catalogs/{catalog}/dbs/{db}/tables/{table}/tags)
  • Implement tag creation and deletion logic in MixedAndIcebergTableDescriptor using Iceberg TableMetadata API
  • Add CreateTagRequest DTO in TableController to replace unsafe Map<String, Object> deserialization
  • Add createTag / deleteTag service functions in frontend table.service.ts
  • Add Create Tag modal and Delete Tag confirmation in Selector.vue with snapshot ID and optional max-ref-age inputs
  • Extend FormatTableDescriptor interface and ServerTableDescriptor with tag management methods

Test Plan

  • Start Amoro server and open Web UI
  • Navigate to an Iceberg table → Tags tab
  • Click "Create Tag", fill in tag name and snapshot ID, confirm creation succeeds
  • Verify new tag appears in the tag list
  • Click delete icon on a tag, confirm deletion succeeds
  • Verify deleted tag is removed from the list
  • Verify Checkstyle: 0 violations
  • Verify Spotless: BUILD SUCCESS

zhoujinsong and others added 30 commits June 25, 2024 14:19
* [AMORO-2960] Support paimon s3 based catalog

* trigger ci
* [AMORO-2941] Complete translations for amoro dashboard

* [AMORO-2941] Format code

* [AMORO-2941] Optimize translations
…pache#2985)

* Add NOTICE-binary & LICENSE-binary files

* Remove useless plugin

* Rollback dependency change

* Fix rat plugin check rules
…ache#2976)

* Add check rules for iceberg and paimon shade guava clesses

* Remove duplicate checking rule
(cherry picked from commit 94b2298)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
(cherry picked from commit f5d2e85)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
(cherry picked from commit a550103)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
* Tag dangling delete snapshot commits

* make maintain commits public

* Re-gen table metastore java code via thrift

(cherry picked from commit 7066300)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…pache#3077)

(cherry picked from commit 3659610)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
Load log4j2.xml under AMORO_CONF_DIR first

(cherry picked from commit bc0034a)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…fore LeaderLatch closing (apache#3133)

[AMORO-3132][Bug]:High available service should not curator client before LeaderLatch closing apache#3132

(cherry picked from commit 79f1bea)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…ingful (apache#3129)

(cherry picked from commit 2bf68a1)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…tor` thread pool (apache#3142)

(cherry picked from commit a8b2ff5)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
)

[AMORO-3145] Filter out info log for CodecPool

Currently there will be many logs for (de)compressor from CodecPool, and
seems there is no other meaningful info log from this class, so we change
 the log level from CodecPool from info to warn to filter out these logs

This only affect the local optimizer, and user need to change the configuration
if they use flink/spark optimzier.

(cherry picked from commit b52f64d)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…che#3154)

Modify the implementation class of the thrift server

Co-authored-by: xiaosefeng <xiaosefeng@tencent.com>
Co-authored-by: Xavier Bai <xuba@apache.org>
(cherry picked from commit 8207efc)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
improvement: optimize log print

Co-authored-by: 王涛 <wangtao@HIH-L-10114.local>
(cherry picked from commit 7081bbc)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
* Avoid optimization state blocking in planning

* modify the optimizing status in memory

* fix conflict and rollback configuration

(cherry picked from commit 292111f)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
* [AMORO-3110] Avoid optimization status blocking in running

* format

* Ignore the exception when it occurs and do not perform a rollback

(cherry picked from commit 9877c20)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
extract error message in optimizers

(cherry picked from commit 5adbfbf)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
xxubai and others added 21 commits October 11, 2024 15:56
…er (apache#3223)

Do not throw exception when retry task in optimizer keeper

(cherry picked from commit a2bc71a)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
* Amoro-3196: Fix scheduling hungry issue

* Apply spotless

---------

Co-authored-by: majin.nathan <majin.nathan@bytedance.com>
(cherry picked from commit 5027abe)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
Fix wrong javadoc for TableRuntimeRefreshExecutor

(cherry picked from commit 1db63a6)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
fix typo in managing-optimizers.md

(cherry picked from commit fafb3f4)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
Fix optimizer keeper unregister npe

Co-authored-by: majin.nathan <majin.nathan@bytedance.com>
(cherry picked from commit 3e17628)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
apache#3175)

* rewrite multiple delete ids

* update comments

* replace shade guava with google

* replace `computeIfAbsent` with `putIfAbsent` to void projecting schema every time

(cherry picked from commit 6982a32)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…ss (apache#3229)

Rewrite pos delete files not written by optimizing

(cherry picked from commit a181281)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
(cherry picked from commit 1d9de04)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
…ed size for 0.7 (apache#3304)

* [AMORO-3303] Optimize the final tarball to keep it within the specified size for 0.7

* fixup! [AMORO-3303] Optimize the final tarball to keep it within the specified size for 0.7

* fixup! [AMORO-3303] Optimize the final tarball to keep it within the specified size for 0.7
…e#3088)

* Fix amoro image tag error

* Add latest tag configuration for docker image ci

* Fix latest tag configuration for dcoker image

* Fix latest tag configuration for dcoker image

* Fix latest tag configuration for dcoker image

* Fix latest tag configuration for dcoker image

* Fix latest tag configuration for dcoker image

* Fix latest tag configuration for dcoker image

* Rollback changes for test

(cherry picked from commit 0e8fa55)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
(cherry picked from commit 587270e)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
… in the filter (apache#3240)

* [AMORO-3239] Fix stack overflow caused by reading too many partitions in the filter

* [AMORO-3239] Add the "ignore-filter-partition-count" parameter

* move parameter "optimizer.ignore-filter-partition-count" to "self-optimizing.skip-filter-partition-count"

* move parameter "self-optimizing.skip-filter-partition-count" to "refresh-tables.max-pending-partition-count"
Exclude hadoop-client-api dependency

(cherry picked from commit b6a3549)
Signed-off-by: zhoujinsong <zhoujinsong0505@163.com>
- Backend: Add createTag/deleteTag API endpoints in TableController
- Backend: Add createTag/deleteTag interface in FormatTableDescriptor
- Backend: Implement tag operations in MixedAndIcebergTableDescriptor using Iceberg TableOperations
- Backend: Add unsupported exception for Paimon in PaimonTableDescriptor
- Backend: Register /tags routes in DashboardServer and ServerTableDescriptor
- Frontend: Add Create Tag dialog with tag name and snapshot ID inputs in Selector.vue
- Frontend: Add Delete Tag confirmation dialog in Selector.vue
- Frontend: Add createTag/deleteTag API calls in table.service.ts
- Frontend: Add i18n translations for tag operations in en.ts and zh.ts
- Fix: Use plain text input for snapshotId to avoid JS number precision loss for large IDs
- Replace Chinese Javadoc with English in FormatTableDescriptor and TableController
- Replace Chinese comments with English in table.service.ts and Selector.vue
- Replace Map<String, Object> unchecked cast with CreateTagRequest DTO in TableController
- Simplify createTag builder logic to avoid duplicate SnapshotRef construction
- Eliminate duplicate base.ref(tagName) call in deleteTag using local variable
@github-actions github-actions bot added type:docs Improvements or additions to documentation module:ams-server Ams server module type:infra type:build labels Apr 2, 2026
@czy006
Copy link
Copy Markdown
Contributor

czy006 commented Apr 3, 2026

@fightBoxing Thank you for your contribution. You need to trigger CI after rebasing the branch to proceed to the review stage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

module:ams-server Ams server module type:build type:docs Improvements or additions to documentation type:infra

Projects

None yet

Development

Successfully merging this pull request may close these issues.