fix(nas): merge_increment计数免疫并发写者——inserted改用Connection.total_changes(只计本连接INSERT生效行),原after-before会被03:00合并窗口并发的bs_5m写入污染(08-25实锤skipped(dup)=-4881,5m插的行被记成merge的inserted);+2测试钉计数契约(新/dup/混掺/他源行不计入);venv310 644绿 [nas]

This commit is contained in:
2026-08-25 21:32:28 +08:00
parent 41495b0c08
commit 7ad0cbea76
2 changed files with 65 additions and 167 deletions
+4 -1
View File
@@ -45,14 +45,17 @@ def main():
inc_count = cur.execute("SELECT COUNT(*) FROM inc.dbbardata").fetchone()[0]
before = cur.execute("SELECT COUNT(*) FROM main.dbbardata").fetchone()[0]
# inserted 用 total_changes(只计本连接写入): after-before 会被并发写者污染
# (2026-08-25 实锤: 03:00 合并窗口 bs_5m 同写主库, skipped(dup) 被挤成负数)
changes0 = conn.total_changes
cur.execute(
"INSERT OR IGNORE INTO main.dbbardata(%s) SELECT %s FROM inc.dbbardata"
% (COLS, COLS))
conn.commit()
inserted = conn.total_changes - changes0
after = cur.execute("SELECT COUNT(*) FROM main.dbbardata").fetchone()[0]
conn.close()
inserted = after - before
skipped = inc_count - inserted
print("MERGED inc=%d inserted=%d skipped(dup)=%d before=%d after=%d"
% (inc_count, inserted, skipped, before, after))