From 73f9551c8fffbff03f686becfa995c17f7928d1d Mon Sep 17 00:00:00 2001 From: shoopea Date: Sun, 19 Oct 2025 14:12:31 +0200 Subject: [PATCH] update locks --- addr.go | 8 ++++---- app.go | 7 ++----- box.go | 18 ++++++++++++++---- config.go | 23 +++++++++++++++++------ version.go | 8 ++++---- zfs.go | 48 ++++++++++++++++++++++++++++++++++-------------- 6 files changed, 75 insertions(+), 37 deletions(-) diff --git a/addr.go b/addr.go index 679c277..9bea926 100644 --- a/addr.go +++ b/addr.go @@ -97,8 +97,8 @@ func (a Addr) SetManaged(managed bool) error { log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("") return err } else { - fs.mx.Lock() - defer fs.mx.Unlock() + fs.Lock() + defer fs.Unlock() if fs.managed != managed { var cmd string 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("") return err } else { - fs.mx.Lock() - defer fs.mx.Unlock() + fs.Lock() + defer fs.Unlock() fs.backedUp = val return nil } diff --git a/app.go b/app.go index f343fdc..a623f03 100644 --- a/app.go +++ b/app.go @@ -514,9 +514,6 @@ func (a *App) Boxes() []*Box { log.WithFields(log.Fields{"app": a.name}).Debugf("starting") defer log.WithFields(log.Fields{"app": a.name}).Debugf("done") - cfgMx.Lock() - defer cfgMx.Unlock() - bm := make(map[string]struct{}) for _, s := range a.sources { @@ -552,8 +549,8 @@ func (a *App) RunFull() error { return fmt.Errorf("backup already running") } - cfgMx.Lock() - defer cfgMx.Unlock() + CfgLock() + defer CfgUnlock() cfgRun = true defer func() { cfgRun = false }() diff --git a/box.go b/box.go index 2abfddd..6e9bd00 100644 --- a/box.go +++ b/box.go @@ -21,6 +21,16 @@ type Box struct { 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) { 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") @@ -60,8 +70,8 @@ func (b *Box) Open() error { log.WithFields(log.Fields{"name": b.name}).Debugf("starting") defer log.WithFields(log.Fields{"name": b.name}).Debugf("done") - b.mx.Lock() - defer b.mx.Unlock() + b.Lock() + defer b.Unlock() if b.online { return nil @@ -89,8 +99,8 @@ func (b *Box) Close() error { log.WithFields(log.Fields{"name": b.name}).Debugf("starting") defer log.WithFields(log.Fields{"name": b.name}).Debugf("done") - b.mx.Lock() - defer b.mx.Unlock() + b.Lock() + defer b.Unlock() if !b.online { return nil diff --git a/config.go b/config.go index 9f4cdde..f9656b5 100644 --- a/config.go +++ b/config.go @@ -59,6 +59,17 @@ type EmailConfig struct { 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 func LoadConfigFile(path string) (*Config, error) { log.WithFields(log.Fields{"path": path}).Debugf("starting") @@ -194,8 +205,8 @@ func (c *Config) Pretty() ([]byte, error) { log.WithFields(log.Fields{}).Debugf("starting") defer log.WithFields(log.Fields{}).Debugf("done") - cfgMx.Lock() - defer cfgMx.Unlock() + CfgLock() + defer CfgUnlock() b, err := json.Marshal(cfg) if err != nil { @@ -211,8 +222,8 @@ func (a *AppConfig) Pretty() ([]byte, error) { log.WithFields(log.Fields{}).Debugf("starting") defer log.WithFields(log.Fields{}).Debugf("done") - cfgMx.Lock() - defer cfgMx.Unlock() + CfgLock() + defer CfgUnlock() b, err := json.Marshal(a) if err != nil { @@ -258,8 +269,8 @@ func (c *Config) Run() { return } - cfgMx.Lock() - defer cfgMx.Unlock() + CfgLock() + defer CfgUnlock() cfgRun = true defer func() { cfgRun = false }() diff --git a/version.go b/version.go index ae3e703..172d745 100644 --- a/version.go +++ b/version.go @@ -1,7 +1,7 @@ // Code generated by version.sh (@generated) DO NOT EDIT. package main -var githash = "6ae863b" +var githash = "ace13b6" var branch = "master" -var buildstamp = "2025-10-19_11:55:34" -var commits = "113" -var version = "6ae863b-b113 - 2025-10-19_11:55:34" +var buildstamp = "2025-10-19_12:12:16" +var commits = "114" +var version = "ace13b6-b114 - 2025-10-19_12:12:16" diff --git a/zfs.go b/zfs.go index e2d771a..795bf3c 100644 --- a/zfs.go +++ b/zfs.go @@ -36,12 +36,32 @@ type ZfsSnapshot struct { 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 { log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting") defer log.WithFields(log.Fields{"name": z.box.name}).Debugf("done") - z.mx.Lock() - defer z.mx.Unlock() + z.Lock() + defer z.Unlock() if z.online { return nil @@ -146,12 +166,12 @@ func (z *BoxZfs) Close() error { log.WithFields(log.Fields{"name": z.box.name}).Debugf("starting") defer log.WithFields(log.Fields{"name": z.box.name}).Debugf("done") - z.mx.Lock() - defer z.mx.Unlock() + z.Lock() + defer z.Unlock() for _, fs := range z.filesystems { - fs.mx.Lock() - defer fs.mx.Unlock() + fs.Lock() + defer fs.Unlock() } z.online = false @@ -169,8 +189,8 @@ func (z *BoxZfs) Mkdir(path string) error { return err } - z.mx.Lock() - defer z.mx.Unlock() + z.Lock() + defer z.Unlock() b := z.box if !b.online { @@ -230,8 +250,8 @@ func (fs *ZfsFs) TakeSnapshot(name string) (*ZfsSnapshot, error) { return nil, err } - fs.mx.Lock() - defer fs.mx.Unlock() + fs.Lock() + defer fs.Unlock() if _, ok := fs.snapshots[name]; ok { err := errors.New("already exists") @@ -264,8 +284,8 @@ func (fs *ZfsFs) DelSnapshot(name string) error { return err } - fs.mx.Lock() - defer fs.mx.Unlock() + fs.Lock() + defer fs.Unlock() if _, ok := fs.snapshots[name]; !ok { err := errors.New("doesn't exist") @@ -296,8 +316,8 @@ func (fs *ZfsFs) AddSnapshot(s *ZfsSnapshot) error { return err } - fs.mx.Lock() - defer fs.mx.Unlock() + fs.Lock() + defer fs.Unlock() if _, ok := fs.snapshots[s.name]; ok { err := errors.New("already exist")