wenzhenghu commented on PR #65126: URL: https://github.com/apache/doris/pull/65126#issuecomment-4910718055
workbuddy + hy3: ## 核心结论:**Approve(无 blocking issue,附 minor 跟进)** **设计亮点(正面)** - `MetaCacheEntry` 三层并发控制(`loadLock` 去重 → `publishLock` 序列化 → `generation` 版本校验)锁顺序一致、无死锁;慢 I/O 移出 Caffeine 同步 load 路径,`REFRESH CATALOG` 不被同 key 的慢加载阻塞。 - `getDbForReplay`/`getTableForReplay` 严格仅 `getIfPresent`,replay 非阻塞。 - 不可变 `NameCacheValue` + copy-on-write,快照读安全。 - 旧 `MetaCache`/`LegacyMetaCacheFactory` 删除后全仓无遗留引用;lower-case mode 0/1/2 语义经统一名称快照后保持一致。 **需关注/跟进的点** 1. **replay 按 id 解析的健壮性(§4.1)**:`getTableForReplay(long)` 正确性依赖 `registerTable` 已填充 `tableIdToName`;而 `ExternalDatabase.gsonPostProcess` 仅 `new` 空 `tableIdToName`,未像 `ExternalCatalog.gsonPostProcess` 那样回填 `dbIdToName`,健壮性不一致。主路径无碍,建议补注释或在反序列化时回填。 2. **mode 2 + 自定义 meta-names 映射(§4.2)**:对象缓存以 local name 为 key、mode 2 查询以 remote name 为 key,remote≠local 时会走 load 路径。属历史遗留边角,**本 PR 未引入新回归**,建议补单测/注释明确已知限制。 3. **次要(§4.3)**:`buildMetaCache` 双字段判重存在部分初始化竞态窗口;`stats()` 混合 Caffeine 与手动统计口径;构造函数重载过多。 **测试覆盖充分**:`MetaCacheEntryTest` 通过覆写 `beforeManualCachePutForTest`/`beforePublicMutationWriteForTest` 钩子模拟"publish 窗口中触发 `invalidateAll`",验证了 stale-write-back 防护与 generation 协调;外加 `ExternalCatalogTest`/`ExternalDatabaseTest`/`NameCacheValueTest` 与 2 个 JDBC 回归用例。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
