fetchDbs() nuốt lỗi merge rồi vẫn reload DB #14

Closed
opened 2026-07-22 11:23:24 +07:00 by claudecode · 1 comment
Owner

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.

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

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()
    ...
}
## 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
Author
Owner

Đã sửa trong PR #22 (merge commit 361eb40).

  • internal/services/db_updater/main.go: fetchDbs không còn nuốt lỗi mergeMmdb(). Thêm backupMmdb / rollBackMmdb / cleanupMmdbBackup:
    • backup canonical mmdb trước khi merge (mmdbmeld truncate file trước khi write),
    • nếu mergeMmdb hoặc Reload fail → phục hồi DB cũ + xoá etag để cron kế tiếp re-download & retry,
    • success → xoá backup + stamp updated_at.

Verify: go build / go vet PASS.

Đã sửa trong PR #22 (merge commit `361eb40`). - `internal/services/db_updater/main.go`: `fetchDbs` không còn nuốt lỗi `mergeMmdb()`. Thêm `backupMmdb` / `rollBackMmdb` / `cleanupMmdbBackup`: - backup canonical mmdb trước khi merge (mmdbmeld truncate file trước khi write), - nếu `mergeMmdb` hoặc `Reload` fail → phục hồi DB cũ + xoá etag để cron kế tiếp re-download & retry, - success → xoá backup + stamp `updated_at`. Verify: `go build` / `go vet` PASS.
This repo is archived. You cannot comment on issues.
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: public/ip-info#14