Merge pull request #4165 from smarterclayton/ignore_already_exists_errors_on_create_node
NodeController should tolerate when nodes already exist
This commit is contained in:
commit
91b43a4b16
@ -26,6 +26,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
apierrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/probe"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/probe"
|
||||||
@ -121,14 +122,14 @@ func (s *NodeController) RegisterNodes(nodes *api.NodeList, retryCount int, retr
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
_, err := s.kubeClient.Nodes().Create(&node)
|
_, err := s.kubeClient.Nodes().Create(&node)
|
||||||
if err == nil {
|
if err == nil || apierrors.IsAlreadyExists(err) {
|
||||||
registered.Insert(node.Name)
|
registered.Insert(node.Name)
|
||||||
glog.Infof("Registered node in registry: %s", node.Name)
|
glog.Infof("Registered node in registry: %s", node.Name)
|
||||||
} else {
|
} else {
|
||||||
glog.Errorf("Error registrying node %s, retrying: %s", node.Name, err)
|
glog.Errorf("Error registering node %s, retrying: %s", node.Name, err)
|
||||||
}
|
}
|
||||||
if registered.Len() == len(nodes.Items) {
|
if registered.Len() == len(nodes.Items) {
|
||||||
glog.Infof("Successfully Registered all nodes")
|
glog.Infof("Successfully registered all nodes")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
|
apierrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/resource"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
fake_cloud "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/fake"
|
fake_cloud "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/fake"
|
||||||
@ -54,6 +55,11 @@ func (c *FakeNodeHandler) Nodes() client.NodeInterface {
|
|||||||
|
|
||||||
func (m *FakeNodeHandler) Create(node *api.Node) (*api.Node, error) {
|
func (m *FakeNodeHandler) Create(node *api.Node) (*api.Node, error) {
|
||||||
defer func() { m.RequestCount++ }()
|
defer func() { m.RequestCount++ }()
|
||||||
|
for _, n := range m.Existing {
|
||||||
|
if n.Name == node.Name {
|
||||||
|
return nil, apierrors.NewAlreadyExists("Minion", node.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
if m.CreateHook == nil || m.CreateHook(m, node) {
|
if m.CreateHook == nil || m.CreateHook(m, node) {
|
||||||
nodeCopy := *node
|
nodeCopy := *node
|
||||||
m.CreatedNodes = append(m.CreatedNodes, &nodeCopy)
|
m.CreatedNodes = append(m.CreatedNodes, &nodeCopy)
|
||||||
@ -178,6 +184,23 @@ func TestRegisterNodes(t *testing.T) {
|
|||||||
expectedCreateCount: 2,
|
expectedCreateCount: 2,
|
||||||
expectedFail: false,
|
expectedFail: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// One node already exists
|
||||||
|
machines: []string{"node0", "node1"},
|
||||||
|
fakeNodeHandler: &FakeNodeHandler{
|
||||||
|
Existing: []*api.Node{
|
||||||
|
{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "node1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
retryCount: 10,
|
||||||
|
expectedRequestCount: 2,
|
||||||
|
expectedCreateCount: 1,
|
||||||
|
expectedFail: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
// The first node always fails.
|
// The first node always fails.
|
||||||
machines: []string{"node0", "node1"},
|
machines: []string{"node0", "node1"},
|
||||||
|
Loading…
Reference in New Issue
Block a user