优化:改进 Compaction 和 WebUI 日志

- 简化 Compaction 日志输出,使用结构化日志
- 优化 WebUI 命令行参数处理
- 改进 WebUI 服务器启动和错误处理
- 统一日志格式和输出方式
This commit is contained in:
2025-10-10 22:24:33 +08:00
parent 3148bf226d
commit c8cbe4178f
3 changed files with 59 additions and 66 deletions

View File

@@ -214,12 +214,12 @@ func (ui *WebUI) handleTableManifest(w http.ResponseWriter, r *http.Request, tab
Files []FileInfo `json:"files"`
}
// 获取 Compaction Manager 和 Picker
// 获取 Compaction Manager
compactionMgr := table.GetCompactionManager()
picker := compactionMgr.GetPicker()
levels := make([]LevelInfo, 0)
levels := make([]LevelInfo, 0, 7)
for level := range 7 {
// 只调用一次 GetLevel避免重复复制文件列表
files := version.GetLevel(level)
totalSize := int64(0)
@@ -236,9 +236,15 @@ func (ui *WebUI) handleTableManifest(w http.ResponseWriter, r *http.Request, tab
})
}
// 使用已计算的 totalSize 和 fileCount 计算 score避免再次调用 GetLevel
score := 0.0
if len(files) > 0 {
score = picker.GetLevelScore(version, level)
if len(files) > 0 && level < 3 { // L3 是最后一层,不需要 compaction
// 直接计算 score避免调用 picker.GetLevelScore(它会再次获取 files
// 使用下一级的大小限制来计算得分(从 Options 配置读取)
nextLevelLimit := compactionMgr.GetLevelSizeLimit(level + 1)
if nextLevelLimit > 0 {
score = float64(totalSize) / float64(nextLevelLimit)
}
}
levels = append(levels, LevelInfo{