added ack and done signals

This commit is contained in:
0xdcarns 2022-02-17 09:08:20 -05:00
parent bd8b66c169
commit 506a897f26
4 changed files with 46 additions and 17 deletions

View file

@ -5,7 +5,6 @@ import (
"fmt"
"net/http"
"strings"
"sync"
"github.com/gorilla/mux"
"github.com/gravitl/netmaker/database"
@ -642,14 +641,8 @@ func runUpdates(node *models.Node, ifaceDelta bool) {
// updates local peers for a server on a given node's network
func runServerUpdate(node *models.Node, ifaceDelta bool) error {
var mutex sync.Mutex
mutex.Lock()
defer mutex.Unlock()
if servercfg.IsClientMode() != "on" {
return nil
}
if !isServer(node) {
if servercfg.IsClientMode() != "on" || !isServer(node) {
return nil
}

View file

@ -8,6 +8,7 @@ import (
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/ncutils"
)
// DefaultHandler default message queue handler - only called when GetDebug == true
@ -96,10 +97,30 @@ func ClientPeerUpdate(client mqtt.Client, msg mqtt.Message) {
logger.Log(1, "error getting node ", id, err.Error())
return
}
if err := PublishPeerUpdate(&currentNode); err != nil {
logger.Log(1, "error publishing peer update ", err.Error())
decrypted, decryptErr := decryptMsg(&currentNode, msg.Payload())
if decryptErr != nil {
logger.Log(1, "failed to decrypt message during client peer update for node ", id, decryptErr.Error())
return
}
switch decrypted[0] {
case ncutils.ACK:
currentServerNode, err := logic.GetNetworkServerLocal(currentNode.Network)
if err != nil {
return
}
if err := logic.ServerUpdate(&currentServerNode, false); err != nil {
logger.Log(1, "server node:", currentServerNode.ID, "failed update")
return
}
case ncutils.DONE:
if err := PublishPeerUpdate(&currentNode); err != nil {
logger.Log(1, "error publishing peer update ", err.Error())
return
}
case ncutils.KEY:
logger.Log(0, "I should have broke")
}
logger.Log(1, "sent peer updates after signal received from", id, currentNode.Name)
}()
}

View file

@ -199,11 +199,11 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
return
}
if ifaceDelta { // if a change caused an ifacedelta we need to notify the server to update the peers
pubErr := publishClientPeers(&cfg)
if pubErr != nil {
ncutils.Log("could not notify server to update peers after interface change")
ackErr := publishSignal(&cfg, ncutils.ACK)
if ackErr != nil {
ncutils.Log("could not notify server that it received an interface update")
} else {
ncutils.Log("signalled peer update to server")
ncutils.Log("signalled acknowledgement of change to server")
}
ncutils.Log("applying WG conf to " + file)
err = wireguard.ApplyConf(&cfg.Node, cfg.Node.Interface, file)
@ -221,6 +221,12 @@ func NodeUpdate(client mqtt.Client, msg mqtt.Message) {
}
}
}
doneErr := publishSignal(&cfg, ncutils.DONE)
if doneErr != nil {
ncutils.Log("could not notify server to update peers after interface change")
} else {
ncutils.Log("signalled finshed interface update to server")
}
}
//deal with DNS
if newNode.DNSOn != "yes" && shouldDNSChange && cfg.Node.Interface != "" {
@ -480,9 +486,8 @@ func setupMQTT(cfg *config.ClientConfig, publish bool) mqtt.Client {
}
// publishes a message to server to update peers on this peer's behalf
func publishClientPeers(cfg *config.ClientConfig) error {
payload := []byte(ncutils.MakeRandomString(16)) // just random string for now to keep the bytes different
if err := publish(cfg, fmt.Sprintf("signal/%s", cfg.Node.ID), payload, 1); err != nil {
func publishSignal(cfg *config.ClientConfig, signal byte) error {
if err := publish(cfg, fmt.Sprintf("signal/%s", cfg.Node.ID), []byte{signal}, 1); err != nil {
return err
}
return nil

View file

@ -0,0 +1,10 @@
package ncutils
const (
// ACK - acknowledgement signal for MQ
ACK = 1
// DONE - done signal for MQ
DONE = 2
// KEY - key update completed signal for MQ
KEY = 3
)