From dbf98e42664c8a3a104fe06e0e362497fca2902d Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Fri, 8 Oct 2021 14:05:26 +0200 Subject: [PATCH] apiserver/storage: free etcd kv early in list decoding loop --- staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index c707fa75939..37d411c774f 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -763,7 +763,7 @@ func (s *store) List(ctx context.Context, key string, opts storage.ListOptions, } // take items from the response until the bucket is full, filtering as we go - for _, kv := range getResp.Kvs { + for i, kv := range getResp.Kvs { if paging && int64(v.Len()) >= pred.Limit { hasMore = true break @@ -779,6 +779,9 @@ func (s *store) List(ctx context.Context, key string, opts storage.ListOptions, return err } numEvald++ + + // free kv early. Long lists can take O(seconds) to decode. + getResp.Kvs[i] = nil } // indicate to the client which resource version was returned