Merge lp:~rogpeppe/juju-core/377-fix-server-error into lp:~go-bot/juju-core/trunk
Proposed by
Roger Peppe
Status: | Merged |
---|---|
Approved by: | Roger Peppe |
Approved revision: | no longer in the source branch. |
Merged at revision: | 1727 |
Proposed branch: | lp:~rogpeppe/juju-core/377-fix-server-error |
Merge into: | lp:~go-bot/juju-core/trunk |
Diff against target: |
66 lines (+23/-3) 2 files modified
state/apiserver/common/errors.go (+13/-2) state/apiserver/common/errors_test.go (+10/-1) |
To merge this branch: | bzr merge lp:~rogpeppe/juju-core/377-fix-server-error |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Juju Engineering | Pending | ||
Review via email:
|
Commit message
state/apiserver: make ServerError work properly
It didn't work if the error type was non-comparable.
Description of the change
state/apiserver: make ServerError work properly
It didn't work if the error type was non-comparable.
To post a comment you must log in.
Reviewers: mp+182562_ code.launchpad. net,
Message:
Please take a look.
Description:
state/apiserver: make ServerError work properly
It didn't work if the error type was non-comparable.
https:/ /code.launchpad .net/~rogpeppe/ juju-core/ 377-fix- server- error/+ merge/182562
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/13336043/
Affected files: /common/ errors. go /common/ errors_ test.go
A [revision details]
M state/apiserver
M state/apiserver
Index: [revision details] 20130827122923- qx3dpiw3118bbub 2
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: tarmac-
+New revision: <email address hidden>
Index: state/apiserver /common/ errors. go apiserver/ common/ errors. go' /common/ errors. go 2013-08-06 17:09:11 +0000 /common/ errors. go 2013-08-28 08:45:59 +0000 ioned: params. CodeNotProvisio ned,
=== modified file 'state/
--- state/apiserver
+++ state/apiserver
@@ -51,14 +51,24 @@
ErrNotProvis
}
+func singletonCode(err error) string { odes[err] odes[err] IsUnauthorizedE rror(err) :
+ // All error types may not be hashable; deal with
+ // that by catching the panic if we try to look up
+ // a non-hashable type.
+ defer func() {
+ recover()
+ }()
+ return singletonErrorC
+}
+
// ServerError returns an error suitable for returning to an API
// client, with an error code suitable for various kinds of errors
// generated in packages outside the API.
-func ServerError(err error) *params.Error {
+func ServerError(err error) (apiError *params.Error) {
if err == nil {
return nil
}
- code := singletonErrorC
+ code := singletonCode(err)
switch {
case code != "":
case errors.
Index: state/apiserver /common/ errors_ test.go apiserver/ errors_ test.go' apiserver/ common/ errors_ test.go' /errors_ test.go 2013-08-19 11:20:02 +0000 /common/ errors_ test.go 2013-08-28 08:47:28 +0000
=== renamed file 'state/
=> 'state/
--- state/apiserver
+++ state/apiserver
@@ -1,7 +1,7 @@
// Copyright 2012, 2013 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
-package apiserver_test
+package common_test
import ( {"foo"} ,
stderrors "errors"
@@ -71,10 +71,19 @@
err: stderrors.New("an error"),
code: "",
}, {
+ err: unhashableError
+ code: "",
+}, {
err: nil,
code: "",
}}
+type unhashableError []string orm(c *gc.C) { ServerError( t.err)
+
+func (err unhashableError) Error() string {
+ return err[0]
+}
+
func (s *errorsSuite) TestErrorTransf
for _, t := range errorTransformTests {
err1 := common.