Skip to content

Commit b3a838f

Browse files
authored
Merge branch 'develop' into NET-792-remove-freebsd
2 parents 0b2f5e3 + b840ef8 commit b3a838f

26 files changed

+171
-150
lines changed

auth/host_session.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ func CheckNetRegAndHostUpdate(networks []string, h *models.Host, relayNodeId uui
253253
Action: models.RequestAck,
254254
Host: *h,
255255
})
256-
if err := mq.PublishPeerUpdate(); err != nil {
256+
if err := mq.PublishPeerUpdate(false); err != nil {
257257
logger.Log(0, "failed to publish peer update during registration -", err.Error())
258258
}
259259
}

config/config.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ type ServerConfig struct {
9191
Environment string `yaml:"environment"`
9292
JwtValidityDuration time.Duration `yaml:"jwt_validity_duration"`
9393
RacAutoDisable bool `yaml:"rac_auto_disable"`
94-
CacheEnabled bool `yaml:"caching_enabled"`
94+
CacheEnabled string `yaml:"caching_enabled"`
9595
}
9696

9797
// SQLConfig - Generic SQL Config

controllers/ext_client.go

+29-14
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
422422
slog.Info("created extclient", "user", r.Header.Get("user"), "network", node.Network, "clientid", extclient.ClientID)
423423
w.WriteHeader(http.StatusOK)
424424
go func() {
425-
if err := mq.PublishPeerUpdate(); err != nil {
425+
if err := mq.PublishPeerUpdate(false); err != nil {
426426
logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error())
427427
}
428428
if servercfg.IsDNSMode() {
@@ -510,22 +510,37 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) {
510510
return
511511
}
512512
logger.Log(0, r.Header.Get("user"), "updated ext client", update.ClientID)
513-
if sendPeerUpdate { // need to send a peer update to the ingress node as enablement of one of it's clients has changed
514-
if ingressNode, err := logic.GetNodeByID(newclient.IngressGatewayID); err == nil {
515-
if err = mq.PublishPeerUpdate(); err != nil {
516-
logger.Log(1, "error setting ext peers on", ingressNode.ID.String(), ":", err.Error())
517-
}
518-
}
519-
}
520513
w.WriteHeader(http.StatusOK)
521514
json.NewEncoder(w).Encode(newclient)
522-
if changedID {
523-
go func() {
524-
if servercfg.IsDNSMode() {
525-
logic.SetDNS()
515+
516+
go func() {
517+
if changedID && servercfg.IsDNSMode() {
518+
logic.SetDNS()
519+
}
520+
if sendPeerUpdate { // need to send a peer update to the ingress node as enablement of one of it's clients has changed
521+
ingressNode, err := logic.GetNodeByID(newclient.IngressGatewayID)
522+
if err == nil {
523+
if err = mq.PublishPeerUpdate(false); err != nil {
524+
logger.Log(1, "error setting ext peers on", ingressNode.ID.String(), ":", err.Error())
525+
}
526526
}
527-
}()
528-
}
527+
if !update.Enabled {
528+
ingressHost, err := logic.GetHost(ingressNode.HostID.String())
529+
if err != nil {
530+
slog.Error("Failed to get ingress host", "node", ingressNode.ID.String(), "error", err)
531+
return
532+
}
533+
nodes, err := logic.GetAllNodes()
534+
if err != nil {
535+
slog.Error("Failed to get nodes", "error", err)
536+
return
537+
}
538+
go mq.PublishSingleHostPeerUpdate(ingressHost, nodes, nil, []models.ExtClient{oldExtClient}, false)
539+
}
540+
}
541+
542+
}()
543+
529544
}
530545

531546
// swagger:route DELETE /api/extclients/{network}/{clientid} ext_client deleteExtClient

controllers/hosts.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func updateHost(w http.ResponseWriter, r *http.Request) {
195195
logger.Log(0, r.Header.Get("user"), "failed to send host update: ", currHost.ID.String(), err.Error())
196196
}
197197
go func() {
198-
if err := mq.PublishPeerUpdate(); err != nil {
198+
if err := mq.PublishPeerUpdate(false); err != nil {
199199
logger.Log(0, "fail to publish peer update: ", err.Error())
200200
}
201201
if newHost.Name != currHost.Name {
@@ -228,6 +228,7 @@ func hostUpdateFallback(w http.ResponseWriter, r *http.Request) {
228228
currentHost, err := logic.GetHost(hostid)
229229
if err != nil {
230230
slog.Error("error getting host", "id", hostid, "error", err)
231+
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
231232
return
232233
}
233234

@@ -249,10 +250,13 @@ func hostUpdateFallback(w http.ResponseWriter, r *http.Request) {
249250
err := logic.UpsertHost(currentHost)
250251
if err != nil {
251252
slog.Error("failed to update host", "id", currentHost.ID, "error", err)
253+
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
252254
return
253255
}
254-
256+
case models.UpdateMetrics:
257+
mq.UpdateMetricsFallBack(hostUpdate.Node.ID.String(), hostUpdate.NewMetrics)
255258
}
259+
logic.ReturnSuccessResponse(w, r, "updated host data")
256260

257261
}
258262

@@ -356,7 +360,7 @@ func addHostToNetwork(w http.ResponseWriter, r *http.Request) {
356360
Host: *currHost,
357361
Node: *newNode,
358362
})
359-
mq.PublishPeerUpdate()
363+
mq.PublishPeerUpdate(false)
360364
if servercfg.IsDNSMode() {
361365
logic.SetDNS()
362366
}

controllers/migrate.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func migrate(w http.ResponseWriter, r *http.Request) {
9595
if err := logic.UpsertHost(&host); err != nil {
9696
slog.Error("save host", "error", err)
9797
}
98-
go mq.PublishPeerUpdate()
98+
go mq.PublishPeerUpdate(false)
9999
response := models.HostPull{
100100
Host: host,
101101
Nodes: nodes,

controllers/network.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"github.com/gravitl/netmaker/logic/acls"
1818
"github.com/gravitl/netmaker/models"
1919
"github.com/gravitl/netmaker/mq"
20-
"github.com/gravitl/netmaker/servercfg"
2120
)
2221

2322
func networkHandlers(r *mux.Router) {
@@ -128,11 +127,12 @@ func updateNetworkACL(w http.ResponseWriter, r *http.Request) {
128127
logger.Log(1, r.Header.Get("user"), "updated ACLs for network", netname)
129128

130129
// send peer updates
131-
if servercfg.IsMessageQueueBackend() {
132-
if err = mq.PublishPeerUpdate(); err != nil {
130+
go func() {
131+
if err = mq.PublishPeerUpdate(false); err != nil {
133132
logger.Log(0, "failed to publish peer update after ACL update on", netname)
134133
}
135-
}
134+
}()
135+
136136
w.WriteHeader(http.StatusOK)
137137
json.NewEncoder(w).Encode(newNetACL)
138138
}

controllers/node.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ func createEgressGateway(w http.ResponseWriter, r *http.Request) {
436436
if err := mq.NodeUpdate(&node); err != nil {
437437
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
438438
}
439-
mq.PublishPeerUpdate()
439+
mq.PublishPeerUpdate(false)
440440
}()
441441
}
442442

@@ -479,7 +479,7 @@ func deleteEgressGateway(w http.ResponseWriter, r *http.Request) {
479479
if err := mq.NodeUpdate(&node); err != nil {
480480
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
481481
}
482-
mq.PublishPeerUpdate()
482+
mq.PublishPeerUpdate(false)
483483
}()
484484
}
485485

@@ -590,7 +590,7 @@ func deleteIngressGateway(w http.ResponseWriter, r *http.Request) {
590590
return
591591
}
592592
go func() {
593-
if err := mq.PublishSingleHostPeerUpdate(host, allNodes, nil, removedClients[:]); err != nil {
593+
if err := mq.PublishSingleHostPeerUpdate(host, allNodes, nil, removedClients[:], false); err != nil {
594594
slog.Error("publishSingleHostUpdate", "host", host.Name, "error", err)
595595
}
596596
if err := mq.NodeUpdate(&node); err != nil {
@@ -667,7 +667,7 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
667667
slog.Error("error publishing node update to node", "node", newNode.ID, "error", err)
668668
}
669669
if aclUpdate || relayupdate || ifaceDelta {
670-
if err := mq.PublishPeerUpdate(); err != nil {
670+
if err := mq.PublishPeerUpdate(false); err != nil {
671671
logger.Log(0, "error during node ACL update for node", newNode.ID.String())
672672
}
673673
}

controllers/user.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
138138
} else {
139139
// publish peer update to ingress gateway
140140
if ingressNode, err := logic.GetNodeByID(newClient.IngressGatewayID); err == nil {
141-
if err = mq.PublishPeerUpdate(); err != nil {
141+
if err = mq.PublishPeerUpdate(false); err != nil {
142142
slog.Error("error updating ext clients on", "ingress", ingressNode.ID.String(), "err", err.Error())
143143
}
144144
}
@@ -343,6 +343,7 @@ func createUser(w http.ResponseWriter, r *http.Request) {
343343
caller, err := logic.GetUser(r.Header.Get("user"))
344344
if err != nil {
345345
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
346+
return
346347
}
347348
var user models.User
348349
err = json.NewDecoder(r.Body).Decode(&user)
@@ -365,7 +366,7 @@ func createUser(w http.ResponseWriter, r *http.Request) {
365366
return
366367
}
367368
if !servercfg.IsPro && !user.IsAdmin {
368-
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
369+
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("non-admins users can only be created on Pro version"), "forbidden"))
369370
return
370371
}
371372

logic/nodes.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -475,13 +475,8 @@ func DeleteExpiredNodes(ctx context.Context, peerUpdate chan *models.Node) {
475475
return
476476
}
477477
for _, node := range allnodes {
478+
node := node
478479
if time.Now().After(node.ExpirationDateTime) {
479-
if err := DeleteNode(&node, false); err != nil {
480-
slog.Error("error deleting expired node", "nodeid", node.ID.String(), "error", err.Error())
481-
continue
482-
}
483-
node.Action = models.NODE_DELETE
484-
node.PendingDelete = true
485480
peerUpdate <- &node
486481
slog.Info("deleting expired node", "nodeid", node.ID.String())
487482
}

logic/peers.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
210210
nodePeer = hostPeerUpdate.Peers[peerIndexMap[peerHost.PublicKey.String()]]
211211
}
212212

213-
if node.Network == network && !peerConfig.Remove { // add to peers map for metrics
213+
if node.Network == network && !peerConfig.Remove && len(peerConfig.AllowedIPs) > 0 { // add to peers map for metrics
214214
hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()] = models.IDandAddr{
215215
ID: peer.ID.String(),
216216
HostID: peerHost.ID.String(),

main.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,19 @@ func runMessageQueue(wg *sync.WaitGroup, ctx context.Context) {
168168
go logic.ManageZombies(ctx, peerUpdate)
169169
go logic.DeleteExpiredNodes(ctx, peerUpdate)
170170
for nodeUpdate := range peerUpdate {
171-
if err := mq.NodeUpdate(nodeUpdate); err != nil {
172-
logger.Log(0, "failed to send peer update for deleted node: ", nodeUpdate.ID.String(), err.Error())
171+
if nodeUpdate == nil {
172+
continue
173173
}
174+
node := nodeUpdate
175+
node.Action = models.NODE_DELETE
176+
node.PendingDelete = true
177+
if err := mq.NodeUpdate(node); err != nil {
178+
logger.Log(0, "failed to send peer update for deleted node: ", node.ID.String(), err.Error())
179+
}
180+
if err := logic.DeleteNode(node, true); err != nil {
181+
slog.Error("error deleting expired node", "nodeid", node.ID.String(), "error", err.Error())
182+
}
183+
go mq.PublishDeletedNodePeerUpdate(node)
174184
}
175185
}()
176186
<-ctx.Done()

models/host.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ const (
114114
UpdateKeys HostMqAction = "UPDATE_KEYS"
115115
// RequestPull - request a pull from a host
116116
RequestPull HostMqAction = "REQ_PULL"
117+
// UpdateMetrics - updates metrics data
118+
UpdateMetrics HostMqAction = "UPDATE_METRICS"
117119
)
118120

119121
// SignalAction - turn peer signal action
@@ -128,10 +130,11 @@ const (
128130

129131
// HostUpdate - struct for host update
130132
type HostUpdate struct {
131-
Action HostMqAction
132-
Host Host
133-
Node Node
134-
Signal Signal
133+
Action HostMqAction
134+
Host Host
135+
Node Node
136+
Signal Signal
137+
NewMetrics Metrics
135138
}
136139

137140
// HostTurnRegister - struct for host turn registration

models/metrics.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import (
66

77
// Metrics - metrics struct
88
type Metrics struct {
9-
Network string `json:"network" bson:"network" yaml:"network"`
10-
NodeID string `json:"node_id" bson:"node_id" yaml:"node_id"`
11-
NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"`
12-
Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
13-
FailoverPeers map[string]string `json:"needsfailover" bson:"needsfailover" yaml:"needsfailover"`
9+
Network string `json:"network" bson:"network" yaml:"network"`
10+
NodeID string `json:"node_id" bson:"node_id" yaml:"node_id"`
11+
NodeName string `json:"node_name" bson:"node_name" yaml:"node_name"`
12+
Connectivity map[string]Metric `json:"connectivity" bson:"connectivity" yaml:"connectivity"`
1413
}
1514

1615
// Metric - holds a metric for data between nodes

models/mqtt.go

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type HostPeerUpdate struct {
1919
HostNetworkInfo HostInfoMap `json:"host_network_info,omitempty" bson:"host_network_info,omitempty" yaml:"host_network_info,omitempty"`
2020
EgressRoutes []EgressNetworkRoutes `json:"egress_network_routes"`
2121
FwUpdate FwUpdate `json:"fw_update"`
22+
ReplacePeers bool `json:"replace_peers"`
2223
}
2324

2425
// IngressInfo - struct for ingress info

models/node.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import (
1414
const (
1515
// NODE_SERVER_NAME - the default server name
1616
NODE_SERVER_NAME = "netmaker"
17-
// TEN_YEARS_IN_SECONDS - ten years in seconds
18-
TEN_YEARS_IN_SECONDS = 315670000000000000
1917
// MAX_NAME_LENGTH - max name length of node
2018
MAX_NAME_LENGTH = 62
2119
// == ACTIONS == (can only be set by server)
@@ -354,7 +352,7 @@ func (node *Node) SetLastPeerUpdate() {
354352
// Node.SetExpirationDateTime - sets node expiry time
355353
func (node *Node) SetExpirationDateTime() {
356354
if node.ExpirationDateTime.IsZero() {
357-
node.ExpirationDateTime = time.Now().Add(TEN_YEARS_IN_SECONDS)
355+
node.ExpirationDateTime = time.Now().AddDate(100, 1, 0)
358356
}
359357
}
360358

0 commit comments

Comments
 (0)