)]}'
{
  "log": [
    {
      "commit": "acf8ef47a3d9305ef217399a9aeb8c6d312bbe75",
      "tree": "243a1133abb93f3046cbf5213bfcbe6484e13c65",
      "parents": [
        "c812511fb0f9a969604c6b3a8c082062b696bb6d"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Thu Jun 11 17:16:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 17:16:56 2026 +0800"
      },
      "message": "[AMORO-4246] Refactor process data expiring via ProcessFactory plugin (#4247)\n\n* Refactor process data expiring via ProcessFactory plugin\n\n* fixup\n\n* fixup\n\n* fixup\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "c812511fb0f9a969604c6b3a8c082062b696bb6d",
      "tree": "6aae6f7a0801162b5adb43fc16c3b8345d2661b0",
      "parents": [
        "4ed2e91e3f70f3f3c0f8ca2b0cda5e187608041e"
      ],
      "author": {
        "name": "somaz",
        "email": "112675579+somaz94@users.noreply.github.com",
        "time": "Thu Jun 11 18:11:22 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 17:11:22 2026 +0800"
      },
      "message": "[AMORO-4242][Helm] Add Gateway API HTTPRoute support to the Amoro chart (#4243)\n\nSigned-off-by: somaz \u003cgenius5711@gmail.com\u003e"
    },
    {
      "commit": "4ed2e91e3f70f3f3c0f8ca2b0cda5e187608041e",
      "tree": "5b7e1c1e8ea355868db6810171c15ee84f8fbe01",
      "parents": [
        "d8f379346fcc8eb899808fbf2d41d39009b6b4ac"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Tue Jun 09 17:04:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 17:04:59 2026 +0800"
      },
      "message": "[AMORO-4236]  Splitting the “Optimizing” tab into the “Optimizing” tab,“Cleanup” tab and “Profiling” tab (#4238)\n\n* Add Maintenance tab for table process management\n\n* fix optimizing types in PaimonTableDescriptor\n\n* Refactor OPTIMIZING tab from OPTIMIZING to OPTIMIZING/CLEANUP/PROFILING tab\n\n* Replace static resolveCategoryTypes/matchProcessCategory with instance method getProcessTypesByCategory, moving routing logic into each descriptor.\n\n* fixup style\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "d8f379346fcc8eb899808fbf2d41d39009b6b4ac",
      "tree": "69d2319f446b04e64a9d1b7db3b900610c9daedb",
      "parents": [
        "be6663bcfa34eb10a91899480c33078a9a499469"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Thu May 28 14:56:34 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 13:56:34 2026 +0800"
      },
      "message": "[Hotfix] Force ReachableFileCleanup when snapshots exist outside main ancestry (#4231)\n\n[optimizer] Force reachable cleanup when snapshots exist outside main ancestry\n\nIceberg\u0027s auto-selected IncrementalFileCleanup can silently truncate its\nancestor walk when a parent snapshot is missing, deleting data files the\ncurrent snapshot still references. Force the safe ReachableFileCleanup only\nwhen snapshots exist outside the main ancestry; healthy tables are unchanged.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "be6663bcfa34eb10a91899480c33078a9a499469",
      "tree": "fd15588819276f355b7e05f262651c30e4a2114d",
      "parents": [
        "99fcc08893c3dd8a8340f9d05124e70c48adf1d5"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Mon May 25 15:00:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 15:00:28 2026 +0800"
      },
      "message": "[AMORO-4229] Refactor synchronizing Hive tables process via ProcessFactory plugin (#4230)\n\n* Refactor synchronizing Hive tables process via ProcessFactory plugin\n\n* Adding table format check\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "99fcc08893c3dd8a8340f9d05124e70c48adf1d5",
      "tree": "f9f3b175113780205888295614a0f7c8ce2418b0",
      "parents": [
        "23b0ab98ef4a07b60a7e4637692fb582fe8e8ca8"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Fri May 22 10:53:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 10:53:56 2026 +0800"
      },
      "message": "[AMORO-4227] Refactor auto-creating iceberg tags via ProcessFactory plugin (#4228)\n\nRefactor auto-creating iceberg tags via ProcessFactory plugin\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "23b0ab98ef4a07b60a7e4637692fb582fe8e8ca8",
      "tree": "d0f9405f862b20697459bbf73989e313b6e8d15d",
      "parents": [
        "e75b4a0b3cdba96a24ca7af1cd86833a1167dc99"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Wed May 20 14:57:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 14:57:19 2026 +0800"
      },
      "message": "[AMORO-4217] Clean up invalid code and parameters left over from the snapshot-expiring refactoring (#4226)\n\n* Remove unused code\n\n* Add assertions for containers in JacksonUtilTest\n\n* Clean up JacksonUtilTest by removing blank line\n\nRemoved unnecessary blank line in JacksonUtilTest.\n\n* Remove unnecessary newline in jacksonTest method\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "e75b4a0b3cdba96a24ca7af1cd86833a1167dc99",
      "tree": "dcadb7a31dbf522f3395771daa9b3a466367f83f",
      "parents": [
        "467930937fde7c2b3a6e7ef5e4f479104997872b"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Wed May 20 10:51:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 10:51:31 2026 +0800"
      },
      "message": "[AMORO-4186] Add support for Parquet row-group merging in IcebergRewriteExecutor (#4188)\n\n* Add support for Parquet row-group merging in IcebergRewriteExecutor\n\n* Enhance Parquet row-group merge support for Iceberg V2 tables and add version checks\n\n* Add cleanup for orphaned merged output files in Parquet row-group merge\n\n* Refactor ParquetFileMergeRunner to simplify ParquetWriter initialization\n\n* Implement Parquet schema context preparation for row-group merging in IcebergRewriteExecutor\n\n* Add minimum average row-group size threshold for Parquet row-group merge\n\n* fixup\n\n* fixup style\n\nRemoved unnecessary line breaks in the class documentation.\n\n* fixup style\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "467930937fde7c2b3a6e7ef5e4f479104997872b",
      "tree": "353f0c61d7fe452b7548417b1222e504341496d8",
      "parents": [
        "38ef38134d54a7381a351b4f17cba42a6c5356ac"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Tue May 19 21:32:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 21:32:16 2026 +0800"
      },
      "message": "[hotfix] Unify action names, pool names, and constants for SnapshotsExpiringProcess and OrphanFilesCleaningProcess (#4225)\n\nUnify action names, pool names, and constants for SnapshotsExpiringProcess and OrphanFilesCleaningProcess\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "38ef38134d54a7381a351b4f17cba42a6c5356ac",
      "tree": "76096727b35ceeb299320efb5e37bfffd155c76b",
      "parents": [
        "1d4bc38be54604ed2b73c7632864c498a9621d02"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Tue May 19 15:36:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 15:36:26 2026 +0800"
      },
      "message": "[AMORO-4215] Refactor data expiring via ProcessFactory plugin (#4218)\n\n* Refactor DataExpiringExecutor via ProcessFactory plugin\n\n# Conflicts:\n#\tamoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java\n#\tamoro-ams/src/main/java/org/apache/amoro/server/process/iceberg/IcebergProcessFactory.java\n\n# Conflicts:\n#\tamoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java\n#\tamoro-ams/src/main/java/org/apache/amoro/server/process/iceberg/IcebergProcessFactory.java\n#\tamoro-ams/src/main/java/org/apache/amoro/server/table/DefaultTableRuntime.java\n#\tamoro-ams/src/main/java/org/apache/amoro/server/table/cleanup/CleanupOperation.java\n#\tamoro-ams/src/test/java/org/apache/amoro/server/process/iceberg/TestIcebergProcessFactory.java\n#\tamoro-ams/src/test/java/org/apache/amoro/server/scheduler/inline/PeriodicTableSchedulerTestBase.java\n#\tamoro-ams/src/test/java/org/apache/amoro/server/scheduler/inline/TestPeriodicTableSchedulerCleanup.java\n#\tamoro-common/src/test/java/org/apache/amoro/process/TestLocalExecutionEngine.java\n#\tdist/src/main/amoro-bin/conf/plugins/execute-engines.yaml\n#\tdist/src/main/amoro-bin/conf/plugins/process-factories.yaml\n#\tdocs/admin-guides/deployment.md\n#\tdocs/configuration/ams-config.md\n\n* Add recover logic\n\n* Fix logging message formatting in DataExpiringProcess\n\n* Fix data expiration property name in documentation\n\nCorrected the property name from \u0027expire-data\u0027 to \u0027data-expiration\u0027 in the documentation.\n\n* Update using-tables.md\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "1d4bc38be54604ed2b73c7632864c498a9621d02",
      "tree": "60828d2fce09b585c5e1a3d96009c3945e5ea226",
      "parents": [
        "cba754f5994341e5a9da445c67843e4469f20217"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Tue May 19 11:13:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 11:13:16 2026 +0800"
      },
      "message": "[AMORO-4223][ams] Fix AMS startup crash when recovering Iceberg maintenance processes (#4224)\n\nIcebergProcessFactory.recover() was a stub that unconditionally threw\nRecoverProcessFailedException. Since ProcessService.recoverProcesses()\nhad no per-record error handling, any SUBMITTED/RUNNING Iceberg\nexpire-snapshots or clean-orphan-files record made AMS fail to start and\nenter a crash loop with no automatic recovery.\n\nChanges:\n- Implement IcebergProcessFactory.recover(): dispatch by the persisted\n  action and rebuild SnapshotsExpiringProcess / OrphanFilesCleaningProcess\n  bound to the local engine. Both are stateless, idempotent one-shot local\n  maintenance tasks, so re-running them on recovery is safe.\n- Harden ProcessService.recoverProcesses(): recover each record in its own\n  try/catch; on failure log it, mark the record FAILED and skip it so a\n  single un-recoverable record can no longer abort the whole AMS startup.\n- Add Action.toString() returning the action name so diagnostic logs print\n  a readable name instead of org.apache.amoro.Action@hash.\n- Add unit tests for IcebergProcessFactory.recover() and Action.toString(),\n  and a regression test covering the recoverProcesses() fail-safe path.\n\nCo-authored-by: lintingbin \u003clintingbin31@gmail.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e"
    },
    {
      "commit": "cba754f5994341e5a9da445c67843e4469f20217",
      "tree": "0e9e9905ef3fb3f4648a8853672062861d886de2",
      "parents": [
        "22092632f80badbee584bd9f920e853a1daf9734"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Tue May 19 11:11:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 11:11:08 2026 +0800"
      },
      "message": "[AMORO-4220] [Improvement] Support BETWEEN and reversed comparison SQL filters in ExpressionUtil. (#4221)\n\n[AMORO-4420] [Improvement] Support BETWEEN and reversed comparison SQL filters in ExpressionUtil."
    },
    {
      "commit": "22092632f80badbee584bd9f920e853a1daf9734",
      "tree": "4f70be1840c299aebc56b1ee931fd1da066954b9",
      "parents": [
        "0c5d3d84c6ba544adb10bdd4d4893de489e3dd4b"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Tue May 19 11:09:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 11:09:06 2026 +0800"
      },
      "message": "[Hotfix] Update release validation instructions to use ./mvnw for building (#4222)\n\nUpdate release validation instructions to use ./mvnw for building"
    },
    {
      "commit": "0c5d3d84c6ba544adb10bdd4d4893de489e3dd4b",
      "tree": "c1db568594b429a9ad7368fe8d18e3e75caefd66",
      "parents": [
        "75dd6570c0d8125bf892a2747342a16df089351d"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Tue May 19 10:24:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 10:24:53 2026 +0800"
      },
      "message": "[AMORO-4216] Refactor dangling-delete-files-cleaning via ProcessFactory plugin (#4214)\n\n* Refactor dangling-delete-files-cleaning via ProcessFactory plugin\n\n# Conflicts:\n#\tamoro-ams/src/main/java/org/apache/amoro/server/AmoroServiceContainer.java\n#\tamoro-ams/src/main/java/org/apache/amoro/server/process/iceberg/IcebergProcessFactory.java\n#\tamoro-ams/src/main/java/org/apache/amoro/server/scheduler/inline/InlineTableExecutors.java\n\n* Fix IcebergActions init failure by increasing MAX_NAME_LENGTH to 32\n\n* rename action to clean-dangling-delete-files to fix pool tag mismatch\n\n* Fix: LocalProcess exceptions were swallowed, preventing state from being updated to FAILED\n\nProblem Analysis:\n- In DanglingDeleteFilesCleaningProcess, SnapshotsExpiringProcess, and OrphanFilesCleaningProcess, exceptions in the run() method were caught but not re-thrown\n- This caused LocalExecutionEngine.ProcessHolder.onComplete() to never detect failures\n- Process status was always set to SUCCESS even when execution actually failed\n\nFix:\n- Add  in the catch block to re-throw exceptions\n- Keep existing logging for troubleshooting\n- Ensure exceptions properly propagate to ProcessHolder so status is correctly updated to FAILED\n\nModified Files:\n- amoro-ams/src/main/java/.../DanglingDeleteFilesCleaningProcess.java\n- amoro-ams/src/main/java/.../SnapshotsExpiringProcess.java\n- amoro-ams/src/main/java/.../OrphanFilesCleaningProcess.java\n\n* Fix logging message for dangling delete files error\n\n* Fix formatting of class documentation comment\n\n* fixup style\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "75dd6570c0d8125bf892a2747342a16df089351d",
      "tree": "3dd86c9138f531aac885ea61a6612504594427c9",
      "parents": [
        "cf8ff05d72c67353fa8a76d1d73437abc3043ea7"
      ],
      "author": {
        "name": "WenLingzhang",
        "email": "1298877813@qq.com",
        "time": "Thu May 14 15:07:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 15:07:50 2026 +0800"
      },
      "message": "[AMORO-4208] Refactor orphan-files-cleaning via ProcessFactory plugin (#4209)\n\n* Refactor orphan-files-cleaning via ProcessFactory plugin\n\n# Conflicts:\n#\tamoro-common/src/test/java/org/apache/amoro/process/TestLocalExecutionEngine.java\n\n* Remove unused orphan file cleaning configs and inline executor\n\n* Add process factory and execute engine configuration docs\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "cf8ff05d72c67353fa8a76d1d73437abc3043ea7",
      "tree": "5c2404c815e2178def5fab736a59569250f7bacf",
      "parents": [
        "4d861516082a4d1cfa36c6a723a03f96157c84c3"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Thu May 07 16:07:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 16:07:23 2026 +0800"
      },
      "message": "[AMORO-4203][optimizer-common] Migrate tests from JUnit 4 to JUnit 5 (#4204)\n\nMigrate the 5 test files in amoro-optimizer-common to JUnit Jupiter:\nOptimizerTestBase, TestOptimizer, TestOptimizerToucher, TestOptimizerExecutor,\nTestOptimizerConfig.\n\nOptimizerTestBase no longer uses @ClassRule on TestAms (which still extends\nExternalResource until the closing PR of #4203). Its public before()/after()\nare invoked from @BeforeAll/@AfterAll instead, which preserves the original\nlifecycle without forcing TestAms itself to migrate yet. The duplicated\n@BeforeClass reduceCallAmsInterval() in TestOptimizer is dropped because the\nparent already runs it.\n\nMechanical changes elsewhere: org.junit.* -\u003e org.junit.jupiter.api.*;\n@Before/@After -\u003e @BeforeEach/@AfterEach; Assert.assertX -\u003e Assertions.assertX;\n@Test(expected\u003dCmdLineException.class) in TestOptimizerConfig -\u003e three\nAssertions.assertThrows(...) calls.\n\nmvn -pl amoro-optimizer/amoro-optimizer-common -am test passes (10/10)."
    },
    {
      "commit": "4d861516082a4d1cfa36c6a723a03f96157c84c3",
      "tree": "8f37da80da453eb7ddbe127696be14528a894538",
      "parents": [
        "08d49f4f3fa60ce3c96eb4c824b445e9f276d423"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Thu May 07 10:27:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 10:27:49 2026 +0800"
      },
      "message": "[AMORO-3974][common] Migrate self-contained tests from JUnit 4 to JUnit 5 (#4199)\n\nMigrate the JUnit 4 test classes in amoro-common that have no\nexternal JUnit 4 consumers to JUnit 5 (org.junit.jupiter):\n\n- TestLocalExecutionEngine\n- TestSimpleFuture\n- JacksonUtilTest\n- MemorySizeTest\n- TestPoolConfig\n- MockZookeeperServer\n\nShared test base classes and rule helpers (TestAms, TestHMS,\nAmoroCatalogTestBase, TestAmoroCatalogBase, TestServerTableDescriptor,\nAmoroRunListener) are kept on JUnit 4 because they are still extended\nor referenced as @Rule/@ClassRule by JUnit 4 tests in other modules\n(amoro-ams, amoro-format-iceberg, amoro-format-paimon,\namoro-format-mixed-flink, etc.). They will be migrated together with\nthose consumers in a follow-up so the JUnit 4 dependency can be dropped.\n\nCo-authored-by: Lin Tingbin \u003clintingbin31@gmail.com\u003e"
    },
    {
      "commit": "08d49f4f3fa60ce3c96eb4c824b445e9f276d423",
      "tree": "a6a114fd571cec217be1ece2adae389c12e6bcbf",
      "parents": [
        "ec2a448b32d22dbc25b8f8586cef65897e02b263"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Thu Apr 23 17:12:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 17:12:15 2026 +0800"
      },
      "message": "[AMORO-4163][ams] Fix Version-N-already-exists race in newTableOperations for legacy mixed-iceberg (#4185)\n\nWhen AMS saves a new legacy mixed-iceberg table to the database, a background\ntable-explorer thread can concurrently pick up the same table and call\nnewTableOperations(), which now commits the mixed-format properties to the\nIceberg metadata (introduced by the AMORO-4163 fix).  If the background thread\nwins the race and writes v2.metadata.json before the onTableCreated() path\nattempts the same commit, HadoopTableOperations throws CommitFailedException:\n\"Version 2 already exists\", aborting the createTableMeta RPC.\n\nFix: catch CommitFailedException in the commit block, refresh to obtain the\nlatest on-disk metadata, and proceed if a concurrent writer already committed\nthe correct properties.  Re-throw only when the properties still differ after\nrefresh, indicating a genuine commit conflict.\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "ec2a448b32d22dbc25b8f8586cef65897e02b263",
      "tree": "aaa3fb31e4e5e6e9853861d7cf1cd4b73a2b5591",
      "parents": [
        "dad2c9fbea624e159653c123e2747c6091ea9cc0"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Wed Apr 22 18:04:52 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 17:04:52 2026 +0800"
      },
      "message": "[AMORO-4190][ams] Graceful handling of catalog initialization failures in DefaultCatalogManager (#4189)\n\n[Improvement] Graceful handling of catalog initialization failures in DefaultCatalogManager\n\n- Wrap individual catalog loading in try-catch during initialization so\n  that a single catalog failure is logged and skipped rather than crashing AMS\n- When a catalog is not present in serverCatalogMap (failed to initialize),\n  fall back to updating DB directly and attempt to rebuild with the new metadata\n- Add tests verifying both initialization resilience and update recovery\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "dad2c9fbea624e159653c123e2747c6091ea9cc0",
      "tree": "d43b238359e51475c8464da76d94de7f0c590c7c",
      "parents": [
        "d6b2cda8546ed27f40709df8541bc31420f827ba"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Tue Apr 21 21:18:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 21:18:34 2026 +0800"
      },
      "message": "[Hotfix][ams] Fix ResourceMapper.selectResourcesByGroup result mapping (#4194)\n\nThe @Result property names did not match the fields on Resource:\n- group -\u003e groupName\n- container -\u003e containerName\n- totalMemory -\u003e memoryMb\n\nThe start_time column and its @Result mapping were removed because\nResource has no startTime field; MyBatis would silently drop it anyway.\n\nThis method is currently only declared/implemented via\nDefaultOptimizerManager.listResourcesByGroup with no caller on master,\nso no behavioral change is observable. Fixing it now unblocks any future\ncaller (e.g. auto-restart feature) from getting back empty-field Resource\nobjects."
    },
    {
      "commit": "d6b2cda8546ed27f40709df8541bc31420f827ba",
      "tree": "2b90f1afe1b29942da1046bab599e70092f49823",
      "parents": [
        "93cde394135fe94f350d588364028f2af6764fdc"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Tue Apr 21 16:29:53 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 15:29:53 2026 +0800"
      },
      "message": "[AMORO-4193][ams] Fix MysqlDataTruncation caused by negative finishTime in TableProcessMeta (#4192)\n\n* Fix MysqlDataTruncation caused by negative finishTime in TableProcessMeta\n\nWhen creating a new TableProcessMeta via createProcessMeta(), finishTime\nwas initialized to -1. Long2TsConverter only converted 0 to null, so\nTimestamp(-1) was passed to MySQL, which is outside the valid TIMESTAMP\nrange (1970-01-01 00:00:01 UTC ~), causing MysqlDataTruncation.\n\n- Long2TsConverter: convert parameter \u003c\u003d 0 to null instead of only 0\n- TableProcessMeta: initialize finishTime to 0 in createProcessMeta()\n  for consistency with the of() factory method\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Add unit tests for Long2TsConverter\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "93cde394135fe94f350d588364028f2af6764fdc",
      "tree": "71379458dd37ea85b714afd749db324aca8948ef",
      "parents": [
        "80e3310208209bf9f4970f6929b827353b69a9ca"
      ],
      "author": {
        "name": "Takch02",
        "email": "lim70kr38@gmail.com",
        "time": "Sun Apr 19 17:11:57 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 16:11:57 2026 +0800"
      },
      "message": "[AMORO-4131] Add non-partitioned table tests for RewriteFiles and OverwriteFiles (#4137)\n\n* Test : Add NonPartition Test case of RewriteFile\n\nTest : Add NonPartition Test case of RewriteFile\n\n* Test : Add NonPartition Test case of OverwriteFile\n\n* style: fix spotless formatting for hive tests\n\n* fix: enforce Hive location consistency for non-partitioned tables on rewrite and overwrite\n\n---------\n\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e"
    },
    {
      "commit": "80e3310208209bf9f4970f6929b827353b69a9ca",
      "tree": "1de760e25aff32a39633f7da6b1ca36031cf4074",
      "parents": [
        "7b19b7eaaa6f5ddd809d75886e15916b7ab57126"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Thu Apr 16 10:17:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 10:17:39 2026 +0800"
      },
      "message": "[AMORO-4163][ams] Fix CommitFailedException when loading legacy mixed-iceberg tables on Iceberg 1.7.2 (#4182)\n\n[AMORO-4163][ams] Fix CommitFailedException when loading legacy mixed-iceberg tables on Iceberg 1.7.x\n\nFound while investigating the CI failure in #4179.\n\nIceberg 1.7.x introduced a breaking change in HadoopTableOperations.commit(): it\nnow uses reference equality (\u003d\u003d) to compare the `base` argument against the cached\ncurrentMetadata. Previously, newTableOperations() called ops.current() to obtain the\ncurrent metadata, but versionAndMetadata() inside commit() may refresh the internal\nstate and return a different object instance. When the two references differ, commit()\nthrows CommitFailedException(\"Cannot commit changes based on stale table metadata\")\neven though the metadata content is identical, causing table loading to fail.\n\nFix: replace ops.current() with ops.refresh() so that the returned TableMetadata\nreference is the same object stored in ops\u0027 internal cache. When commit() then calls\nversionAndMetadata(), it finds the version unchanged on disk and returns the same\ncached reference, satisfying the reference-equality check.\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "7b19b7eaaa6f5ddd809d75886e15916b7ab57126",
      "tree": "f58d3dfb81c8a96ca1e47d966d4a950508c146a8",
      "parents": [
        "dcab5b572aa4d2d12b6c7bb0923a2f4bce4a402a"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Thu Apr 16 10:09:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 10:09:54 2026 +0800"
      },
      "message": "[Subtask]: Optimizations and troubleshooting for the Master-Slave mode.  (#4174)\n\n* [Subtask]: Fixed several bugs in master-slave mode. #4171\n\n* [Subtask]: Fixed several bugs in master-slave mode. #4171\n\n* [Subtask]: Optimized based on CR feedback. #4171\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e"
    },
    {
      "commit": "dcab5b572aa4d2d12b6c7bb0923a2f4bce4a402a",
      "tree": "7adb8c84154ca65d95889fc1b9f0770714990e15",
      "parents": [
        "b7f7de31fb1815a9d022d0d76383e9f169e1f955"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Wed Apr 15 17:18:45 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 16:18:45 2026 +0800"
      },
      "message": "Cache dataTasks() result in NodeFileScanTask to avoid repeated list creation (#4146)\n\n* perf: cache dataTasks() result in NodeFileScanTask to avoid repeated list creation\n\ndataTasks() was creating a new List via Stream.concat().collect(toList())\non every call. Since the result is immutable after construction (or after\naddFile() calls complete), cache it lazily and invalidate the cache in\naddFile() when baseTasks or insertTasks are mutated.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Add tests for dataTasks() lazy caching in NodeFileScanTask\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Fix spotless format violations in TestNodeFileScanTask\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "b7f7de31fb1815a9d022d0d76383e9f169e1f955",
      "tree": "e229d6b2d2ae7ece86653233b7fa2755d05d76a4",
      "parents": [
        "10d13d4eb73705cf076fa5e3cb5bc6a31662c7f9"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Wed Apr 15 16:39:46 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 15:39:46 2026 +0800"
      },
      "message": "[AMORO-4099] Add table-summary metric collection option for non-optimizing tables (#4101)\n\n* [AMORO-4099] Add table-summary metric collection option for non-optimizing tables\n\n- Allow collecting table_summary metrics when self-optimizing is disabled\n  by setting table-summary.enabled\u003dtrue\n- Fix periodic collection bug: remove optimizingNotNecessary() call in\n  summary-only branch to prevent snapshot gate from blocking subsequent\n  collections\n- Separate property key from self-optimizing prefix:\n  self-optimizing.table-summary.enabled -\u003e table-summary.enabled\n- Add debug logging for table summary collection path\n- Add comprehensive test coverage for summary-only mode\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Fix review issues: remove double-append bug and redundant tableSummaryOnly gate\n\n- Remove duplicate newAppend().commit() in test appendData() since\n  OptimizingTestHelpers.appendBase() already commits\n- Remove unused AppendFiles import\n- Remove redundant tableSummaryOnly bypass in execute() since\n  snapshotChanged already covers unoptimized data\n- Fix misleading test comment\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Fix property key comment to match actual table property name\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e"
    },
    {
      "commit": "10d13d4eb73705cf076fa5e3cb5bc6a31662c7f9",
      "tree": "e7affba3b391a24dde934c5e6ec9751c91d93631",
      "parents": [
        "67feed8c316ba4562dc7303ab07a797501cdd162"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Mon Apr 13 10:59:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 10:59:49 2026 +0800"
      },
      "message": "[Test] Add transactionId assertion in TestDefaultKeyedFile. (#4176)\n\n* [Test] Add transactionId assertion in TestDefaultKeyedFile.\n\n* [Test] Add transactionId assertion in TestDefaultKeyedFile."
    },
    {
      "commit": "67feed8c316ba4562dc7303ab07a797501cdd162",
      "tree": "3cde567e2a88989e258421ec123a4686eab18307",
      "parents": [
        "75916805291773dad5caa1c47a32dc2295e80351"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Fri Apr 10 01:07:02 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 00:07:02 2026 +0800"
      },
      "message": "Replace fully qualified Comparator reference with simple class name in AdaptHiveParquetUtil (#4170)\n\n[refactor] Replace fully qualified Comparator reference with simple class name in AdaptHiveParquetUtil\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "75916805291773dad5caa1c47a32dc2295e80351",
      "tree": "3d7c6371582a2638010b0e1b06717a9d93ba3565",
      "parents": [
        "5c8990523f56f11102fd813f8fa90f90afb99631"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Tue Apr 07 22:19:18 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 21:19:18 2026 +0800"
      },
      "message": "[AMORO-4162] Upgrade Iceberg dependency from 1.6.1 to 1.7.2 (#4163)\n\n* Upgrade Iceberg from 1.6.1 to 1.7.2\n\nBump iceberg.version in root pom.xml and update dependency manifests\nand documentation references.\n\nNotable transitive dependency changes:\n- Avro 1.11.3 → 1.12.0\n- httpclient5 5.3.1 → 5.4, httpcore5 5.2.4 → 5.3\n- New: failsafe 3.3.2\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Adapt to Iceberg 1.7.x API changes\n\n- Migrate WriteResult → FlinkWriteResult in Flink sink pipeline\n- Add FieldGetter[] parameter to RowDataUtil.clone() in RowDataRecordFactory\n- Migrate PruneColumns from ParquetTypeVisitor to TypeWithSchemaVisitor\n- Fix INT96 timestamp min/max statistics byte-order inversion\n- Fork MiniClusterResource (removed in Iceberg 1.7.0) into test package\n- Update MiniClusterResource imports in all test classes\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Add tests for Iceberg 1.7.2 API migration\n\n- TestAdaptHiveParquetSchemaUtil: verify pruneColumns with\n  TypeWithSchemaVisitor correctly prunes columns using expected schema\n- TestAdaptHiveParquetUtil: verify INT96 timestamp min/max statistics\n  are correctly re-ordered when byte-wise ordering disagrees with\n  chronological ordering\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e"
    },
    {
      "commit": "5c8990523f56f11102fd813f8fa90f90afb99631",
      "tree": "f74a54a9f57b54de34b036633462e6790098dc07",
      "parents": [
        "615c7e8c25b6646336440947169ad110ae697fe1"
      ],
      "author": {
        "name": "ConradJam",
        "email": "jam.gzczy@gmail.com",
        "time": "Tue Apr 07 21:06:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 21:06:28 2026 +0800"
      },
      "message": "[hotfix] Implement an independent process history cleanup mechanism and migrate the configuration item to the Duration type. (#4161)"
    },
    {
      "commit": "615c7e8c25b6646336440947169ad110ae697fe1",
      "tree": "144056fa59f9673d900550d1fc4c25dbdaf1b06b",
      "parents": [
        "05ff059df3be0e8769691cbcb57c0338e508b74e"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Tue Apr 07 14:55:32 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:55:32 2026 +0800"
      },
      "message": "Fix flaky TestInternalMixedCatalogService by hardening test cleanup (#4165)\n\n* Fix flaky TestInternalMixedCatalogService by hardening test cleanup\n\nWhen a test method fails mid-way after creating a table but before\ndropping it, the @AfterEach cleanup could not drop the non-empty\ndatabase.  This left residual state that caused cascading failures\nin subsequent nested test classes (Database already exists, assertion\non listDatabases().isEmpty(), etc.).\n\n- CompatibilityCatalogTests.cleanDatabase: drop residual table before\n  dropping database, wrap both in try-catch\n- TestTableCommit.after: guard dropTable with tableExists check, wrap\n  in try-catch to prevent cascading cleanup failures\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Wrap dropDatabase in try-catch in TestTableOperation cleanup\n\nAdd missing try-catch around dropDatabase in TestTableOperation.after()\nfor consistency with TestTableCommit and CompatibilityCatalogTests\ncleanup methods.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "05ff059df3be0e8769691cbcb57c0338e508b74e",
      "tree": "31ef0561333111fa2edebe18bf9874f58caea8ad",
      "parents": [
        "5abacab49f2c7f2df4f5cf6139b048140296b23c"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Tue Apr 07 11:42:10 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 10:42:10 2026 +0800"
      },
      "message": "[Improvement] Move snapshot ID capture in expireFiles() to after delete commit (#4169)\n\nMove snapshot ID capture in expireFiles() to after delete commit\n\nThe snapshot ID passed to RewriteFiles.validateFromSnapshot() was\ncaptured before DeleteFiles.commit(), making it stale for the\nsubsequent RewriteFiles operation. Although the current validation\npath is benign (replacedDataFiles is empty so conflict detection is\nskipped), passing a pre-commit snapshot ID is semantically incorrect\nand fragile against future Iceberg validation changes.\n\nMove the capture to after delete.commit() so that\nvalidateFromSnapshot() always receives the up-to-date snapshot.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "5abacab49f2c7f2df4f5cf6139b048140296b23c",
      "tree": "23eafd6c4d07c20a41e4956392bb707854bd1517",
      "parents": [
        "878d5b01e2eb019f26ac3f5c6a55296d61d336cf"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Mon Apr 06 19:14:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 19:14:44 2026 +0800"
      },
      "message": "[Dependency] Bump versions of Hadoop and Spark (#4168)\n\n* [Dependency] Bump versions of Hadoop and Spark\n\nUpgrade core dependencies to their latest patch versions:\n- Hadoop: 3.4.2 -\u003e 3.4.3\n- Spark: 3.5.7 -\u003e 3.5.8\n\n* [Dependency] Bump versions of Hadoop and Spark\n\nUpgrade core dependencies to their latest patch versions:\n- Hadoop: 3.4.2 -\u003e 3.4.3\n- Spark: 3.5.7 -\u003e 3.5.8"
    },
    {
      "commit": "878d5b01e2eb019f26ac3f5c6a55296d61d336cf",
      "tree": "6905884fb3c1d065c48a9a932bcaef38630eb169",
      "parents": [
        "7b23e5363642c49fdc8f4f355dbd2464e9d84f05"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Fri Apr 03 18:04:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 18:04:28 2026 +0800"
      },
      "message": "[Subtask]: In master-slave mode, each AMS should automatically senses the optimizer.  (#3937)\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n[Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n[Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n[Subtask]: Replace zk with mocking. #3919\n\n[Subtask]: Replace zk with mocking. #3919\n\n[Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n[Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n[Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n[Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n[Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n[Subtask]:  Fix unit test failure issue #3923\n\n* [Subtask]: In master-slave mode, each AMS should automatically senses the optimizer. #3929\n\n* [Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n[Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n[Subtask]: Optimize the logic for retrieving the AMS list from ZooKeeper in master-slave mode. #3928\n\nThis addresses the conflict issues with the latest main branch and introduces a new solution for storing allocation information based on a database.\n\nThis addresses the conflict issues with the latest main branch and introduces a new solution for storing allocation information based on a database.\n\nTroubleshooting unit test failures.\n\n* [Subtask]: In master-slave mode, each AMS should automatically senses the optimizer. #3929\n\nMade-with: Cursor\n\n* [Subtask]: In master-slave mode, each AMS should automatically senses the optimizer. #3929\n\n* [Subtask]: In master-slave mode, each AMS should automatically senses the optimizer. #3929\n\n* [Subtask]: In master-slave mode, each AMS should automatically senses the optimizer. #3929\n\n* [Subtask]: Optimize based on CR\u0027s feedback.#3929\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e"
    },
    {
      "commit": "7b23e5363642c49fdc8f4f355dbd2464e9d84f05",
      "tree": "10a94bc683fa3aa95de99b49819b216564959a5e",
      "parents": [
        "f6b1e683f4bf650b860e39a09273f52ba703a128"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Thu Apr 02 15:38:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 15:38:37 2026 +0800"
      },
      "message": "[AMORO-3853] Stabilize continuous optimizing tests on Java 17 (#4142)\n\n* Stabilize continuous optimizing tests on Java 17\n\n* Remove unnecessary truncation of nanoseconds in RandomRecordGenerator\n\n* spotless"
    },
    {
      "commit": "f6b1e683f4bf650b860e39a09273f52ba703a128",
      "tree": "6819f2835d8c96ed9feeb42c0d092d12f9a11825",
      "parents": [
        "fa44c915e7a126e404239c170960ab69f2def8d2"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Thu Apr 02 11:30:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 11:30:25 2026 +0800"
      },
      "message": "[AMORO-3928] Modify the optimizer to support obtaining tasks from each AMS node for processing. (#3950)\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]: In master-slave mode, each AMS should automatically senses the optimizer. #3929\n\n* [Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n* [Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n* [Subtask]: Optimize the logic for retrieving the AMS list from ZooKeeper in master-slave mode. #3928\n\n* This addresses the conflict issues with the latest main branch and introduces a new solution for storing allocation information based on a database.\n\n* [Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n* [Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n* [Subtask]: Modify the optimizer to support obtaining tasks from each AMS node for processing. #3928\n\n* [Subtask]: Fixed a legacy bug that could cause unit tests to fail during compilation. #3928\n\n* [Subtask]: Optimized based on CR feedback. #3928\n\n* [Subtask]: Fixed a legacy bug that could cause unit tests to fail during compilation. #3928\n\n* Revert \"[Subtask]: Fixed a legacy bug that could cause unit tests to fail during compilation. #3928\"\n\nThis reverts commit d54c126fdc32a77b4d1a5f8cf648cb3bbbca4a65.\n\n* [Subtask]: Optimized based on CR feedback. #3928\n\n* [Subtask]: Optimized based on CR feedback. #3928\n\n* [Subtask]: Optimized based on CR feedback. #3928\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e"
    },
    {
      "commit": "fa44c915e7a126e404239c170960ab69f2def8d2",
      "tree": "80d856f3585a0d5b3060f9990679c7093fca7574",
      "parents": [
        "ab8a1963f2276a73b515a86d0184dc37363876c3"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Thu Apr 02 10:45:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 10:45:38 2026 +0800"
      },
      "message": "[AMORO-4159] [Improvement]: Missing doAs wrapper in MixedTableOperations. (#4160)"
    },
    {
      "commit": "ab8a1963f2276a73b515a86d0184dc37363876c3",
      "tree": "54c2abdd00a11985cc546d144cb69847b1f512f8",
      "parents": [
        "958e2093d973482420012513ade460675e10da2b"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Tue Mar 31 20:31:14 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 19:31:14 2026 +0800"
      },
      "message": "[AMORO-4153]: Drop mixed Flink 1.17 support (#4154)\n\n* Drop mixed Flink 1.17 support\n\nFlink 1.17 support is removed to enable upgrading Iceberg from 1.6.x\nto 1.7.x, as Iceberg 1.7.0 dropped the iceberg-flink-1.17 artifact.\nAfter this change, only Flink 1.18 is supported for mixed format.\n\n- Remove v1.17 module directory (amoro-mixed-flink-1.17,\n  amoro-mixed-flink-runtime-1.17)\n- Remove v1.17 module entries from parent pom.xml\n- Update all documentation references from Flink 1.17 to 1.18\n- Update Iceberg source reference in MixedCatalog.java\n\n* Update AMORO_VERSION to 0.9.0-incubating in flink-get-started.md\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e"
    },
    {
      "commit": "958e2093d973482420012513ade460675e10da2b",
      "tree": "4479a067dfffe899180c92be819d4f281f45d0ca",
      "parents": [
        "e9087e3c64fd89bc31c13b1d907e149f958d705d"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Tue Mar 31 14:28:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 14:28:10 2026 +0800"
      },
      "message": "[site] Fix docs latest notice and Blogs label (#4144)\n\n* Fix docs latest notice and blogs label\n\n* Fix stable docs link path in latest notice\n\n* fix css"
    },
    {
      "commit": "e9087e3c64fd89bc31c13b1d907e149f958d705d",
      "tree": "514a2b431414e46eab2a1c813723c80c187f78af",
      "parents": [
        "2528923b0b7107ed4bbc00367cdad9d38a2cccda"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Tue Mar 31 10:31:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 10:31:45 2026 +0800"
      },
      "message": "[AMORO-4149]: Remove duplicate iceberg-bundled-guava dependency declaration in amoro-format-iceberg. (#4150)\n\nRemove duplicate iceberg-bundled-guava dependency declaration in amoro-format-iceberg."
    },
    {
      "commit": "2528923b0b7107ed4bbc00367cdad9d38a2cccda",
      "tree": "e9fcd8ce222b74f1b6d00b7cac0167f0ccf498a9",
      "parents": [
        "5313608fb9e66e6fb83b69885148dfb8aeab8ac2"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Mon Mar 30 20:36:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 20:36:06 2026 +0800"
      },
      "message": "[Bug] fix the of TestOptimizerGroupKeeper unit test suffers from intermittent failures. (#4152)\n\n[Bug] fix the of TestOptimizerGroupKeeper unit test suffers from intermittent failures. #4151\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e"
    },
    {
      "commit": "5313608fb9e66e6fb83b69885148dfb8aeab8ac2",
      "tree": "cdaabec58acc6bcd7054dbc5d07f3211fac2ca24",
      "parents": [
        "45f074df18c25e7baec37f6f8baecfa133d6a56b"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Mon Mar 30 10:44:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 10:44:55 2026 +0800"
      },
      "message": "[AMORO-4147] [Improvement]: Resource leak in CombinedDeleteFilter and MixedDeleteFilter position delete iterators. (#4148)"
    },
    {
      "commit": "45f074df18c25e7baec37f6f8baecfa133d6a56b",
      "tree": "65c6062adf6aae4bf86d4bad6b7af5a0c0e0aff3",
      "parents": [
        "fe98a6cc28ebc620b5045051f0d8766ff0cd5d3e"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Sat Mar 28 16:07:08 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 28 15:07:08 2026 +0800"
      },
      "message": "[AMORO-4127] Add mixed Flink 1.19 support (#4141)\n\n* [AMORO-4127][mixed-flink] Add mixed Flink 1.19 support\n\n- Add v1.19/amoro-mixed-flink-1.19 and v1.19/amoro-mixed-flink-runtime-1.19 modules\n- Register new modules in parent pom.xml\n- Update documentation to include Flink 1.19 in supported version matrix\n- Add kind cluster config for local E2E testing\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "fe98a6cc28ebc620b5045051f0d8766ff0cd5d3e",
      "tree": "e6d3eb16d46dfc0eeb33e13ea4b1f75478a3d7df",
      "parents": [
        "6c037912f7ada649f69afb643041a75eeeea8825"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Sat Mar 28 02:49:01 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 28 01:49:01 2026 +0800"
      },
      "message": "[Improvement] Hoist StructProjection.create out of per-record loop in CombinedDeleteFilter (#4145)\n\n* Hoist StructProjection.create out of per-record loop in initializeBloomFilter\n\nStructProjection is designed to be reused via .wrap(). Previously,\nStructProjection.create(requiredSchema, deleteSchema) was called inside\nthe per-record forEach, creating N*M objects (records x schemas). Pre-build\na Map\u003cSet\u003cInteger\u003e, StructProjection\u003e once before iterating records, then\ncall .wrap(record) on the pre-built projection inside the loop."
    },
    {
      "commit": "6c037912f7ada649f69afb643041a75eeeea8825",
      "tree": "ba5c1fd3fd2cf673885ee73ebfcec3658a193d0d",
      "parents": [
        "bf222b7b6b57b01b3d46a6ad469ea9afce89fb16"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Thu Mar 26 16:49:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 16:49:58 2026 +0800"
      },
      "message": "[AMORO-4117] Implement dashboard RBAC with jCasbin and LDAP role mapping (#4118)\n\n* [Feature] Implement role-based access control with ADMIN and READ_ONLY roles\n\n* Ensure username and password are converted to String in authentication and role resolution\n\n* Update RBAC documentation and configuration examples in ams-config.md and ConfigurationsTest.java\n\n* [Feature] Update role-based access control to use SERVICE_ADMIN and VIEWER roles\n\n* [Feature] Add RBAC configuration for SERVICE_ADMIN and VIEWER roles\n\n* [Feature] Update RBAC model and policy files with licensing information and new dependencies\n\n* [Feature] Refactor RBAC implementation to use string-based roles and enhance privilege mapping\n\n* Update RBAC default role handling and documentation\n\n* Update RBAC documentation to reflect changes in default role handling and introduce new roles\n\n* Fix comment in LdapPasswdAuthenticationProvider to reflect correct email example for username normalization\n\n* revert"
    },
    {
      "commit": "bf222b7b6b57b01b3d46a6ad469ea9afce89fb16",
      "tree": "3d1d437a5e54abbc22e83acbe2d13e32c26379a4",
      "parents": [
        "a40a8c14d201e45b4f5408825a70ad5104d738fe"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Wed Mar 25 16:17:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 16:17:42 2026 +0800"
      },
      "message": "[Subtask]: Modify DefaultTableService to be compatible with master-slave mode. (#3927)\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]:  Fix unit test failure issue #3923\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]: Modify DefaultTableService to be compatible with master-slave mode #3923\n\n* [Subtask]: Optimized based on CR feedback. #3923\n\n* [Subtask]: Optimized based on CR feedback. #3923\n\n* [Subtask]: Optimized based on CR feedback. #3923\n\n* [Subtask]: Fixed a legacy bug that could cause unit tests to fail during compilation. #3923\n\n* [Subtask]: Optimized based on CR feedback. #3923"
    },
    {
      "commit": "a40a8c14d201e45b4f5408825a70ad5104d738fe",
      "tree": "7768da8cb1ff5771f336fc5896df2cde8282622c",
      "parents": [
        "cc03949943e6d0292f9813e2ebf0bd6e6c7d7b20"
      ],
      "author": {
        "name": "Baixiaochun",
        "email": "baixiaochun1217@gmail.com",
        "time": "Thu Mar 19 18:30:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 18:30:50 2026 +0800"
      },
      "message": "[AMORO-4135][amoro-web] Fix blank duration column for sub-second optimizing durations (#4136)\n\n[AMORO-4135][amoro-web] 修复 formatMS2Time() 对小于1秒的持续时间返回空字符串的问题\n\n当优化任务持续时间在 1ms-999ms 之间时，formatMS2Time() 函数的所有时间单位\n(天/时/分/秒) 经 Math.floor 计算后都为 0，导致 result 为空字符串，前端\nduration 列显示为空白。\n\n添加对 0 \u003c ms \u003c 1000 的边界处理，返回 \u0027\u003c1s\u0027 而非空字符串。\n\nfix #4135\n\nCo-authored-by: Bingtagui404 \u003c182930459+Bingtagui404@users.noreply.github.com\u003e"
    },
    {
      "commit": "cc03949943e6d0292f9813e2ebf0bd6e6c7d7b20",
      "tree": "7d89604b7660478915fc7f79d3a1a204032a42be",
      "parents": [
        "7ceec41890836f162cec5d073a6bddcd77d6b2e9"
      ],
      "author": {
        "name": "Baixiaochun",
        "email": "baixiaochun1217@gmail.com",
        "time": "Thu Mar 19 13:23:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 13:23:30 2026 +0800"
      },
      "message": "[AMORO-4130][amoro-web] Replace hardcoded frontend texts with i18n translations (#4133)\n\n替换 amoro-web 前端硬编码文本为 i18n 翻译\n\n将 5 个 Vue 文件中的硬编码英文文本替换为 vue-i18n 调用，\n并在 en.ts/zh.ts 中添加 11 个新翻译键。\n\n涉及的硬编码文本包括：\n- placeholder: Optimizer group, Action, Type, Status\n- form label: Catalog, Database, Table, Type, Endpoint, Region,\n  Hadoop Username, Kerberos Principal, Access Key, Secret Key\n- 展示文本: Charts, All\n- 列副标题: success / total, size / count\n\nCo-authored-by: Bingtagui404 \u003c182930459+Bingtagui404@users.noreply.github.com\u003e"
    },
    {
      "commit": "7ceec41890836f162cec5d073a6bddcd77d6b2e9",
      "tree": "bdf0ad94dba76b3382e14030ad25dd6d89cc9825",
      "parents": [
        "60fd89300a90ebd8fa7ccf09780a2faf47821537"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Thu Mar 19 13:22:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 13:22:40 2026 +0800"
      },
      "message": "[Subtask]: In master-slave mode, database-based bucket allocation is supported.  (#4123)\n\n* [Subtask]: In master-slave mode, database-based bucket allocation is supported. #4121\n\n* [Subtask]: Optimize based on CR\u0027s feedback.#4121\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e"
    },
    {
      "commit": "60fd89300a90ebd8fa7ccf09780a2faf47821537",
      "tree": "7bd4dfe48a4fac664ab8cce3813a388c9fe82602",
      "parents": [
        "7cebea493bcd8ef54387420f684b7014f4d1e3aa"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Thu Mar 19 14:22:23 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 13:22:23 2026 +0800"
      },
      "message": "[AMORO-4128] Drop mixed Flink 1.16 support (#4132)\n\n* Drop mixed Flink 1.16 support (#4128)\n\nRemove mixed Flink 1.16 modules and update documentation to reflect\nthe supported Flink versions (1.17, 1.18). This unblocks future\nIceberg upgrades that no longer support Flink 1.16.\n\n- Remove v1.16/amoro-mixed-flink-1.16 and v1.16/amoro-mixed-flink-runtime-1.16 modules\n- Remove Flink 1.16 entries from parent pom.xml module list\n- Update version matrices in README and docs\n- Update Flink documentation links from 1.16 to 1.17\n- Clean up stale Flink 1.15 references in docs\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Address review comment: sync MixedCatalog method with Iceberg 1.6.x source\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Fix stale Spark 3.2 path reference in deployment docs\n\nUpdate the example path from the non-existent\namoro-format-mixed-spark/v3.2 to amoro-mixed-spark/v3.3 to match\nthe current project structure. Also remove a trailing parenthesis\ntypo in the jar filename comment.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "7cebea493bcd8ef54387420f684b7014f4d1e3aa",
      "tree": "553e775355cdc9de99cd3e9cd7b70b9227a896f7",
      "parents": [
        "24c23a9d71f40c542ac49f87e5bbeff1cb66710d"
      ],
      "author": {
        "name": "Baixiaochun",
        "email": "baixiaochun1217@gmail.com",
        "time": "Wed Mar 18 22:00:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 22:00:51 2026 +0800"
      },
      "message": "[Improvement] Rename Maven property jackson.vesion to jackson.version (#4134)\n\nFix typo in the mixed Flink Maven property name: jackson.vesion -\u003e\njackson.version across all 3 pom.xml files that reference it.\n\nCo-authored-by: Bingtagui404 \u003cbaixiaochun0@gmail.com\u003e"
    },
    {
      "commit": "24c23a9d71f40c542ac49f87e5bbeff1cb66710d",
      "tree": "a2c172a1c0808066e89270b2164b79a521bc3cac",
      "parents": [
        "86357572e9ea46eb092aa3a7123f4f40f0af3a47"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Wed Mar 18 09:59:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 09:59:09 2026 +0800"
      },
      "message": "[Hotfix] Add Apache License header to AGENTS.md (#4125)\n\nAdd Apache License header to AGENTS.md"
    },
    {
      "commit": "86357572e9ea46eb092aa3a7123f4f40f0af3a47",
      "tree": "49ca75a68dabdfad5672897bb078acc2ce10eb66",
      "parents": [
        "0721df985beda5aeb76d9f6efb4f6c294247e728"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Wed Mar 18 00:28:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 00:28:40 2026 +0800"
      },
      "message": "[Doc] Add AGENTS.md for project overview and documentation (#4120)\n\n[Feature] Add AGENTS.md for project overview and documentation"
    },
    {
      "commit": "0721df985beda5aeb76d9f6efb4f6c294247e728",
      "tree": "a59e3579c6623a8b76b3d631ed7a59232c35b31c",
      "parents": [
        "25f19da9a6cf6aa4acea787a2834c864ea57edb0"
      ],
      "author": {
        "name": "baiyangtx",
        "email": "xiangnebula@163.com",
        "time": "Tue Mar 17 21:50:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 21:50:53 2026 +0800"
      },
      "message": "[Improvement]: Refactor snapshot-expiring via ProcessFactory plugin (#4107)\n\n* [Improvement] Refactor SnapshotExpiring inline executor with ProcessFactory\n\n \n\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e"
    },
    {
      "commit": "25f19da9a6cf6aa4acea787a2834c864ea57edb0",
      "tree": "0eaf071e3c80b2c191d376f796202c2cc0976999",
      "parents": [
        "55fb785c94c4ff95d06b477bb2194a91c6171c25"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Mon Mar 16 14:19:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 16 14:19:47 2026 +0800"
      },
      "message": "[AMORO-3921] Add AmsAssignService and ZkBucketAssignStore to implement balanced bucket allocation in master-slave mode (#3922)\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Replace zk with mocking. #3919\n\n* [Subtask]: Replace zk with mocking. #3919\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: add AmsAssignService to implement balanced bucket allocation in master-slave mode. #3921\n\n* [Subtask]: Revised based on CR\u0027s comments. #3921\n\n* [Subtask]: Revised based on CR\u0027s comments. #3921\n\n* [Subtask]: Revised based on CR\u0027s comments. #3921\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e"
    },
    {
      "commit": "55fb785c94c4ff95d06b477bb2194a91c6171c25",
      "tree": "4e11b443f6009da42d72dc4e145daf6956addb33",
      "parents": [
        "316f5e8af5667eeebaa07546f161091d546a29c2"
      ],
      "author": {
        "name": "baiyangtx",
        "email": "xiangnebula@163.com",
        "time": "Thu Mar 12 21:40:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 21:40:45 2026 +0800"
      },
      "message": "[Improvement]: Extract TableProcessStore from AmoroProcess interface. (#4116)\n\n* refactor(process): extract process framework changes\n        \n* CI\n\n* Update amoro-ams/src/main/java/org/apache/amoro/server/process/ProcessService.java\n\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e\n\n* Update amoro-ams/src/main/java/org/apache/amoro/server/process/ProcessService.java\n\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e\n\n* Fix comments\n\n---------\n\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e"
    },
    {
      "commit": "316f5e8af5667eeebaa07546f161091d546a29c2",
      "tree": "f5e243ffbf63be8289678abdec2b2484b3892f8b",
      "parents": [
        "5775d194270bca31f4e3c20d68adf6c9edcf44d3"
      ],
      "author": {
        "name": "davedwwang",
        "email": "iverson89w@163.com",
        "time": "Wed Mar 11 10:17:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 11 10:17:59 2026 +0800"
      },
      "message": "[AMORO-4108] Unify Testcontainers Dependency Version (#4115)\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e"
    },
    {
      "commit": "5775d194270bca31f4e3c20d68adf6c9edcf44d3",
      "tree": "f201e1012030d342a55e593b85b2767c3d7d89a1",
      "parents": [
        "a2d4b2185c8a40bc66172e9d32d5a6efa6a5dcdc"
      ],
      "author": {
        "name": "davedwwang",
        "email": "iverson89w@163.com",
        "time": "Tue Mar 10 11:12:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 10 11:12:54 2026 +0800"
      },
      "message": "[AMORO-4086] Add OptimizerGroupKeeper to automatically maintain optim… (#4087)\n\n[AMORO-4086] Add OptimizerGroupKeeper to automatically maintain optimizer resources based on min-parallelism configuration\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e"
    },
    {
      "commit": "a2d4b2185c8a40bc66172e9d32d5a6efa6a5dcdc",
      "tree": "e598ac08804b6b809e3e3c59b5a765bf8eba6105",
      "parents": [
        "db7c9048862718ead6fe2e548e2fac2411d02890"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Mon Mar 09 20:18:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 20:18:27 2026 +0800"
      },
      "message": "[AMORO-4103] Release table runtime when the group name is changed to a non-existent resource group (#4104)\n\n* Release table runtime when the group name is changed to a non-existent resource group.\n\n* spotless\n\n* Update optimizing status assertion in TestOptimizingQueue\n\n* Fix handling of optimizing process when resource group changes to non-existent group"
    },
    {
      "commit": "db7c9048862718ead6fe2e548e2fac2411d02890",
      "tree": "7493039e6b59c3c0aa42f93aed8ee5d490dbc72e",
      "parents": [
        "90b43e2ff1a49a00e294389de1a50cfc3407ab3f"
      ],
      "author": {
        "name": "baiyangtx",
        "email": "xiangnebula@163.com",
        "time": "Mon Mar 09 17:23:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 17:23:14 2026 +0800"
      },
      "message": "[Feature] Introduce a new plugin RestExtension to extend rest service (#4112)\n\n* [Feature] Introduce a new plugin RestExtension to extend rest service\n\nCherry-picked from 2010d5998a0770fa7b58456e51d63538af9e5e78.\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: Iedfc5a383dabe42c96ce4030411cb93adc468a77\n\n* refactor\n\n* typo\n\n---------\n\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e"
    },
    {
      "commit": "90b43e2ff1a49a00e294389de1a50cfc3407ab3f",
      "tree": "f11748974ae0affc934456b67040abeae1c51223",
      "parents": [
        "6478275784d526a399e294d3806770e6f57a2c08"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Mon Mar 09 16:41:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 16:41:05 2026 +0800"
      },
      "message": "[Hotfix] Add LDAP login configuration options for Dashboard deployment (#4111)\n\nAdd LDAP authentication configuration options for Dashboard"
    },
    {
      "commit": "6478275784d526a399e294d3806770e6f57a2c08",
      "tree": "b6e974df7d6a5629f618c5730e1f4e76055e854c",
      "parents": [
        "02f7c4c1b4db597b1503487c946e278410e3152a"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Mon Mar 09 17:40:41 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 16:40:41 2026 +0800"
      },
      "message": "[AMORO-4113] Do not update snapshot markers on completeProcess(false) (#4114)\n\nWhen an optimizing process is closed without success (e.g., optimizer\ngroup change, task retry exhaustion), completeProcess(false) was\nunconditionally updating lastOptimizedSnapshotId and\nlastOptimizedChangeSnapshotId. This caused SchedulingPolicy.isTablePending()\nto return false, permanently preventing the table from being re-planned.\n\nFix by only updating snapshot markers when success is true.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "02f7c4c1b4db597b1503487c946e278410e3152a",
      "tree": "25d1fe103a7c022e38e91e6c58984df5150c5c8d",
      "parents": [
        "bb140417bdfd7de6401c9f660ea9c76eee884381"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Fri Mar 06 21:58:15 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 20:58:15 2026 +0800"
      },
      "message": "[AMORO-4044] Fix partition mapping bug in TableEntriesScan for tables with evolved PartitionSpec (#4085)\n\nThe entries metadata table returns a unified super-struct partition\ncontaining fields from all PartitionSpecs. buildDataFile() and\nbuildDeleteFile() passed this directly to withPartition(), causing\npartition mismatch after spec evolution. Fix by projecting the unified\npartition to the spec-specific type using StructProjection.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "bb140417bdfd7de6401c9f660ea9c76eee884381",
      "tree": "d4d093655cd774bef9584b0bb83ba69fa5499168",
      "parents": [
        "7ba51cda2bd9efa0216c915a98429cdce45642b1"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Fri Mar 06 11:02:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 06 11:02:36 2026 +0800"
      },
      "message": "Add a registration function for table allocation in master-slave mode.  (#3920)\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Replace zk with mocking. #3919\n\n* [Subtask]: Replace zk with mocking. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Replace zk with mocking. #3919\n\n* [Subtask]: Replace zk with mocking. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Add a registration function for table allocation in master-slave mode. #3919\n\n* [Subtask]: Fixing conflicts after a forced push following a rebase.\n\n* [Subtask]: change registAndElect to registerAndElect.\n\n* [Subtask]: Revised based on CR’s comments\n\n* [Subtask]: Revised based on CR’s comments\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e"
    },
    {
      "commit": "7ba51cda2bd9efa0216c915a98429cdce45642b1",
      "tree": "419f7f9f9c2e12940db8285c7490734618779b18",
      "parents": [
        "19141452088c891c85ad5fc88f2c2b0837b9bf9c"
      ],
      "author": {
        "name": "baiyangtx",
        "email": "xiangnebula@163.com",
        "time": "Thu Mar 05 17:32:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 05 17:32:12 2026 +0800"
      },
      "message": "[Improvement]: Load process factories via DefaultTableRuntimeFactory (#4100)\n\n* feat(ams): load process factories via DefaultTableRuntimeFactory\n\n## Summary\n\nWire the new process plugin model into AMS so that table processes are discovered from `ProcessFactory` implementations and scheduled via the existing `ProcessService`.\n\n## Details\n\n- Extend `DefaultTableRuntimeFactory` to implement the `TableRuntimeFactory` process APIs:\n  - Aggregate installed `ProcessFactory` instances by `TableFormat` / `Action` and expose derived `ActionCoordinator` plugins via `supportedCoordinators()`\n  - Merge `DefaultTableRuntime.REQUIRED_STATES` with additional states required by all process factories for the same format when building `TableRuntimeCreator`\n  - Keep using `DefaultTableRuntime` without introducing extra runtime types\n- Introduce `DefaultActionCoordinator` to bridge `ProcessFactory` trigger/recover semantics to the existing scheduler:\n  - Build trigger strategies from `ProcessFactory#triggerStrategy`\n  - Delegate `trigger` and `recoverTableProcess` to the underlying factory\n- Add `TableProcessFactoryManager` as an `AbstractPluginManager\u003cProcessFactory\u003e` using the `process-factories` plugin namespace\n- Refactor `AmoroServiceContainer` startup sequence:\n  - Initialize `TableProcessFactoryManager` and collect all installed `ProcessFactory` instances\n  - Initialize all `TableRuntimeFactory` plugins with the shared list of process factories\n  - Collect all derived `ActionCoordinator`s from table runtime factories and inject them into `ProcessService`\n- Update `ProcessService` to accept a pre-built list of `ActionCoordinator`s while keeping the original constructors for backward compatibility and tests\n- Run `mvn spotless:apply` and `mvn -pl amoro-ams -am -DskipTests compile` to ensure style and compilation pass\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: Iaa867503c8b0bf93c2b7f0b8fe7d752e2ddbac67\n\n* refactor(table-runtime): decouple TableRuntimeFactory from ActivePlugin and use default runtime\n\n## Summary\n\nDecouple `TableRuntimeFactory` from the generic `ActivePlugin` mechanism and make `AmoroServiceContainer` explicitly use `DefaultTableRuntimeFactory` as the default implementation.\n\n## Details\n\n- Change `TableRuntimeFactory` in `amoro-common` so it no longer extends `ActivePlugin`, keeping only process-related APIs:\n  - `List\u003cActionCoordinator\u003e supportedCoordinators()`\n  - `void initialize(List\u003cProcessFactory\u003e factories)`\n  - `Optional\u003cTableRuntimeCreator\u003e accept(ServerTableIdentifier, Map\u003cString, String\u003e)`\n- Refactor `TableRuntimeFactoryManager` in AMS:\n  - Remove inheritance from `AbstractPluginManager\u003cTableRuntimeFactory\u003e` to avoid the `ActivePlugin` constraint\n  - Implement a simple manager that wraps a provided `List\u003cTableRuntimeFactory\u003e`\n  - Provide a default no-arg constructor that installs a single `DefaultTableRuntimeFactory`\n  - Keep `initialize()` as a no-op and `installedPlugins()` as the accessor to preserve existing wiring in `DefaultTableService`\n- Update `DefaultTableRuntimeFactory`:\n  - Remove `@Override` annotations from `open/close/name` since they no longer implement `ActivePlugin` methods\n  - Keep the methods as no-op helpers with the same behavior\n- Update `AmoroServiceContainer.startOptimizingService` to use `DefaultTableRuntimeFactory` directly:\n  - Construct a `DefaultTableRuntimeFactory` instance explicitly\n  - Wrap it into `TableRuntimeFactoryManager` via `Collections.singletonList(tableRuntimeFactory)`\n  - Use the resulting singleton list as the only table runtime factory when initializing process factories and collecting `ActionCoordinator`s\n- Leave `DefaultTableService` logic unchanged, it still uses `TableRuntimeFactoryManager.installedPlugins()` but now operates over the explicit default factory list\n- Ensure `ProcessService` changes from previous step are included in this commit so the module compiles cleanly\n\n## Verification\n\n- Ran `./mvnw -pl amoro-ams -am -DskipTests compile` from repo root\n  - Build succeeded for the full AMS reactor\n  - `spotless` and `checkstyle` passed with only existing warnings unrelated to this change\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: Ifa8deef0d2553176300cdef2c0cb073d52ee3303\n\n* refactor(table-runtime): remove TableRuntimeFactoryManager and inline default factory\n\n## Summary\n\n- Remove TableRuntimeFactoryManager indirection and wire DefaultTableService directly with a TableRuntimeFactory implementation.\n- Simplify DefaultTableRuntimeFactory after decoupling from plugin framework and ActivePlugin lifecycle.\n- Inline default table runtime factory wiring into AmoroServiceContainer and tests, and update process/service initialization.\n\n## Details\n\n- DefaultTableService\n  - Change constructor to accept a TableRuntimeFactory instead of TableRuntimeFactoryManager.\n  - Replace iteration over installed factories with a single factory.accept(...) call when creating TableRuntime instances.\n\n- DefaultTableRuntimeFactory\n  - Drop unused ActivePlugin-style methods: open(Map\u003cString, String\u003e), close(), and name().\n\n- AmoroServiceContainer\n  - Instantiate a single DefaultTableRuntimeFactory in startOptimizingService and pass it into DefaultTableService.\n  - Initialize the defaultRuntimeFactory with ProcessFactory plugins and derive ActionCoordinators from it directly.\n\n- Tests\n  - AMSServiceTestBase: construct DefaultTableService with a concrete DefaultTableRuntimeFactory instead of a mocked TableRuntimeFactoryManager.\n  - TestDefaultTableRuntimeHandler: hold a DefaultTableRuntimeFactory field and pass it into DefaultTableService for all test setups.\n\n- Cleanup\n  - Delete TableRuntimeFactoryManager class and remove all references and related imports across main and test code.\n  - Fix spotless formatting violations in the touched files so that `mvn -pl amoro-ams -am -DskipTests compile` passes.\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: I8acca1841470dfc1bbd87b77e424a34f4d52ae82\n\n* fix comment\n\n* fix comment\n\n* fix comment\n\n* fix comment\n\n---------\n\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e"
    },
    {
      "commit": "19141452088c891c85ad5fc88f2c2b0837b9bf9c",
      "tree": "45d29091a3aa81a49c53b0214cf12207e3e7d2ed",
      "parents": [
        "d54b9362e5b58524f69a13e8441f308133e0cc7e"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Wed Mar 04 20:50:45 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 19:50:45 2026 +0800"
      },
      "message": "[AMORO-4089] Fix optimizing process stuck permanently after AMS restart (#4090)\n\n* [AMORO-4089] Fix optimizing process permanently stuck after AMS restart\n\nFix multiple scenarios where tables become permanently stuck after\nAMS restart by refactoring initTableRuntime() recovery logic, fixing\nOptimizerKeeper race condition, and adding defensive measures.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* [AMORO-4089] Skip resetting PENDING tables during recovery\n\nPENDING tables (processId\u003d0) should not be reset via\ncompleteEmptyProcess() as it incorrectly marks existing snapshots\nas already optimized. Simply re-add them to the scheduler instead.\n\nAlso use separate optimizer threads in quota tests to avoid\ninterference with resetStaleTasksForThread.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* [AMORO-4089] Avoid adding completed process to tableQueue during recovery\n\nWhen all tasks are already completed during recovery, skip adding the\nprocess to tableQueue and directly trigger beginCommitting() to prevent\nan empty shell process from lingering in the queue.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* [AMORO-4089] Add Javadoc to completeEmptyProcess() documenting broader scope\n\nDocument that completeEmptyProcess() resets the table from any non-IDLE\nstate, not just PLANNING/PENDING, as it is now also used during startup\nrecovery for tables with unrecoverable processes.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* [AMORO-4089] Remove redundant KILLED status guard in recovery constructor\n\ncanResumeProcess() already filters out KILLED processes, so the\nstatus !\u003d KILLED guard in the recovery constructor is unnecessary.\nRemove it to clean up legacy code as part of the refactoring.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* [AMORO-4089] Lower recovery log level for SCHEDULED/ACKED tasks to DEBUG\n\nTransient recovery state logs can be noisy in clusters with many tables.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e"
    },
    {
      "commit": "d54b9362e5b58524f69a13e8441f308133e0cc7e",
      "tree": "074500a963d51869047268eb513d6a3bdc5fd267",
      "parents": [
        "4b9bf00d94f1ee5b716f05b3d67d13d594ee33af"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Wed Mar 04 19:36:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 19:36:10 2026 +0800"
      },
      "message": "[UI]: Optimize table ui and deduplicate 403 login error (#4093)\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e"
    },
    {
      "commit": "4b9bf00d94f1ee5b716f05b3d67d13d594ee33af",
      "tree": "e7e686b3fda00c7091ad84d296f5eabf2282f8c6",
      "parents": [
        "cf8561a6998cfd7e5daa845c4239ed1287ece434"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Wed Mar 04 19:35:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 19:35:30 2026 +0800"
      },
      "message": "[UI] Provide new login page (#4094)\n\n[Web] Provide new login page\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e"
    },
    {
      "commit": "cf8561a6998cfd7e5daa845c4239ed1287ece434",
      "tree": "b635ce88476c7822ee085919e5b846f2c530db9c",
      "parents": [
        "7ea367ee5a2b521c8763272c793dfa937af2a342"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Wed Mar 04 10:29:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 10:29:39 2026 +0800"
      },
      "message": "[AMORO-3832] Update amoro site to meet ASF graduation requirements (#4105)\n\n* Add Events section to site navigation\n\n* Self-host Lato font to comply with ASF policy"
    },
    {
      "commit": "7ea367ee5a2b521c8763272c793dfa937af2a342",
      "tree": "0dad4b5989754950ab817e5257d15f486a99358d",
      "parents": [
        "1af9f36e24d5f0df115eae6edb1ddfeb46ac159e"
      ],
      "author": {
        "name": "Darcy",
        "email": "331046161@qq.com",
        "time": "Tue Mar 03 10:30:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 10:30:21 2026 +0800"
      },
      "message": "[AMORO-4044][amoro-format-iceberg] Fix SLF4J log format placeholder in TableEntriesScan (#4102)\n\n[AMORO-4044] Fix SLF4J log format placeholder in TableEntriesScan\n\nSigned-off-by: Darcy \u003clintingbin@lilith.com\u003e"
    },
    {
      "commit": "1af9f36e24d5f0df115eae6edb1ddfeb46ac159e",
      "tree": "cc43606db10ddd6cd4764c36778a9a8c49bcf105",
      "parents": [
        "e02295bb8fe0ee0892c87222fcfc5245c656b4ba"
      ],
      "author": {
        "name": "zhangwl9",
        "email": "1298877813@qq.com",
        "time": "Tue Mar 03 10:29:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 10:29:47 2026 +0800"
      },
      "message": "[AMORO-4037] Support dynamic refresh interval for table metadata refreshing in TableRuntimeRefreshExecutor (#4038)\n\nThis commit adds a dynamic refresh interval for table metadata refreshing support.\n\nThis is useful for a catalog that contains real-time tables and some static tables.\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "e02295bb8fe0ee0892c87222fcfc5245c656b4ba",
      "tree": "f49623d164cdf5be14784a6d6a00e91a92b7d0e1",
      "parents": [
        "743e6f1cde34ec5b0dcc6b93503557c2daed2b12"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "jpark92@outlook.kr",
        "time": "Mon Mar 02 16:08:31 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 15:08:31 2026 +0800"
      },
      "message": "[Feature] Add metric category filtering support to Prometheus exporter (#4084)\n\n* Add metric category filtering support to Prometheus exporter\n\nAllow users to enable/disable metric categories (self-optimizing,\noptimizer-group, orphan-files, ams-jvm, table-summary) via\nmetric-reporters.yaml properties. All categories are enabled by\ndefault for backward compatibility. Also update Helm chart values\nand configmap tests to reflect the new configuration options.\n\nSigned-off-by: jiwonpark \u003cjiwonpark@example.com\u003e\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Replace category-based filtering with regex-based metric filtering\n\nReplace the fixed category enum approach with a flexible regex-based\nmetric filter. Users can now specify include/exclude patterns via\nmetric-filter.includes and metric-filter.excludes properties to\nfreely configure which metrics are exported.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n* Handle invalid regex patterns gracefully and add includes Helm test\n\n- Catch PatternSyntaxException in MetricFilter.fromProperties() and\n  fall back to ACCEPT_ALL with a warning log instead of failing\n  reporter initialization\n- Add tests for invalid regex fallback (includes and excludes)\n- Add Helm unittest for metric-filter.includes configuration\n- Fix missing newline at end of amoro-configmap_test.yaml\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: jiwonpark \u003cjiwonpark@example.com\u003e\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "743e6f1cde34ec5b0dcc6b93503557c2daed2b12",
      "tree": "47ad45ca02efe522b9d5ae4fe4549f88f4fc9642",
      "parents": [
        "853562e3558902e5636b498ce04fee5c2f90a611"
      ],
      "author": {
        "name": "baiyangtx",
        "email": "xiangnebula@163.com",
        "time": "Wed Feb 25 20:02:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 20:02:28 2026 +0800"
      },
      "message": "[Improvement]: Refactor process API and table runtime extension interfaces (#4097)\n\n* improvement: refactor process API and table runtime extension interfaces\n\n# Context\n\nSplit from upstream PR apache/amoro#4081 to make review easier.\n\nThis MR introduces the new process extension APIs in common module, without touching most AMS internals yet.\n\n# Changes\n\n- Promote `ProcessFactory` to a richer abstraction in `amoro-common`, preparing for plugin-based table process extension.\n- Adjust `Action`/`IcebergActions` and `TableRuntime` to align with the new process model.\n- Move `ActionCoordinator` into `amoro-common` so it can be shared as a public abstraction.\n- Introduce `ProcessTriggerStrategy` to describe trigger policies for processes.\n- Clean up legacy process state classes which will be replaced by the new abstractions in follow-up MRs.\n\n# Notes\n\n- This commit only updates the common module and the shared `ActionCoordinator` API; AMS-side wiring and runtime refactors will be done in separate branches/MRs as discussed.\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: If84ada8fcae1cfb11577d56d3866db7ce0949102\n\n* fix compile error\n\n* fix compile error\n\n* fix compile error3\n\n* getTableConfig\n\n* refactor\n\n---------\n\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e"
    },
    {
      "commit": "853562e3558902e5636b498ce04fee5c2f90a611",
      "tree": "58288fb30a2b508f7c838b110aac7370ca3725b7",
      "parents": [
        "3d824b094335a83d565e26b09d83b01e2024dd60"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Fri Feb 20 11:10:15 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 20 10:10:15 2026 +0800"
      },
      "message": "[Hotfix] Fix CI Docker API compatibility for Testcontainers (#4091)\n\nGitHub Actions runner updated Docker engine to require minimum API\nversion 1.44, but Testcontainers uses docker-java which defaults to\nAPI version 1.32, causing test failures.\n\n- Upgrade Testcontainers in amoro-ams from 1.17.2/1.19.6 to 1.20.1\n- Add docker-java.properties with api.version\u003d1.44 to amoro-ams and\n  amoro-mixed-flink-common test resources\n- Update dev/deps/dependencies-hadoop-2-spark-3.3 for changed\n  transitive dependencies\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "3d824b094335a83d565e26b09d83b01e2024dd60",
      "tree": "b34f37dafb4a9c2ef6a9e4888c7b58dd2eb89195",
      "parents": [
        "fda105e47e5034b5e4d033ec69f2244b7b20c1c6"
      ],
      "author": {
        "name": "Darcy",
        "email": "lintingbin@lilith.com",
        "time": "Fri Feb 13 22:45:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 13 22:45:51 2026 +0800"
      },
      "message": "Correct the status of table runtime after ams restarted. (#4043)\n\n"
    },
    {
      "commit": "fda105e47e5034b5e4d033ec69f2244b7b20c1c6",
      "tree": "a6d85de406c30dfbb6d07d349e47aaaf64243240",
      "parents": [
        "e3671b52890eed298901eef44a606e6a93e96e7b"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Thu Feb 12 12:14:38 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 12 11:14:38 2026 +0800"
      },
      "message": "[Hotfix] Fix incorrect Last Commit Time showing year 58000+ in partition view (#4083)\n\nThe last_updated_at column from Iceberg PARTITIONS metadata table stores\ntimestamps in microseconds, but it was passed directly to the frontend\nwhich expects milliseconds. This caused the displayed year to be ~58000.\n\nConvert microseconds to milliseconds by dividing by 1000, consistent\nwith how snapshot.timestampMillis() is used elsewhere.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "e3671b52890eed298901eef44a606e6a93e96e7b",
      "tree": "b534637a275537038d9c01d77223da6515182b41",
      "parents": [
        "48457b7ecf1194f086c0f273807a7d6bebb5e16a"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Wed Feb 11 14:43:59 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 11 13:43:59 2026 +0800"
      },
      "message": "[AMORO-4080] Make periodic executor intervals configurable (#4079)\n\nMake hardcoded intervals configurable for DanglingDeleteFilesCleaningExecutor and SnapshotsExpiringExecutor\n\nAdd ConfigOption\u003cDuration\u003e for expire-snapshots.interval (default 1h) and\nclean-dangling-delete-files.interval (default 1d) to allow runtime configuration,\nconsistent with other periodic executors like OrphanFilesCleaningExecutor.\n\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "48457b7ecf1194f086c0f273807a7d6bebb5e16a",
      "tree": "5d04358a25dbcb01a9b6fddb05572e36240e9259",
      "parents": [
        "ef4f5cfa422c8cb2c36dbe3e7fdb29af6724e644"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Tue Feb 10 11:56:40 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 10 10:56:40 2026 +0800"
      },
      "message": "[Hotfix] Fix optimizer group not updated on table refresh (#4076)\n\n* [Hotfix] Fix optimizer group not updated on table refresh\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e\n\n* Remove unused configChanged variable in DefaultTableRuntime.refresh()\n\nSigned-off-by: jpark92@outlook.kr\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e\nSigned-off-by: jpark92@outlook.kr\nSigned-off-by: Jiwon Park \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "ef4f5cfa422c8cb2c36dbe3e7fdb29af6724e644",
      "tree": "30f3ca5386de3b51ca5d3dd55124645933bdba63",
      "parents": [
        "4677f14c292abe890fc1ec1304065835ee07fe02"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Mon Feb 09 15:35:13 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 09 14:35:13 2026 +0800"
      },
      "message": "[UI] Fix stale cache causing \u0027Table does not exist\u0027 error (#4075)\n\n* [UI] Fix stale cache causing \u0027Table does not exist\u0027 error\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e\n\n* [UI] Fix race condition in getTableDetails when route changes during request\n\nSigned-off-by: Jiwon Park \u003c22048252+j1wonpark@users.noreply.github.com\u003e\n\n---------\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e\nSigned-off-by: Jiwon Park \u003c22048252+j1wonpark@users.noreply.github.com\u003e"
    },
    {
      "commit": "4677f14c292abe890fc1ec1304065835ee07fe02",
      "tree": "d7dc2d62efe42833d6c651727e008bf8d42f8769",
      "parents": [
        "73c868c26b3867c0ba29e500c24adf555d477869"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Fri Feb 06 12:39:53 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 06 11:39:53 2026 +0800"
      },
      "message": "[Hotfix] Fix uninitialized OPTIMIZER_LOG_CONF_FILE causing Log4j parsing error (#4074)\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "73c868c26b3867c0ba29e500c24adf555d477869",
      "tree": "01a73a8664ccb0a11686abc9cd08b3ac8bad8523",
      "parents": [
        "5d292eca509b70c70b4656d3cb3997c7c016b6f3"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Thu Feb 05 19:04:59 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 18:04:59 2026 +0800"
      },
      "message": "[HotFix] Fix NoClassDefFoundError for Guava ImmutableMap during Hive-based Iceberg catalog initialization (#4069)\n\n* [Bug] Fix NoClassDefFoundError for Guava ImmutableMap during Hive-based Iceberg catalog initialization\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e\n\n* [HotFix] Update dependency list after changing Guava scope from test to compile\n\n* Rename guava version property to guava-hive.version for clarity\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e\n\n---------\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "5d292eca509b70c70b4656d3cb3997c7c016b6f3",
      "tree": "8ebd2cc582213868ad8b60b2905bdf6dde44ec40",
      "parents": [
        "3d3358dc88660c9fa356d2686a70807ac27df752"
      ],
      "author": {
        "name": "Juntao Zhang",
        "email": "juntzhang@foxmail.com",
        "time": "Thu Feb 05 14:36:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 14:36:35 2026 +0800"
      },
      "message": "[AMORO-4066] Fix incorrect optimizing duration calculation in Paimon format (#4067)\n\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e"
    },
    {
      "commit": "3d3358dc88660c9fa356d2686a70807ac27df752",
      "tree": "df6fe69d5d5e4b3087ae2ca96f4bccf32b09316d",
      "parents": [
        "5427715fe1e793a231a05315c06e49af5bf8585c"
      ],
      "author": {
        "name": "Jiwon Park",
        "email": "22048252+j1wonpark@users.noreply.github.com",
        "time": "Tue Feb 03 00:08:33 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 23:08:33 2026 +0800"
      },
      "message": "[Hotfix] Add missing ams-optimizing-uri to Kubernetes optimizer container Helm template (#4070)\n\nSigned-off-by: j1wonpark \u003cjpark92@outlook.kr\u003e"
    },
    {
      "commit": "5427715fe1e793a231a05315c06e49af5bf8585c",
      "tree": "be3e4cee7a10a57fdb0767e90f7272de8411b30a",
      "parents": [
        "75f3a600fde69dab1220249aa4cd92f3da15eedf"
      ],
      "author": {
        "name": "Juntao Zhang",
        "email": "juntzhang@foxmail.com",
        "time": "Sat Jan 31 10:01:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 31 10:01:09 2026 +0800"
      },
      "message": "[AMORO-4063] Fix missing S3 AK/SK in Apache Paimon format (#4064)\n\n"
    },
    {
      "commit": "75f3a600fde69dab1220249aa4cd92f3da15eedf",
      "tree": "11159660f2a223d5cbeec4b32b7bdd37d231f4ea",
      "parents": [
        "063c401c796c1d353d1700e55077b8029e59459f"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Fri Jan 30 17:12:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 17:12:19 2026 +0800"
      },
      "message": "[UI] Optimize snapshot charts representation (#4071)\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e"
    },
    {
      "commit": "063c401c796c1d353d1700e55077b8029e59459f",
      "tree": "d3721f37a7e8c2d6ad1e69eb6e16bc83ac8c14be",
      "parents": [
        "b61383b2a03dcf9dd447ed2cceea4bdd143bda2e"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Fri Jan 30 16:22:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 16:22:34 2026 +0800"
      },
      "message": "[UI] Refine Tables page selection and navigation UX (#4065)\n\n* feat(web): independent scroll state per sidebar pages (restore on switch)\n\n## Summary\n\nImplement per-page independent scroll state for primary sidebar pages in the web console so that each page remembers and restores its own scroll position when navigating between routes.\n\n## Changes\n\n- Layout\n  - Update `amoro-web/src/components/Layout.vue` to make the main content area a fixed-height, non-scrolling container (`height: calc(100vh - 48px); overflow: hidden;`).\n  - Keep the router-view inside this fixed area so individual pages can own their own scroll containers.\n\n- Scroll state hook\n  - Add `amoro-web/src/hooks/usePageScroll.ts` implementing a generic Composition API hook:\n    - Uses `useRoute()` and a module-level map keyed by route name/path to store `scrollTop`.\n    - Restores scroll position in `onMounted` / `onActivated` and saves it in `onBeforeUnmount` / `onDeactivated`.\n    - Exposes a `pageScrollRef` to be bound to the page-level scroll container.\n\n- Overview page\n  - `amoro-web/src/views/overview/index.vue`\n    - Wrap main content in `\u003cdiv class\u003d\"page-scroll\" ref\u003d\"pageScrollRef\"\u003e`.\n    - Import and use `usePageScroll` in `setup()` and return `pageScrollRef`.\n    - Add `.page-scroll { height: 100%; overflow-y: auto; }` to scoped styles.\n\n- Catalogs page\n  - `amoro-web/src/views/catalogs/index.vue`\n    - Import and call `usePageScroll` in `\u003cscript setup\u003e` and bind `pageScrollRef`.\n    - Wrap root layout in `\u003cdiv class\u003d\"page-scroll\" ref\u003d\"pageScrollRef\"\u003e`.\n    - Add `.page-scroll { height: 100%; overflow-y: auto; }` to scoped styles, keeping existing inner scroll for the catalog list.\n\n- Tables page\n  - `amoro-web/src/views/tables/index.vue`\n    - Import `usePageScroll` and obtain `pageScrollRef` in `setup()`.\n    - Wrap the top-level `.tables-wrap` in `\u003cdiv class\u003d\"page-scroll\" ref\u003d\"pageScrollRef\"\u003e`.\n    - Add `.page-scroll { height: 100%; overflow-y: auto; }` so the tables page itself becomes the scroll container.\n    - Preserve existing inner scrolling for the tabs content and resize behavior.\n\n- Optimizing / Resource page\n  - `amoro-web/src/views/resource/index.vue`\n    - Import and use `usePageScroll`.\n    - Wrap page content in `\u003cdiv class\u003d\"page-scroll\" ref\u003d\"pageScrollRef\"\u003e`.\n    - Add `.page-scroll { height: 100%; overflow-y: auto; }` and remove redundant `overflow-y: auto` from the root container so the new wrapper owns the scroll.\n\n- Settings page\n  - `amoro-web/src/views/settings/index.vue`\n    - Import and use `usePageScroll`.\n    - Wrap content with `\u003cdiv class\u003d\"page-scroll\" ref\u003d\"pageScrollRef\"\u003e`.\n    - Add `.page-scroll { height: 100%; overflow-y: auto; }` and rely on the wrapper as the only scroll container.\n\n- Terminal page\n  - `amoro-web/src/views/terminal/index.vue`\n    - Import and use `usePageScroll`, exposing `pageScrollRef` from `setup()`.\n    - Wrap the root `.console-wrap` in `\u003cdiv class\u003d\"page-scroll\" ref\u003d\"pageScrollRef\"\u003e`.\n    - Add `.page-scroll { height: 100%; overflow-y: auto; }` so the terminal view also participates in per-page scroll state.\n\n## Notes\n\n- Scope is limited to primary sidebar pages (overview, catalogs, tables, optimizing/resource, settings, terminal) and does not touch inner detail tabs or dialogs.\n- Verified frontend build via `pnpm run build` and full Maven build via `./mvnw -q -DskipTests package`.\n- Each page now maintains an independent scroll position that is restored when navigating back to it from another sidebar page.\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: I751c82f4f4280194945095050c33f3407a3f52e5\n\n* fix(tables): fill URL query from last selection on entering /tables to restore details\n\n### Summary\n\n- Read last selected table from `localStorage` (`easylake-menu-catalog-db-table`) when entering `/tables`\n- If current `route.query` does not contain a complete `catalog/db/table` triple, backfill them from the stored selection\n- Preserve existing query parameters (e.g. `tab`) and optionally reuse stored `type` if present\n- Keep existing `watch(hasSelectedTable)`, `watch(route.query)` and `detailRef.getTableDetails()` logic unchanged so that details loading is still driven by the route\n\n### Technical details\n\n- Add `STORAGE_TABLE_KEY` constant alongside sidebar width storage key\n- In `onMounted` of `Tables` view:\n  - Initialize sidebar width and active tab as before\n  - When `route.path \u003d\u003d\u003d \u0027/tables\u0027` and `catalog/db/table` are not all present in `route.query`, attempt to parse the last table selection from `localStorage`\n  - If `catalog`, `database` and `tableName` all exist in storage, construct a new query object based on the current `route.query`, backfill `catalog`, `db`, and `table`, and copy `type` if available and not already set\n  - Call `router.replace({ path: \u0027/tables\u0027, query })` once so that downstream watchers and the Details component naturally trigger `getTableDetails()` based on the updated route\n- Fix minor indentation around the `setup` return block to satisfy ESLint; leave the existing `vue/attributes-order` warning untouched as a historical style issue\n\n### Notes\n\n- The new behavior only applies when navigating to `/tables` with incomplete table query parameters; existing URLs that already contain a complete `catalog/db/table` triple are left as-is.\n- Right-side details remain fully route-driven, avoiding any hidden coupling to the left-hand explorer selection state.\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: I00544fdfa0fd2cf736df2b4b6a83ccc13a085316\n\n* fix(explorer): auto expand tree path by selected from route; keep URL as single source\n\n- Add `expandPathBySelected` helper in `TableExplorer.vue` to load catalog/database children and merge expanded keys based on current route selection.\n- After restoring expanded state from `sessionStorage`, expand the tree path from `route.query.catalog/db` and sync `selectedKeys` when a table is present.\n- Introduce a `watch(route.query)` in `TableExplorer` so that any change to `catalog/db/table` from the URL drives tree expansion and selection, keeping the URL as the single source of truth.\n- Remove direct usage of localStorage snapshot (`storageCataDBTable`) in `TableExplorer` and rely on the existing URL completion logic in `tables/index.vue` for filling query params from the last selection.\n\nLint\n- Run `npx eslint src/views/tables/components/TableExplorer.vue` under `amoro-web`; no errors, only an existing `vue/multiline-html-element-content-newline` warning on an unchanged template section.\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: Ifb5eae4a84c508bcf3fd4c7fb2dbd3177da379fe\n\n* feat(tables): treat blank /tables as fresh entry, only URL-driven selection; fix navigations to pass catalog/db/table\n\n- Remove localStorage-based URL completion in tables/index.vue so blank /tables is treated as a fresh entry\n- Keep table details rendering driven purely by route.query.catalog/db/table\n- Confirm all non-/tables entry points that know a table already pass catalog/db/table via URL query\n- Leave sidebar navigation to /tables as a blank entry when no specific table context is available\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: Ib813393838813c178a4b17ae08c16e7e45ac3634\n\n* feat(sidebar): restore last selected table when returning to /tables; keep blank /tables fresh\n\n- Restore the last selected table when navigating back to `/tables` via the sidebar, by reading `easylake-menu-catalog-db-table` from `localStorage` and passing `catalog/db/table` as URL query params when available\n- Keep a blank `/tables` (no `catalog/db/table` in URL) as a fresh entry without auto-selecting the last table\n- Only adjust the `Sidebar` navigation logic for the `tables` menu item; other menu entries remain unchanged\n\nChanges:\n- Update `amoro-web/src/components/Sidebar.vue` navClick handler to:\n  - Special-case the `tables` menu key to prefer restoring the last selected table when `localStorage` has complete information\n  - Fallback to plain `/tables` navigation when no valid last selection is present\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: I921f07380cf04b618fd1a756a5acf4ee3d55284d\n\n---------\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e"
    },
    {
      "commit": "b61383b2a03dcf9dd447ed2cceea4bdd143bda2e",
      "tree": "7fbf716b23c6be122ed1b7b556708f14fc341154",
      "parents": [
        "869860ec357931d22a8a941781bf6f39814dc9c7"
      ],
      "author": {
        "name": "7hong",
        "email": "hong7j@163.com",
        "time": "Thu Jan 29 10:36:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 10:36:56 2026 +0800"
      },
      "message": "[Hotfix] Fetch the latest MemoryUsage inside each gauge call (#4062)\n\n[Hotfix] Fetch the latest MemoryUsage inside each gauge call.\n\nfix checkstyle"
    },
    {
      "commit": "869860ec357931d22a8a941781bf6f39814dc9c7",
      "tree": "f44864f94db1cbce2e40451bf3ed747bdd86ad29",
      "parents": [
        "cad98698db9b7e7f12dfbaab950fb67e33061f81"
      ],
      "author": {
        "name": "davedwwang",
        "email": "iverson89w@163.com",
        "time": "Wed Jan 28 13:59:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 13:59:04 2026 +0800"
      },
      "message": "[AMORO-4040] Change default value of optimizer.task-execute-timeout to Integer.MAX_VALUE s (#4042)\n\nIn 0.8.1, we add `optimizer.task-executor-timeout` and set the default value to 1h\n which breaks the behavior with the previous version.\n\nIn this commit, we change the default to Integer.MAX_VALUE s, so that it behaviors\nlike the same as before."
    },
    {
      "commit": "cad98698db9b7e7f12dfbaab950fb67e33061f81",
      "tree": "c91261fa8790612fe2a8d717ddad07216f043f11",
      "parents": [
        "f5b0ac5641942368b8fb763ab2ba85f570529355"
      ],
      "author": {
        "name": "Xu Bai",
        "email": "tocreationbai@gmail.com",
        "time": "Tue Jan 27 10:51:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 27 10:51:49 2026 +0800"
      },
      "message": "Bump versions of hadoop3, kerby, slf4j, commons-lang3, netty, and k8s client (#4046)\n\n* [Dependency] Bump versions of Hadoop, Kerby, Log4j, Commons Lang3, Netty, and Fabric8 Kubernetes Client\n\n* [Dependency] Bump versions of SLF4J\n\n* update dep"
    },
    {
      "commit": "f5b0ac5641942368b8fb763ab2ba85f570529355",
      "tree": "955a7500b38d146d37c47fa42f85ee35447a33a5",
      "parents": [
        "b2985bb252f12eec6e62c06307f3ec8c6347231d"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Mon Jan 26 16:46:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 26 16:46:01 2026 +0800"
      },
      "message": "[Feature]: unify filesystem alias and add metastore matrix apis (#4060)\n\n* [Feature]: unify filesystem alias and add metastore matrix apis\n\n* spotless\n\n* fix ci\n\n---------\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e"
    },
    {
      "commit": "b2985bb252f12eec6e62c06307f3ec8c6347231d",
      "tree": "d5e63e1f2e7bf45c96350178a5a98a9c3c50a3bf",
      "parents": [
        "2bda3ab8e8359605cdf7361669fbdbcd86cebb7d"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Mon Jan 26 16:45:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 26 16:45:24 2026 +0800"
      },
      "message": "feat: optimize alignment of table content (#4056)\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e"
    },
    {
      "commit": "2bda3ab8e8359605cdf7361669fbdbcd86cebb7d",
      "tree": "d388808f10bb20fb55a34865965c39a954c70178",
      "parents": [
        "ba7f9278f07ef94e32080776be48cf7655116586"
      ],
      "author": {
        "name": "nathan.ma",
        "email": "majin1102@gmail.com",
        "time": "Thu Jan 22 11:02:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 22 11:02:06 2026 +0800"
      },
      "message": "[AMORO-3226] Provider a better table explorer view (#4053)\n\n* Provider a better table explorer view\n\n* chore: clean table explorer comments and dead code\n\n- Replace Chinese-only comments in new table explorer views with English equivalents to avoid non-ASCII comments in the codebase\n- Remove unused `hideTablesMenu` helper from tables view while keeping runtime behavior unchanged\n- Re-run Maven compile (`mvn -q -DskipTests compile`) to ensure Java modules still compile successfully after the cleanup\n\nCo-Authored-By: Aime \u003caime@bytedance.com\u003e\nChange-Id: I618daa3eb9097ab9e9fe4d68f4581431cbac5bf7\n\n* optimize experience\n\n* fix(tables): keep previous table when switching to empty database\n\n---------\n\nCo-authored-by: majin.nathan \u003cmajin.nathan@bytedance.com\u003e\nCo-authored-by: Aime \u003caime@bytedance.com\u003e"
    },
    {
      "commit": "ba7f9278f07ef94e32080776be48cf7655116586",
      "tree": "bf06a207a64a4ef484231e1d712e290503b6a135",
      "parents": [
        "c69eff45031ad31cd5efaf495b11bbaf0959414d"
      ],
      "author": {
        "name": "can",
        "email": "95597038+wardlican@users.noreply.github.com",
        "time": "Wed Jan 21 09:48:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 21 09:48:11 2026 +0800"
      },
      "message": "[Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. (#3846)\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [AMORO-3850] Fix openapi sdk build and refine the package name (#3847)\n\n* rename the sdk pkg\n\n* version and artifactId\n\n* [HotFix] Change the uri configuration name in terminal  (#3844)\n\nChange the uri configuration in terminal\n\n* [AMORO-3851] Separate spark-3.3 and spark-3.5 modules (#3848)\n\n* separate\n\n* java17\n\n* build\n\n* GA\n\n* jdk17 tests\n\n* fix conflicts\n\n* \u003cjava.source.version\u003e17\u003c/java.source.version\u003e\n\n* JDK8 + Spark-3.5\n\n* revert JDK17\n\n* [AMORO-3857] Make the metadata file name conform to the Iceberg spec (#3858)\n\nEach version of table metadata is stored in a metadata folder under the table’s base location using a naming scheme that includes a version and UUID: \u003cV\u003e-\u003crandom-uuid\u003e.metadata.json.\n\n* [AMORO-3850][FOLLOWUP] Add GA for OpenAPI SDK (#3870)\n\n[AMORO-3850][FOLLOWUP] Add GA for openAPI SDK\n\n* [AMORO-3864] Bump spark 3.5 version to 3.5.7 (#3860)\n\nBump spark 3.5 version to 3.5.7\n\n* [AMORO-3852][BUILD] Enhance build system (#3849)\n\n* Build project with fixed version\n\ncheck-latest: false\n\nGA\n\n* docs\n\n* shell\n\n* [AMORO-3851][FOLLOWUP] Using scala.binary.version for Spark dependency artifactId (#3861)\n\nUsing scala.binary.version for dependency artifactId\n\n* [AMORO-3851][FOLLOWUP] Fix and simplify spark versions management (#3874)\n\n* Fix iceberg-spark artifactId in amoro-mixed-spark-3-common\n\n* fix ut conflicts\n\n* [AMORO-3863] Add script to reformat code (#3862)\n\n* format\n\n* spark profiles\n\n* [AMORO-3852] Using Maven Wrapper (#3879)\n\n* save\n\n* 3.9.9\n\n* mvnw\n\n* slash\n\n* maven 3.9.11\n\n* maven wrapper 3.3.4\n\n* [AMORO-3880] Make amoro-openapi-sdk standalone (#3881)\n\n* [AMORO-3880] Make amoro-openapi-sdk standalone\n\n* save\n\n* [AMORO-3891] Bump netty version to 4.1.128.Final to fix CVE (#3892)\n\nBump netty version to 4.1.128.Final to fix CVE\n\n* [AMORO-3890]Bump flink versions from 1.16.2/1.17.1/1.20.0 to 1.16.3/1.17.2/1.20.3 (#3889)\n\nbump\n\n* [AMORO-3880][FOLLOWUP] Fix pull request paths for OpenAPI SDK CI (#3903)\n\n* Bump orc-core version from 1.8.3 to 1.9.7 (#3900)\n\n* [AMORO-3883] Bump Paimon 1.1.1 to 1.2.0 (#3884)\n\n* Bump Paimon 1.1.1 to 1.2.0\n\n* [AMORO-3883] Bump Paimon 1.1.1 to 1.2.0\n\n---------\n\nCo-authored-by: Xu Bai \u003cxuba@apache.org\u003e\n\n* [AMORO-3863][FOLLOWUP] Support to reformat pom (#3882)\n\nSupport to reformat pom\n\nformat trino\n\n* [AMORO-3872] Support to customize basic authentication implementation (#3871)\n\n* support to customize basic auth\"\n\n* save\n\n* docs\n\n* common\n\n* address comments\n\n* nit\n\n---------\n\nCo-authored-by: Xu Bai \u003cxuba@apache.org\u003e\n\n* [AMORO-3907] Bump kubernetes-client version to 6.13.5 (#3908)\n\nBump kubernetes-client version to 6.13.5\n\n* [AMORO-3875] Support to build on Spark Scala-2.13 (#3878)\n\n* scala binary version\n\nsave\n\nbin\n\nprofile\n\nGA\n\nrevert paimon ams\n\napi compatiblity\n\nfix flink scala\n\nstyle\n\nsave\n\nsave\n\nrewrite by scala\n\nsave\n\nconflicts\n\ndependency\n\nsave\n\nsave\n\nscala paimon\n\nignore paimon\n\nidea\n\n* nit\n\n* nit\n\n* save\n\n* revert ci change\n\n* [AMORO-3875][FOLLOWUP] Fix optimizer-spark docker image build due to artifactId change (#3912)\n\n* fix\n\nsave\n\n* test\n\n* Revert \"test\"\n\nThis reverts commit 6c38dbd2b465803ba84621a83e0c382d9c4bccc8.\n\n* [AMORO-3863][FOLLOWUP] Enable format-mixed-format-trino profile on JDK17+ automatically  (#3906)\n\nreformat\n\n* [AMORO-3848][FOLLOWUP] Prompt spark profile in docker build (#3904)\n\nPrompt spark profile in docker build\n\n* [AMORO-3918][INFRA] Add dependencies check CI (#3917)\n\n* [AMORO-3931] Exclude curator and zookeeper deps (#3932)\n\n* save\n\ndeps\n\nexclude jline\n\n* nit\n\n* [AMORO-3945][DOCS] Add docs for REST API (#3944)\n\ndocs\n\ncombine\n\n* [AMORO-3873] Support Bearer/JWT authentication (#3905)\n\n* save\n\n* save\n\n* save\n\n* save\n\n* Save\n\n* asve\n\n* rename package\n\n* comments\n\n* basic\n\n* remove token from log\n\n* [AMORO-3938] change file_content_b64 column type to CLOB type (#3939)\n\n* [AMORO-3933] Fix Playground demo failure due `PartitionExpressionForMetastore class not found` (#3935)\n\n* Fix Playground demo failure due PartitionExpressionForMetastore class not found\n\n* Revert \"Fix Playground demo failure due PartitionExpressionForMetastore class not found\"\n\nThis reverts commit fea6ddcbbe2e8625a58bdd6e0291012da4eb5367.\n\n* add for runtime hive-exec\n\n---------\n\nCo-authored-by: Xu Bai \u003cxuba@apache.org\u003e\n\n* Save the last completion time for each cleanup operation performed on each optimization table. (#3802)\n\n* Save the last completion time for each cleanup operation performed on each optimization table.\n\n# Conflicts:\n#\tamoro-ams/src/main/resources/mysql/upgrade.sql\n\n* Store the execution time of each cleanup operation for the optimization table in the table_runtime_state table.\n\n* fixup style\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e\n\n* nit: remove duplicate code (#3957)\n\nNIT: Remove duplicate code\n\n* [AMORO-3873][FOLLOWUP] Rename rest auth bearer type to JWT (#3953)\n\n* [AMORO-3968] Update the thrift api compile command to use amoro shaded thrift (#3967)\n\n* relocate generated thrift code to use amoro shaded thrift\n\n* docs\n\n* save\n\n* profile\n\n* [AMORO-3961] Filter null key and value for Configurations::toMap (#3962)\n\nfilter null key value\n\n* nit: remove unused code (#3959)\n\nremove unused code\n\n* [AMORO-3972][Core] Upgrade default Spark version from 3.3 to 3.5 (#3975)\n\n* [AMORO-3972][Core] Upgrade default Spark version from 3.3 to 3.5\n\nThis PR upgrades the default Spark version from 3.3 to 3.5 in the Amoro project.\n\nChanges:\n- pom.xml: Update spark.version from 3.3.4 to 3.5.7 and spark.major.version from 3.3 to 3.5\n- pom.xml (hadoop2 profile): Update spark.version from 3.3.4 to 3.5.7 and spark.major.version from 3.3 to 3.5\n- docker/build.sh: Update SPARK_VERSION from 3.3.3 to 3.5.7\n- docker/optimizer-spark/Dockerfile: Update ARG SPARK_VERSION from 3.3.3 to 3.5.7\n- .github/workflows/docker-images.yml: Update Spark optimizer matrix from 3.3.3 to 3.5.7\n- README.md: Update Spark optimizer default version documentation\n\nCloses #3972\n\n* Keep Spark 3.3 as default for hadoop2 profile\n\nAddress review feedback from @turboFei:\nFor hadoop2 profile, keep using the legacy Spark 3.3 by default\nfor better compatibility with Hadoop 2.x.\n\n* Fix Spark version parameter name in README.md\n\nAddress review feedback from @turboFei:\nChange -Dspark-optimizer.spark-version to -Dspark.version\nThis was missed in PR #3874.\n\n* [AMORO-3966][Helm] Support custom volumes and volumeMounts (#3965)\n\n[Improvement][Helm] Support custom volumes and volumeMounts\n\n* [AMORO-3970] Update README.md with correct Spark versions for Mixed format (#3978)\n\n* [AMORO-3977] Combine amoro-site to prevent docs loose sync (#3979)\n\n* clone site\n\n* remove invalid soft links\n\n* docs soft link\n\n* Update site/README.md with clear structure documentation\n\n- Reorganized documentation to show the versioned and non-versioned content structure\n- Provided a clear directory tree representation of the site structure\n- Updated instructions for running the documentation site locally\n- Added section on testing both sites together\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* Update site/README.md with clear structure documentation\n\n- Fixed references to make it clear this is part of the main repository\n- Updated section titles to match the new organization\n- Clarified paths for versioned and non-versioned content\n- Simplified local development instructions\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n\n* github action\n\n* ignore\n\n* rat exclude site\n\n* test\n\n* test please\n\n* Revert \"test please\"\n\nThis reverts commit 7c536fe15f78126f8baa5e2343fb6d78266112ec.\n\n* label\n\n---------\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e\n\n* [Improvement]: Disable verification for helm-unittest plugin installation (#3993)\n\nDisable verification for helm-unittest plugin installation\n\n* [AMORO_3990] Add package chart instructions to README (#3991)\n\n* [Feature] Introduce a new framework that supports scheduling for Formats and Processes (#3924)\n\n* process service poc\n\n* Refactor table process framework\n\n* Optimize and refactor the process service framework \u0026 support framework test case\n\n---------\n\nCo-authored-by: dailiang \u003cdailiang@bytedance.com\u003e\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: baiyangtx \u003cxiangnebula@163.com\u003e\n\n* [AMORO-3981] Automatic generate amoro configuration docs  (#3982)\n\n* auto generate ams config\n\n* add auto generate notice\n\n* junit 5\n\n* convertToString\n\n* Update CONTRIBUTING.md\n\n---------\n\nCo-authored-by: big face cat \u003c731030576@qq.com\u003e\n\n* [AMORO-3981][FOLLOWUP] Refine the duration to string format  (#3987)\n\n* [AMORO-3981][FOLLOWUP] Refine duration type parse and convert to string\n\n* Revert \"[AMORO-3981][FOLLOWUP] Refine duration type parse and convert to string\"\n\nThis reverts commit 877bcb9a71f12173a6ee6961b4e3a61091c76140.\n\n* format duration with TimeUtils.formatWithHighestUnit\n\n* largest unit\n\n* [AMORO-1258] Support Zookeeper kerberos authentication (#3980)\n\n* [AMORO-1258] Support Zookeeper kerberos authentication\n\n* remove minkdc\n\n* Revert \"remove minkdc\"\n\nThis reverts commit 466d6320dfee64f8324be1ed35b8cc1c39a05b7f.\n\n* docs\n\n* [AMORO-3934] Manage com.fasterxml.jackson dependencies in dependencyManagement  (#3936)\n\n* jackson version\n\n* deps\n\n* fasterxml.jackson.version\n\n---------\n\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e\n\n* [AMORO-3866] Using shaded hadoop-client-api and hadoop-client-runtime for hadoop3 (#3983)\n\nhadoop client api and hadoop client runtime\n\nremove\n\nguava test\n\nreplace\n\nexclude\n\nremove runtime\n\n* [AMORO-3632] Refine data expiration literal calculation for date type (#3964)\n\n* [Feature]: data-retention, add support for partition column type Date #3632\n\n* [AMORO-3632]: data-retention, add support for partition column type Date\n\n* [AMORO-3632]: data-retention, add support for partition column type Date\n\n* [AMORO-3632]: data-retention, add support for partition column type Date\n\n* [AMORO-3632] Fix #3665: Prevent long overflow in Date expiration calculation and fix related tests\n\n---------\n\n* [AMORO-3885] fix missing oss.endpoint for internal mixed_iceberg catalog (#3886)\n\n* fix missing oss.endpoint for internal mixed_iceberg catalog\n\n* fix missing oss.endpoint for internal mixed_iceberg catalog\n\n---------\n\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e\n\n* [AMORO-2635] Enhance table partition files list performance (#4003)\n\n* [AMORO-2635]\n\n* UT\n\n* UT for fallback\n\n* address comments\n\n* TODO\n\n* [AMORO-3628] Add user logo wall on the home page. (#4010)\n\n* [AMORO-3628] Add users logo wall in the home page\n\n* update\n\nCo-authored-by: Claude\n\n* [AMORO-3804] Skip RUNTIME_CONTEXT_CACHE for TableMetaStore with local configuration (#4005)\n\n* [AMORO-3804] Skip RUNTIME_CONTEXT_CACHE for TableMetaStore with local configuration\n\n* return\n\n* test\n\n* configuration\n\n* create runtime context directly\n\n* remove unneeded tests\n\n* [AMORO-4011] Fix JUnit 4 tests skipped (#4017)\n\n* add back\n\n* test\n\n* revert test\n\n* deps\n\n* [AMORO-3775] Add support for metric-based refresh event trigger in TableRuntimeRefreshExecutor (#3776)\n\n[AMORO-3775] Add support for metadata-based refresh event in TableRuntimeRefreshExecutor\n\n* [AMORO-3998]support DATABASE HA SERVICE (#3997)\n\nsupport DATABASE HA SERVICE\n\nCo-authored-by: dailiang \u003cdailiang@bytedance.com\u003e\n\n* [Hotfix] Fix the deploy site GitHub workflow (#4020)\n\n* Fix deploy site GitHub workflow\n\n* Add publish information in the .asf.yaml\n\n* [Hotfix] Enable manual triggering for site deployment workflow (#4021)\n\n* [Hotfix]Refactor the build command in the `Publish Docker Image` GitHub workflow to reduce image size (#4023)\n\nRefactor the build command in the Publish DOcker Image GitHub workflow to reduce image size\n\n* [Hotfix] Fix typos (#4026)\n\n* [AMORO-3531] Drop support for java8 (#3899)\n\ndrop support jdk8\n\nCo-authored-by: Xu Bai \u003cxuba@apache.org\u003e\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e\n\n* [AMORO-3940] Flink config load will cause ClassCastException when dir… (#3941)\n\n[AMORO-3940] Flink config load will cause ClassCastException when directly return result of Yaml load\n\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e\n\n* [AMORO-3943] Shade all third party classes for spark runtime (#3942)\n\n* relocate\n\n* filter\n\n* [AMORO-4027] Bump shade plugin to fix compilation failure on JDK 17 (#4028)\n\n(cherry picked from commit 83e5272a8cefd3e2d010ffe00245b24a77eba6cc)\n\n* [AMORO-3973] Support spark3.4 for mixed format (#4013)\n\n* Copy the code form spark3.5\n\n* Optimize code\n\n* Maintain consistency in the references to scala-compiler and scala-library across Spark 3.5, Spark 3.4, and Spark 3.3\n\n* fixup\n\n---------\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e\n\n* [Hotfix] Try to fix site-deploy permission problem (#4025)\n\n* [AMORO-4022] [Improvement]: AMS Iceberg maintainer moved to the amoro-iceberg module (#4024)\n\n[AMORO-4022] AMS Iceberg maintainer moved to the amoro-iceberg module (#4022)\n\n* [AMORO-3994] Support Exposing AMS High Availability (HA) Status (#3996)\n\n[amoro-3994] Support Exposing AMS High Availability (HA) Status\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e\n\n* [Feature]: Support LDAP Authentication for Dashboard Login (#4009)\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e\n\n* [HotFix] Remove duplicate references to scala-library and scala-compiler (#4033)\n\nRemove duplicate references to scala-library and scala-compiler\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e\n\n* [HotFix] Shade third party classes for spark-3.4 runtime (#4032)\n\nShade third party classes for spark runtime 3.4\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [AMORO-3998]support DATABASE HA SERVICE (#3997)\n\nsupport DATABASE HA SERVICE\n\nCo-authored-by: dailiang \u003cdailiang@bytedance.com\u003e\n\n* [AMORO-3994] Support Exposing AMS High Availability (HA) Status (#3996)\n\n[amoro-3994] Support Exposing AMS High Availability (HA) Status\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Use a new configuration item to control whether master \u0026 slave mode is enabled. #3845\n\n* [Subtask]: Optimize the description information for use-master-slave-mode.\n\n---------\n\nCo-authored-by: wardli \u003cwardli@tencent.com\u003e\nCo-authored-by: Fei Wang \u003cfwang12@ebay.com\u003e\nCo-authored-by: ZhouJinsong \u003czhoujinsong0505@163.com\u003e\nCo-authored-by: yeatsliao \u003cliaoyt66066@gmail.com\u003e\nCo-authored-by: Xu Bai \u003cxuba@apache.org\u003e\nCo-authored-by: xuzifu666 \u003cxuzifu666@gmail.com\u003e\nCo-authored-by: simonsssu \u003cbarley0806@gmail.com\u003e\nCo-authored-by: zhangwl9 \u003c1298877813@qq.com\u003e\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e\nCo-authored-by: zhan7236 \u003c76658920+zhan7236@users.noreply.github.com\u003e\nCo-authored-by: Abhishek Pathania \u003ctheabhishekpathania@gmail.com\u003e\nCo-authored-by: xykera \u003cakrai9554@gmail.com\u003e\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e\nCo-authored-by: tcodehuber \u003ctcodehuber@gmail.com\u003e\nCo-authored-by: LiangDai-Mars \u003cdd574852610@gmail.com\u003e\nCo-authored-by: dailiang \u003cdailiang@bytedance.com\u003e\nCo-authored-by: zhangyongxiang.alpha \u003czhangyongxiang.alpha@bytedance.com\u003e\nCo-authored-by: baiyangtx \u003cxiangnebula@163.com\u003e\nCo-authored-by: big face cat \u003c731030576@qq.com\u003e\nCo-authored-by: davedwwang \u003civerson89w@163.com\u003e\nCo-authored-by: ConradJam \u003cjam.gzczy@gmail.com\u003e\nCo-authored-by: Xu Bai \u003ctocreationbai@gmail.com\u003e\nCo-authored-by: Jzjsnow \u003csnow.jiangzj@gmail.com\u003e\nCo-authored-by: leosanqing \u003cliurongtong001@qq.com\u003e\nCo-authored-by: leosanqing \u003cstormleo@qq.com\u003e\nCo-authored-by: Sebb \u003csebbASF@users.noreply.github.com\u003e\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e"
    },
    {
      "commit": "c69eff45031ad31cd5efaf495b11bbaf0959414d",
      "tree": "0eda63c51a733b32ba55272c31e5c0413de7328e",
      "parents": [
        "29fed7049d2ecde591a71c949c3f3fa834131d63"
      ],
      "author": {
        "name": "ZhouJinsong",
        "email": "zhoujinsong0505@163.com",
        "time": "Tue Jan 20 14:02:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 20 14:02:19 2026 +0800"
      },
      "message": "[Hotfix] Block followership forever for NoopHighAvailabilityContainer (#4052)\n\n* Block followership for NoopHighAvailabilityContainer\n\n* Fix a typo issue\n\n* Fix a typo issue"
    },
    {
      "commit": "29fed7049d2ecde591a71c949c3f3fa834131d63",
      "tree": "3e11014411c8e40ff4ee2e29577636c8c5d24801",
      "parents": [
        "5e3eddb3fae3451f585fc9a7cb15e84f02ab33ce"
      ],
      "author": {
        "name": "zhangwl9",
        "email": "1298877813@qq.com",
        "time": "Thu Jan 15 14:59:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 15 14:59:26 2026 +0800"
      },
      "message": "[Hotfix] Fix the description of spark version in document (#4039)\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "5e3eddb3fae3451f585fc9a7cb15e84f02ab33ce",
      "tree": "e25b1b5483e2307248e3084f9f35313bc8608e26",
      "parents": [
        "9fcf4cc59931b41e596eac0bc6449d23208f87a4"
      ],
      "author": {
        "name": "zhangwl9",
        "email": "1298877813@qq.com",
        "time": "Tue Jan 13 20:02:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 13 20:02:09 2026 +0800"
      },
      "message": "[HotFix] Shade third party classes for spark-3.4 runtime (#4032)\n\nShade third party classes for spark runtime 3.4\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "9fcf4cc59931b41e596eac0bc6449d23208f87a4",
      "tree": "56c51cc11296ac501d76c0b6cd9b7d9abe834b93",
      "parents": [
        "11989906a57a2957cb7479f987c5d3b494f5fa07"
      ],
      "author": {
        "name": "zhangwl9",
        "email": "1298877813@qq.com",
        "time": "Mon Jan 12 14:44:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 12 14:44:55 2026 +0800"
      },
      "message": "[HotFix] Remove duplicate references to scala-library and scala-compiler (#4033)\n\nRemove duplicate references to scala-library and scala-compiler\n\nCo-authored-by: 张文领 \u003czhangwl9@chinatelecom.cn\u003e"
    },
    {
      "commit": "11989906a57a2957cb7479f987c5d3b494f5fa07",
      "tree": "b363c7476582ff6c6ccc3774618b062b253d11eb",
      "parents": [
        "b324ae24f001e4788e3bf71d0dadc40d129ad1e7"
      ],
      "author": {
        "name": "davedwwang",
        "email": "iverson89w@163.com",
        "time": "Thu Jan 08 19:59:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 08 19:59:28 2026 +0800"
      },
      "message": "[Feature]: Support LDAP Authentication for Dashboard Login (#4009)\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e"
    },
    {
      "commit": "b324ae24f001e4788e3bf71d0dadc40d129ad1e7",
      "tree": "a34483ecbd5cc7f42ccf2d3e7cc0f970641eee01",
      "parents": [
        "23fb957da40e3a88b955907adf15bd653fc1148f"
      ],
      "author": {
        "name": "davedwwang",
        "email": "iverson89w@163.com",
        "time": "Thu Jan 08 19:57:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 08 19:57:51 2026 +0800"
      },
      "message": "[AMORO-3994] Support Exposing AMS High Availability (HA) Status (#3996)\n\n[amoro-3994] Support Exposing AMS High Availability (HA) Status\n\nCo-authored-by: davedwwang \u003cdavedwwang@tencent.com\u003e"
    },
    {
      "commit": "23fb957da40e3a88b955907adf15bd653fc1148f",
      "tree": "58074250c2eaee0f7fd52fcf5312a2c8ed9ab411",
      "parents": [
        "88b7ba4ba8a833a3db43823dd319668963aee088"
      ],
      "author": {
        "name": "ConradJam",
        "email": "jam.gzczy@gmail.com",
        "time": "Wed Jan 07 17:12:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 07 17:12:17 2026 +0800"
      },
      "message": "[AMORO-4022] [Improvement]: AMS Iceberg maintainer moved to the amoro-iceberg module (#4024)\n\n[AMORO-4022] AMS Iceberg maintainer moved to the amoro-iceberg module (#4022)"
    }
  ],
  "next": "88b7ba4ba8a833a3db43823dd319668963aee088"
}
