mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-30 03:41:51 +08:00
NET-1440: scale test changes (#3014)
* NET-1440 scale test changes * fix UT error and add error info * load metric data into cacha in startup * remove debug info for metric * add server telemetry and hasSuperAdmin to cache * fix user UT case * update sqlite connection string for performance * update check-in TS in cache only if cache enabled * update metric data in cache only if cache enabled and write to DB once in stop * update server status in mq topic * add failover existed to server status update * only send mq messsage when there is server status change * batch peerUpdate * code changes for scale for review * update UT case * update mq client check * mq connection code change * revert server status update changes * revert batch peerUpdate * remove server status update info * code changes based on review and setupmqtt in keepalive * set the mq message order to false for PIN * remove setupmqtt in keepalive * recycle ip in node deletion * update ip allocation logic * remove ip addr cap * remove ippool file * update get extClient func * remove ip from cache map when extClient is removed
This commit is contained in:
@@ -5,11 +5,13 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/servercfg"
|
||||
"golang.org/x/exp/slices"
|
||||
)
|
||||
|
||||
@@ -29,6 +31,10 @@ var EnrollmentErrors = struct {
|
||||
FailedToTokenize: fmt.Errorf("failed to tokenize"),
|
||||
FailedToDeTokenize: fmt.Errorf("failed to detokenize"),
|
||||
}
|
||||
var (
|
||||
enrollmentkeyCacheMutex = &sync.RWMutex{}
|
||||
enrollmentkeyCacheMap = make(map[string]models.EnrollmentKey)
|
||||
)
|
||||
|
||||
// CreateEnrollmentKey - creates a new enrollment key in db
|
||||
func CreateEnrollmentKey(uses int, expiration time.Time, networks, tags []string, unlimited bool, relay uuid.UUID) (*models.EnrollmentKey, error) {
|
||||
@@ -104,21 +110,21 @@ func UpdateEnrollmentKey(keyId string, relayId uuid.UUID) (*models.EnrollmentKey
|
||||
|
||||
key.Relay = relayId
|
||||
|
||||
if err = upsertEnrollmentKey(key); err != nil {
|
||||
if err = upsertEnrollmentKey(&key); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return key, nil
|
||||
return &key, nil
|
||||
}
|
||||
|
||||
// GetAllEnrollmentKeys - fetches all enrollment keys from DB
|
||||
// TODO drop double pointer
|
||||
func GetAllEnrollmentKeys() ([]*models.EnrollmentKey, error) {
|
||||
func GetAllEnrollmentKeys() ([]models.EnrollmentKey, error) {
|
||||
currentKeys, err := getEnrollmentKeysMap()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var currentKeysList = []*models.EnrollmentKey{}
|
||||
var currentKeysList = []models.EnrollmentKey{}
|
||||
for k := range currentKeys {
|
||||
currentKeysList = append(currentKeysList, currentKeys[k])
|
||||
}
|
||||
@@ -127,15 +133,21 @@ func GetAllEnrollmentKeys() ([]*models.EnrollmentKey, error) {
|
||||
|
||||
// GetEnrollmentKey - fetches a single enrollment key
|
||||
// returns nil and error if not found
|
||||
func GetEnrollmentKey(value string) (*models.EnrollmentKey, error) {
|
||||
func GetEnrollmentKey(value string) (key models.EnrollmentKey, err error) {
|
||||
currentKeys, err := getEnrollmentKeysMap()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return key, err
|
||||
}
|
||||
if key, ok := currentKeys[value]; ok {
|
||||
return key, nil
|
||||
}
|
||||
return nil, EnrollmentErrors.NoKeyFound
|
||||
return key, EnrollmentErrors.NoKeyFound
|
||||
}
|
||||
|
||||
func deleteEnrollmentkeyFromCache(key string) {
|
||||
enrollmentkeyCacheMutex.Lock()
|
||||
delete(enrollmentkeyCacheMap, key)
|
||||
enrollmentkeyCacheMutex.Unlock()
|
||||
}
|
||||
|
||||
// DeleteEnrollmentKey - delete's a given enrollment key by value
|
||||
@@ -144,7 +156,13 @@ func DeleteEnrollmentKey(value string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return database.DeleteRecord(database.ENROLLMENT_KEYS_TABLE_NAME, value)
|
||||
err = database.DeleteRecord(database.ENROLLMENT_KEYS_TABLE_NAME, value)
|
||||
if err == nil {
|
||||
if servercfg.CacheEnabled() {
|
||||
deleteEnrollmentkeyFromCache(value)
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// TryToUseEnrollmentKey - checks first if key can be decremented
|
||||
@@ -200,7 +218,7 @@ func DeTokenize(b64Token string) (*models.EnrollmentKey, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return k, nil
|
||||
return &k, nil
|
||||
}
|
||||
|
||||
// == private ==
|
||||
@@ -215,11 +233,11 @@ func decrementEnrollmentKey(value string) (*models.EnrollmentKey, error) {
|
||||
return nil, EnrollmentErrors.NoUsesRemaining
|
||||
}
|
||||
k.UsesRemaining = k.UsesRemaining - 1
|
||||
if err = upsertEnrollmentKey(k); err != nil {
|
||||
if err = upsertEnrollmentKey(&k); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return k, nil
|
||||
return &k, nil
|
||||
}
|
||||
|
||||
func upsertEnrollmentKey(k *models.EnrollmentKey) error {
|
||||
@@ -230,7 +248,13 @@ func upsertEnrollmentKey(k *models.EnrollmentKey) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return database.Insert(k.Value, string(data), database.ENROLLMENT_KEYS_TABLE_NAME)
|
||||
err = database.Insert(k.Value, string(data), database.ENROLLMENT_KEYS_TABLE_NAME)
|
||||
if err == nil {
|
||||
if servercfg.CacheEnabled() {
|
||||
storeEnrollmentkeyInCache(k.Value, *k)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getUniqueEnrollmentID() (string, error) {
|
||||
@@ -245,7 +269,23 @@ func getUniqueEnrollmentID() (string, error) {
|
||||
return newID, nil
|
||||
}
|
||||
|
||||
func getEnrollmentKeysMap() (map[string]*models.EnrollmentKey, error) {
|
||||
func getEnrollmentkeysFromCache() map[string]models.EnrollmentKey {
|
||||
return enrollmentkeyCacheMap
|
||||
}
|
||||
|
||||
func storeEnrollmentkeyInCache(key string, enrollmentkey models.EnrollmentKey) {
|
||||
enrollmentkeyCacheMutex.Lock()
|
||||
enrollmentkeyCacheMap[key] = enrollmentkey
|
||||
enrollmentkeyCacheMutex.Unlock()
|
||||
}
|
||||
|
||||
func getEnrollmentKeysMap() (map[string]models.EnrollmentKey, error) {
|
||||
if servercfg.CacheEnabled() {
|
||||
keys := getEnrollmentkeysFromCache()
|
||||
if len(keys) != 0 {
|
||||
return keys, nil
|
||||
}
|
||||
}
|
||||
records, err := database.FetchRecords(database.ENROLLMENT_KEYS_TABLE_NAME)
|
||||
if err != nil {
|
||||
if !database.IsEmptyRecord(err) {
|
||||
@@ -255,14 +295,17 @@ func getEnrollmentKeysMap() (map[string]*models.EnrollmentKey, error) {
|
||||
if records == nil {
|
||||
records = make(map[string]string)
|
||||
}
|
||||
currentKeys := make(map[string]*models.EnrollmentKey, 0)
|
||||
currentKeys := make(map[string]models.EnrollmentKey, 0)
|
||||
if len(records) > 0 {
|
||||
for k := range records {
|
||||
var currentKey models.EnrollmentKey
|
||||
if err = json.Unmarshal([]byte(records[k]), ¤tKey); err != nil {
|
||||
continue
|
||||
}
|
||||
currentKeys[k] = ¤tKey
|
||||
currentKeys[k] = currentKey
|
||||
if servercfg.CacheEnabled() {
|
||||
storeEnrollmentkeyInCache(currentKey.Value, currentKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
return currentKeys, nil
|
||||
|
||||
Reference in New Issue
Block a user