From f003cd1f95a1556094f7328cd8f7ded03ce08392 Mon Sep 17 00:00:00 2001 From: Weiping Cai Date: Sat, 20 Jun 2020 21:59:54 +0800 Subject: [PATCH] add template file size to 3m and throw error Signed-off-by: Weiping Cai --- pkg/storage/driver/cfgmaps.go | 2 ++ pkg/storage/driver/cfgmaps_test.go | 10 ++++++++-- pkg/storage/driver/mock_test.go | 3 +++ pkg/storage/driver/secrets.go | 7 +++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pkg/storage/driver/cfgmaps.go b/pkg/storage/driver/cfgmaps.go index 71e635975..9bc9d01bc 100644 --- a/pkg/storage/driver/cfgmaps.go +++ b/pkg/storage/driver/cfgmaps.go @@ -166,6 +166,8 @@ func (cfgmaps *ConfigMaps) Create(key string, rls *rspb.Release) error { if _, err := cfgmaps.impl.Create(context.Background(), obj, metav1.CreateOptions{}); err != nil { if apierrors.IsAlreadyExists(err) { return ErrReleaseExists + } else if apierrors.IsRequestEntityTooLargeError(err) { + return errors.Wrapf(err, "release: storage limit") } cfgmaps.Log("create: failed to create: %s", err) diff --git a/pkg/storage/driver/cfgmaps_test.go b/pkg/storage/driver/cfgmaps_test.go index 626c36cb9..0b235e5b0 100644 --- a/pkg/storage/driver/cfgmaps_test.go +++ b/pkg/storage/driver/cfgmaps_test.go @@ -17,11 +17,11 @@ import ( "encoding/base64" "encoding/json" "reflect" + "strings" "testing" - v1 "k8s.io/api/core/v1" - rspb "helm.sh/helm/v3/pkg/release" + v1 "k8s.io/api/core/v1" ) func TestConfigMapName(t *testing.T) { @@ -178,6 +178,12 @@ func TestConfigMapCreate(t *testing.T) { if !reflect.DeepEqual(rel, got) { t.Errorf("Expected {%v}, got {%v}", rel, got) } + + // configmap overhead entity limit + if err := cfgmaps.Create(testKey("large-chart", 1), releaseStub("large-chart", 1, "", rspb.StatusDeployed)); !strings.Contains(err.Error(), "storage limit: Request entity too large") { + t.Errorf("Expected {%v}, got {%v}", "release: storage limit: Request entity too large: Request entity too large: limit is 3145728", err) + } + } func TestConfigMapUpdate(t *testing.T) { diff --git a/pkg/storage/driver/mock_test.go b/pkg/storage/driver/mock_test.go index c0236ece8..9d07e3073 100644 --- a/pkg/storage/driver/mock_test.go +++ b/pkg/storage/driver/mock_test.go @@ -139,6 +139,9 @@ func (mock *MockConfigMapsInterface) Create(_ context.Context, cfgmap *v1.Config if object, ok := mock.objects[name]; ok { return object, apierrors.NewAlreadyExists(v1.Resource("tests"), name) } + if name == "large-chart.v1" { + return nil, apierrors.NewRequestEntityTooLargeError("Request entity too large: limit is 3145728") + } mock.objects[name] = cfgmap return cfgmap, nil } diff --git a/pkg/storage/driver/secrets.go b/pkg/storage/driver/secrets.go index 44280f70f..b5946c93e 100644 --- a/pkg/storage/driver/secrets.go +++ b/pkg/storage/driver/secrets.go @@ -156,6 +156,8 @@ func (secrets *Secrets) Create(key string, rls *rspb.Release) error { if _, err := secrets.impl.Create(context.Background(), obj, metav1.CreateOptions{}); err != nil { if apierrors.IsAlreadyExists(err) { return ErrReleaseExists + } else if apierrors.IsRequestEntityTooLargeError(err) { + return errors.Wrapf(err, "release: storage limit") } return errors.Wrap(err, "create: failed to create") @@ -179,6 +181,11 @@ func (secrets *Secrets) Update(key string, rls *rspb.Release) error { } // push the secret object out into the kubiverse _, err = secrets.impl.Update(context.Background(), obj, metav1.UpdateOptions{}) + + if apierrors.IsRequestEntityTooLargeError(err) { + return errors.Wrapf(err, "release: storage limit") + } + return errors.Wrap(err, "update: failed to update") }