Skip to content

fix(core): DBWrapper 快速失败并容错退化查询结果#533

Merged
SpriCoder merged 2 commits into
masterfrom
fix/dbwrapper-robustness
May 25, 2026
Merged

fix(core): DBWrapper 快速失败并容错退化查询结果#533
SpriCoder merged 2 commits into
masterfrom
fix/dbwrapper-robustness

Conversation

@SpriCoder
Copy link
Copy Markdown
Collaborator

问题

DBWrapper 在若干退化场景下行为不健壮:

  1. 初始化吞掉 DBFactory 异常,使 databases 为空,之后所有操作静默 no-op,基准测试却"成功",实际什么都没读写。
  2. deviceSummary() 在最后一次循环可能让结果引用保持 null,随后 NPE。
  3. aggRangeValueQueryhandleQueryOperation 位置不当。
  4. doPointComparison() 在数据库少于两个(非双写)时按下标取值越界。

改动

  1. 初始化失败直接抛 IllegalStateException,快速失败
  2. deviceSummary():结果为空时返回 null;复用已确认的非空 summary,消除 NPE。
  3. aggRangeValueQuery:在循环内逐条记录 status。
  4. doPointComparison():少于两个数据库时跳过(返回 -1),不再越界。
  5. 增加测试缝:DBWrapper.forTestFakeDB(DBConfig) 构造器、Measurement 计数器 getter 改 public,便于注入 fake 并断言计数。

验证

新增 DBWrapperTestFakeDBEndToEndTest(经 BenchmarkTestBase)共 6 个用例通过;spotless 通过。

说明

基于 master 的独立分支。Measurement.java 仅含 getter 可见性改动,与 measurement 分支不重叠。

SpriCoder added 2 commits May 23, 2026 10:50
…ults

- Init now throws instead of swallowing factory errors, so an empty
  database list can no longer make every operation silently no-op while
  the benchmark reports success.
- deviceSummary() returns null on an empty result and reuses the agreed
  summary, removing the NPE when the last loop iteration left it null.
- aggRangeValueQuery records each status inside the loop.
- doPointComparison() skips (returns -1) when fewer than two databases
  are present instead of indexing out of bounds.
- Add DBWrapper.forTest seam, FakeDB(DBConfig) ctor, and public
  Measurement counters so DBWrapperTest / FakeDBEndToEndTest can inject
  fakes and assert counters (via BenchmarkTestBase).
@SpriCoder SpriCoder merged commit f07410d into master May 25, 2026
2 checks passed
@SpriCoder SpriCoder deleted the fix/dbwrapper-robustness branch May 25, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant