Skip to content

Commit

Permalink
Indicate mutation in PATCH helper method return (#249)
Browse files Browse the repository at this point in the history
  • Loading branch information
tamalsaha committed Dec 22, 2017
1 parent 98f87c6 commit d86c9dd
Show file tree
Hide file tree
Showing 26 changed files with 393 additions and 221 deletions.
32 changes: 15 additions & 17 deletions client/typed/stash/v1alpha1/util/recovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,48 +17,45 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
)

func EnsureRecovery(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(alert *api.Recovery) *api.Recovery) (*api.Recovery, error) {
return CreateOrPatchRecovery(c, meta, transform)
}

func CreateOrPatchRecovery(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(alert *api.Recovery) *api.Recovery) (*api.Recovery, error) {
func CreateOrPatchRecovery(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(alert *api.Recovery) *api.Recovery) (*api.Recovery, bool, error) {
cur, err := c.Recoveries(meta.Namespace).Get(meta.Name, metav1.GetOptions{})
if kerr.IsNotFound(err) {
glog.V(3).Infof("Creating Recovery %s/%s.", meta.Namespace, meta.Name)
return c.Recoveries(meta.Namespace).Create(transform(&api.Recovery{
out, err := c.Recoveries(meta.Namespace).Create(transform(&api.Recovery{
TypeMeta: metav1.TypeMeta{
Kind: "Recovery",
APIVersion: api.SchemeGroupVersion.String(),
},
ObjectMeta: meta,
}))
return out, true, err
} else if err != nil {
return nil, err
return nil, false, err
}
return PatchRecovery(c, cur, transform)
}

func PatchRecovery(c cs.StashV1alpha1Interface, cur *api.Recovery, transform func(*api.Recovery) *api.Recovery) (*api.Recovery, error) {
func PatchRecovery(c cs.StashV1alpha1Interface, cur *api.Recovery, transform func(*api.Recovery) *api.Recovery) (*api.Recovery, bool, error) {
curJson, err := json.Marshal(cur)
if err != nil {
return nil, err
return nil, false, err
}

modJson, err := json.Marshal(transform(cur.DeepCopy()))
if err != nil {
return nil, err
return nil, false, err
}

patch, err := jsonmergepatch.CreateThreeWayJSONMergePatch(curJson, modJson, curJson)
if err != nil {
return nil, err
return nil, false, err
}
if len(patch) == 0 || string(patch) == "{}" {
return cur, nil
return cur, false, nil
}
glog.V(3).Infof("Patching Recovery %s/%s with %s.", cur.Namespace, cur.Name, string(patch))
result, err := c.Recoveries(cur.Namespace).Patch(cur.Name, types.MergePatchType, patch)
return result, err
out, err := c.Recoveries(cur.Namespace).Patch(cur.Name, types.MergePatchType, patch)
return out, true, err
}

func TryPatchRecovery(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(*api.Recovery) *api.Recovery) (result *api.Recovery, err error) {
Expand All @@ -69,7 +66,7 @@ func TryPatchRecovery(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, trans
if kerr.IsNotFound(e2) {
return false, e2
} else if e2 == nil {
result, e2 = PatchRecovery(c, cur, transform)
result, _, e2 = PatchRecovery(c, cur, transform)
return e2 == nil, nil
}
glog.Errorf("Attempt %d failed to patch Recovery %s/%s due to %v.", attempt, cur.Namespace, cur.Name, e2)
Expand Down Expand Up @@ -104,7 +101,7 @@ func TryUpdateRecovery(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, tran
}

func SetRecoveryStatus(c cs.StashV1alpha1Interface, rec *api.Recovery, status api.RecoveryStatus) {
_, err := PatchRecovery(c, rec, func(in *api.Recovery) *api.Recovery {
_, _, err := PatchRecovery(c, rec, func(in *api.Recovery) *api.Recovery {
in.Status = status
return in
})
Expand All @@ -120,7 +117,7 @@ func SetRecoveryStatusPhase(c cs.StashV1alpha1Interface, rec *api.Recovery, phas
}

func SetRecoveryStats(c cs.StashV1alpha1Interface, recovery *api.Recovery, path string, d time.Duration, phase api.RecoveryPhase) (*api.Recovery, error) {
return PatchRecovery(c, recovery, func(in *api.Recovery) *api.Recovery {
out, _, err := PatchRecovery(c, recovery, func(in *api.Recovery) *api.Recovery {
found := false
for _, stats := range in.Status.Stats {
if stats.Path == path {
Expand All @@ -138,4 +135,5 @@ func SetRecoveryStats(c cs.StashV1alpha1Interface, recovery *api.Recovery, path
}
return in
})
return out, err
}
27 changes: 12 additions & 15 deletions client/typed/stash/v1alpha1/util/restic.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,48 +15,45 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
)

func EnsureRestic(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(alert *api.Restic) *api.Restic) (*api.Restic, error) {
return CreateOrPatchRestic(c, meta, transform)
}

func CreateOrPatchRestic(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(alert *api.Restic) *api.Restic) (*api.Restic, error) {
func CreateOrPatchRestic(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(alert *api.Restic) *api.Restic) (*api.Restic, bool, error) {
cur, err := c.Restics(meta.Namespace).Get(meta.Name, metav1.GetOptions{})
if kerr.IsNotFound(err) {
glog.V(3).Infof("Creating Restic %s/%s.", meta.Namespace, meta.Name)
return c.Restics(meta.Namespace).Create(transform(&api.Restic{
out, err := c.Restics(meta.Namespace).Create(transform(&api.Restic{
TypeMeta: metav1.TypeMeta{
Kind: "Restic",
APIVersion: api.SchemeGroupVersion.String(),
},
ObjectMeta: meta,
}))
return out, true, err
} else if err != nil {
return nil, err
return nil, false, err
}
return PatchRestic(c, cur, transform)
}

func PatchRestic(c cs.StashV1alpha1Interface, cur *api.Restic, transform func(*api.Restic) *api.Restic) (*api.Restic, error) {
func PatchRestic(c cs.StashV1alpha1Interface, cur *api.Restic, transform func(*api.Restic) *api.Restic) (*api.Restic, bool, error) {
curJson, err := json.Marshal(cur)
if err != nil {
return nil, err
return nil, false, err
}

modJson, err := json.Marshal(transform(cur.DeepCopy()))
if err != nil {
return nil, err
return nil, false, err
}

patch, err := jsonmergepatch.CreateThreeWayJSONMergePatch(curJson, modJson, curJson)
if err != nil {
return nil, err
return nil, false, err
}
if len(patch) == 0 || string(patch) == "{}" {
return cur, nil
return cur, false, nil
}
glog.V(3).Infof("Patching Restic %s/%s with %s.", cur.Namespace, cur.Name, string(patch))
result, err := c.Restics(cur.Namespace).Patch(cur.Name, types.MergePatchType, patch)
return result, err
out, err := c.Restics(cur.Namespace).Patch(cur.Name, types.MergePatchType, patch)
return out, true, err
}

func TryPatchRestic(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transform func(*api.Restic) *api.Restic) (result *api.Restic, err error) {
Expand All @@ -67,7 +64,7 @@ func TryPatchRestic(c cs.StashV1alpha1Interface, meta metav1.ObjectMeta, transfo
if kerr.IsNotFound(e2) {
return false, e2
} else if e2 == nil {
result, e2 = PatchRestic(c, cur, transform)
result, _, e2 = PatchRestic(c, cur, transform)
return e2 == nil, nil
}
glog.Errorf("Attempt %d failed to patch Restic %s/%s due to %v.", attempt, cur.Namespace, cur.Name, e2)
Expand Down
9 changes: 5 additions & 4 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 12 additions & 10 deletions vendor/github.com/appscode/kutil/apps/v1beta1/deployment.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 12 additions & 10 deletions vendor/github.com/appscode/kutil/apps/v1beta1/statefulset.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d86c9dd

Please sign in to comment.