Skip to content

Commit

Permalink
Merge pull request kubernetes#16529 from alvaroaleman/boskos-retry-on…
Browse files Browse the repository at this point in the history
…-conflict

Boskos: Retry on conflict
  • Loading branch information
k8s-ci-robot committed Mar 2, 2020
2 parents c921a88 + 6b0ac1e commit bd87a79
Show file tree
Hide file tree
Showing 6 changed files with 451 additions and 285 deletions.
3 changes: 3 additions & 0 deletions boskos/handlers/BUILD.bazel
Expand Up @@ -27,8 +27,11 @@ go_test(
"//boskos/crds:go_default_library",
"//boskos/ranch:go_default_library",
"@com_github_go_test_deep//:go_default_library",
"@io_k8s_apimachinery//pkg/api/errors:go_default_library",
"@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library",
"@io_k8s_apimachinery//pkg/runtime:go_default_library",
"@io_k8s_apimachinery//pkg/runtime/schema:go_default_library",
"@io_k8s_sigs_controller_runtime//pkg/client:go_default_library",
"@io_k8s_sigs_controller_runtime//pkg/client/fake:go_default_library",
],
)
Expand Down
23 changes: 22 additions & 1 deletion boskos/handlers/handlers_test.go
Expand Up @@ -18,7 +18,9 @@ package handlers

import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
Expand All @@ -29,8 +31,11 @@ import (
"testing"
"time"

kerrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
fakectrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"

"k8s.io/test-infra/boskos/client"
Expand Down Expand Up @@ -61,7 +66,8 @@ func MakeTestRanch(resources []runtime.Object) *ranch.Ranch {
for _, obj := range resources {
obj.(metav1.Object).SetNamespace(ns)
}
s := ranch.NewTestingStorage(fakectrlruntimeclient.NewFakeClient(resources...), ns, func() time.Time { return fakeNow })
client := &onceConflictingClient{Client: fakectrlruntimeclient.NewFakeClient(resources...)}
s := ranch.NewTestingStorage(client, ns, func() time.Time { return fakeNow })
r, _ := ranch.NewRanch("", s, testTTL)
return r
}
Expand Down Expand Up @@ -856,3 +862,18 @@ func compareWithFixture(testName string, actualData []byte) error {

return nil
}

// onceConflictingClient returns an IsConflict error on the first Update request it receives. It
// is used to verify that there is retrying for conflicts in place.
type onceConflictingClient struct {
didConflict bool
ctrlruntimeclient.Client
}

func (occ *onceConflictingClient) Update(ctx context.Context, obj runtime.Object, opts ...ctrlruntimeclient.UpdateOption) error {
if !occ.didConflict {
occ.didConflict = true
return kerrors.NewConflict(schema.GroupResource{}, "obj", errors.New("conflicting as requested"))
}
return occ.Client.Update(ctx, obj, opts...)
}
9 changes: 8 additions & 1 deletion boskos/ranch/BUILD.bazel
Expand Up @@ -19,8 +19,12 @@ go_test(
"@com_github_go_test_deep//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@io_k8s_apimachinery//pkg/api/equality:go_default_library",
"@io_k8s_apimachinery//pkg/api/errors:go_default_library",
"@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library",
"@io_k8s_apimachinery//pkg/runtime:go_default_library",
"@io_k8s_apimachinery//pkg/runtime/schema:go_default_library",
"@io_k8s_apimachinery//pkg/util/errors:go_default_library",
"@io_k8s_sigs_controller_runtime//pkg/client:go_default_library",
"@io_k8s_sigs_controller_runtime//pkg/client/fake:go_default_library",
],
)
Expand All @@ -36,11 +40,14 @@ go_library(
deps = [
"//boskos/common:go_default_library",
"//boskos/crds:go_default_library",
"@com_github_hashicorp_go_multierror//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@io_k8s_apimachinery//pkg/api/errors:go_default_library",
"@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library",
"@io_k8s_apimachinery//pkg/types:go_default_library",
"@io_k8s_apimachinery//pkg/util/errors:go_default_library",
"@io_k8s_apimachinery//pkg/util/sets:go_default_library",
"@io_k8s_apimachinery//pkg/util/wait:go_default_library",
"@io_k8s_client_go//util/retry:go_default_library",
"@io_k8s_sigs_controller_runtime//pkg/client:go_default_library",
],
)
Expand Down

0 comments on commit bd87a79

Please sign in to comment.