Skip to content

Commit

Permalink
[umcontroller] Handle node status "unprovisioned"
Browse files Browse the repository at this point in the history
Signed-off-by: Mykola Kobets <[email protected]>
  • Loading branch information
mykola-kobets-epam committed Sep 2, 2024
1 parent 0b54e4b commit 94e54c1
Showing 1 changed file with 61 additions and 32 deletions.
93 changes: 61 additions & 32 deletions umcontroller/umcontroller.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import (
"sync"
"time"

"golang.org/x/exp/slices"

"github.com/aosedge/aos_common/aoserrors"
"github.com/aosedge/aos_common/image"
"github.com/aosedge/aos_common/spaceallocator"
Expand Down Expand Up @@ -526,22 +528,8 @@ func (umCtrl *Controller) handleNewConnection(umID string, handler *umHandler, s
return
}

for _, value := range umCtrl.connections {
if value.handler == nil {
return
}
}

if umCtrl.fsm.Current() == stateInit {
log.Debug("All connection to Ums established")

umCtrl.connectionMonitor.stopConnectionTimer()

if err := umCtrl.getUpdateComponentsFromStorage(); err != nil {
log.Error("Can't read update components from storage: ", err)
}

umCtrl.generateFSMEvent(evAllClientsConnected)
if umCtrl.allNodesConnected() {
umCtrl.processAllNodesConnected()
}
}

Expand Down Expand Up @@ -1124,29 +1112,48 @@ func (umCtrl *Controller) createConnections(nodeInfoProvider NodeInfoProvider) e
}

func (umCtrl *Controller) handleNodeInfoChange(nodeInfo cloudprotocol.NodeInfo) {
if nodeInfo.Status == "unprovisioned" {
switch nodeInfo.Status {
case cloudprotocol.NodeStatusPaused:
return
}
case cloudprotocol.NodeStatusUnprovisioned:
ind := slices.IndexFunc(umCtrl.connections, func(conn umConnection) bool {
return nodeInfo.NodeID == conn.umID
})

if ind >= 0 {
if umCtrl.connections[ind].handler != nil {
umCtrl.connections[ind].handler.Close(ConnectionClose)
}

nodeHasUM, err := umCtrl.nodeHasUMComponent(nodeInfo)
if err != nil {
log.WithField("nodeID", nodeInfo.NodeID).Errorf("Failed to check UM component: %v", err)
}
umCtrl.connections = append(umCtrl.connections[:ind], umCtrl.connections[ind+1:]...)
}

if !nodeHasUM {
return
}
if umCtrl.allNodesConnected() {
umCtrl.processAllNodesConnected()
}

for _, connection := range umCtrl.connections {
if connection.umID == nodeInfo.NodeID {
case cloudprotocol.NodeStatusProvisioned:
nodeHasUM, err := umCtrl.nodeHasUMComponent(nodeInfo)
if err != nil {
log.WithField("nodeID", nodeInfo.NodeID).Errorf("Failed to check UM component: %v", err)
}

if !nodeHasUM {
return
}
}

umCtrl.connections = append(umCtrl.connections, umConnection{
umID: nodeInfo.NodeID,
isLocalClient: nodeInfo.NodeID == umCtrl.currentNodeID, updatePriority: lowestUpdatePriority, handler: nil,
})
for _, connection := range umCtrl.connections {
if connection.umID == nodeInfo.NodeID {
return
}
}

umCtrl.connections = append(umCtrl.connections, umConnection{
umID: nodeInfo.NodeID,
isLocalClient: nodeInfo.NodeID == umCtrl.currentNodeID, updatePriority: lowestUpdatePriority, handler: nil,
})

}

Check failure on line 1156 in umcontroller/umcontroller.go

View workflow job for this annotation

GitHub Actions / tests

unnecessary trailing newline (whitespace)
}

func (status systemComponentStatus) String() string {
Expand Down Expand Up @@ -1195,3 +1202,25 @@ func (umCtrl *Controller) nodeHasUMComponent(

return false, nil
}

func (umCtrl *Controller) allNodesConnected() bool {
notConnectedNodeInd := slices.IndexFunc(umCtrl.connections, func(conn umConnection) bool {
return conn.handler == nil
})

return notConnectedNodeInd < 0
}

func (umCtrl *Controller) processAllNodesConnected() {
if umCtrl.fsm.Current() == stateInit {
log.Debug("All connection to Ums established")

umCtrl.connectionMonitor.stopConnectionTimer()

if err := umCtrl.getUpdateComponentsFromStorage(); err != nil {
log.Error("Can't read update components from storage: ", err)
}

umCtrl.generateFSMEvent(evAllClientsConnected)
}
}

0 comments on commit 94e54c1

Please sign in to comment.