|
@@ -159,24 +159,24 @@ func failOverME(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("peer not found"), "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
- if node.IsIngressGateway {
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node is acting as remote access gw"), "badrequest"))
|
|
|
+ if node.IsFailOver {
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node is acting as failover"), "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
- if node.IsRelayed || node.IsFailOver {
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node is relayed or acting as failover"), "badrequest"))
|
|
|
+ if node.IsRelayed && node.RelayedBy == peerNode.ID.String() {
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node is relayed by peer node"), "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
- if node.IsRelay {
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node acting as relay cannot be failedOver"), "badrequest"))
|
|
|
+ if node.IsRelay && peerNode.RelayedBy == node.ID.String() {
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node acting as relay for the peer node"), "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
- if node.IsInternetGateway {
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node acting as internet gw cannot be failedOver"), "badrequest"))
|
|
|
+ if node.IsInternetGateway && peerNode.InternetGwID == node.ID.String() {
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node acting as internet gw for the peer node"), "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
- if node.InternetGwID != "" {
|
|
|
- logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node using a internet gw cannot be failedOver"), "badrequest"))
|
|
|
+ if node.InternetGwID != "" && node.InternetGwID == peerNode.ID.String() {
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("node using a internet gw by the peer node"), "badrequest"))
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -187,22 +187,6 @@ func failOverME(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("failed to create failover: %v", err), "internal"))
|
|
|
return
|
|
|
}
|
|
|
- //relayed is not a single peer in host's peer list, it's in the relay peer info. So there is no failover me triggered for relayed.
|
|
|
- //if peerNode is relay, setup the failover flag for each relayed
|
|
|
- if peerNode.IsRelay {
|
|
|
- for _, id := range peerNode.RelayedNodes {
|
|
|
- rNode, err := logic.GetNodeByID(id)
|
|
|
- if err != nil {
|
|
|
- slog.Error("failed to load relayed by id", "Eror", id)
|
|
|
- continue
|
|
|
- }
|
|
|
- err = proLogic.SetFailOverCtx(failOverNode, node, rNode)
|
|
|
- if err != nil {
|
|
|
- slog.Error("failed to create failover", "id", node.ID.String(),
|
|
|
- "network", node.Network, "on relayed", id, "error", err)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
slog.Info("[auto-relay] created relay on node", "node", node.ID.String(), "network", node.Network)
|
|
|
sendPeerUpdate = true
|
|
|
|