This is an automated email from the ASF dual-hosted git repository.

yuqi1129 pushed a commit to branch docs/treelock-design
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/docs/treelock-design by this 
push:
     new f48499c651 polish
f48499c651 is described below

commit f48499c6513cdca111d195f3991e0bfdb7c03390
Author: yuqi <[email protected]>
AuthorDate: Mon Aug 3 21:31:56 2026 +0800

    polish
---
 design-docs/treelock-necessity-and-concurrency-design.md | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/design-docs/treelock-necessity-and-concurrency-design.md 
b/design-docs/treelock-necessity-and-concurrency-design.md
index 7e5510ce3d..2417ca7cb0 100644
--- a/design-docs/treelock-necessity-and-concurrency-design.md
+++ b/design-docs/treelock-necessity-and-concurrency-design.md
@@ -61,18 +61,19 @@ The rest of this document analyses what TreeLock really 
does today, then compare
 
 ## Goals
 
-1. **Understand what TreeLock protects today**: Describe what TreeLock 
actually guards, and which of those guarantees the shared database could 
provide instead.
-2. **Evaluate the candidate directions on equal footing**: Assess each 
direction — database-native concurrency, and a cross-node distributed lock — 
against the same criteria (correctness, performance, maintainability, 
operational cost), informed by how comparable systems solve the two-store 
problem. Neither direction is assumed better going in.
-3. **Correctness for one and for many servers**: Whatever is chosen must be 
correct with a single server and under HA.
-4. **Decide with evidence**: End with a direction and the reasons behind it, 
plus a plan a developer can start on.
+1. **Work with one server and with many.** The same operation must behave the 
same way on a single server and behind a load balancer. TreeLock only works 
inside one JVM, so HA is exactly where it stops helping.
+2. **Fix the races we can fix.** Lost updates, two servers both "winning" a 
create, a child left under a deleted parent — these are writes where 
Gravitino's own database is the only source of truth, so they are ours to fix. 
Where an external catalog owns the data, match what it guarantees and write 
down what that is.
+3. **Keep the change small.** Prefer rules the database already enforces over 
anything new to deploy: no extra service, no extra dependency, and keep call 
sites as they are where possible.
+4. **Easy to run and to extend.** Adding an entity type or a catalog should 
get the same protection by following an existing pattern, instead of 
remembering which lock to take. Conflicts should be visible in logs, metrics 
and HTTP status codes, not something operators have to guess at.
 
 ---
 
 ## Non-Goals
 
-1. **No single transaction across the external catalog and the Gravitino 
store**: We will not try 2PC/XA across the two stores. External catalogs do not 
all offer the same transaction guarantees, so the existing pattern (re-sync on 
read, which is safe to repeat) is kept.
-2. **Write correctness only, not read staleness**: This document is about 
correct concurrent *writes*. Keeping each server's *cached reads* fresh across 
nodes (the `EntityChangeLogPoller` work) is a separate effort, out of scope 
here.
-3. **No change to external-catalog behavior**: We will not change how 
Hive/Iceberg/JDBC connectors keep their own data correct; they are the source 
of truth for their own data.
+1. **A distributed lock is not the target.** It is one option among others, 
not the goal. If a database rule can do the job, that wins; a cross-node lock 
is only worth considering where nothing else works.
+2. **No single transaction across the external catalog and the Gravitino 
store.** No 2PC/XA. Not every external catalog offers the same guarantees, so 
we keep today's pattern: external system first, store second, store fixed on 
the next read.
+3. **Stale reads are a different problem.** This document is about concurrent 
*writes*. Keeping each server's cached reads fresh is the 
`EntityChangeLogPoller` work, not this.
+4. **We do not change how external catalogs behave.** Hive, Iceberg and JDBC 
keep their own concurrency semantics, and Gravitino does not promise more than 
they give.
 
 ---
 

Reply via email to