Fix retry in update critical annotations
- A successful get after a conflict should not hide the conflict error and prevent retries. Signed-off-by: Hasan Turken <turkenh@gmail.com>
This commit is contained in:
		
							parent
							
								
									11ba5f5ef6
								
							
						
					
					
						commit
						9aa1024097
					
				| 
						 | 
				
			
			@ -177,7 +177,9 @@ func (u *RetryingCriticalAnnotationUpdater) UpdateCriticalAnnotations(ctx contex
 | 
			
		|||
	err := retry.OnError(retry.DefaultRetry, resource.IsAPIError, func() error {
 | 
			
		||||
		err := u.client.Update(ctx, o)
 | 
			
		||||
		if kerrors.IsConflict(err) {
 | 
			
		||||
			err = u.client.Get(ctx, types.NamespacedName{Name: o.GetName()}, o)
 | 
			
		||||
			if getErr := u.client.Get(ctx, types.NamespacedName{Name: o.GetName()}, o); getErr != nil {
 | 
			
		||||
				return getErr
 | 
			
		||||
			}
 | 
			
		||||
			meta.AddAnnotations(o, a)
 | 
			
		||||
		}
 | 
			
		||||
		return err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -413,6 +413,26 @@ func TestRetryingCriticalAnnotationUpdater(t *testing.T) {
 | 
			
		|||
				o:   &fake.Managed{},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		"SuccessfulGetAfterAConflict": {
 | 
			
		||||
			reason: "A successful get after a conflict should not hide the conflict error and prevent retries",
 | 
			
		||||
			c: &test.MockClient{
 | 
			
		||||
				MockGet: test.NewMockGetFn(nil, setLabels),
 | 
			
		||||
				MockUpdate: test.NewMockUpdateFn(kerrors.NewConflict(schema.GroupResource{
 | 
			
		||||
					Group:    "foo.com",
 | 
			
		||||
					Resource: "bars",
 | 
			
		||||
				}, "abc", errBoom)),
 | 
			
		||||
			},
 | 
			
		||||
			args: args{
 | 
			
		||||
				o: &fake.Managed{},
 | 
			
		||||
			},
 | 
			
		||||
			want: want{
 | 
			
		||||
				err: errors.Wrap(kerrors.NewConflict(schema.GroupResource{
 | 
			
		||||
					Group:    "foo.com",
 | 
			
		||||
					Resource: "bars",
 | 
			
		||||
				}, "abc", errBoom), errUpdateCriticalAnnotations),
 | 
			
		||||
				o: objectReturnedByGet,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		"Success": {
 | 
			
		||||
			reason: "We should return without error if we successfully update our annotations",
 | 
			
		||||
			c: &test.MockClient{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue