|
2 | 2 |
|
3 | 3 | All notable changes to ACE will be captured in this document. This project follows semantic versioning; the latest changes appear first. |
4 | 4 |
|
5 | | -## [v1.7.0] - 2026-03-20 |
| 5 | +## [v1.7.0] - 2026-03-23 |
6 | 6 |
|
7 | 7 | ### Added |
8 | 8 | - `table-repair --preserve-origin` flag to preserve replication origin node ID, LSN, and per-row commit timestamps during repair operations. Repaired rows retain the original source node's origin metadata instead of being stamped with the local node's identity, preventing replication conflicts when a failed node rejoins the cluster. Upserts are grouped by (origin, timestamp) into separate transactions to satisfy PostgreSQL's per-transaction replication origin session constraint; deletes commit in a preceding transaction. |
9 | 9 | - Runtime configuration reload via SIGHUP for all long-running ACE modes. The scheduler waits for in-flight jobs to complete before swapping config; the API server reloads immediately, including mTLS security config (CRL and allowed CN list). Works for `ace start`, `ace server`, and `ace start --component=all`. |
| 10 | +- End-of-run summary for `schema-diff` and `repset-diff` listing identical, skipped, differed, missing, and errored tables with error reasons. |
10 | 11 |
|
11 | 12 | ### Changed |
12 | 13 | - CLI migrated from urfave/cli v2 to v3 for native interspersed flag support, allowing flags to be placed before or after subcommands. |
13 | 14 | - Config reads are now thread-safe and snapshotted per HTTP request, per Merkle-tree task, and per CDC replication stream to prevent mid-operation drift during concurrent SIGHUP reloads. |
14 | 15 | - mTLS certificate validator is swapped atomically on SIGHUP using `atomic.Pointer` for lock-free reads on the request path. |
| 16 | +- `schema-diff` and `repset-diff` now query tables from all nodes and report tables not present on every node, instead of silently using only the first node's table list. still compared across all nodes. |
| 17 | +- `repset-diff` reports asymmetric repset membership when a table is in the repset on some nodes but not others. |
15 | 18 |
|
16 | 19 | ### Fixed |
17 | 20 | - `repset-diff` was not working. Fixed and added tests. |
18 | 21 | - `schema-diff --skip-tables` now actually filters tables. Schema-qualified names (e.g. `myschema.mytable`) are also accepted; the schema prefix is validated against the target schema and stripped for matching. |
19 | 22 | - Replication origin LSN lookup rewritten to join through `spock.subscription` and `spock.node` instead of a broken LIKE pattern that never matched. |
20 | 23 | - `executeUpserts` no longer calls `resetReplicationOriginSession` before `tx.Commit()`, which was clearing the origin from WAL commit records. |
21 | 24 | - Unexpected scheduler exit in the SIGHUP reload loop is now handled gracefully. |
| 25 | +- `schema-diff` and `repset-diff` silently excluded tables that failed during per-table comparison (e.g. missing primary key). Failed tables now appear in the summary with the error reason, and the task status is set to FAILED. |
22 | 26 |
|
23 | 27 | ## [v1.6.0] 2026-02-25 |
24 | 28 |
|
|
0 commit comments