update locks

This commit is contained in:
shoopea 2025-10-19 14:12:31 +02:00
parent ace13b68a8
commit 73f9551c8f
6 changed files with 75 additions and 37 deletions

View File

@ -97,8 +97,8 @@ func (a Addr) SetManaged(managed bool) error {
log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("") log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("")
return err return err
} else { } else {
fs.mx.Lock() fs.Lock()
defer fs.mx.Unlock() defer fs.Unlock()
if fs.managed != managed { if fs.managed != managed {
var cmd string var cmd string
if managed { if managed {
@ -129,8 +129,8 @@ func (a Addr) SetBackedUp(val bool) error {
log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("") log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("")
return err return err
} else { } else {
fs.mx.Lock() fs.Lock()
defer fs.mx.Unlock() defer fs.Unlock()
fs.backedUp = val fs.backedUp = val
return nil return nil
} }

7
app.go
View File

@ -514,9 +514,6 @@ func (a *App) Boxes() []*Box {
log.WithFields(log.Fields{"app": a.name}).Debugf("starting") log.WithFields(log.Fields{"app": a.name}).Debugf("starting")
defer log.WithFields(log.Fields{"app": a.name}).Debugf("done") defer log.WithFields(log.Fields{"app": a.name}).Debugf("done")
cfgMx.Lock()
defer cfgMx.Unlock()
bm := make(map[string]struct{}) bm := make(map[string]struct{})
for _, s := range a.sources { for _, s := range a.sources {
@ -552,8 +549,8 @@ func (a *App) RunFull() error {
return fmt.Errorf("backup already running") return fmt.Errorf("backup already running")
} }
cfgMx.Lock() CfgLock()
defer cfgMx.Unlock() defer CfgUnlock()
cfgRun = true cfgRun = true
defer func() { cfgRun = false }() defer func() { cfgRun = false }()

18
box.go
View File

@ -21,6 +21,16 @@ type Box struct {
mx sync.Mutex mx sync.Mutex
} }
func (b *Box) Lock() {
log.WithFields(log.Fields{"name": b.name}).Debugf("starting")
b.mx.Lock()
}
func (b *Box) Unlock() {
log.WithFields(log.Fields{"name": b.name}).Debugf("starting")
b.mx.Unlock()
}
func (c *Config) NewBox(name, addr, user, key string) (b *Box, err error) { func (c *Config) NewBox(name, addr, user, key string) (b *Box, err error) {
log.WithFields(log.Fields{"name": name, "addr": addr, "user": user, "key": key}).Debugf("starting") log.WithFields(log.Fields{"name": name, "addr": addr, "user": user, "key": key}).Debugf("starting")
defer log.WithFields(log.Fields{"name": name, "addr": addr, "user": user, "key": key}).Debugf("done") defer log.WithFields(log.Fields{"name": name, "addr": addr, "user": user, "key": key}).Debugf("done")
@ -60,8 +70,8 @@ func (b *Box) Open() error {
log.WithFields(log.Fields{"name": b.name}).Debugf("starting") log.WithFields(log.Fields{"name": b.name}).Debugf("starting")
defer log.WithFields(log.Fields{"name": b.name}).Debugf("done") defer log.WithFields(log.Fields{"name": b.name}).Debugf("done")
b.mx.Lock() b.Lock()
defer b.mx.Unlock() defer b.Unlock()
if b.online { if b.online {
return nil return nil
@ -89,8 +99,8 @@ func (b *Box) Close() error {
log.WithFields(log.Fields{"name": b.name}).Debugf("starting") log.WithFields(log.Fields{"name": b.name}).Debugf("starting")
defer log.WithFields(log.Fields{"name": b.name}).Debugf("done") defer log.WithFields(log.Fields{"name": b.name}).Debugf("done")
b.mx.Lock() b.Lock()
defer b.mx.Unlock() defer b.Unlock()
if !b.online { if !b.online {
return nil return nil

View File

@ -59,6 +59,17 @@ type EmailConfig struct {
ToEmail []string `json:"email_to,omitempty"` ToEmail []string `json:"email_to,omitempty"`
} }
func CfgLock() {
log.WithFields(log.Fields{}).Debugf("starting")
cfgMx.Lock()
}
func CfgUnlock() {
log.WithFields(log.Fields{}).Debugf("starting")
cfgMx.Unlock()
}
// Load config from file // Load config from file
func LoadConfigFile(path string) (*Config, error) { func LoadConfigFile(path string) (*Config, error) {
log.WithFields(log.Fields{"path": path}).Debugf("starting") log.WithFields(log.Fields{"path": path}).Debugf("starting")
@ -194,8 +205,8 @@ func (c *Config) Pretty() ([]byte, error) {
log.WithFields(log.Fields{}).Debugf("starting") log.WithFields(log.Fields{}).Debugf("starting")
defer log.WithFields(log.Fields{}).Debugf("done") defer log.WithFields(log.Fields{}).Debugf("done")
cfgMx.Lock() CfgLock()
defer cfgMx.Unlock() defer CfgUnlock()
b, err := json.Marshal(cfg) b, err := json.Marshal(cfg)
if err != nil { if err != nil {
@ -211,8 +222,8 @@ func (a *AppConfig) Pretty() ([]byte, error) {
log.WithFields(log.Fields{}).Debugf("starting") log.WithFields(log.Fields{}).Debugf("starting")
defer log.WithFields(log.Fields{}).Debugf("done") defer log.WithFields(log.Fields{}).Debugf("done")
cfgMx.Lock() CfgLock()
defer cfgMx.Unlock() defer CfgUnlock()
b, err := json.Marshal(a) b, err := json.Marshal(a)
if err != nil { if err != nil {
@ -258,8 +269,8 @@ func (c *Config) Run() {
return return
} }
cfgMx.Lock() CfgLock()
defer cfgMx.Unlock() defer CfgUnlock()
cfgRun = true cfgRun = true
defer func() { cfgRun = false }() defer func() { cfgRun = false }()

View File

@ -1,7 +1,7 @@
// Code generated by version.sh (@generated) DO NOT EDIT. // Code generated by version.sh (@generated) DO NOT EDIT.
package main package main
var githash = "6ae863b" var githash = "ace13b6"
var branch = "master" var branch = "master"
var buildstamp = "2025-10-19_11:55:34" var buildstamp = "2025-10-19_12:12:16"
var commits = "113" var commits = "114"
var version = "6ae863b-b113 - 2025-10-19_11:55:34" var version = "ace13b6-b114 - 2025-10-19_12:12:16"

48
zfs.go
View File

@ -36,12 +36,32 @@ type ZfsSnapshot struct {
fs *ZfsFs fs *ZfsFs
} }
func (z *BoxZfs) Lock() {
log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting")
z.mx.Lock()
}
func (z *BoxZfs) Unlock() {
log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting")
z.mx.Unlock()
}
func (fs *ZfsFs) Lock() {
log.WithFields(log.Fields{"box": fs.zfs.box.name, "fs": fs.path}).Debugf("starting")
fs.mx.Lock()
}
func (fs *ZfsFs) Unlock() {
log.WithFields(log.Fields{"box": fs.zfs.box.name, "fs": fs.path}).Debugf("starting")
fs.mx.Unlock()
}
func (z *BoxZfs) Open() error { func (z *BoxZfs) Open() error {
log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting") log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting")
defer log.WithFields(log.Fields{"name": z.box.name}).Debugf("done") defer log.WithFields(log.Fields{"name": z.box.name}).Debugf("done")
z.mx.Lock() z.Lock()
defer z.mx.Unlock() defer z.Unlock()
if z.online { if z.online {
return nil return nil
@ -146,12 +166,12 @@ func (z *BoxZfs) Close() error {
log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting") log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting")
defer log.WithFields(log.Fields{"name": z.box.name}).Debugf("done") defer log.WithFields(log.Fields{"name": z.box.name}).Debugf("done")
z.mx.Lock() z.Lock()
defer z.mx.Unlock() defer z.Unlock()
for _, fs := range z.filesystems { for _, fs := range z.filesystems {
fs.mx.Lock() fs.Lock()
defer fs.mx.Unlock() defer fs.Unlock()
} }
z.online = false z.online = false
@ -169,8 +189,8 @@ func (z *BoxZfs) Mkdir(path string) error {
return err return err
} }
z.mx.Lock() z.Lock()
defer z.mx.Unlock() defer z.Unlock()
b := z.box b := z.box
if !b.online { if !b.online {
@ -230,8 +250,8 @@ func (fs *ZfsFs) TakeSnapshot(name string) (*ZfsSnapshot, error) {
return nil, err return nil, err
} }
fs.mx.Lock() fs.Lock()
defer fs.mx.Unlock() defer fs.Unlock()
if _, ok := fs.snapshots[name]; ok { if _, ok := fs.snapshots[name]; ok {
err := errors.New("already exists") err := errors.New("already exists")
@ -264,8 +284,8 @@ func (fs *ZfsFs) DelSnapshot(name string) error {
return err return err
} }
fs.mx.Lock() fs.Lock()
defer fs.mx.Unlock() defer fs.Unlock()
if _, ok := fs.snapshots[name]; !ok { if _, ok := fs.snapshots[name]; !ok {
err := errors.New("doesn't exist") err := errors.New("doesn't exist")
@ -296,8 +316,8 @@ func (fs *ZfsFs) AddSnapshot(s *ZfsSnapshot) error {
return err return err
} }
fs.mx.Lock() fs.Lock()
defer fs.mx.Unlock() defer fs.Unlock()
if _, ok := fs.snapshots[s.name]; ok { if _, ok := fs.snapshots[s.name]; ok {
err := errors.New("already exist") err := errors.New("already exist")