Skip to content

Commit

Permalink
[unitconfig,smcontroller] Do not set optional node ID for node config
Browse files Browse the repository at this point in the history
Signed-off-by: Oleksandr Grytsov <[email protected]>
  • Loading branch information
al1img committed Aug 28, 2024
1 parent 0a84ab3 commit 3dc1894
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 49 deletions.
16 changes: 4 additions & 12 deletions smcontroller/smcontroller.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,12 +189,8 @@ func (controller *Controller) GetNodeConfigStatus(nodeID string) (unitconfig.Nod
}

// CheckNodeConfig checks node config.
func (controller *Controller) CheckNodeConfig(version string, nodeConfig cloudprotocol.NodeConfig) error {
if nodeConfig.NodeID == nil {
return aoserrors.Errorf("node ID is not set")
}

handler, err := controller.getNodeHandlerByID(*nodeConfig.NodeID)
func (controller *Controller) CheckNodeConfig(nodeID, version string, nodeConfig cloudprotocol.NodeConfig) error {
handler, err := controller.getNodeHandlerByID(nodeID)
if err != nil {
return err
}
Expand All @@ -207,12 +203,8 @@ func (controller *Controller) CheckNodeConfig(version string, nodeConfig cloudpr
}

// SetNodeConfig sets node config.
func (controller *Controller) SetNodeConfig(version string, nodeConfig cloudprotocol.NodeConfig) error {
if nodeConfig.NodeID == nil {
return aoserrors.Errorf("node ID is not set")
}

handler, err := controller.getNodeHandlerByID(*nodeConfig.NodeID)
func (controller *Controller) SetNodeConfig(nodeID, version string, nodeConfig cloudprotocol.NodeConfig) error {
handler, err := controller.getNodeHandlerByID(nodeID)
if err != nil {
return err
}
Expand Down
10 changes: 5 additions & 5 deletions smcontroller/smcontroller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ func TestNodeConfigMessages(t *testing.T) {
NodeConfigStatus: &pbsm.NodeConfigStatus{Version: originalVersion},
}}
newVersion = "2.0.0"
nodeConfig = fmt.Sprintf(`{"nodeId":"%s","nodeType":"%s"}`, nodeID, nodeType)
nodeConfig = fmt.Sprintf(`{"nodeType":"%s"}`, nodeType)
)

controller, err := smcontroller.New(&config, messageSender, nil, nil, nil, nil, true)
Expand Down Expand Up @@ -254,8 +254,8 @@ func TestNodeConfigMessages(t *testing.T) {
<-testWaitChan

go func() {
if err := controller.CheckNodeConfig(newVersion,
cloudprotocol.NodeConfig{NodeID: &nodeID, NodeType: nodeType}); err != nil {
if err := controller.CheckNodeConfig(nodeID, newVersion,
cloudprotocol.NodeConfig{NodeType: nodeType}); err != nil {
t.Errorf("Error check unit config: %v", err)
}

Expand All @@ -279,8 +279,8 @@ func TestNodeConfigMessages(t *testing.T) {
<-testWaitChan

go func() {
if err := controller.SetNodeConfig(newVersion,
cloudprotocol.NodeConfig{NodeID: &nodeID, NodeType: nodeType}); err != nil {
if err := controller.SetNodeConfig(nodeID, newVersion,
cloudprotocol.NodeConfig{NodeType: nodeType}); err != nil {
t.Errorf("Error check unit config: %v", err)
}

Expand Down
46 changes: 18 additions & 28 deletions unitconfig/unitconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ type NodeInfoProvider interface {

// Client client unit config interface.
type Client interface {
CheckNodeConfig(version string, nodeConfig cloudprotocol.NodeConfig) error
SetNodeConfig(version string, nodeConfig cloudprotocol.NodeConfig) error
CheckNodeConfig(nodeID, version string, nodeConfig cloudprotocol.NodeConfig) error
SetNodeConfig(nodeID, version string, nodeConfig cloudprotocol.NodeConfig) error
GetNodeConfigStatuses() ([]NodeConfigStatus, error)
NodeConfigStatusChannel() <-chan NodeConfigStatus
}
Expand Down Expand Up @@ -143,14 +143,12 @@ func (instance *Instance) CheckUnitConfig(unitConfig cloudprotocol.UnitConfig) e

for i, nodeConfigStatus := range nodeConfigStatuses {
if nodeConfigStatus.Version != unitConfig.Version || nodeConfigStatus.Error != nil {
nodeConfig := findNodeConfig(nodeConfigStatus.NodeID, nodeConfigStatus.NodeType, &unitConfig)
if nodeConfig == nil {
continue
}
nodeConfig := findNodeConfig(nodeConfigStatus.NodeID, nodeConfigStatus.NodeType, unitConfig)

nodeConfig.NodeID = &nodeConfigStatuses[i].NodeID

if err := instance.client.CheckNodeConfig(unitConfig.Version, *nodeConfig); err != nil {
if err := instance.client.CheckNodeConfig(
nodeConfigStatus.NodeID, unitConfig.Version, nodeConfig); err != nil {
return aoserrors.Wrap(err)
}
}
Expand Down Expand Up @@ -216,21 +214,17 @@ func (instance *Instance) UpdateUnitConfig(unitConfig cloudprotocol.UnitConfig)
log.Errorf("Error getting node config statuses: %v", err)
}

for i, nodeConfigStatus := range nodeConfigStatuses {
for _, nodeConfigStatus := range nodeConfigStatuses {
if nodeConfigStatus.Version != unitConfig.Version || nodeConfigStatus.Error != nil {
nodeConfig := findNodeConfig(nodeConfigStatus.NodeID, nodeConfigStatus.NodeType, &unitConfig)
if nodeConfig == nil {
continue
}

nodeConfig.NodeID = &nodeConfigStatuses[i].NodeID
nodeConfig := findNodeConfig(nodeConfigStatus.NodeID, nodeConfigStatus.NodeType, unitConfig)

if err := instance.client.SetNodeConfig(unitConfig.Version, *nodeConfig); err != nil {
if err := instance.client.SetNodeConfig(
nodeConfigStatus.NodeID, unitConfig.Version, nodeConfig); err != nil {
return aoserrors.Wrap(err)
}

if nodeConfigStatus.NodeID == instance.curNodeID {
instance.updateCurrentNodeConfigListeners(*nodeConfig)
instance.updateCurrentNodeConfigListeners(nodeConfig)
}
}
}
Expand Down Expand Up @@ -313,37 +307,33 @@ func (instance *Instance) handleNodeConfigStatus() {
continue
}

nodeConfig := findNodeConfig(nodeConfigStatus.NodeID, nodeConfigStatus.NodeType, &instance.unitConfig)
if nodeConfig == nil {
continue
}
nodeConfig := findNodeConfig(nodeConfigStatus.NodeID, nodeConfigStatus.NodeType, instance.unitConfig)

nodeConfig.NodeID = &nodeConfigStatus.NodeID

if err := instance.client.SetNodeConfig(instance.unitConfig.Version, *nodeConfig); err != nil {
if err := instance.client.SetNodeConfig(
nodeConfigStatus.NodeID, instance.unitConfig.Version, nodeConfig); err != nil {
log.WithField("NodeID", nodeConfigStatus.NodeID).Errorf("Can't update node config: %v", err)
}

if nodeConfigStatus.NodeID == instance.curNodeID {
instance.updateCurrentNodeConfigListeners(*nodeConfig)
instance.updateCurrentNodeConfigListeners(nodeConfig)
}
}
}

func findNodeConfig(nodeID, nodeType string, unitConfig *cloudprotocol.UnitConfig) *cloudprotocol.NodeConfig {
func findNodeConfig(nodeID, nodeType string, unitConfig cloudprotocol.UnitConfig) cloudprotocol.NodeConfig {
for i, nodeConfig := range unitConfig.Nodes {
if nodeConfig.NodeID != nil && *nodeConfig.NodeID == nodeID {
return &unitConfig.Nodes[i]
return unitConfig.Nodes[i]
}
}

for i, nodeConfig := range unitConfig.Nodes {
if nodeConfig.NodeType == nodeType {
return &unitConfig.Nodes[i]
return unitConfig.Nodes[i]
}
}

return nil
return cloudprotocol.NodeConfig{}
}

func (instance *Instance) updateCurrentNodeConfigListeners(curNodeConfig cloudprotocol.NodeConfig) {
Expand Down
8 changes: 4 additions & 4 deletions unitconfig/unitconfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,19 +399,19 @@ func newTestClient() *testClient {
}
}

func (client *testClient) CheckNodeConfig(version string, nodeConfig cloudprotocol.NodeConfig) error {
func (client *testClient) CheckNodeConfig(nodeID string, version string, nodeConfig cloudprotocol.NodeConfig) error {
client.nodeConfigSetCheckChannel <- testNodeConfig{
NodeID: *nodeConfig.NodeID,
NodeID: nodeID,
NodeType: nodeConfig.NodeType,
Version: version,
}

return nil
}

func (client *testClient) SetNodeConfig(version string, nodeConfig cloudprotocol.NodeConfig) error {
func (client *testClient) SetNodeConfig(nodeID string, version string, nodeConfig cloudprotocol.NodeConfig) error {
client.nodeConfigSetCheckChannel <- testNodeConfig{
NodeID: *nodeConfig.NodeID,
NodeID: nodeID,
NodeType: nodeConfig.NodeType,
Version: version,
}
Expand Down

0 comments on commit 3dc1894

Please sign in to comment.