From 7caabc439d6e4ec75310fb1eaab52213341a4c04 Mon Sep 17 00:00:00 2001 From: Carter Dodd Date: Thu, 2 Jun 2022 22:22:19 -0500 Subject: [PATCH] separate safe/unsafe db operations --- internal/pkg/warewulfd/nodedb.go | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/internal/pkg/warewulfd/nodedb.go b/internal/pkg/warewulfd/nodedb.go index cb851a05..96921261 100644 --- a/internal/pkg/warewulfd/nodedb.go +++ b/internal/pkg/warewulfd/nodedb.go @@ -20,6 +20,12 @@ var ( ) func LoadNodeDB() error { + db.lock.Lock() + defer db.lock.Unlock() + return loadNodeDB() +} + +func loadNodeDB() error { TmpMap := make(map[string]node.NodeInfo) DB, err := node.New() @@ -39,8 +45,6 @@ func LoadNodeDB() error { } } - db.lock.Lock() - defer db.lock.Unlock() db.NodeInfo = TmpMap return nil @@ -49,6 +53,10 @@ func LoadNodeDB() error { func GetNode(val string) (node.NodeInfo, error) { db.lock.RLock() defer db.lock.RUnlock() + return getNode(val) +} + +func getNode(val string) (node.NodeInfo, error) { if _, ok := db.NodeInfo[val]; ok { @@ -60,14 +68,19 @@ func GetNode(val string) (node.NodeInfo, error) { } func GetNodeOrSetDiscoverable(hwaddr string) (node.NodeInfo, error) { + db.lock.Lock() + defer db.lock.Unlock() + return getNodeOrSetDiscoverable(hwaddr) +} + +func getNodeOrSetDiscoverable(hwaddr string) (node.NodeInfo, error) { // NOTE: since discoverable nodes will write an updated DB to file and then // reload, it is not enough to lock individual reads from the DB // to ensure the condition on which the node is updated is still satisfied // after the DB is read back in. - db.lock.Lock() - defer db.lock.Unlock() - n, err := GetNode(hwaddr) + + n, err := getNode(hwaddr) if err == nil { return n, nil } @@ -105,7 +118,7 @@ func GetNodeOrSetDiscoverable(hwaddr string) (node.NodeInfo, error) { return n, errors.Wrapf(err, "%s (failed to persist node configuration)", hwaddr) } - err = LoadNodeDB() + err = loadNodeDB() if err != nil { return n, errors.Wrapf(err, "%s (failed to reload configuration)", hwaddr) }