db_updater/main.go:28 gọi _ = mergeMmdb() rồi vẫn Reload() dù merge thất bại. Khi merge lỗi (file CSV thiếu, mmdbmeld config sai...), DB cũ vẫn ở nguyên nhưng Reload() đọc file geoip-v4.mmdb có thể rỗng/cũ → ghi đè reader đang chạy bằng DB hỏng.
ifnewFlag{log.Info().Msg("New DB downloaded. Recreating mmdb")_=mergeMmdb()// lỗi bị nuốterr:=data.Ins().Reload()// vẫn reload bất kể...}
Fix đề xuất
ifnewFlag{log.Info().Msg("New DB downloaded. Recreating mmdb")iferr:=mergeMmdb();err!=nil{log.Err(err).Msg("Failed to merge mmdb, keeping current DB")return}err:=data.Ins().Reload()...}
## Vấn đề
`db_updater/main.go:28` gọi `_ = mergeMmdb()` rồi **vẫn `Reload()` dù merge thất bại**. Khi merge lỗi (file CSV thiếu, mmdbmeld config sai...), DB cũ vẫn ở nguyên nhưng `Reload()` đọc file `geoip-v4.mmdb` có thể rỗng/cũ → ghi đè reader đang chạy bằng DB hỏng.
```go
if newFlag {
log.Info().Msg("New DB downloaded. Recreating mmdb")
_ = mergeMmdb() // lỗi bị nuốt
err := data.Ins().Reload() // vẫn reload bất kể
...
}
```
## Fix đề xuất
```go
if newFlag {
log.Info().Msg("New DB downloaded. Recreating mmdb")
if err := mergeMmdb(); err != nil {
log.Err(err).Msg("Failed to merge mmdb, keeping current DB")
return
}
err := data.Ins().Reload()
...
}
```
claudecode
added the bug label 2026-07-22 11:23:24 +07:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Vấn đề
db_updater/main.go:28gọi_ = mergeMmdb()rồi vẫnReload()dù merge thất bại. Khi merge lỗi (file CSV thiếu, mmdbmeld config sai...), DB cũ vẫn ở nguyên nhưngReload()đọc filegeoip-v4.mmdbcó thể rỗng/cũ → ghi đè reader đang chạy bằng DB hỏng.Fix đề xuất
Đã sửa trong PR #22 (merge commit
361eb40).internal/services/db_updater/main.go:fetchDbskhông còn nuốt lỗimergeMmdb(). ThêmbackupMmdb/rollBackMmdb/cleanupMmdbBackup:mergeMmdbhoặcReloadfail → phục hồi DB cũ + xoá etag để cron kế tiếp re-download & retry,updated_at.Verify:
go build/go vetPASS.