Merge pull request #31641 from mwielgus/updater-on-failure

Automatic merge from submit-queue

OnError callback function for federated updater

The handler can be useful for precise logging and events recording. Update returns just a single, first received error.

cc: @quinton-hoole @wojtek-t @kubernetes/sig-cluster-federation
This commit is contained in:
Kubernetes Submit Queue 2016-08-30 04:24:59 -07:00 committed by GitHub
commit 228ba405c5

View File

@ -47,6 +47,8 @@ type FederatedUpdater interface {
// stopped when it is reached. However the function will return after the timeout // stopped when it is reached. However the function will return after the timeout
// with a non-nil error. // with a non-nil error.
Update([]FederatedOperation, time.Duration) error Update([]FederatedOperation, time.Duration) error
UpdateWithOnError([]FederatedOperation, time.Duration, func(FederatedOperation, error)) error
} }
// A function that executes some operation using the passed client and object. // A function that executes some operation using the passed client and object.
@ -70,6 +72,10 @@ func NewFederatedUpdater(federation FederationView, add, update, del FederatedOp
} }
func (fu *federatedUpdaterImpl) Update(ops []FederatedOperation, timeout time.Duration) error { func (fu *federatedUpdaterImpl) Update(ops []FederatedOperation, timeout time.Duration) error {
return fu.UpdateWithOnError(ops, timeout, nil)
}
func (fu *federatedUpdaterImpl) UpdateWithOnError(ops []FederatedOperation, timeout time.Duration, onError func(FederatedOperation, error)) error {
done := make(chan error, len(ops)) done := make(chan error, len(ops))
for _, op := range ops { for _, op := range ops {
go func(op FederatedOperation) { go func(op FederatedOperation) {
@ -90,6 +96,9 @@ func (fu *federatedUpdaterImpl) Update(ops []FederatedOperation, timeout time.Du
case OperationTypeDelete: case OperationTypeDelete:
err = fu.deleteFunction(clientset, op.Obj) err = fu.deleteFunction(clientset, op.Obj)
} }
if err != nil && onError != nil {
onError(op, err)
}
done <- err done <- err
}(op) }(op)
} }