diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 8448517d61..e627dd1c66 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -59,10 +59,11 @@ func NewNotFoundErr(kind, name string) error { // // TODO: consider migrating this to go-restful which is a more full-featured version of the same thing. type APIServer struct { - prefix string - storage map[string]RESTStorage - ops *Operations - mux *http.ServeMux + prefix string + storage map[string]RESTStorage + ops *Operations + mux *http.ServeMux + asyncOpWait time.Duration } // New creates a new APIServer object. @@ -74,6 +75,8 @@ func New(storage map[string]RESTStorage, prefix string) *APIServer { prefix: strings.TrimRight(prefix, "/"), ops: NewOperations(), mux: http.NewServeMux(), + // Delay just long enough to handle most simple write operations + asyncOpWait: time.Millisecond * 25, } // Primary API methods @@ -279,6 +282,8 @@ func (s *APIServer) createOperation(out <-chan interface{}, sync bool, timeout t op := s.ops.NewOperation(out) if sync { op.WaitFor(timeout) + } else if s.asyncOpWait != 0 { + op.WaitFor(s.asyncOpWait) } return op } diff --git a/pkg/apiserver/apiserver_test.go b/pkg/apiserver/apiserver_test.go index ceb8609003..6508b8b3c1 100644 --- a/pkg/apiserver/apiserver_test.go +++ b/pkg/apiserver/apiserver_test.go @@ -396,6 +396,7 @@ func TestCreate(t *testing.T) { handler := New(map[string]RESTStorage{ "foo": simpleStorage, }, "/prefix/version") + handler.asyncOpWait = 0 server := httptest.NewServer(handler) client := http.Client{} diff --git a/pkg/apiserver/operation_test.go b/pkg/apiserver/operation_test.go index a828dfab79..2f7b1895d0 100644 --- a/pkg/apiserver/operation_test.go +++ b/pkg/apiserver/operation_test.go @@ -95,6 +95,7 @@ func TestOpGet(t *testing.T) { handler := New(map[string]RESTStorage{ "foo": simpleStorage, }, "/prefix/version") + handler.asyncOpWait = 0 server := httptest.NewServer(handler) client := http.Client{}