mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Add ObservedGeneration to DaemonSet status
This commit is contained in:
		@@ -478,6 +478,10 @@ type DaemonSetStatus struct {
 | 
				
			|||||||
	// NumberReady is the number of nodes that should be running the daemon pod and have one
 | 
						// NumberReady is the number of nodes that should be running the daemon pod and have one
 | 
				
			||||||
	// or more of the daemon pod running and ready.
 | 
						// or more of the daemon pod running and ready.
 | 
				
			||||||
	NumberReady int32
 | 
						NumberReady int32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ObservedGeneration is the most recent generation observed by the daemon set controller.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						ObservedGeneration int64
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +genclient=true
 | 
					// +genclient=true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -568,6 +568,10 @@ type DaemonSetStatus struct {
 | 
				
			|||||||
	// NumberReady is the number of nodes that should be running the daemon pod and have one
 | 
						// NumberReady is the number of nodes that should be running the daemon pod and have one
 | 
				
			||||||
	// or more of the daemon pod running and ready.
 | 
						// or more of the daemon pod running and ready.
 | 
				
			||||||
	NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"`
 | 
						NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ObservedGeneration is the most recent generation observed by the daemon set controller.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,5,opt,name=observedGeneration"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// +genclient=true
 | 
					// +genclient=true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ func validateDaemonSetStatus(status *extensions.DaemonSetStatus, fldPath *field.
 | 
				
			|||||||
	allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberMisscheduled), fldPath.Child("numberMisscheduled"))...)
 | 
						allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberMisscheduled), fldPath.Child("numberMisscheduled"))...)
 | 
				
			||||||
	allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.DesiredNumberScheduled), fldPath.Child("desiredNumberScheduled"))...)
 | 
						allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.DesiredNumberScheduled), fldPath.Child("desiredNumberScheduled"))...)
 | 
				
			||||||
	allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberReady), fldPath.Child("numberReady"))...)
 | 
						allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberReady), fldPath.Child("numberReady"))...)
 | 
				
			||||||
 | 
						allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(status.ObservedGeneration, fldPath.Child("observedGeneration"))...)
 | 
				
			||||||
	return allErrs
 | 
						return allErrs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,6 +80,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     2,
 | 
										NumberMisscheduled:     2,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			update: extensions.DaemonSet{
 | 
								update: extensions.DaemonSet{
 | 
				
			||||||
@@ -93,6 +94,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     -1,
 | 
										NumberMisscheduled:     -1,
 | 
				
			||||||
					DesiredNumberScheduled: -3,
 | 
										DesiredNumberScheduled: -3,
 | 
				
			||||||
					NumberReady:            -1,
 | 
										NumberReady:            -1,
 | 
				
			||||||
 | 
										ObservedGeneration:     -3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -108,6 +110,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     2,
 | 
										NumberMisscheduled:     2,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			update: extensions.DaemonSet{
 | 
								update: extensions.DaemonSet{
 | 
				
			||||||
@@ -121,6 +124,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     1,
 | 
										NumberMisscheduled:     1,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -136,6 +140,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     2,
 | 
										NumberMisscheduled:     2,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			update: extensions.DaemonSet{
 | 
								update: extensions.DaemonSet{
 | 
				
			||||||
@@ -149,6 +154,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     -1,
 | 
										NumberMisscheduled:     -1,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -164,6 +170,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     2,
 | 
										NumberMisscheduled:     2,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			update: extensions.DaemonSet{
 | 
								update: extensions.DaemonSet{
 | 
				
			||||||
@@ -177,6 +184,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     1,
 | 
										NumberMisscheduled:     1,
 | 
				
			||||||
					DesiredNumberScheduled: -3,
 | 
										DesiredNumberScheduled: -3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -192,6 +200,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     2,
 | 
										NumberMisscheduled:     2,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            1,
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			update: extensions.DaemonSet{
 | 
								update: extensions.DaemonSet{
 | 
				
			||||||
@@ -205,6 +214,37 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
 | 
				
			|||||||
					NumberMisscheduled:     1,
 | 
										NumberMisscheduled:     1,
 | 
				
			||||||
					DesiredNumberScheduled: 3,
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
					NumberReady:            -1,
 | 
										NumberReady:            -1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"negative ObservedGeneration": {
 | 
				
			||||||
 | 
								old: extensions.DaemonSet{
 | 
				
			||||||
 | 
									ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
										Name:            "abc",
 | 
				
			||||||
 | 
										Namespace:       api.NamespaceDefault,
 | 
				
			||||||
 | 
										ResourceVersion: "10",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Status: extensions.DaemonSetStatus{
 | 
				
			||||||
 | 
										CurrentNumberScheduled: 1,
 | 
				
			||||||
 | 
										NumberMisscheduled:     2,
 | 
				
			||||||
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     3,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								update: extensions.DaemonSet{
 | 
				
			||||||
 | 
									ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
										Name:            "abc",
 | 
				
			||||||
 | 
										Namespace:       api.NamespaceDefault,
 | 
				
			||||||
 | 
										ResourceVersion: "10",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Status: extensions.DaemonSetStatus{
 | 
				
			||||||
 | 
										CurrentNumberScheduled: 1,
 | 
				
			||||||
 | 
										NumberMisscheduled:     1,
 | 
				
			||||||
 | 
										DesiredNumberScheduled: 3,
 | 
				
			||||||
 | 
										NumberReady:            1,
 | 
				
			||||||
 | 
										ObservedGeneration:     -3,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -540,7 +540,8 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds
 | 
				
			|||||||
	if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled &&
 | 
						if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled &&
 | 
				
			||||||
		int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled &&
 | 
							int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled &&
 | 
				
			||||||
		int(ds.Status.NumberMisscheduled) == numberMisscheduled &&
 | 
							int(ds.Status.NumberMisscheduled) == numberMisscheduled &&
 | 
				
			||||||
		int(ds.Status.NumberReady) == numberReady {
 | 
							int(ds.Status.NumberReady) == numberReady &&
 | 
				
			||||||
 | 
							ds.Status.ObservedGeneration >= ds.Generation {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -553,6 +554,7 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var updateErr, getErr error
 | 
						var updateErr, getErr error
 | 
				
			||||||
	for i := 0; i < StatusUpdateRetries; i++ {
 | 
						for i := 0; i < StatusUpdateRetries; i++ {
 | 
				
			||||||
 | 
							toUpdate.Status.ObservedGeneration = ds.Generation
 | 
				
			||||||
		toUpdate.Status.DesiredNumberScheduled = int32(desiredNumberScheduled)
 | 
							toUpdate.Status.DesiredNumberScheduled = int32(desiredNumberScheduled)
 | 
				
			||||||
		toUpdate.Status.CurrentNumberScheduled = int32(currentNumberScheduled)
 | 
							toUpdate.Status.CurrentNumberScheduled = int32(currentNumberScheduled)
 | 
				
			||||||
		toUpdate.Status.NumberMisscheduled = int32(numberMisscheduled)
 | 
							toUpdate.Status.NumberMisscheduled = int32(numberMisscheduled)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -609,3 +609,28 @@ func TestNumberReadyStatus(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Wrong daemon %s status: %v", updated.Name, updated.Status)
 | 
							t.Errorf("Wrong daemon %s status: %v", updated.Name, updated.Status)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestObservedGeneration(t *testing.T) {
 | 
				
			||||||
 | 
						daemon := newDaemonSet("foo")
 | 
				
			||||||
 | 
						daemon.Generation = 1
 | 
				
			||||||
 | 
						manager, podControl, clientset := newTestController()
 | 
				
			||||||
 | 
						var updated *extensions.DaemonSet
 | 
				
			||||||
 | 
						clientset.PrependReactor("update", "daemonsets", func(action core.Action) (handled bool, ret runtime.Object, err error) {
 | 
				
			||||||
 | 
							if action.GetSubresource() != "status" {
 | 
				
			||||||
 | 
								return false, nil, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if u, ok := action.(core.UpdateAction); ok {
 | 
				
			||||||
 | 
								updated = u.GetObject().(*extensions.DaemonSet)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return false, nil, nil
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						addNodes(manager.nodeStore.Store, 0, 1, simpleNodeLabel)
 | 
				
			||||||
 | 
						addPods(manager.podStore.Indexer, "node-0", simpleDaemonSetLabel, 1)
 | 
				
			||||||
 | 
						manager.dsStore.Add(daemon)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						syncAndValidateDaemonSets(t, manager, daemon, podControl, 0, 0)
 | 
				
			||||||
 | 
						if updated.Status.ObservedGeneration != daemon.Generation {
 | 
				
			||||||
 | 
							t.Errorf("Wrong ObservedGeneration for daemon %s in status. Expected %d, got %d", updated.Name, daemon.Generation, updated.Status.ObservedGeneration)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user