Skip to content

Commit 2f96eec

Browse files
handling recovery errors more elegantly.
1 parent 8f15676 commit 2f96eec

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

optimizely/client/client.go

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,18 @@ func (o *OptimizelyClient) GetEnabledFeatures(userContext entities.UserContext)
7676

7777
defer func() {
7878
if r := recover(); r != nil {
79-
errorMessage := fmt.Sprintf(`optimizely SDK is panicking with the error "%s"`, string(debug.Stack()))
80-
err = errors.New(errorMessage)
79+
switch r.(type) {
80+
case error:
81+
err = r.(error)
82+
case string:
83+
strErr := r.(string)
84+
err = errors.New(strErr)
85+
default:
86+
err = errors.New("unexpected error")
87+
}
88+
errorMessage := fmt.Sprintf("optimizely SDK is panicking with the error:")
8189
logger.Error(errorMessage, err)
90+
logger.Debug(string(debug.Stack()))
8291
}
8392
}()
8493

@@ -105,9 +114,18 @@ func (o *OptimizelyClient) Track(eventKey string, userContext entities.UserConte
105114

106115
defer func() {
107116
if r := recover(); r != nil {
108-
errorMessage := fmt.Sprintf(`optimizely SDK is panicking with the error "%s"`, string(debug.Stack()))
109-
err = errors.New(errorMessage)
117+
switch r.(type) {
118+
case error:
119+
err = r.(error)
120+
case string:
121+
strErr := r.(string)
122+
err = errors.New(strErr)
123+
default:
124+
err = errors.New("unexpected error")
125+
}
126+
errorMessage := fmt.Sprintf("optimizely SDK is panicking with the error:")
110127
logger.Error(errorMessage, err)
128+
logger.Debug(string(debug.Stack()))
111129
}
112130
}()
113131

@@ -234,13 +252,24 @@ func (o *OptimizelyClient) GetAllFeatureVariables(featureKey string, userContext
234252
func (o *OptimizelyClient) getFeatureDecision(featureKey string, userContext entities.UserContext) (decisionContext decision.FeatureDecisionContext, featureDecision decision.FeatureDecision, err error) {
235253

236254
defer func() {
255+
var e error
237256
if r := recover(); r != nil {
238-
errorMessage := fmt.Sprintf(`optimizely SDK is panicking with the error "%s"`, string(debug.Stack()))
239-
logger.Error(errorMessage, err)
257+
switch r.(type) {
258+
case error:
259+
e = r.(error)
260+
case string:
261+
strErr := r.(string)
262+
e = errors.New(strErr)
263+
default:
264+
e = errors.New("unexpected error")
265+
}
266+
errorMessage := fmt.Sprintf("optimizely SDK is panicking with the error:")
267+
logger.Error(errorMessage, e)
268+
logger.Debug(string(debug.Stack()))
240269

241270
// If we have a feature, then we can recover w/o throwing
242271
if decisionContext.Feature == nil {
243-
err = errors.New(errorMessage)
272+
err = e
244273
}
245274
}
246275
}()

0 commit comments

Comments
 (0)