Skip to content

Commit

Permalink
Rename Node.Spec.Role to Node.Spec.DesiredRole
Browse files Browse the repository at this point in the history
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
  • Loading branch information
aaronlehmann committed Jan 6, 2017
1 parent 260c079 commit d4db4ef
Show file tree
Hide file tree
Showing 17 changed files with 163 additions and 160 deletions.
232 changes: 116 additions & 116 deletions api/specs.pb.go

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions api/specs.proto
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ message NodeSpec {
DRAIN = 2 [(gogoproto.enumvalue_customname) = "NodeAvailabilityDrain"];
}

// Role defines the role the node should have.
NodeRole role = 2;
// DesiredRole defines the role the node should have.
NodeRole desired_role = 2;

// Membership controls the admission of the node into the cluster.
Membership membership = 3;
Expand Down
2 changes: 1 addition & 1 deletion ca/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ func (s *Server) IssueNodeCertificate(ctx context.Context, request *api.IssueNod
},
},
Spec: api.NodeSpec{
Role: role,
DesiredRole: role,
Membership: api.NodeMembershipAccepted,
Availability: request.Availability,
},
Expand Down
4 changes: 2 additions & 2 deletions ca/testutils/cautils.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,8 @@ func createNode(s *store.MemoryStore, nodeID, role string, csr, cert []byte) err
Certificate: cert,
},
Spec: api.NodeSpec{
Role: apiRole,
Membership: api.NodeMembershipAccepted,
DesiredRole: apiRole,
Membership: api.NodeMembershipAccepted,
},
Role: apiRole,
}
Expand Down
4 changes: 2 additions & 2 deletions cmd/swarmctl/node/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,11 @@ func changeNodeRole(cmd *cobra.Command, args []string, role api.NodeRole) error
}
spec := &node.Spec

