Get instances of all states in DisksAreAttached, not just "running"

This commit is contained in:
Matthew Wong 2017-05-25 16:49:09 -04:00
parent 749ac27e9a
commit 319c608fdd
2 changed files with 11 additions and 10 deletions

View File

@ -2599,7 +2599,7 @@ func (c *Cloud) EnsureLoadBalancer(clusterName string, apiService *v1.Service, n
return nil, fmt.Errorf("LoadBalancerIP cannot be specified for AWS ELB") return nil, fmt.Errorf("LoadBalancerIP cannot be specified for AWS ELB")
} }
instances, err := c.getInstancesByNodeNamesCached(nodeNames(nodes)) instances, err := c.getInstancesByNodeNamesCached(nodeNames(nodes), "running")
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -3157,7 +3157,7 @@ func (c *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *v1.Servic
// UpdateLoadBalancer implements LoadBalancer.UpdateLoadBalancer // UpdateLoadBalancer implements LoadBalancer.UpdateLoadBalancer
func (c *Cloud) UpdateLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node) error { func (c *Cloud) UpdateLoadBalancer(clusterName string, service *v1.Service, nodes []*v1.Node) error {
instances, err := c.getInstancesByNodeNamesCached(nodeNames(nodes)) instances, err := c.getInstancesByNodeNamesCached(nodeNames(nodes), "running")
if err != nil { if err != nil {
return err return err
} }
@ -3229,10 +3229,11 @@ func (c *Cloud) getInstancesByIDs(instanceIDs []*string) (map[string]*ec2.Instan
return instancesByID, nil return instancesByID, nil
} }
// Fetches and caches instances by node names; returns an error if any cannot be found. // Fetches and caches instances in the given state, by node names; returns an error if any cannot be found. If no states
// are given, no state filter is used and instances of all states are fetched.
// This is implemented with a multi value filter on the node names, fetching the desired instances with a single query. // This is implemented with a multi value filter on the node names, fetching the desired instances with a single query.
// TODO(therc): make all the caching more rational during the 1.4 timeframe // TODO(therc): make all the caching more rational during the 1.4 timeframe
func (c *Cloud) getInstancesByNodeNamesCached(nodeNames sets.String) ([]*ec2.Instance, error) { func (c *Cloud) getInstancesByNodeNamesCached(nodeNames sets.String, states ...string) ([]*ec2.Instance, error) {
c.mutex.Lock() c.mutex.Lock()
defer c.mutex.Unlock() defer c.mutex.Unlock()
if nodeNames.Equal(c.lastNodeNames) { if nodeNames.Equal(c.lastNodeNames) {
@ -3243,7 +3244,7 @@ func (c *Cloud) getInstancesByNodeNamesCached(nodeNames sets.String) ([]*ec2.Ins
return c.lastInstancesByNodeNames, nil return c.lastInstancesByNodeNames, nil
} }
} }
instances, err := c.getInstancesByNodeNames(nodeNames.List()) instances, err := c.getInstancesByNodeNames(nodeNames.List(), states...)
if err != nil { if err != nil {
return nil, err return nil, err
@ -3259,7 +3260,7 @@ func (c *Cloud) getInstancesByNodeNamesCached(nodeNames sets.String) ([]*ec2.Ins
return instances, nil return instances, nil
} }
func (c *Cloud) getInstancesByNodeNames(nodeNames []string) ([]*ec2.Instance, error) { func (c *Cloud) getInstancesByNodeNames(nodeNames []string, states ...string) ([]*ec2.Instance, error) {
names := aws.StringSlice(nodeNames) names := aws.StringSlice(nodeNames)
nodeNameFilter := &ec2.Filter{ nodeNameFilter := &ec2.Filter{
@ -3267,9 +3268,9 @@ func (c *Cloud) getInstancesByNodeNames(nodeNames []string) ([]*ec2.Instance, er
Values: names, Values: names,
} }
filters := []*ec2.Filter{ filters := []*ec2.Filter{nodeNameFilter}
nodeNameFilter, if len(states) > 0 {
newEc2Filter("instance-state-name", "running"), filters = append(filters, newEc2Filter("instance-state-name", states...))
} }
instances, err := c.describeInstances(filters) instances, err := c.describeInstances(filters)

View File

@ -1050,7 +1050,7 @@ func TestFindInstancesByNodeNameCached(t *testing.T) {
} }
nodeNames := sets.NewString(nodeNameOne) nodeNames := sets.NewString(nodeNameOne)
returnedInstances, errr := c.getInstancesByNodeNamesCached(nodeNames) returnedInstances, errr := c.getInstancesByNodeNamesCached(nodeNames, "running")
if errr != nil { if errr != nil {
t.Errorf("Failed to find instance: %v", err) t.Errorf("Failed to find instance: %v", err)