mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Don't mask k8s error returned from patch
This commit is contained in:
parent
d1e828f8df
commit
89a7a35607
@ -57,6 +57,7 @@ go_test(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
"//staging/src/k8s.io/client-go/informers:go_default_library",
|
||||||
|
@ -37,11 +37,7 @@ func patch(c v1core.CoreV1Interface, oldSvc *v1.Service, newSvc *v1.Service) (*v
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedSvc, err := c.Services(oldSvc.Namespace).Patch(oldSvc.Name, types.StrategicMergePatchType, patchBytes, "status")
|
return c.Services(oldSvc.Namespace).Patch(oldSvc.Name, types.StrategicMergePatchType, patchBytes, "status")
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to patch %q for svc %s/%s: %v", patchBytes, oldSvc.Namespace, oldSvc.Name, err)
|
|
||||||
}
|
|
||||||
return updatedSvc, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPatchBytes(oldSvc *v1.Service, newSvc *v1.Service) ([]byte, error) {
|
func getPatchBytes(oldSvc *v1.Service, newSvc *v1.Service) ([]byte, error) {
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
@ -615,20 +616,43 @@ func TestProcessServiceCreateOrUpdate(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestConflictWhenProcessServiceCreateOrUpdate tests if processServiceCreateOrUpdate will
|
// TestProcessServiceCreateOrUpdateK8sError tests processServiceCreateOrUpdate
|
||||||
// retry creating the load balancer when the update operation returns a conflict
|
// with various kubernetes errors.
|
||||||
// error.
|
func TestProcessServiceCreateOrUpdateK8sError(t *testing.T) {
|
||||||
func TestConflictWhenProcessServiceCreateOrUpdate(t *testing.T) {
|
svcName := "svc-k8s-err"
|
||||||
svcName := "conflict-lb"
|
conflictErr := apierrors.NewConflict(schema.GroupResource{}, svcName, errors.New("Object conflict"))
|
||||||
|
notFoundErr := apierrors.NewNotFound(schema.GroupResource{}, svcName)
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
desc string
|
||||||
|
k8sErr error
|
||||||
|
expectErr error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
desc: "conflict error",
|
||||||
|
k8sErr: conflictErr,
|
||||||
|
expectErr: fmt.Errorf("failed to update load balancer status: %v", conflictErr),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "not found error",
|
||||||
|
k8sErr: notFoundErr,
|
||||||
|
expectErr: nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.desc, func(t *testing.T) {
|
||||||
svc := newService(svcName, types.UID("123"), v1.ServiceTypeLoadBalancer)
|
svc := newService(svcName, types.UID("123"), v1.ServiceTypeLoadBalancer)
|
||||||
controller, _, client := newController()
|
controller, _, client := newController()
|
||||||
client.PrependReactor("update", "services", func(action core.Action) (bool, runtime.Object, error) {
|
client.PrependReactor("patch", "services", func(action core.Action) (bool, runtime.Object, error) {
|
||||||
update := action.(core.UpdateAction)
|
return true, nil, tc.k8sErr
|
||||||
return true, update.GetObject(), apierrors.NewConflict(action.GetResource().GroupResource(), svcName, errors.New("Object changed"))
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if err := controller.processServiceCreateOrUpdate(svc, svcName); err == nil {
|
if err := controller.processServiceCreateOrUpdate(svc, svcName); !reflect.DeepEqual(err, tc.expectErr) {
|
||||||
t.Fatalf("controller.processServiceCreateOrUpdate() = nil, want error")
|
t.Fatalf("processServiceCreateOrUpdate() = %v, want %v", err, tc.expectErr)
|
||||||
|
}
|
||||||
|
if tc.expectErr == nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
errMsg := "Error syncing load balancer"
|
errMsg := "Error syncing load balancer"
|
||||||
@ -642,8 +666,11 @@ func TestConflictWhenProcessServiceCreateOrUpdate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}(); !gotEvent {
|
}(); !gotEvent {
|
||||||
t.Errorf("controller.processServiceCreateOrUpdate() = can't find sync error event, want event contains %q", errMsg)
|
t.Errorf("processServiceCreateOrUpdate() = can't find sync error event, want event contains %q", errMsg)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncService(t *testing.T) {
|
func TestSyncService(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user