Skip to content

Commit b7d60b3

Browse files
Maxrovrsahilg11
authored andcommitted
error improvement for Compute Out of Capacity
1 parent 3ba4e2e commit b7d60b3

File tree

2 files changed

+67
-33
lines changed

2 files changed

+67
-33
lines changed

internal/tfresource/errors.go

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import (
1818

1919
type errorTypeEnum string
2020

21-
var serviceErrorCheck = func(err error) (failure oci_common.ServiceErrorRichInfo, ok bool) {
22-
return oci_common.IsServiceErrorRichInfo(err)
21+
var serviceErrorCheck = func(err error) (failure oci_common.ServiceErrorLocalizationMessage, ok bool) {
22+
return oci_common.IsServiceErrorLocalizationMessage(err)
2323
}
2424

2525
const (
@@ -30,19 +30,22 @@ const (
3030
)
3131

3232
type customError struct {
33-
TypeOfError errorTypeEnum
34-
ErrorCode int
35-
ErrorCodeName string
36-
Service string
37-
Message string
38-
OpcRequestID string
39-
ResourceOCID string
40-
OperationName string
41-
RequestTarget string
42-
Suggestion string
43-
VersionError string
44-
ResourceDocs string
45-
SdkApiDocs string
33+
TypeOfError errorTypeEnum
34+
ErrorCode int
35+
ErrorCodeName string
36+
Service string
37+
Message string
38+
OriginalMessage string
39+
OriginalMessageTemplate string
40+
MessageArgument map[string]string
41+
OpcRequestID string
42+
ResourceOCID string
43+
OperationName string
44+
RequestTarget string
45+
Suggestion string
46+
VersionError string
47+
ResourceDocs string
48+
SdkApiDocs string
4649
}
4750

4851
// Create new error format for Terraform output
@@ -53,16 +56,19 @@ func newCustomError(sync interface{}, err error) error {
5356
// Service error
5457
if failure, isServiceError := serviceErrorCheck(err); isServiceError {
5558
tfError = customError{
56-
TypeOfError: ServiceError,
57-
ErrorCode: failure.GetHTTPStatusCode(),
58-
ErrorCodeName: failure.GetCode(),
59-
Message: failure.GetMessage(),
60-
OpcRequestID: failure.GetOpcRequestID(),
61-
OperationName: failure.GetOperationName(),
62-
RequestTarget: failure.GetRequestTarget(),
63-
Service: getServiceName(sync),
64-
ResourceDocs: getResourceDocsURL(sync),
65-
SdkApiDocs: failure.GetOperationReferenceLink(),
59+
TypeOfError: ServiceError,
60+
ErrorCode: failure.GetHTTPStatusCode(),
61+
ErrorCodeName: failure.GetCode(),
62+
Message: failure.GetMessage(),
63+
OriginalMessage: failure.GetOriginalMessage(),
64+
OriginalMessageTemplate: failure.GetOriginalMessageTemplate(),
65+
MessageArgument: failure.GetMessageArgument(),
66+
OpcRequestID: failure.GetOpcRequestID(),
67+
OperationName: failure.GetOperationName(),
68+
RequestTarget: failure.GetRequestTarget(),
69+
Service: getServiceName(sync),
70+
ResourceDocs: getResourceDocsURL(sync),
71+
SdkApiDocs: failure.GetOperationReferenceLink(),
6672
}
6773
} else if strings.Contains(errorMessage, "timeout while waiting for state") {
6874
// Timeout error
@@ -102,17 +108,28 @@ func newCustomError(sync interface{}, err error) error {
102108
func (tfE customError) Error() error {
103109
switch tfE.TypeOfError {
104110
case ServiceError:
105-
return fmt.Errorf("%d-%s, %s \n"+
106-
"Suggestion: %s\n"+
111+
var serviceError string
112+
113+
shortErrorDescription := fmt.Sprintf("%d-%s, %s\n", tfE.ErrorCode, tfE.ErrorCodeName, tfE.Message)
114+
detailedDescription := fmt.Sprintf("Suggestion: %s\n"+
107115
"Documentation: %s \n"+
108116
"API Reference: %s \n"+
109117
"Request Target: %s \n"+
110118
"%s \n"+
111119
"Service: %s \n"+
112120
"Operation Name: %s \n"+
113121
"OPC request ID: %s \n",
114-
tfE.ErrorCode, tfE.ErrorCodeName, tfE.Message, tfE.Suggestion, tfE.ResourceDocs, tfE.SdkApiDocs, tfE.RequestTarget,
122+
tfE.Suggestion, tfE.ResourceDocs, tfE.SdkApiDocs, tfE.RequestTarget,
115123
tfE.VersionError, tfE.Service, tfE.OperationName, tfE.OpcRequestID)
124+
furtherInfo := fmt.Sprintf("Further Information: %s\n", tfE.OriginalMessage)
125+
126+
if tfE.OriginalMessage == "" {
127+
serviceError = shortErrorDescription + detailedDescription
128+
} else {
129+
// For compute out of host capacity error support
130+
serviceError = shortErrorDescription + furtherInfo + detailedDescription
131+
}
132+
return fmt.Errorf(serviceError)
116133
case TimeoutError:
117134
return fmt.Errorf("%s \n"+
118135
"%s \n"+

internal/tfresource/errors_test.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,13 @@ func (err *MockError) Error() string {
116116
}
117117

118118
type MockServiceFailure struct {
119-
StatusCode int
120-
Code string
121-
Message string
122-
OpcRequestID string
119+
StatusCode int
120+
Code string
121+
Message string
122+
OriginalMessage string `json:"originalMessage"`
123+
OriginalMessageTemplate string `json:"originalMessageTemplate"`
124+
MessageArgument map[string]string `json:"messageArguments"`
125+
OpcRequestID string
123126
// debugging information
124127
TargetService string `json:"target-service"`
125128
OperationName string `json:"operation-name"`
@@ -132,6 +135,18 @@ type MockServiceFailure struct {
132135
ErrorTroubleshootingLink string `json:"error-troubleshooting-link"`
133136
}
134137

138+
func (err *MockServiceFailure) GetOriginalMessage() string {
139+
return err.OriginalMessage
140+
}
141+
142+
func (err *MockServiceFailure) GetMessageArgument() map[string]string {
143+
return err.MessageArgument
144+
}
145+
146+
func (err *MockServiceFailure) GetOriginalMessageTemplate() string {
147+
return err.OriginalMessageTemplate
148+
}
149+
135150
func (err *MockServiceFailure) GetTargetService() string {
136151
return err.TargetService
137152
}
@@ -214,7 +229,9 @@ func TestUnitHandleError(t *testing.T) {
214229
Message: "LimitExceeded",
215230
OpcRequestID: "Not Applicable",
216231
}
217-
serviceErrorCheck = func(err error) (failure oci_common.ServiceErrorRichInfo, ok bool) { return mockServiceFailure, true }
232+
serviceErrorCheck = func(err error) (failure oci_common.ServiceErrorLocalizationMessage, ok bool) {
233+
return mockServiceFailure, true
234+
}
218235
response = HandleError(temp, mockServiceFailure)
219236
assert.Contains(t, response.Error(), "Request a service limit increase for this resource")
220237

0 commit comments

Comments
 (0)