if spec.Role == role {
if spec.DesiredRole == role {
return errNoChange
}

spec.Role = role
spec.DesiredRole = role

_, err = c.UpdateNode(common.Context(cmd), &api.UpdateNodeRequest{
NodeID: node.ID,
Expand Down
2 changes: 1 addition & 1 deletion cmd/swarmctl/node/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ var (
reachability = reachability + " *"
}
}
if reachability == "" && spec.Role == api.NodeRoleManager {
if reachability == "" && spec.DesiredRole == api.NodeRoleManager {
reachability = "UNKNOWN"
}

Expand Down
2 changes: 1 addition & 1 deletion integration/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ func (c *testCluster) SetNodeRole(id string, role api.NodeRole) error {
return err
}
spec := resp.Node.Spec.Copy()
spec.Role = role
spec.DesiredRole = role
if _, err := c.api.UpdateNode(context.Background(), &api.UpdateNodeRequest{
NodeID: id,
Spec: spec,
Expand Down
12 changes: 6 additions & 6 deletions integration/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,16 @@ func pollClusterReady(t *testing.T, c *testCluster, numWorker, numManager int) {
var leaderFound bool
for _, n := range res.Nodes {
if n.Status.State != api.NodeStatus_READY {
return fmt.Errorf("node %s with role %s isn't ready, status %s, message %s", n.ID, n.Spec.Role, n.Status.State, n.Status.Message)
return fmt.Errorf("node %s with desired role %s isn't ready, status %s, message %s", n.ID, n.Spec.DesiredRole, n.Status.State, n.Status.Message)
}
if n.Spec.Membership != api.NodeMembershipAccepted {
return fmt.Errorf("node %s with role %s isn't accepted to cluster, membership %s", n.ID, n.Spec.Role, n.Spec.Membership)
return fmt.Errorf("node %s with desired role %s isn't accepted to cluster, membership %s", n.ID, n.Spec.DesiredRole, n.Spec.Membership)
}
if n.Certificate.Role != n.Spec.Role {
return fmt.Errorf("node %s had different roles in spec and certificate, %s and %s respectively", n.ID, n.Spec.Role, n.Certificate.Role)
if n.Certificate.Role != n.Spec.DesiredRole {
return fmt.Errorf("node %s had different roles in spec and certificate, %s and %s respectively", n.ID, n.Spec.DesiredRole, n.Certificate.Role)
}
if n.Certificate.Status.State != api.IssuanceStateIssued {
return fmt.Errorf("node %s with role %s has no issued certificate, issuance state %s", n.ID, n.Spec.Role, n.Certificate.Status.State)
return fmt.Errorf("node %s with desired role %s has no issued certificate, issuance state %s", n.ID, n.Spec.DesiredRole, n.Certificate.Status.State)
}
if n.Role == api.NodeRoleManager {
if n.ManagerStatus == nil {
Expand Down Expand Up @@ -339,7 +339,7 @@ func TestDemoteDownedManager(t *testing.T) {
resp, err := cl.api.GetNode(context.Background(), &api.GetNodeRequest{NodeID: nodeID})
require.NoError(t, err)
spec := resp.Node.Spec.Copy()
spec.Role = api.NodeRoleWorker
spec.DesiredRole = api.NodeRoleWorker

// stop the node, then demote it, and start it back up again so when it comes back up it has to realize
// it's not running anymore
Expand Down
2 changes: 1 addition & 1 deletion manager/constraint/constraint.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func NodeMatches(constraints []Constraint, n *api.Node) bool {
return false
}
case strings.EqualFold(constraint.key, "node.role"):
if !constraint.Match(n.Spec.Role.String()) {
if !constraint.Match(n.Role.String()) {
return false
}
case strings.EqualFold(constraint.key, "node.platform.os"):
Expand Down
6 changes: 3 additions & 3 deletions manager/controlapi/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ func (s *Server) ListNodes(ctx context.Context, request *api.ListNodesRequest) (
return true
}
for _, c := range request.Filters.Roles {
if c == e.Spec.Role {
if c == e.Role {
return true
}
}
Expand Down Expand Up @@ -214,7 +214,7 @@ func (s *Server) UpdateNode(ctx context.Context, request *api.UpdateNodeRequest)
}

// Demotion sanity checks.
if node.Spec.Role == api.NodeRoleManager && request.Spec.Role == api.NodeRoleWorker {
if node.Spec.DesiredRole == api.NodeRoleManager && request.Spec.DesiredRole == api.NodeRoleWorker {
// Check for manager entries in Store.
managers, err := store.FindNodes(tx, store.ByRole(api.NodeRoleManager))
if err != nil {
Expand Down Expand Up @@ -263,7 +263,7 @@ func (s *Server) RemoveNode(ctx context.Context, request *api.RemoveNodeRequest)
if node == nil {
return grpc.Errorf(codes.NotFound, "node %s not found", request.NodeID)
}
if node.Spec.Role == api.NodeRoleManager {
if node.Spec.DesiredRole == api.NodeRoleManager {
if s.raft == nil {
return grpc.Errorf(codes.FailedPrecondition, "node %s is a manager but cannot access node information from the raft memberlist", request.NodeID)
}
Expand Down
27 changes: 15 additions & 12 deletions manager/controlapi/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ func createNode(t *testing.T, ts *testServer, id string, role api.NodeRole, memb
node := &api.Node{
ID: id,
Spec: api.NodeSpec{
Role: role,
Membership: membership,
},
Status: api.NodeStatus{
State: state,
},
Role: role,
}
err := ts.Store.Update(func(tx store.Tx) error {
return store.CreateNode(tx, node)
Expand Down Expand Up @@ -465,9 +465,9 @@ func TestUpdateNode(t *testing.T) {
assert.NoError(t, store.CreateNode(tx, &api.Node{
ID: nodes[1].SecurityConfig.ClientTLSCreds.NodeID(),
Spec: api.NodeSpec{
Role: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
},
Role: api.NodeRoleManager,
}))
return nil
}))
Expand Down Expand Up @@ -543,23 +543,26 @@ func testUpdateNodeDemote(leader bool, t *testing.T) {
assert.NoError(t, store.CreateNode(tx, &api.Node{
ID: nodes[1].SecurityConfig.ClientTLSCreds.NodeID(),
Spec: api.NodeSpec{
Role: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
DesiredRole: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
},
Role: api.NodeRoleManager,
}))
assert.NoError(t, store.CreateNode(tx, &api.Node{
ID: nodes[2].SecurityConfig.ClientTLSCreds.NodeID(),
Spec: api.NodeSpec{
Role: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
DesiredRole: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
},
Role: api.NodeRoleManager,
}))
assert.NoError(t, store.CreateNode(tx, &api.Node{
ID: nodes[3].SecurityConfig.ClientTLSCreds.NodeID(),
Spec: api.NodeSpec{
Role: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
DesiredRole: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
},
Role: api.NodeRoleManager,
}))
return nil
}))
Expand All @@ -584,7 +587,7 @@ func testUpdateNodeDemote(leader bool, t *testing.T) {
r, err := ts.Client.GetNode(context.Background(), &api.GetNodeRequest{NodeID: nodes[2].SecurityConfig.ClientTLSCreds.NodeID()})
assert.NoError(t, err)
spec := r.Node.Spec.Copy()
spec.Role = api.NodeRoleWorker
spec.DesiredRole = api.NodeRoleWorker
version := &r.Node.Meta.Version
_, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{
NodeID: nodes[2].SecurityConfig.ClientTLSCreds.NodeID(),
Expand Down Expand Up @@ -617,7 +620,7 @@ func testUpdateNodeDemote(leader bool, t *testing.T) {
r, err = ts.Client.GetNode(context.Background(), &api.GetNodeRequest{NodeID: nodes[3].SecurityConfig.ClientTLSCreds.NodeID()})
assert.NoError(t, err)
spec = r.Node.Spec.Copy()
spec.Role = api.NodeRoleWorker
spec.DesiredRole = api.NodeRoleWorker
version = &r.Node.Meta.Version
_, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{
NodeID: nodes[3].SecurityConfig.ClientTLSCreds.NodeID(),
Expand Down Expand Up @@ -660,7 +663,7 @@ func testUpdateNodeDemote(leader bool, t *testing.T) {
r, err = ts.Client.GetNode(context.Background(), &api.GetNodeRequest{NodeID: demoteNode.SecurityConfig.ClientTLSCreds.NodeID()})
assert.NoError(t, err)
spec = r.Node.Spec.Copy()
spec.Role = api.NodeRoleWorker
spec.DesiredRole = api.NodeRoleWorker
version = &r.Node.Meta.Version
_, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{
NodeID: demoteNode.SecurityConfig.ClientTLSCreds.NodeID(),
Expand Down Expand Up @@ -693,7 +696,7 @@ func testUpdateNodeDemote(leader bool, t *testing.T) {
r, err = ts.Client.GetNode(context.Background(), &api.GetNodeRequest{NodeID: lastNode.SecurityConfig.ClientTLSCreds.NodeID()})
assert.NoError(t, err)
spec = r.Node.Spec.Copy()
spec.Role = api.NodeRoleWorker
spec.DesiredRole = api.NodeRoleWorker
version = &r.Node.Meta.Version
_, err = ts.Client.UpdateNode(context.Background(), &api.UpdateNodeRequest{
NodeID: lastNode.SecurityConfig.ClientTLSCreds.NodeID(),
Expand Down
2 changes: 1 addition & 1 deletion manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -947,7 +947,7 @@ func managerNode(nodeID string, availability api.NodeSpec_Availability) *api.Nod
},
},
Spec: api.NodeSpec{
Role: api.NodeRoleManager,
DesiredRole: api.NodeRoleManager,
Membership: api.NodeMembershipAccepted,
Availability: availability,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ func TestConstraintEnforcer(t *testing.T) {
Annotations: api.Annotations{
Name: "name1",
},
Role: api.NodeRoleWorker,
Availability: api.NodeAvailabilityActive,
},
Status: api.NodeStatus{
State: api.NodeStatus_READY,
},
Role: api.NodeRoleWorker,
},
{
ID: "id2",
Expand Down Expand Up @@ -141,7 +141,7 @@ func TestConstraintEnforcer(t *testing.T) {
if node == nil {
t.Fatal("could not get node id1")
}
node.Spec.Role = api.NodeRoleManager
node.Role = api.NodeRoleManager
assert.NoError(t, store.UpdateNode(tx, node))
return nil
})
Expand Down
10 changes: 5 additions & 5 deletions manager/role_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,17 @@ func (rm *roleManager) Run() {
}

func (rm *roleManager) reconcileRole(node *api.Node) {
if node.Role == node.Spec.Role {
if node.Role == node.Spec.DesiredRole {
// Nothing to do.
delete(rm.pending, node.ID)
return
}

// Promotion can proceed right away.
if node.Spec.Role == api.NodeRoleManager && node.Role == api.NodeRoleWorker {
if node.Spec.DesiredRole == api.NodeRoleManager && node.Role == api.NodeRoleWorker {
err := rm.store.Update(func(tx store.Tx) error {
updatedNode := store.GetNode(tx, node.ID)
if updatedNode == nil || updatedNode.Spec.Role != node.Spec.Role || updatedNode.Role != node.Role {
if updatedNode == nil || updatedNode.Spec.DesiredRole != node.Spec.DesiredRole || updatedNode.Role != node.Role {
return nil
}
updatedNode.Role = api.NodeRoleManager
Expand All @@ -122,7 +122,7 @@ func (rm *roleManager) reconcileRole(node *api.Node) {
} else {
delete(rm.pending, node.ID)
}
} else if node.Spec.Role == api.NodeRoleWorker && node.Role == api.NodeRoleManager {
} else if node.Spec.DesiredRole == api.NodeRoleWorker && node.Role == api.NodeRoleManager {
// Check for node in memberlist
member := rm.raft.GetMemberByNodeID(node.ID)
if member != nil {
Expand All @@ -145,7 +145,7 @@ func (rm *roleManager) reconcileRole(node *api.Node) {

err := rm.store.Update(func(tx store.Tx) error {
updatedNode := store.GetNode(tx, node.ID)
if updatedNode == nil || updatedNode.Spec.Role != node.Spec.Role || updatedNode.Role != node.Role {
if updatedNode == nil || updatedNode.Spec.DesiredRole != node.Spec.DesiredRole || updatedNode.Role != node.Role {
return nil
}
updatedNode.Role = api.NodeRoleWorker
Expand Down
2 changes: 1 addition & 1 deletion manager/scheduler/constraint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func setupEnv() {
Annotations: api.Annotations{
Labels: make(map[string]string),
},
Role: api.NodeRoleWorker,
DesiredRole: api.NodeRoleWorker,
},
Description: &api.NodeDescription{
Engine: &api.EngineDescription{
Expand Down
6 changes: 3 additions & 3 deletions manager/state/store/memory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,33 +19,33 @@ var (
{
ID: "id1",
Spec: api.NodeSpec{
Role: api.NodeRoleManager,
Membership: api.NodeMembershipPending,
},
Description: &api.NodeDescription{
Hostname: "name1",
},
Role: api.NodeRoleManager,
},
{
ID: "id2",
Spec: api.NodeSpec{
Role: api.NodeRoleWorker,
Membership: api.NodeMembershipAccepted,
},
Description: &api.NodeDescription{
Hostname: "name2",
},
Role: api.NodeRoleWorker,
},
{
ID: "id3",
Spec: api.NodeSpec{
Role: api.NodeRoleWorker,
Membership: api.NodeMembershipAccepted,
},
Description: &api.NodeDescription{
// intentionally conflicting hostname
Hostname: "name2",
},
Role: api.NodeRoleWorker,
},
}

Expand Down
2 changes: 1 addition & 1 deletion manager/state/store/nodes.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ func (ni nodeIndexerByRole) FromObject(obj interface{}) (bool, []byte, error) {
}

// Add the null character as a terminator
return true, []byte(strconv.FormatInt(int64(n.Spec.Role), 10) + "\x00"), nil
return true, []byte(strconv.FormatInt(int64(n.Role), 10) + "\x00"), nil
}

type nodeIndexerByMembership struct{}
Expand Down

0 comments on commit d4db4ef

Please sign in to comment.