Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
4b7f7ce5
Commit
4b7f7ce5
authored
Jun 22, 2015
by
nikhiljindal
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Dont return raw etcd errors
parent
764d34d3
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
59 additions
and
22 deletions
+59
-22
errors.go
pkg/api/errors/errors.go
+13
-0
etcd.go
pkg/api/errors/etcd/etcd.go
+12
-4
etcd.go
pkg/registry/etcd/etcd.go
+11
-5
etcd.go
pkg/registry/generic/etcd/etcd.go
+6
-2
etcd.go
pkg/registry/pod/etcd/etcd.go
+6
-6
etcd_test.go
pkg/registry/pod/etcd/etcd_test.go
+1
-1
etcd_test.go
pkg/registry/resourcequota/etcd/etcd_test.go
+1
-1
etcd.go
pkg/registry/service/allocator/etcd/etcd.go
+9
-3
No files found.
pkg/api/errors/errors.go
View file @
4b7f7ce5
...
@@ -372,6 +372,11 @@ func IsServerTimeout(err error) bool {
...
@@ -372,6 +372,11 @@ func IsServerTimeout(err error) bool {
return
reasonForError
(
err
)
==
api
.
StatusReasonServerTimeout
return
reasonForError
(
err
)
==
api
.
StatusReasonServerTimeout
}
}
// IsInternalServerError determines if err is an error which indicates that there was an internal server error.
func
IsInternalServerError
(
err
error
)
bool
{
return
reasonForError
(
err
)
==
api
.
StatusReasonInternalError
}
// IsUnexpectedServerError returns true if the server response was not in the expected API format,
// IsUnexpectedServerError returns true if the server response was not in the expected API format,
// and may be the result of another HTTP actor.
// and may be the result of another HTTP actor.
func
IsUnexpectedServerError
(
err
error
)
bool
{
func
IsUnexpectedServerError
(
err
error
)
bool
{
...
@@ -409,6 +414,14 @@ func SuggestsClientDelay(err error) (int, bool) {
...
@@ -409,6 +414,14 @@ func SuggestsClientDelay(err error) (int, bool) {
return
0
,
false
return
0
,
false
}
}
func
IsAPIStatusError
(
err
error
)
bool
{
switch
err
.
(
type
)
{
case
*
StatusError
:
return
true
}
return
false
}
func
reasonForError
(
err
error
)
api
.
StatusReason
{
func
reasonForError
(
err
error
)
api
.
StatusReason
{
switch
t
:=
err
.
(
type
)
{
switch
t
:=
err
.
(
type
)
{
case
*
StatusError
:
case
*
StatusError
:
...
...
pkg/api/errors/etcd/etcd.go
View file @
4b7f7ce5
...
@@ -27,8 +27,10 @@ func InterpretGetError(err error, kind, name string) error {
...
@@ -27,8 +27,10 @@ func InterpretGetError(err error, kind, name string) error {
switch
{
switch
{
case
tools
.
IsEtcdNotFound
(
err
)
:
case
tools
.
IsEtcdNotFound
(
err
)
:
return
errors
.
NewNotFound
(
kind
,
name
)
return
errors
.
NewNotFound
(
kind
,
name
)
default
:
case
errors
.
IsAPIStatusError
(
err
)
:
return
err
return
err
default
:
return
errors
.
NewInternalError
(
err
)
}
}
}
}
...
@@ -38,8 +40,10 @@ func InterpretCreateError(err error, kind, name string) error {
...
@@ -38,8 +40,10 @@ func InterpretCreateError(err error, kind, name string) error {
switch
{
switch
{
case
tools
.
IsEtcdNodeExist
(
err
)
:
case
tools
.
IsEtcdNodeExist
(
err
)
:
return
errors
.
NewAlreadyExists
(
kind
,
name
)
return
errors
.
NewAlreadyExists
(
kind
,
name
)
default
:
case
errors
.
IsAPIStatusError
(
err
)
:
return
err
return
err
default
:
return
errors
.
NewInternalError
(
err
)
}
}
}
}
...
@@ -49,8 +53,10 @@ func InterpretUpdateError(err error, kind, name string) error {
...
@@ -49,8 +53,10 @@ func InterpretUpdateError(err error, kind, name string) error {
switch
{
switch
{
case
tools
.
IsEtcdTestFailed
(
err
),
tools
.
IsEtcdNodeExist
(
err
)
:
case
tools
.
IsEtcdTestFailed
(
err
),
tools
.
IsEtcdNodeExist
(
err
)
:
return
errors
.
NewConflict
(
kind
,
name
,
err
)
return
errors
.
NewConflict
(
kind
,
name
,
err
)
default
:
case
errors
.
IsAPIStatusError
(
err
)
:
return
err
return
err
default
:
return
errors
.
NewInternalError
(
err
)
}
}
}
}
...
@@ -60,7 +66,9 @@ func InterpretDeleteError(err error, kind, name string) error {
...
@@ -60,7 +66,9 @@ func InterpretDeleteError(err error, kind, name string) error {
switch
{
switch
{
case
tools
.
IsEtcdNotFound
(
err
)
:
case
tools
.
IsEtcdNotFound
(
err
)
:
return
errors
.
NewNotFound
(
kind
,
name
)
return
errors
.
NewNotFound
(
kind
,
name
)
default
:
case
errors
.
IsAPIStatusError
(
err
)
:
return
err
return
err
default
:
return
errors
.
NewInternalError
(
err
)
}
}
}
}
pkg/registry/etcd/etcd.go
View file @
4b7f7ce5
...
@@ -108,7 +108,10 @@ func (r *Registry) CreateService(ctx api.Context, svc *api.Service) (*api.Servic
...
@@ -108,7 +108,10 @@ func (r *Registry) CreateService(ctx api.Context, svc *api.Service) (*api.Servic
}
}
out
:=
&
api
.
Service
{}
out
:=
&
api
.
Service
{}
err
=
r
.
CreateObj
(
key
,
svc
,
out
,
0
)
err
=
r
.
CreateObj
(
key
,
svc
,
out
,
0
)
return
out
,
etcderr
.
InterpretCreateError
(
err
,
"service"
,
svc
.
Name
)
if
err
!=
nil
{
err
=
etcderr
.
InterpretCreateError
(
err
,
"Service"
,
svc
.
Name
)
}
return
out
,
err
}
}
// GetService obtains a Service specified by its name.
// GetService obtains a Service specified by its name.
...
@@ -120,7 +123,7 @@ func (r *Registry) GetService(ctx api.Context, name string) (*api.Service, error
...
@@ -120,7 +123,7 @@ func (r *Registry) GetService(ctx api.Context, name string) (*api.Service, error
var
svc
api
.
Service
var
svc
api
.
Service
err
=
r
.
ExtractObj
(
key
,
&
svc
,
false
)
err
=
r
.
ExtractObj
(
key
,
&
svc
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
etcderr
.
InterpretGetError
(
err
,
"
s
ervice"
,
name
)
return
nil
,
etcderr
.
InterpretGetError
(
err
,
"
S
ervice"
,
name
)
}
}
return
&
svc
,
nil
return
&
svc
,
nil
}
}
...
@@ -133,7 +136,7 @@ func (r *Registry) DeleteService(ctx api.Context, name string) error {
...
@@ -133,7 +136,7 @@ func (r *Registry) DeleteService(ctx api.Context, name string) error {
}
}
err
=
r
.
Delete
(
key
,
true
)
err
=
r
.
Delete
(
key
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
return
etcderr
.
InterpretDeleteError
(
err
,
"
s
ervice"
,
name
)
return
etcderr
.
InterpretDeleteError
(
err
,
"
S
ervice"
,
name
)
}
}
// TODO: can leave dangling endpoints, and potentially return incorrect
// TODO: can leave dangling endpoints, and potentially return incorrect
...
@@ -153,12 +156,15 @@ func (r *Registry) UpdateService(ctx api.Context, svc *api.Service) (*api.Servic
...
@@ -153,12 +156,15 @@ func (r *Registry) UpdateService(ctx api.Context, svc *api.Service) (*api.Servic
}
}
out
:=
&
api
.
Service
{}
out
:=
&
api
.
Service
{}
err
=
r
.
SetObj
(
key
,
svc
,
out
,
0
)
err
=
r
.
SetObj
(
key
,
svc
,
out
,
0
)
return
out
,
etcderr
.
InterpretUpdateError
(
err
,
"service"
,
svc
.
Name
)
if
err
!=
nil
{
err
=
etcderr
.
InterpretUpdateError
(
err
,
"Service"
,
svc
.
Name
)
}
return
out
,
err
}
}
// WatchServices begins watching for new, changed, or deleted service configurations.
// WatchServices begins watching for new, changed, or deleted service configurations.
func
(
r
*
Registry
)
WatchServices
(
ctx
api
.
Context
,
label
labels
.
Selector
,
field
fields
.
Selector
,
resourceVersion
string
)
(
watch
.
Interface
,
error
)
{
func
(
r
*
Registry
)
WatchServices
(
ctx
api
.
Context
,
label
labels
.
Selector
,
field
fields
.
Selector
,
resourceVersion
string
)
(
watch
.
Interface
,
error
)
{
version
,
err
:=
tools
.
ParseWatchResourceVersion
(
resourceVersion
,
"
s
ervice"
)
version
,
err
:=
tools
.
ParseWatchResourceVersion
(
resourceVersion
,
"
S
ervice"
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
pkg/registry/generic/etcd/etcd.go
View file @
4b7f7ce5
...
@@ -191,7 +191,9 @@ func (e *Etcd) CreateWithName(ctx api.Context, name string, obj runtime.Object)
...
@@ -191,7 +191,9 @@ func (e *Etcd) CreateWithName(ctx api.Context, name string, obj runtime.Object)
return
err
return
err
}
}
err
=
e
.
Helper
.
CreateObj
(
key
,
obj
,
nil
,
ttl
)
err
=
e
.
Helper
.
CreateObj
(
key
,
obj
,
nil
,
ttl
)
err
=
etcderr
.
InterpretCreateError
(
err
,
e
.
EndpointName
,
name
)
if
err
!=
nil
{
err
=
etcderr
.
InterpretCreateError
(
err
,
e
.
EndpointName
,
name
)
}
if
err
==
nil
&&
e
.
Decorator
!=
nil
{
if
err
==
nil
&&
e
.
Decorator
!=
nil
{
err
=
e
.
Decorator
(
obj
)
err
=
e
.
Decorator
(
obj
)
}
}
...
@@ -250,7 +252,9 @@ func (e *Etcd) UpdateWithName(ctx api.Context, name string, obj runtime.Object)
...
@@ -250,7 +252,9 @@ func (e *Etcd) UpdateWithName(ctx api.Context, name string, obj runtime.Object)
return
err
return
err
}
}
err
=
e
.
Helper
.
SetObj
(
key
,
obj
,
nil
,
ttl
)
err
=
e
.
Helper
.
SetObj
(
key
,
obj
,
nil
,
ttl
)
err
=
etcderr
.
InterpretUpdateError
(
err
,
e
.
EndpointName
,
name
)
if
err
!=
nil
{
err
=
etcderr
.
InterpretUpdateError
(
err
,
e
.
EndpointName
,
name
)
}
if
err
==
nil
&&
e
.
Decorator
!=
nil
{
if
err
==
nil
&&
e
.
Decorator
!=
nil
{
err
=
e
.
Decorator
(
obj
)
err
=
e
.
Decorator
(
obj
)
}
}
...
...
pkg/registry/pod/etcd/etcd.go
View file @
4b7f7ce5
...
@@ -145,13 +145,13 @@ func (r *BindingREST) setPodHostAndAnnotations(ctx api.Context, podID, oldMachin
...
@@ -145,13 +145,13 @@ func (r *BindingREST) setPodHostAndAnnotations(ctx api.Context, podID, oldMachin
err
=
r
.
store
.
Helper
.
GuaranteedUpdate
(
podKey
,
&
api
.
Pod
{},
false
,
tools
.
SimpleUpdate
(
func
(
obj
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
=
r
.
store
.
Helper
.
GuaranteedUpdate
(
podKey
,
&
api
.
Pod
{},
false
,
tools
.
SimpleUpdate
(
func
(
obj
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
pod
,
ok
:=
obj
.
(
*
api
.
Pod
)
pod
,
ok
:=
obj
.
(
*
api
.
Pod
)
if
!
ok
{
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"unexpected object: %#v"
,
obj
)
return
nil
,
errors
.
NewInternalError
(
fmt
.
Errorf
(
"received object is not of type pod: %#v"
,
obj
)
)
}
}
if
pod
.
DeletionTimestamp
!=
nil
{
if
pod
.
DeletionTimestamp
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"pod %s is being deleted, cannot be assigned to a host"
,
pod
.
Name
)
return
nil
,
errors
.
NewConflict
(
"pod"
,
podID
,
fmt
.
Errorf
(
"pod %s is being deleted, cannot be assigned to a host"
,
pod
.
Name
)
)
}
}
if
pod
.
Spec
.
NodeName
!=
oldMachine
{
if
pod
.
Spec
.
NodeName
!=
oldMachine
{
return
nil
,
fmt
.
Errorf
(
"pod %v is already assigned to node %q"
,
pod
.
Name
,
pod
.
Spec
.
NodeName
)
return
nil
,
errors
.
NewConflict
(
"pod"
,
podID
,
fmt
.
Errorf
(
"pod %v is already assigned to node %q"
,
pod
.
Name
,
pod
.
Spec
.
NodeName
)
)
}
}
pod
.
Spec
.
NodeName
=
machine
pod
.
Spec
.
NodeName
=
machine
if
pod
.
Annotations
==
nil
{
if
pod
.
Annotations
==
nil
{
...
@@ -222,7 +222,7 @@ func (r *LogREST) New() runtime.Object {
...
@@ -222,7 +222,7 @@ func (r *LogREST) New() runtime.Object {
func
(
r
*
LogREST
)
Get
(
ctx
api
.
Context
,
name
string
,
opts
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
func
(
r
*
LogREST
)
Get
(
ctx
api
.
Context
,
name
string
,
opts
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
logOpts
,
ok
:=
opts
.
(
*
api
.
PodLogOptions
)
logOpts
,
ok
:=
opts
.
(
*
api
.
PodLogOptions
)
if
!
ok
{
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"Invalid options object: %#v"
,
opts
)
return
nil
,
errors
.
NewInternalError
(
fmt
.
Errorf
(
"received object is not of type PodLogOptions: %#v"
,
opts
)
)
}
}
location
,
transport
,
err
:=
pod
.
LogLocation
(
r
.
store
,
r
.
kubeletConn
,
ctx
,
name
,
logOpts
)
location
,
transport
,
err
:=
pod
.
LogLocation
(
r
.
store
,
r
.
kubeletConn
,
ctx
,
name
,
logOpts
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -270,7 +270,7 @@ func (r *ProxyREST) NewConnectOptions() (runtime.Object, bool, string) {
...
@@ -270,7 +270,7 @@ func (r *ProxyREST) NewConnectOptions() (runtime.Object, bool, string) {
func
(
r
*
ProxyREST
)
Connect
(
ctx
api
.
Context
,
id
string
,
opts
runtime
.
Object
)
(
rest
.
ConnectHandler
,
error
)
{
func
(
r
*
ProxyREST
)
Connect
(
ctx
api
.
Context
,
id
string
,
opts
runtime
.
Object
)
(
rest
.
ConnectHandler
,
error
)
{
proxyOpts
,
ok
:=
opts
.
(
*
api
.
PodProxyOptions
)
proxyOpts
,
ok
:=
opts
.
(
*
api
.
PodProxyOptions
)
if
!
ok
{
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"Invalid options object: %#v"
,
opts
)
return
nil
,
errors
.
NewInternalError
(
fmt
.
Errorf
(
"received object is not of type PodProxyOptions: %#v"
,
opts
)
)
}
}
location
,
_
,
err
:=
pod
.
ResourceLocation
(
r
.
store
,
ctx
,
id
)
location
,
_
,
err
:=
pod
.
ResourceLocation
(
r
.
store
,
ctx
,
id
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -300,7 +300,7 @@ func (r *ExecREST) New() runtime.Object {
...
@@ -300,7 +300,7 @@ func (r *ExecREST) New() runtime.Object {
func
(
r
*
ExecREST
)
Connect
(
ctx
api
.
Context
,
name
string
,
opts
runtime
.
Object
)
(
rest
.
ConnectHandler
,
error
)
{
func
(
r
*
ExecREST
)
Connect
(
ctx
api
.
Context
,
name
string
,
opts
runtime
.
Object
)
(
rest
.
ConnectHandler
,
error
)
{
execOpts
,
ok
:=
opts
.
(
*
api
.
PodExecOptions
)
execOpts
,
ok
:=
opts
.
(
*
api
.
PodExecOptions
)
if
!
ok
{
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"Invalid options object: %#v"
,
opts
)
return
nil
,
errors
.
NewInternalError
(
fmt
.
Errorf
(
"received object is not of type PodExecOptions: %#v"
,
opts
)
)
}
}
location
,
transport
,
err
:=
pod
.
ExecLocation
(
r
.
store
,
r
.
kubeletConn
,
ctx
,
name
,
execOpts
)
location
,
transport
,
err
:=
pod
.
ExecLocation
(
r
.
store
,
r
.
kubeletConn
,
ctx
,
name
,
execOpts
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/registry/pod/etcd/etcd_test.go
View file @
4b7f7ce5
...
@@ -153,7 +153,7 @@ func TestCreateRegistryError(t *testing.T) {
...
@@ -153,7 +153,7 @@ func TestCreateRegistryError(t *testing.T) {
pod
:=
validNewPod
()
pod
:=
validNewPod
()
_
,
err
:=
storage
.
Create
(
api
.
NewDefaultContext
(),
pod
)
_
,
err
:=
storage
.
Create
(
api
.
NewDefaultContext
(),
pod
)
if
err
!=
fakeEtcdClient
.
Err
{
if
!
errors
.
IsInternalServerError
(
err
)
{
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
}
}
}
...
...
pkg/registry/resourcequota/etcd/etcd_test.go
View file @
4b7f7ce5
...
@@ -116,7 +116,7 @@ func TestCreateRegistryError(t *testing.T) {
...
@@ -116,7 +116,7 @@ func TestCreateRegistryError(t *testing.T) {
resourcequota
:=
validNewResourceQuota
()
resourcequota
:=
validNewResourceQuota
()
_
,
err
:=
storage
.
Create
(
api
.
NewDefaultContext
(),
resourcequota
)
_
,
err
:=
storage
.
Create
(
api
.
NewDefaultContext
(),
resourcequota
)
if
err
!=
fakeEtcdClient
.
Err
{
if
!
errors
.
IsInternalServerError
(
err
)
{
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
}
}
}
...
...
pkg/registry/service/allocator/etcd/etcd.go
View file @
4b7f7ce5
...
@@ -17,7 +17,6 @@ limitations under the License.
...
@@ -17,7 +17,6 @@ limitations under the License.
package
etcd
package
etcd
import
(
import
(
"errors"
"fmt"
"fmt"
"sync"
"sync"
...
@@ -31,7 +30,8 @@ import (
...
@@ -31,7 +30,8 @@ import (
)
)
var
(
var
(
errorUnableToAllocate
=
errors
.
New
(
"unable to allocate"
)
// Placeholder error that should not be surfaced to the user.
errorUnableToAllocate
=
k8serr
.
NewInternalError
(
fmt
.
Errorf
(
"unable to allocate"
))
)
)
// Etcd exposes a service.Allocator that is backed by etcd.
// Etcd exposes a service.Allocator that is backed by etcd.
...
@@ -121,6 +121,9 @@ func (e *Etcd) AllocateNext() (int, bool, error) {
...
@@ -121,6 +121,9 @@ func (e *Etcd) AllocateNext() (int, bool, error) {
}
}
return
nil
return
nil
})
})
if
err
!=
nil
&&
err
.
Error
()
==
errorUnableToAllocate
.
Error
()
{
err
=
nil
}
return
offset
,
ok
,
err
return
offset
,
ok
,
err
}
}
...
@@ -161,7 +164,10 @@ func (e *Etcd) tryUpdate(fn func() error) error {
...
@@ -161,7 +164,10 @@ func (e *Etcd) tryUpdate(fn func() error) error {
return
existing
,
nil
return
existing
,
nil
}),
}),
)
)
return
etcderr
.
InterpretUpdateError
(
err
,
e
.
kind
,
""
)
if
err
!=
nil
{
err
=
etcderr
.
InterpretUpdateError
(
err
,
e
.
kind
,
""
)
}
return
err
}
}
// Refresh reloads the RangeAllocation from etcd.
// Refresh reloads the RangeAllocation from etcd.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment