feat(raft): replicate schema DDL through the raft log
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
- isRaftDdl + leader-only gate for CREATE/DROP/ALTER (not DATABASE) - appendDdlToRaft ships original SQL; applyCommand re-executes via applyReplicatedDdl (idempotent on leader double-apply) - Mixed DDL+DML batches use the DDL path so order is preserved - Fix secondary-index point lookup to use entry.lsmKey (not filter col) - E2E: CREATE only on leader, schema + index SELECT on follower
This commit is contained in:
@@ -408,3 +408,11 @@ suite "Raft write classification":
|
||||
for s in ast.stmts:
|
||||
if isWrite(s): anyWrite = true
|
||||
check anyWrite
|
||||
|
||||
test "isRaftDdl covers schema but not CREATE DATABASE":
|
||||
check isRaftDdl(parse("CREATE TABLE t (id INT)").stmts[0])
|
||||
check isRaftDdl(parse("CREATE INDEX i ON t (id)").stmts[0])
|
||||
check isRaftDdl(parse("DROP TABLE t").stmts[0])
|
||||
check not isRaftDdl(parse("CREATE DATABASE other").stmts[0])
|
||||
check not isRaftDdl(parse("INSERT INTO t (id) VALUES (1)").stmts[0])
|
||||
check not isRaftDdl(parse("SELECT 1").stmts[0])
|
||||
|
||||
Reference in New Issue
Block a user