Преглед изворни кода

guard update tag with mutex

abhishek9686 пре 11 месеци
родитељ
комит
ee5d87733b
1 измењених фајлова са 7 додато и 0 уклоњено
  1. 7 0
      logic/tags.go

+ 7 - 0
logic/tags.go

@@ -4,11 +4,14 @@ import (
 	"encoding/json"
 	"fmt"
 	"sort"
+	"sync"
 
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/models"
 )
 
+var tagMutex = &sync.RWMutex{}
+
 func GetTag(tagID models.TagID) (models.Tag, error) {
 	data, err := database.FetchRecord(database.TAG_TABLE_NAME, tagID.String())
 	if err != nil && !database.IsEmptyRecord(err) {
@@ -39,6 +42,8 @@ func DeleteTag(tagID string) error {
 }
 
 func ListTagsWithHosts() ([]models.TagListResp, error) {
+	tagMutex.RLock()
+	defer tagMutex.RUnlock()
 	tags, err := ListTags()
 	if err != nil {
 		return []models.TagListResp{}, err
@@ -75,6 +80,8 @@ func ListTags() ([]models.Tag, error) {
 }
 
 func UpdateTag(req models.UpdateTagReq) {
+	tagMutex.Lock()
+	defer tagMutex.Unlock()
 	tagHostsMap := GetHostsWithTag(req.ID)
 	for _, hostID := range req.TaggedHosts {
 		hostI, err := GetHost(hostID)