fix(backup): pozadinske gorutine koriste svežu konekciju posle obnove
Auto-backup i čišćenje sesija/pokušaja su koristili originalni db handle iz main.go, koji posle obnove backupa (VratiBackup) ostaje zatvoren — gorutine bi prestale da rade do restarta. Sada rade preko novog helpera h.SaBazom, koji pod deljenim zaključavanjem prosleđuje trenutnu h.DB, pa vide zamenjenu konekciju. Gorutine su premeštene da startuju posle kreiranja h. time.Sleep je van zaključavanja da ne odlaže obnovu.
This commit is contained in:
@@ -57,6 +57,17 @@ func (h *Handler) ZakljucajCitanje(next http.Handler) http.Handler {
|
||||
})
|
||||
}
|
||||
|
||||
// SaBazom izvršava fn sa TRENUTNOM konekcijom baze, pod deljenim zaključavanjem.
|
||||
// Namenjeno pozadinskim gorutinama (auto-backup, čišćenje): posle obnove backupa
|
||||
// h.DB se menja, pa gorutine moraju da čitaju aktuelni handle, a ne zatvoreni.
|
||||
// Zaključavanje se drži samo za vreme fn — ne pozivaj iz njega operacije koje
|
||||
// dugo blokiraju (npr. time.Sleep), da ne bi nepotrebno odlagao obnovu.
|
||||
func (h *Handler) SaBazom(fn func(*sql.DB)) {
|
||||
h.mu.RLock()
|
||||
defer h.mu.RUnlock()
|
||||
fn(h.DB)
|
||||
}
|
||||
|
||||
// Novi kreira novi Handler sa datom bazom.
|
||||
// totpKljuc je 32-bajtni ključ za šifrovanje TOTP tajni u mirovanju.
|
||||
func Novi(baza *sql.DB, totpKljuc []byte) *Handler {
|
||||
|
||||
Reference in New Issue
Block a user