Abhishek Kondur 2 лет назад
Родитель
Сommit
d8dfe40c9f
3 измененных файлов с 17 добавлено и 11 удалено
  1. 10 6
      controllers/ext_client.go
  2. 5 3
      logic/extpeers.go
  3. 2 2
      mq/publishers.go

+ 10 - 6
controllers/ext_client.go

@@ -397,7 +397,7 @@ func createExtClient(w http.ResponseWriter, r *http.Request) {
 	logger.Log(0, r.Header.Get("user"), "created new ext client on network", networkName)
 	w.WriteHeader(http.StatusOK)
 	go func() {
-		go mq.BroadcastNewExtClient(host, &node)
+		go mq.BroadcastExtClient(host, &node)
 		// if err := mq.PublishPeerUpdate(); err != nil {
 		// 	logger.Log(1, "error setting ext peers on "+nodeid+": "+err.Error())
 		// }
@@ -485,7 +485,7 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) {
 	var changedEnabled = (update.Enabled != oldExtClient.Enabled) // indicates there was a change in enablement
 	// extra var need as logic.Update changes oldExtClient
 	currentClient := oldExtClient
-	newclient, err := logic.UpdateExtClient(&oldExtClient, &update)
+	newclient, replaceOldClient, err := logic.UpdateExtClient(&oldExtClient, &update)
 	if err != nil {
 		logger.Log(0, r.Header.Get("user"),
 			fmt.Sprintf("failed to update ext client [%s], network [%s]: %v",
@@ -494,10 +494,14 @@ func updateExtClient(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 	logger.Log(0, r.Header.Get("user"), "updated ext client", update.ClientID)
-	if changedEnabled { // need to send a peer update to the ingress node as enablement of one of it's clients has changed
-		if ingressNode, err := logic.GetNodeByID(newclient.IngressGatewayID); err == nil {
-			if err = mq.PublishPeerUpdate(); err != nil {
-				logger.Log(1, "error setting ext peers on", ingressNode.ID.String(), ":", err.Error())
+	if ingressNode, err := logic.GetNodeByID(newclient.IngressGatewayID); err == nil {
+		if ingressHost, err := logic.GetHost(ingressNode.HostID.String()); err == nil {
+			if replaceOldClient || !update.Enabled {
+				go mq.BroadcastDelExtClient(ingressHost, &ingressNode, oldExtClient)
+			}
+			if replaceOldClient || changedEnabled {
+				// broadcast update
+				go mq.BroadcastExtClient(ingressHost, &ingressNode)
 			}
 		}
 	}

+ 5 - 3
logic/extpeers.go

@@ -194,14 +194,16 @@ func SaveExtClient(extclient *models.ExtClient) error {
 }
 
 // UpdateExtClient - updates an ext client with new values
-func UpdateExtClient(old *models.ExtClient, update *models.CustomExtClient) (*models.ExtClient, error) {
+func UpdateExtClient(old *models.ExtClient, update *models.CustomExtClient) (*models.ExtClient, bool, error) {
 	new := old
+	replaceOldClient := false
 	err := DeleteExtClient(old.Network, old.ClientID)
 	if err != nil {
-		return new, err
+		return new, replaceOldClient, err
 	}
 	new.ClientID = update.ClientID
 	if update.PublicKey != "" && old.PublicKey != update.PublicKey {
+		replaceOldClient = true
 		new.PublicKey = update.PublicKey
 	}
 	if update.DNS != "" && update.DNS != old.DNS {
@@ -213,7 +215,7 @@ func UpdateExtClient(old *models.ExtClient, update *models.CustomExtClient) (*mo
 	if update.ExtraAllowedIPs != nil && StringDifference(old.ExtraAllowedIPs, update.ExtraAllowedIPs) != nil {
 		new.ExtraAllowedIPs = update.ExtraAllowedIPs
 	}
-	return new, CreateExtClient(new)
+	return new, replaceOldClient, CreateExtClient(new)
 }
 
 // GetExtClientsByID - gets the clients of attached gateway

+ 2 - 2
mq/publishers.go

@@ -275,8 +275,8 @@ func BroadcastAddOrUpdatePeer(host *models.Host, node *models.Node, update bool)
 	return nil
 }
 
-// BroadcastNewExtClient - adds ext client to peers in the network
-func BroadcastNewExtClient(ingressHost *models.Host, ingressNode *models.Node) error {
+// BroadcastExtClient - adds ext client to peers in the network
+func BroadcastExtClient(ingressHost *models.Host, ingressNode *models.Node) error {
 
 	nodes, err := logic.GetNetworkNodes(ingressNode.Network)
 	if err != nil {