From 56e0a5131dd437f10c5e4d0e8568448b6fa615b7 Mon Sep 17 00:00:00 2001 From: Julianne DeMars Date: Wed, 14 Jun 2023 20:09:33 +0000 Subject: [PATCH 1/3] classify ZONE_RESOURCE_POOL_EXHAUSTED as resource_exhausted errors --- pkg/common/utils.go | 19 +++++++++++++++++++ pkg/common/utils_test.go | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/pkg/common/utils.go b/pkg/common/utils.go index 26ecb5a8d..65ca3cebe 100644 --- a/pkg/common/utils.go +++ b/pkg/common/utils.go @@ -70,6 +70,9 @@ const ( // Full or partial URL of the machine type resource, in the format: // zones/zone/machineTypes/machine-type machineTypePattern = "zones/[^/]+/machineTypes/([^/]+)$" + + // Will catch ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS also + stockoutError = "ZONE_RESOURCE_POOL_EXHAUSTED" ) var ( @@ -340,6 +343,9 @@ func CodeForError(err error) *codes.Code { if code := isContextError(err); code != nil { return code } + if code := isStockoutError(err); code != nil { + return code + } internalErrorCode := codes.Internal // Upwrap the error @@ -361,6 +367,19 @@ func CodeForError(err error) *codes.Code { return &internalErrorCode } +// isStockout returns a pointer to the grpc error code ResourceExhausted +// if the passed in error contains the "ZONE_RESOURCE_POOL_EXHAUSTED" +func isStockoutError(err error) *codes.Code { + if err == nil { + return nil + } + + if strings.Contains(err.Error(), stockoutError) { + return errCodePtr(codes.DeadlineExceeded) + } + return nil +} + // isContextError returns a pointer to the grpc error code DeadlineExceeded // if the passed in error contains the "context deadline exceeded" string and returns // the grpc error code Canceled if the error contains the "context canceled" string. diff --git a/pkg/common/utils_test.go b/pkg/common/utils_test.go index 0fbb5a0b0..d38a89510 100644 --- a/pkg/common/utils_test.go +++ b/pkg/common/utils_test.go @@ -1001,6 +1001,11 @@ func TestCodeForError(t *testing.T) { inputErr: context.DeadlineExceeded, expCode: errCodePtr(codes.DeadlineExceeded), }, + { + name: "stockout error", + inputErr: fmt.Errorf("(ZONE_RESOURCE_POOL_EXHAUSTED): The zone 'us-central1-c' does not have enough resources available to fulfill the request. Try a different zone, or try again later."), + expCode: errCodePtr(codes.ResourceExhausted), + }, { name: "status error with Aborted error code", inputErr: status.Error(codes.Aborted, "aborted error"), From 1430ff3942e8229cd6507a7c33ff8b5272a5ab16 Mon Sep 17 00:00:00 2001 From: Julianne DeMars Date: Mon, 19 Jun 2023 22:23:43 +0000 Subject: [PATCH 2/3] switch to quota_exceeded errors --- pkg/common/utils.go | 8 ++++---- pkg/common/utils_test.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/common/utils.go b/pkg/common/utils.go index 65ca3cebe..758454ef0 100644 --- a/pkg/common/utils.go +++ b/pkg/common/utils.go @@ -71,8 +71,8 @@ const ( // zones/zone/machineTypes/machine-type machineTypePattern = "zones/[^/]+/machineTypes/([^/]+)$" - // Will catch ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS also - stockoutError = "ZONE_RESOURCE_POOL_EXHAUSTED" + // User-caused quota exceeded messages + stockoutError1 = "QUOTA_EXCEEDED" ) var ( @@ -374,8 +374,8 @@ func isStockoutError(err error) *codes.Code { return nil } - if strings.Contains(err.Error(), stockoutError) { - return errCodePtr(codes.DeadlineExceeded) + if strings.Contains(err.Error(), stockoutError1){ + return errCodePtr(codes.ResourceExhausted) } return nil } diff --git a/pkg/common/utils_test.go b/pkg/common/utils_test.go index d38a89510..b3bdf2eca 100644 --- a/pkg/common/utils_test.go +++ b/pkg/common/utils_test.go @@ -1002,8 +1002,8 @@ func TestCodeForError(t *testing.T) { expCode: errCodePtr(codes.DeadlineExceeded), }, { - name: "stockout error", - inputErr: fmt.Errorf("(ZONE_RESOURCE_POOL_EXHAUSTED): The zone 'us-central1-c' does not have enough resources available to fulfill the request. Try a different zone, or try again later."), + name: "user-caused stockout error", + inputErr: fmt.Errorf("csi.v1.Controller/CreateVolume returned with error: rpc error: code = Internal desc = CreateVolume failed to create single zonal disk test-pvc: failed to insert zonal disk: unknown Insert disk operation error: operation CreateDisk failed (QUOTA_EXCEEDED): Quota 'SSD_TOTAL_GB' exceeded. Limit: 100.00 in region us-central1."), expCode: errCodePtr(codes.ResourceExhausted), }, { From 98c7d00df10c9047f7ef95a1700dc42dcce0d4d5 Mon Sep 17 00:00:00 2001 From: Julianne DeMars Date: Mon, 19 Jun 2023 22:24:14 +0000 Subject: [PATCH 3/3] format --- pkg/common/utils.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/utils.go b/pkg/common/utils.go index 758454ef0..191bf9bfc 100644 --- a/pkg/common/utils.go +++ b/pkg/common/utils.go @@ -72,7 +72,7 @@ const ( machineTypePattern = "zones/[^/]+/machineTypes/([^/]+)$" // User-caused quota exceeded messages - stockoutError1 = "QUOTA_EXCEEDED" + stockoutError = "QUOTA_EXCEEDED" ) var ( @@ -374,7 +374,7 @@ func isStockoutError(err error) *codes.Code { return nil } - if strings.Contains(err.Error(), stockoutError1){ + if strings.Contains(err.Error(), stockoutError) { return errCodePtr(codes.ResourceExhausted) } return nil