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