Files
srdb/examples/webui/commands/dump_manifest.go
bourdon ae87c38776 Initial commit: SRDB - High-performance LSM-Tree database
- Core engine with MemTable, SST, WAL
- B+Tree indexing for SST files  
- Leveled compaction strategy
- Multi-table database management
- Schema validation and secondary indexes
- Query builder with complex conditions
- Web UI with HTMX for data visualization
- Command-line tools for diagnostics
2025-10-08 06:38:28 +08:00

59 lines
1.1 KiB
Go

package commands
import (
"fmt"
"log"
"code.tczkiot.com/srdb"
)
// DumpManifest 导出 manifest 信息
func DumpManifest(dbPath string) {
db, err := srdb.Open(dbPath)
if err != nil {
log.Fatal(err)
}
defer db.Close()
table, err := db.GetTable("logs")
if err != nil {
log.Fatal(err)
}
engine := table.GetEngine()
versionSet := engine.GetVersionSet()
version := versionSet.GetCurrent()
// Check for duplicates in each level
for level := 0; level < 7; level++ {
files := version.GetLevel(level)
if len(files) == 0 {
continue
}
// Track file numbers
fileMap := make(map[int64][]struct {
minKey int64
maxKey int64
})
for _, f := range files {
fileMap[f.FileNumber] = append(fileMap[f.FileNumber], struct {
minKey int64
maxKey int64
}{f.MinKey, f.MaxKey})
}
// Report duplicates
fmt.Printf("Level %d: %d files\n", level, len(files))
for fileNum, entries := range fileMap {
if len(entries) > 1 {
fmt.Printf(" [DUPLICATE] File #%d appears %d times:\n", fileNum, len(entries))
for i, e := range entries {
fmt.Printf(" Entry %d: min=%d max=%d\n", i+1, e.minKey, e.maxKey)
}
}
}
}
}