mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Merge pull request #29847 from gmarek/retries
Automatic merge from submit-queue Retry Node updates in e2e tests Fix #29516 Ref. https://github.com/kubernetes/kubernetes/issues/27655#issuecomment-235940057 cc @kevin-wangzefeng @wojtek-t
This commit is contained in:
commit
472dcec7b2
@ -153,6 +153,9 @@ const (
|
|||||||
// How long a pod is allowed to become "running" and "ready" after a node
|
// How long a pod is allowed to become "running" and "ready" after a node
|
||||||
// restart before test is considered failed.
|
// restart before test is considered failed.
|
||||||
RestartPodReadyAgainTimeout = 5 * time.Minute
|
RestartPodReadyAgainTimeout = 5 * time.Minute
|
||||||
|
|
||||||
|
// Number of times we want to retry Updates in case of conflict
|
||||||
|
UpdateRetries = 5
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -2826,7 +2829,20 @@ func WaitForAllNodesSchedulable(c *client.Client) error {
|
|||||||
|
|
||||||
func AddOrUpdateLabelOnNode(c *client.Client, nodeName string, labelKey string, labelValue string) {
|
func AddOrUpdateLabelOnNode(c *client.Client, nodeName string, labelKey string, labelValue string) {
|
||||||
patch := fmt.Sprintf(`{"metadata":{"labels":{"%s":"%s"}}}`, labelKey, labelValue)
|
patch := fmt.Sprintf(`{"metadata":{"labels":{"%s":"%s"}}}`, labelKey, labelValue)
|
||||||
err := c.Patch(api.MergePatchType).Resource("nodes").Name(nodeName).Body([]byte(patch)).Do().Error()
|
var err error
|
||||||
|
for attempt := 0; attempt < UpdateRetries; attempt++ {
|
||||||
|
err = c.Patch(api.MergePatchType).Resource("nodes").Name(nodeName).Body([]byte(patch)).Do().Error()
|
||||||
|
if err != nil {
|
||||||
|
if !apierrs.IsConflict(err) {
|
||||||
|
ExpectNoError(err)
|
||||||
|
} else {
|
||||||
|
Logf("Conflict when trying to add a label %v:%v to %v", labelKey, labelValue, nodeName)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
}
|
||||||
ExpectNoError(err)
|
ExpectNoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2841,13 +2857,28 @@ func ExpectNodeHasLabel(c *client.Client, nodeName string, labelKey string, labe
|
|||||||
// won't fail if target label doesn't exist or has been removed.
|
// won't fail if target label doesn't exist or has been removed.
|
||||||
func RemoveLabelOffNode(c *client.Client, nodeName string, labelKey string) {
|
func RemoveLabelOffNode(c *client.Client, nodeName string, labelKey string) {
|
||||||
By("removing the label " + labelKey + " off the node " + nodeName)
|
By("removing the label " + labelKey + " off the node " + nodeName)
|
||||||
node, err := c.Nodes().Get(nodeName)
|
var nodeUpdated *api.Node
|
||||||
|
var node *api.Node
|
||||||
|
var err error
|
||||||
|
for attempt := 0; attempt < UpdateRetries; attempt++ {
|
||||||
|
node, err = c.Nodes().Get(nodeName)
|
||||||
ExpectNoError(err)
|
ExpectNoError(err)
|
||||||
if node.Labels == nil || len(node.Labels[labelKey]) == 0 {
|
if node.Labels == nil || len(node.Labels[labelKey]) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
delete(node.Labels, labelKey)
|
delete(node.Labels, labelKey)
|
||||||
nodeUpdated, err := c.Nodes().Update(node)
|
nodeUpdated, err = c.Nodes().Update(node)
|
||||||
|
if err != nil {
|
||||||
|
if !apierrs.IsConflict(err) {
|
||||||
|
ExpectNoError(err)
|
||||||
|
} else {
|
||||||
|
Logf("Conflict when trying to remove a label %v from %v", labelKey, nodeName)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
}
|
||||||
ExpectNoError(err)
|
ExpectNoError(err)
|
||||||
|
|
||||||
By("verifying the node doesn't have the label " + labelKey)
|
By("verifying the node doesn't have the label " + labelKey)
|
||||||
|
@ -93,6 +93,7 @@ func waitTillNPodsRunningOnNodes(c *client.Client, nodeNames sets.String, podNam
|
|||||||
// updates labels of nodes given by nodeNames.
|
// updates labels of nodes given by nodeNames.
|
||||||
// In case a given label already exists, it overwrites it. If label to remove doesn't exist
|
// In case a given label already exists, it overwrites it. If label to remove doesn't exist
|
||||||
// it silently ignores it.
|
// it silently ignores it.
|
||||||
|
// TODO: migrate to use framework.AddOrUpdateLabelOnNode/framework.RemoveLabelOffNode
|
||||||
func updateNodeLabels(c *client.Client, nodeNames sets.String, toAdd, toRemove map[string]string) {
|
func updateNodeLabels(c *client.Client, nodeNames sets.String, toAdd, toRemove map[string]string) {
|
||||||
const maxRetries = 5
|
const maxRetries = 5
|
||||||
for nodeName := range nodeNames {
|
for nodeName := range nodeNames {
|
||||||
|
Loading…
Reference in New Issue
Block a user