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
3cbbe72f
Commit
3cbbe72f
authored
Jul 30, 2015
by
Wojciech Tyczynski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move etcd storage to pkg/storage/etcd
parent
99d6b0e9
Hide whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
289 additions
and
202 deletions
+289
-202
kube2sky.go
cluster/addons/dns/kube2sky/kube2sky.go
+2
-2
kubernetes.go
cmd/kubernetes/kubernetes.go
+2
-1
etcd_master.go
contrib/mesos/pkg/election/etcd_master.go
+7
-6
service.go
contrib/mesos/pkg/scheduler/service/service.go
+3
-2
podmaster.go
contrib/pod-master/podmaster.go
+2
-2
apiserver_watch.md
docs/proposals/apiserver_watch.md
+1
-1
etcd.go
pkg/api/errors/etcd/etcd.go
+5
-5
errors.go
pkg/apiserver/errors.go
+2
-2
master.go
pkg/master/master.go
+3
-2
master_test.go
pkg/master/master_test.go
+2
-1
etcd_test.go
pkg/registry/controller/etcd/etcd_test.go
+7
-6
etcd_test.go
pkg/registry/endpoint/etcd/etcd_test.go
+2
-1
etcd.go
pkg/registry/etcd/etcd.go
+1
-2
etcd_test.go
pkg/registry/etcd/etcd_test.go
+3
-2
registry_test.go
pkg/registry/event/registry_test.go
+2
-1
etcd.go
pkg/registry/generic/etcd/etcd.go
+1
-2
etcd_test.go
pkg/registry/generic/etcd/etcd_test.go
+2
-1
registry_test.go
pkg/registry/limitrange/registry_test.go
+2
-1
etcd_test.go
pkg/registry/minion/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/namespace/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/persistentvolume/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/persistentvolumeclaim/etcd/etcd_test.go
+2
-1
etcd.go
pkg/registry/pod/etcd/etcd.go
+1
-2
etcd_test.go
pkg/registry/pod/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/podtemplate/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/resourcequota/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/secret/etcd/etcd_test.go
+2
-1
etcd.go
pkg/registry/service/allocator/etcd/etcd.go
+4
-4
etcd_test.go
pkg/registry/service/allocator/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/service/ipallocator/etcd/etcd_test.go
+2
-1
etcd_test.go
pkg/registry/serviceaccount/etcd/etcd_test.go
+2
-1
api_object_versioner.go
pkg/storage/etcd/api_object_versioner.go
+1
-1
api_object_versioner_test.go
pkg/storage/etcd/api_object_versioner_test.go
+1
-1
doc.go
pkg/storage/etcd/doc.go
+17
-0
etcd_helper.go
pkg/storage/etcd/etcd_helper.go
+4
-13
etcd_helper_test.go
pkg/storage/etcd/etcd_helper_test.go
+35
-34
etcd_util.go
pkg/storage/etcd/etcd_util.go
+11
-10
etcd_watcher.go
pkg/storage/etcd/etcd_watcher.go
+4
-22
etcd_watcher_test.go
pkg/storage/etcd/etcd_watcher_test.go
+23
-58
util.go
pkg/storage/util.go
+51
-0
util_test.go
pkg/storage/util_test.go
+58
-0
fake_etcd_client.go
pkg/tools/fake_etcd_client.go
+2
-1
etcd_tools_test.go
test/integration/etcd_tools_test.go
+6
-5
No files found.
cluster/addons/dns/kube2sky/kube2sky.go
View file @
3cbbe72f
...
...
@@ -37,7 +37,7 @@ import (
kclientcmd
"github.com/GoogleCloudPlatform/kubernetes/pkg/client/clientcmd"
kframework
"github.com/GoogleCloudPlatform/kubernetes/pkg/controller/framework"
kSelector
"github.com/GoogleCloudPlatform/kubernetes/pkg/fields"
tools
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools
"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd
"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait"
etcd
"github.com/coreos/go-etcd/etcd"
...
...
@@ -354,7 +354,7 @@ func newEtcdClient(etcdServer string) (*etcd.Client, error) {
err
error
)
for
attempt
:=
1
;
attempt
<=
maxConnectAttempts
;
attempt
++
{
if
_
,
err
=
tools
.
GetEtcdVersion
(
etcdServer
);
err
==
nil
{
if
_
,
err
=
etcdstorage
.
GetEtcdVersion
(
etcdServer
);
err
==
nil
{
break
}
if
attempt
==
maxConnectAttempts
{
...
...
cmd/kubernetes/kubernetes.go
View file @
3cbbe72f
...
...
@@ -41,6 +41,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/master"
"github.com/GoogleCloudPlatform/kubernetes/pkg/service"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler"
...
...
@@ -167,7 +168,7 @@ func main() {
defer
util
.
FlushLogs
()
glog
.
Infof
(
"Creating etcd client pointing to %v"
,
*
etcdServer
)
etcdClient
,
err
:=
tools
.
NewEtcdClientStartServerIfNecessary
(
*
etcdServer
)
etcdClient
,
err
:=
etcdstorage
.
NewEtcdClientStartServerIfNecessary
(
*
etcdServer
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Failed to connect to etcd: %v"
,
err
)
}
...
...
contrib/mesos/pkg/election/etcd_master.go
View file @
3cbbe72f
...
...
@@ -20,6 +20,7 @@ import (
"fmt"
"time"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
...
...
@@ -90,10 +91,10 @@ func (e *etcdMasterElector) extendMaster(path, id string, ttl uint64, res *etcd.
// We don't handle the TTL delete w/o a write case here, it's handled in the next loop
// iteration.
_
,
err
:=
e
.
etcd
.
CompareAndSwap
(
path
,
id
,
ttl
,
""
,
res
.
Node
.
ModifiedIndex
)
if
err
!=
nil
&&
!
tools
.
IsEtcdTestFailed
(
err
)
{
if
err
!=
nil
&&
!
etcdstorage
.
IsEtcdTestFailed
(
err
)
{
return
""
,
err
}
if
err
!=
nil
&&
tools
.
IsEtcdTestFailed
(
err
)
{
if
err
!=
nil
&&
etcdstorage
.
IsEtcdTestFailed
(
err
)
{
return
""
,
nil
}
return
id
,
nil
...
...
@@ -105,11 +106,11 @@ func (e *etcdMasterElector) extendMaster(path, id string, ttl uint64, res *etcd.
// returns "", err if an error occurred
func
(
e
*
etcdMasterElector
)
becomeMaster
(
path
,
id
string
,
ttl
uint64
)
(
string
,
error
)
{
_
,
err
:=
e
.
etcd
.
Create
(
path
,
id
,
ttl
)
if
err
!=
nil
&&
!
tools
.
IsEtcdNodeExist
(
err
)
{
if
err
!=
nil
&&
!
etcdstorage
.
IsEtcdNodeExist
(
err
)
{
// unexpected error
return
""
,
err
}
if
err
!=
nil
&&
tools
.
IsEtcdNodeExist
(
err
)
{
if
err
!=
nil
&&
etcdstorage
.
IsEtcdNodeExist
(
err
)
{
return
""
,
nil
}
return
id
,
nil
...
...
@@ -124,12 +125,12 @@ func (e *etcdMasterElector) handleMaster(path, id string, ttl uint64) (string, e
res
,
err
:=
e
.
etcd
.
Get
(
path
,
false
,
false
)
// Unexpected error, bail out
if
err
!=
nil
&&
!
tools
.
IsEtcdNotFound
(
err
)
{
if
err
!=
nil
&&
!
etcdstorage
.
IsEtcdNotFound
(
err
)
{
return
""
,
err
}
// There is no master, try to become the master.
if
err
!=
nil
&&
tools
.
IsEtcdNotFound
(
err
)
{
if
err
!=
nil
&&
etcdstorage
.
IsEtcdNotFound
(
err
)
{
return
e
.
becomeMaster
(
path
,
id
,
ttl
)
}
...
...
contrib/mesos/pkg/scheduler/service/service.go
View file @
3cbbe72f
...
...
@@ -47,6 +47,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/clientauth"
"github.com/GoogleCloudPlatform/kubernetes/pkg/master/ports"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/coreos/go-etcd/etcd"
...
...
@@ -740,7 +741,7 @@ func (s *SchedulerServer) buildFrameworkInfo() (info *mesos.FrameworkInfo, cred
func
(
s
*
SchedulerServer
)
fetchFrameworkID
(
client
tools
.
EtcdClient
)
(
*
mesos
.
FrameworkID
,
error
)
{
if
s
.
FailoverTimeout
>
0
{
if
response
,
err
:=
client
.
Get
(
meta
.
FrameworkIDKey
,
false
,
false
);
err
!=
nil
{
if
!
tools
.
IsEtcdNotFound
(
err
)
{
if
!
etcdstorage
.
IsEtcdNotFound
(
err
)
{
return
nil
,
fmt
.
Errorf
(
"unexpected failure attempting to load framework ID from etcd: %v"
,
err
)
}
log
.
V
(
1
)
.
Infof
(
"did not find framework ID in etcd"
)
...
...
@@ -751,7 +752,7 @@ func (s *SchedulerServer) fetchFrameworkID(client tools.EtcdClient) (*mesos.Fram
}
else
{
//TODO(jdef) this seems like a totally hackish way to clean up the framework ID
if
_
,
err
:=
client
.
Delete
(
meta
.
FrameworkIDKey
,
true
);
err
!=
nil
{
if
!
tools
.
IsEtcdNotFound
(
err
)
{
if
!
etcdstorage
.
IsEtcdNotFound
(
err
)
{
return
nil
,
fmt
.
Errorf
(
"failed to delete framework ID from etcd: %v"
,
err
)
}
log
.
V
(
1
)
.
Infof
(
"nothing to delete: did not find framework ID in etcd"
)
...
...
contrib/pod-master/podmaster.go
View file @
3cbbe72f
...
...
@@ -27,7 +27,7 @@ import (
"strings"
"time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools
"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd
"
"github.com/coreos/go-etcd/etcd"
"github.com/golang/glog"
...
...
@@ -72,7 +72,7 @@ func (c *Config) leaseAndUpdateLoop(etcdClient *etcd.Client) {
func
(
c
*
Config
)
acquireOrRenewLease
(
etcdClient
*
etcd
.
Client
)
(
bool
,
error
)
{
result
,
err
:=
etcdClient
.
Get
(
c
.
key
,
false
,
false
)
if
err
!=
nil
{
if
tools
.
IsEtcdNotFound
(
err
)
{
if
etcdstorage
.
IsEtcdNotFound
(
err
)
{
// there is no current master, try to become master, create will fail if the key already exists
_
,
err
:=
etcdClient
.
Create
(
c
.
key
,
c
.
whoami
,
c
.
ttl
)
if
err
!=
nil
{
...
...
docs/proposals/apiserver_watch.md
View file @
3cbbe72f
...
...
@@ -163,7 +163,7 @@ resource type. However, this watch can potentially expire at any time and
reconnecting can return "too old resource version". In that case relisting is
necessary. In such case, to avoid LIST requests coming from all watchers at
the same time, we can introduce an additional etcd event type:
[
EtcdResync
](
../../pkg/
tools
/etcd_watcher.go#L36
)
[
EtcdResync
](
../../pkg/
storage/etcd
/etcd_watcher.go#L36
)
Whenever reslisting will be done to refresh the internal watch to etcd,
EtcdResync event will be send to all the watchers. It will contain the
...
...
pkg/api/errors/etcd/etcd.go
View file @
3cbbe72f
...
...
@@ -18,14 +18,14 @@ package etcd
import
(
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools
"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd
"
)
// InterpretGetError converts a generic etcd error on a retrieval
// operation into the appropriate API error.
func
InterpretGetError
(
err
error
,
kind
,
name
string
)
error
{
switch
{
case
tools
.
IsEtcdNotFound
(
err
)
:
case
etcdstorage
.
IsEtcdNotFound
(
err
)
:
return
errors
.
NewNotFound
(
kind
,
name
)
default
:
return
err
...
...
@@ -36,7 +36,7 @@ func InterpretGetError(err error, kind, name string) error {
// operation into the appropriate API error.
func
InterpretCreateError
(
err
error
,
kind
,
name
string
)
error
{
switch
{
case
tools
.
IsEtcdNodeExist
(
err
)
:
case
etcdstorage
.
IsEtcdNodeExist
(
err
)
:
return
errors
.
NewAlreadyExists
(
kind
,
name
)
default
:
return
err
...
...
@@ -47,7 +47,7 @@ func InterpretCreateError(err error, kind, name string) error {
// operation into the appropriate API error.
func
InterpretUpdateError
(
err
error
,
kind
,
name
string
)
error
{
switch
{
case
tools
.
IsEtcdTestFailed
(
err
),
tools
.
IsEtcdNodeExist
(
err
)
:
case
etcdstorage
.
IsEtcdTestFailed
(
err
),
etcdstorage
.
IsEtcdNodeExist
(
err
)
:
return
errors
.
NewConflict
(
kind
,
name
,
err
)
default
:
return
err
...
...
@@ -58,7 +58,7 @@ func InterpretUpdateError(err error, kind, name string) error {
// operation into the appropriate API error.
func
InterpretDeleteError
(
err
error
,
kind
,
name
string
)
error
{
switch
{
case
tools
.
IsEtcdNotFound
(
err
)
:
case
etcdstorage
.
IsEtcdNotFound
(
err
)
:
return
errors
.
NewNotFound
(
kind
,
name
)
default
:
return
err
...
...
pkg/apiserver/errors.go
View file @
3cbbe72f
...
...
@@ -21,7 +21,7 @@ import (
"net/http"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools
"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd
"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
)
...
...
@@ -52,7 +52,7 @@ func errToAPIStatus(err error) *api.Status {
status
:=
http
.
StatusInternalServerError
switch
{
//TODO: replace me with NewConflictErr
case
tools
.
IsEtcdTestFailed
(
err
)
:
case
etcdstorage
.
IsEtcdTestFailed
(
err
)
:
status
=
http
.
StatusConflict
}
// Log errors that were not converted to an error status
...
...
pkg/master/master.go
View file @
3cbbe72f
...
...
@@ -70,6 +70,7 @@ import (
ipallocator
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service/ipallocator"
serviceaccountetcd
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/serviceaccount/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/ui"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -234,7 +235,7 @@ func NewEtcdStorage(client tools.EtcdClient, version string, prefix string) (etc
if
err
!=
nil
{
return
etcdStorage
,
err
}
return
tools
.
NewEtcdStorage
(
client
,
versionInterfaces
.
Codec
,
prefix
),
nil
return
etcdstorage
.
NewEtcdStorage
(
client
,
versionInterfaces
.
Codec
,
prefix
),
nil
}
// setDefaults fills in any fields not set that are required to have valid data.
...
...
@@ -722,7 +723,7 @@ func (m *Master) getServersToValidate(c *Config) map[string]apiserver.Server {
addr
=
etcdUrl
.
Host
port
=
4001
}
serversToValidate
[
fmt
.
Sprintf
(
"etcd-%d"
,
ix
)]
=
apiserver
.
Server
{
Addr
:
addr
,
Port
:
port
,
Path
:
"/health"
,
Validate
:
tools
.
EtcdHealthCheck
}
serversToValidate
[
fmt
.
Sprintf
(
"etcd-%d"
,
ix
)]
=
apiserver
.
Server
{
Addr
:
addr
,
Port
:
port
,
Path
:
"/health"
,
Validate
:
etcdstorage
.
EtcdHealthCheck
}
}
return
serversToValidate
}
...
...
pkg/master/master_test.go
View file @
3cbbe72f
...
...
@@ -22,6 +22,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/registrytest"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
)
...
...
@@ -31,7 +32,7 @@ func TestGetServersToValidate(t *testing.T) {
config
:=
Config
{}
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
Machines
=
[]
string
{
"http://machine1:4001"
,
"http://machine2"
,
"http://machine3:4003"
}
config
.
DatabaseStorage
=
tools
.
NewEtcdStorage
(
fakeClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
config
.
DatabaseStorage
=
etcdstorage
.
NewEtcdStorage
(
fakeClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
master
.
nodeRegistry
=
registrytest
.
NewMinionRegistry
([]
string
{
"node1"
,
"node2"
},
api
.
NodeResources
{})
...
...
pkg/registry/controller/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -31,6 +31,7 @@ import (
etcdgeneric
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/coreos/go-etcd/etcd"
...
...
@@ -44,7 +45,7 @@ const (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
@@ -625,10 +626,10 @@ func TestEtcdWatchControllersFields(t *testing.T) {
},
}
testEtcdActions
:=
[]
string
{
tools
.
EtcdCreate
,
tools
.
EtcdSet
,
tools
.
EtcdCAS
,
tools
.
EtcdDelete
}
etcdstorage
.
EtcdCreate
,
etcdstorage
.
EtcdSet
,
etcdstorage
.
EtcdCAS
,
etcdstorage
.
EtcdDelete
}
controller
:=
&
api
.
ReplicationController
{
ObjectMeta
:
api
.
ObjectMeta
{
...
...
@@ -654,7 +655,7 @@ func TestEtcdWatchControllersFields(t *testing.T) {
node
:=
&
etcd
.
Node
{
Value
:
string
(
controllerBytes
),
}
if
action
==
tools
.
EtcdDelete
{
if
action
==
etcdstorage
.
EtcdDelete
{
prevNode
=
node
}
fakeClient
.
WaitForWatchCompletion
()
...
...
pkg/registry/endpoint/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -26,6 +26,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -36,7 +37,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/etcd/etcd.go
View file @
3cbbe72f
...
...
@@ -27,7 +27,6 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/endpoint"
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
)
...
...
@@ -159,7 +158,7 @@ func (r *Registry) UpdateService(ctx api.Context, svc *api.Service) (*api.Servic
// 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
)
{
version
,
err
:=
tools
.
ParseWatchResourceVersion
(
resourceVersion
,
"service"
)
version
,
err
:=
storage
.
ParseWatchResourceVersion
(
resourceVersion
,
"service"
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
pkg/registry/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -31,6 +31,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod"
podetcd
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
...
...
@@ -38,13 +39,13 @@ import (
)
func
NewTestEtcdRegistry
(
client
tools
.
EtcdClient
)
*
Registry
{
storage
:=
tools
.
NewEtcdStorage
(
client
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
storage
:=
etcdstorage
.
NewEtcdStorage
(
client
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
registry
:=
NewRegistry
(
storage
,
nil
,
nil
)
return
registry
}
func
NewTestEtcdRegistryWithPods
(
client
tools
.
EtcdClient
)
*
Registry
{
etcdStorage
:=
tools
.
NewEtcdStorage
(
client
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
client
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
podStorage
:=
podetcd
.
NewStorage
(
etcdStorage
,
nil
)
endpointStorage
:=
endpointetcd
.
NewStorage
(
etcdStorage
)
registry
:=
NewRegistry
(
etcdStorage
,
pod
.
NewRegistry
(
podStorage
.
Pod
),
endpoint
.
NewRegistry
(
endpointStorage
))
...
...
pkg/registry/event/registry_test.go
View file @
3cbbe72f
...
...
@@ -26,6 +26,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic"
etcdgeneric
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -39,7 +40,7 @@ func NewTestEventEtcdRegistry(t *testing.T) (*tools.FakeEtcdClient, generic.Regi
f
:=
tools
.
NewFakeEtcdClient
(
t
)
f
.
TestIndex
=
true
s
:=
tools
.
NewEtcdStorage
(
f
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
s
:=
etcdstorage
.
NewEtcdStorage
(
f
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
f
,
NewEtcdRegistry
(
s
,
testTTL
)
}
...
...
pkg/registry/generic/etcd/etcd.go
View file @
3cbbe72f
...
...
@@ -30,7 +30,6 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
...
...
@@ -456,7 +455,7 @@ func (e *Etcd) Watch(ctx api.Context, label labels.Selector, field fields.Select
// WatchPredicate starts a watch for the items that m matches.
func
(
e
*
Etcd
)
WatchPredicate
(
ctx
api
.
Context
,
m
generic
.
Matcher
,
resourceVersion
string
)
(
watch
.
Interface
,
error
)
{
version
,
err
:=
tools
.
ParseWatchResourceVersion
(
resourceVersion
,
e
.
EndpointName
)
version
,
err
:=
storage
.
ParseWatchResourceVersion
(
resourceVersion
,
e
.
EndpointName
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
pkg/registry/generic/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -26,6 +26,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -69,7 +70,7 @@ func hasCreated(t *testing.T, pod *api.Pod) func(runtime.Object) bool {
func
NewTestGenericEtcdRegistry
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
*
Etcd
)
{
f
:=
tools
.
NewFakeEtcdClient
(
t
)
f
.
TestIndex
=
true
s
:=
tools
.
NewEtcdStorage
(
f
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
s
:=
etcdstorage
.
NewEtcdStorage
(
f
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
strategy
:=
&
testRESTStrategy
{
api
.
Scheme
,
api
.
SimpleNameGenerator
,
true
,
false
,
true
}
podPrefix
:=
"/pods"
return
f
,
&
Etcd
{
...
...
pkg/registry/limitrange/registry_test.go
View file @
3cbbe72f
...
...
@@ -27,6 +27,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic"
etcdgeneric
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/generic/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -37,7 +38,7 @@ import (
func
NewTestLimitRangeEtcdRegistry
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
generic
.
Registry
)
{
f
:=
tools
.
NewFakeEtcdClient
(
t
)
f
.
TestIndex
=
true
s
:=
tools
.
NewEtcdStorage
(
f
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
s
:=
etcdstorage
.
NewEtcdStorage
(
f
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
f
,
NewEtcdRegistry
(
s
)
}
...
...
pkg/registry/minion/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -30,6 +30,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
...
...
@@ -51,7 +52,7 @@ func (fakeConnectionInfoGetter) GetConnectionInfo(host string) (string, uint, ht
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/namespace/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -27,6 +27,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/namespace"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -37,7 +38,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/persistentvolume/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -28,6 +28,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/registrytest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -42,7 +43,7 @@ type testRegistry struct {
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
storage
,
statusStorage
:=
NewStorage
(
etcdStorage
)
return
storage
,
statusStorage
,
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/persistentvolumeclaim/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -28,6 +28,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/registrytest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -42,7 +43,7 @@ type testRegistry struct {
func
newStorage
(
t
*
testing
.
T
)
(
*
REST
,
*
StatusREST
,
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
storage
,
statusStorage
:=
NewStorage
(
etcdStorage
)
return
storage
,
statusStorage
,
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/pod/etcd/etcd.go
View file @
3cbbe72f
...
...
@@ -36,7 +36,6 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/fielderrors"
)
...
...
@@ -144,7 +143,7 @@ func (r *BindingREST) setPodHostAndAnnotations(ctx api.Context, podID, oldMachin
if
err
!=
nil
{
return
nil
,
err
}
err
=
r
.
store
.
Storage
.
GuaranteedUpdate
(
podKey
,
&
api
.
Pod
{},
false
,
tools
.
SimpleUpdate
(
func
(
obj
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
=
r
.
store
.
Storage
.
GuaranteedUpdate
(
podKey
,
&
api
.
Pod
{},
false
,
storage
.
SimpleUpdate
(
func
(
obj
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
pod
,
ok
:=
obj
.
(
*
api
.
Pod
)
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"unexpected object: %#v"
,
obj
)
...
...
pkg/registry/pod/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -34,6 +34,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/securitycontext"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -44,7 +45,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/podtemplate/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -23,6 +23,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest/resttest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
)
...
...
@@ -30,7 +31,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/resourcequota/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -32,6 +32,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/resourcequota"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
...
...
@@ -42,7 +43,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
latest
.
Codec
,
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/secret/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -23,6 +23,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest/resttest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
)
...
...
@@ -30,7 +31,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/service/allocator/etcd/etcd.go
View file @
3cbbe72f
...
...
@@ -28,7 +28,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service/allocator"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools
"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd
"
)
var
(
...
...
@@ -142,7 +142,7 @@ func (e *Etcd) Release(item int) error {
// tryUpdate performs a read-update to persist the latest snapshot state of allocation.
func
(
e
*
Etcd
)
tryUpdate
(
fn
func
()
error
)
error
{
err
:=
e
.
storage
.
GuaranteedUpdate
(
e
.
baseKey
,
&
api
.
RangeAllocation
{},
true
,
tools
.
SimpleUpdate
(
func
(
input
runtime
.
Object
)
(
output
runtime
.
Object
,
err
error
)
{
storage
.
SimpleUpdate
(
func
(
input
runtime
.
Object
)
(
output
runtime
.
Object
,
err
error
)
{
existing
:=
input
.
(
*
api
.
RangeAllocation
)
if
len
(
existing
.
ResourceVersion
)
==
0
{
return
nil
,
fmt
.
Errorf
(
"cannot allocate resources of type %s at this time"
,
e
.
kind
)
...
...
@@ -172,7 +172,7 @@ func (e *Etcd) Refresh() (*api.RangeAllocation, error) {
existing
:=
&
api
.
RangeAllocation
{}
if
err
:=
e
.
storage
.
Get
(
e
.
baseKey
,
existing
,
false
);
err
!=
nil
{
if
tools
.
IsEtcdNotFound
(
err
)
{
if
etcdstorage
.
IsEtcdNotFound
(
err
)
{
return
nil
,
nil
}
return
nil
,
etcderr
.
InterpretGetError
(
err
,
e
.
kind
,
""
)
...
...
@@ -199,7 +199,7 @@ func (e *Etcd) CreateOrUpdate(snapshot *api.RangeAllocation) error {
last
:=
""
err
:=
e
.
storage
.
GuaranteedUpdate
(
e
.
baseKey
,
&
api
.
RangeAllocation
{},
true
,
tools
.
SimpleUpdate
(
func
(
input
runtime
.
Object
)
(
output
runtime
.
Object
,
err
error
)
{
storage
.
SimpleUpdate
(
func
(
input
runtime
.
Object
)
(
output
runtime
.
Object
,
err
error
)
{
existing
:=
input
.
(
*
api
.
RangeAllocation
)
switch
{
case
len
(
snapshot
.
ResourceVersion
)
!=
0
&&
len
(
existing
.
ResourceVersion
)
!=
0
:
...
...
pkg/registry/service/allocator/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -27,6 +27,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service/allocator"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
)
...
...
@@ -34,7 +35,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/service/ipallocator/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -30,6 +30,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service/ipallocator"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
)
...
...
@@ -37,7 +38,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/registry/serviceaccount/etcd/etcd_test.go
View file @
3cbbe72f
...
...
@@ -23,6 +23,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest/resttest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
etcdstorage
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
)
...
...
@@ -30,7 +31,7 @@ import (
func
newEtcdStorage
(
t
*
testing
.
T
)
(
*
tools
.
FakeEtcdClient
,
storage
.
Interface
)
{
fakeEtcdClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeEtcdClient
.
TestIndex
=
true
etcdStorage
:=
tools
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcdstorage
.
NewEtcdStorage
(
fakeEtcdClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
return
fakeEtcdClient
,
etcdStorage
}
...
...
pkg/
tools/etcd_object
.go
→
pkg/
storage/etcd/api_object_versioner
.go
View file @
3cbbe72f
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"strconv"
...
...
pkg/
tools/etcd_object
_test.go
→
pkg/
storage/etcd/api_object_versioner
_test.go
View file @
3cbbe72f
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"testing"
...
...
pkg/storage/etcd/doc.go
0 → 100644
View file @
3cbbe72f
/*
Copyright 2015 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
etcd
pkg/
tools
/etcd_helper.go
→
pkg/
storage/etcd
/etcd_helper.go
View file @
3cbbe72f
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"errors"
...
...
@@ -28,6 +28,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/metrics"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
...
...
@@ -36,7 +37,7 @@ import (
"github.com/golang/glog"
)
func
NewEtcdStorage
(
client
EtcdClient
,
codec
runtime
.
Codec
,
prefix
string
)
storage
.
Interface
{
func
NewEtcdStorage
(
client
tools
.
EtcdClient
,
codec
runtime
.
Codec
,
prefix
string
)
storage
.
Interface
{
return
&
etcdHelper
{
client
:
client
,
codec
:
codec
,
...
...
@@ -49,7 +50,7 @@ func NewEtcdStorage(client EtcdClient, codec runtime.Codec, prefix string) stora
// etcdHelper is the reference implementation of storage.Interface.
type
etcdHelper
struct
{
client
EtcdClient
client
tools
.
EtcdClient
codec
runtime
.
Codec
copier
runtime
.
ObjectCopier
// optional, has to be set to perform any atomic operations
...
...
@@ -365,16 +366,6 @@ func (h *etcdHelper) listEtcdNode(key string) ([]*etcd.Node, uint64, error) {
return
result
.
Node
.
Nodes
,
result
.
EtcdIndex
,
nil
}
type
SimpleUpdateFunc
func
(
runtime
.
Object
)
(
runtime
.
Object
,
error
)
// SimpleUpdateFunc converts SimpleUpdateFunc into UpdateFunc
func
SimpleUpdate
(
fn
SimpleUpdateFunc
)
storage
.
UpdateFunc
{
return
func
(
input
runtime
.
Object
,
_
storage
.
ResponseMeta
)
(
runtime
.
Object
,
*
uint64
,
error
)
{
out
,
err
:=
fn
(
input
)
return
out
,
nil
,
err
}
}
// Implements storage.Interface.
func
(
h
*
etcdHelper
)
GuaranteedUpdate
(
key
string
,
ptrToType
runtime
.
Object
,
ignoreNotFound
bool
,
tryUpdate
storage
.
UpdateFunc
)
error
{
v
,
err
:=
conversion
.
EnforcePtr
(
ptrToType
)
...
...
pkg/
tools
/etcd_helper_test.go
→
pkg/
storage/etcd
/etcd_helper_test.go
View file @
3cbbe72f
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"errors"
...
...
@@ -35,6 +35,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/coreos/go-etcd/etcd"
"github.com/stretchr/testify/assert"
...
...
@@ -66,7 +67,7 @@ func init() {
)
}
func
newEtcdHelper
(
client
EtcdClient
,
codec
runtime
.
Codec
,
prefix
string
)
etcdHelper
{
func
newEtcdHelper
(
client
tools
.
EtcdClient
,
codec
runtime
.
Codec
,
prefix
string
)
etcdHelper
{
return
*
NewEtcdStorage
(
client
,
codec
,
prefix
)
.
(
*
etcdHelper
)
}
...
...
@@ -76,7 +77,7 @@ func TestIsEtcdNotFound(t *testing.T) {
t
.
Errorf
(
"Expected %#v to return %v, but it did not"
,
err
,
isNotFound
)
}
}
try
(
EtcdErrorNotFound
,
true
)
try
(
tools
.
EtcdErrorNotFound
,
true
)
try
(
&
etcd
.
EtcdError
{
ErrorCode
:
101
},
false
)
try
(
nil
,
false
)
try
(
fmt
.
Errorf
(
"some other kind of error"
),
false
)
...
...
@@ -91,10 +92,10 @@ func getEncodedPod(name string) string {
}
func
TestList
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
fakeClient
.
Data
[
key
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
EtcdIndex
:
10
,
Node
:
&
etcd
.
Node
{
...
...
@@ -161,10 +162,10 @@ func TestList(t *testing.T) {
// TestListAcrossDirectories ensures that the client excludes directories and flattens tree-response - simulates cross-namespace query
func
TestListAcrossDirectories
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
fakeClient
.
Data
[
key
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
EtcdIndex
:
10
,
Node
:
&
etcd
.
Node
{
...
...
@@ -244,10 +245,10 @@ func TestListAcrossDirectories(t *testing.T) {
}
func
TestListExcludesDirectories
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
fakeClient
.
Data
[
key
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
EtcdIndex
:
10
,
Node
:
&
etcd
.
Node
{
...
...
@@ -315,7 +316,7 @@ func TestListExcludesDirectories(t *testing.T) {
}
func
TestGet
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
expect
:=
api
.
Pod
{
...
...
@@ -337,10 +338,10 @@ func TestGet(t *testing.T) {
}
func
TestGetNotFoundErr
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
key1
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
fakeClient
.
Data
[
key1
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key1
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
nil
,
},
...
...
@@ -349,13 +350,13 @@ func TestGetNotFoundErr(t *testing.T) {
},
}
key2
:=
etcdtest
.
AddPrefix
(
"/some/key2"
)
fakeClient
.
Data
[
key2
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key2
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
nil
,
},
}
key3
:=
etcdtest
.
AddPrefix
(
"/some/key3"
)
fakeClient
.
Data
[
key3
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key3
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
&
etcd
.
Node
{
Value
:
""
,
...
...
@@ -381,7 +382,7 @@ func TestGetNotFoundErr(t *testing.T) {
func
TestCreate
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
returnedObj
:=
&
api
.
Pod
{}
err
:=
helper
.
Create
(
"/some/key"
,
obj
,
returnedObj
,
5
)
...
...
@@ -407,7 +408,7 @@ func TestCreate(t *testing.T) {
func
TestCreateNilOutParam
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
err
:=
helper
.
Create
(
"/some/key"
,
obj
,
nil
,
5
)
if
err
!=
nil
{
...
...
@@ -417,7 +418,7 @@ func TestCreateNilOutParam(t *testing.T) {
func
TestSet
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
returnedObj
:=
&
api
.
Pod
{}
err
:=
helper
.
Set
(
"/some/key"
,
obj
,
returnedObj
,
5
)
...
...
@@ -444,7 +445,7 @@ func TestSet(t *testing.T) {
func
TestSetFailCAS
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
,
ResourceVersion
:
"1"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
CasErr
=
fakeClient
.
NewError
(
123
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
err
:=
helper
.
Set
(
"/some/key"
,
obj
,
nil
,
5
)
...
...
@@ -455,11 +456,11 @@ func TestSetFailCAS(t *testing.T) {
func
TestSetWithVersion
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
,
ResourceVersion
:
"1"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
TestIndex
=
true
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
fakeClient
.
Data
[
key
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
key
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
&
etcd
.
Node
{
Value
:
runtime
.
EncodeOrDie
(
testapi
.
Codec
(),
obj
),
...
...
@@ -492,7 +493,7 @@ func TestSetWithVersion(t *testing.T) {
func
TestSetWithoutResourceVersioner
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
helper
.
versioner
=
nil
returnedObj
:=
&
api
.
Pod
{}
...
...
@@ -520,7 +521,7 @@ func TestSetWithoutResourceVersioner(t *testing.T) {
func
TestSetNilOutParam
(
t
*
testing
.
T
)
{
obj
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
helper
.
versioner
=
nil
err
:=
helper
.
Set
(
"/some/key"
,
obj
,
nil
,
3
)
...
...
@@ -530,7 +531,7 @@ func TestSetNilOutParam(t *testing.T) {
}
func
TestGuaranteedUpdate
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
TestIndex
=
true
helper
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
...
...
@@ -538,7 +539,7 @@ func TestGuaranteedUpdate(t *testing.T) {
// Create a new node.
fakeClient
.
ExpectNotFoundGet
(
key
)
obj
:=
&
TestResource
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Value
:
1
}
err
:=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
:=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
storage
.
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
return
obj
,
nil
}))
if
err
!=
nil
{
...
...
@@ -557,7 +558,7 @@ func TestGuaranteedUpdate(t *testing.T) {
// Update an existing node.
callbackCalled
:=
false
objUpdate
:=
&
TestResource
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Value
:
2
}
err
=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
storage
.
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
callbackCalled
=
true
if
in
.
(
*
TestResource
)
.
Value
!=
1
{
...
...
@@ -585,7 +586,7 @@ func TestGuaranteedUpdate(t *testing.T) {
}
func
TestGuaranteedUpdateTTL
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
TestIndex
=
true
helper
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
...
...
@@ -686,7 +687,7 @@ func TestGuaranteedUpdateTTL(t *testing.T) {
}
func
TestGuaranteedUpdateNoChange
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
TestIndex
=
true
helper
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
...
...
@@ -694,7 +695,7 @@ func TestGuaranteedUpdateNoChange(t *testing.T) {
// Create a new node.
fakeClient
.
ExpectNotFoundGet
(
key
)
obj
:=
&
TestResource
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Value
:
1
}
err
:=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
:=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
storage
.
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
return
obj
,
nil
}))
if
err
!=
nil
{
...
...
@@ -704,7 +705,7 @@ func TestGuaranteedUpdateNoChange(t *testing.T) {
// Update an existing node with the same data
callbackCalled
:=
false
objUpdate
:=
&
TestResource
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Value
:
1
}
err
=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
storage
.
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
fakeClient
.
Err
=
errors
.
New
(
"should not be called"
)
callbackCalled
=
true
return
objUpdate
,
nil
...
...
@@ -718,7 +719,7 @@ func TestGuaranteedUpdateNoChange(t *testing.T) {
}
func
TestGuaranteedUpdateKeyNotFound
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
TestIndex
=
true
helper
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
...
...
@@ -727,7 +728,7 @@ func TestGuaranteedUpdateKeyNotFound(t *testing.T) {
fakeClient
.
ExpectNotFoundGet
(
key
)
obj
:=
&
TestResource
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
},
Value
:
1
}
f
:=
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
f
:=
storage
.
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
return
obj
,
nil
})
...
...
@@ -745,7 +746,7 @@ func TestGuaranteedUpdateKeyNotFound(t *testing.T) {
}
func
TestGuaranteedUpdate_CreateCollision
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
TestIndex
=
true
helper
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
key
:=
etcdtest
.
AddPrefix
(
"/some/key"
)
...
...
@@ -764,7 +765,7 @@ func TestGuaranteedUpdate_CreateCollision(t *testing.T) {
defer
wgDone
.
Done
()
firstCall
:=
true
err
:=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
err
:=
helper
.
GuaranteedUpdate
(
"/some/key"
,
&
TestResource
{},
true
,
storage
.
SimpleUpdate
(
func
(
in
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
defer
func
()
{
firstCall
=
false
}()
if
firstCall
{
...
...
@@ -843,7 +844,7 @@ func TestGetEtcdVersion_NotListening(t *testing.T) {
}
func
TestPrefixEtcdKey
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
prefix
:=
path
.
Join
(
"/"
,
etcdtest
.
PathPrefix
())
helper
:=
newEtcdHelper
(
fakeClient
,
testapi
.
Codec
(),
prefix
)
...
...
pkg/
tools
/etcd_util.go
→
pkg/
storage/etcd
/etcd_util.go
View file @
3cbbe72f
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"encoding/json"
...
...
@@ -23,41 +23,42 @@ import (
"net/http"
"os/exec"
"github.com/
coreos/go-etcd/etcd
"
"github.com/
GoogleCloudPlatform/kubernetes/pkg/tools
"
goetcd
"github.com/coreos/go-etcd/etcd"
"github.com/golang/glog"
)
// IsEtcdNotFound returns true iff err is an etcd not found error.
func
IsEtcdNotFound
(
err
error
)
bool
{
return
isEtcdErrorNum
(
err
,
EtcdErrorCodeNotFound
)
return
isEtcdErrorNum
(
err
,
tools
.
EtcdErrorCodeNotFound
)
}
// IsEtcdNodeExist returns true iff err is an etcd node aleady exist error.
func
IsEtcdNodeExist
(
err
error
)
bool
{
return
isEtcdErrorNum
(
err
,
EtcdErrorCodeNodeExist
)
return
isEtcdErrorNum
(
err
,
tools
.
EtcdErrorCodeNodeExist
)
}
// IsEtcdTestFailed returns true iff err is an etcd write conflict.
func
IsEtcdTestFailed
(
err
error
)
bool
{
return
isEtcdErrorNum
(
err
,
EtcdErrorCodeTestFailed
)
return
isEtcdErrorNum
(
err
,
tools
.
EtcdErrorCodeTestFailed
)
}
// IsEtcdWatchStoppedByUser returns true iff err is a client triggered stop.
func
IsEtcdWatchStoppedByUser
(
err
error
)
bool
{
return
etcd
.
ErrWatchStoppedByUser
==
err
return
go
etcd
.
ErrWatchStoppedByUser
==
err
}
// isEtcdErrorNum returns true iff err is an etcd error, whose errorCode matches errorCode
func
isEtcdErrorNum
(
err
error
,
errorCode
int
)
bool
{
etcdError
,
ok
:=
err
.
(
*
etcd
.
EtcdError
)
etcdError
,
ok
:=
err
.
(
*
go
etcd
.
EtcdError
)
return
ok
&&
etcdError
!=
nil
&&
etcdError
.
ErrorCode
==
errorCode
}
// etcdErrorIndex returns the index associated with the error message and whether the
// index was available.
func
etcdErrorIndex
(
err
error
)
(
uint64
,
bool
)
{
if
etcdError
,
ok
:=
err
.
(
*
etcd
.
EtcdError
);
ok
{
if
etcdError
,
ok
:=
err
.
(
*
go
etcd
.
EtcdError
);
ok
{
return
etcdError
.
Index
,
true
}
return
0
,
false
...
...
@@ -90,7 +91,7 @@ func startEtcd() (*exec.Cmd, error) {
return
cmd
,
nil
}
func
NewEtcdClientStartServerIfNecessary
(
server
string
)
(
EtcdClient
,
error
)
{
func
NewEtcdClientStartServerIfNecessary
(
server
string
)
(
tools
.
EtcdClient
,
error
)
{
_
,
err
:=
GetEtcdVersion
(
server
)
if
err
!=
nil
{
glog
.
Infof
(
"Failed to find etcd, attempting to start."
)
...
...
@@ -101,7 +102,7 @@ func NewEtcdClientStartServerIfNecessary(server string) (EtcdClient, error) {
}
servers
:=
[]
string
{
server
}
return
etcd
.
NewClient
(
servers
),
nil
return
go
etcd
.
NewClient
(
servers
),
nil
}
type
etcdHealth
struct
{
...
...
pkg/
tools
/etcd_watcher.go
→
pkg/
storage/etcd
/etcd_watcher.go
View file @
3cbbe72f
...
...
@@ -14,19 +14,17 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"strconv"
"sync"
"time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/fielderrors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
"github.com/coreos/go-etcd/etcd"
...
...
@@ -42,22 +40,6 @@ const (
EtcdDelete
=
"delete"
)
// ParseWatchResourceVersion takes a resource version argument and converts it to
// the etcd version we should pass to helper.Watch(). Because resourceVersion is
// an opaque value, the default watch behavior for non-zero watch is to watch
// the next value (if you pass "1", you will see updates from "2" onwards).
func
ParseWatchResourceVersion
(
resourceVersion
,
kind
string
)
(
uint64
,
error
)
{
if
resourceVersion
==
""
||
resourceVersion
==
"0"
{
return
0
,
nil
}
version
,
err
:=
strconv
.
ParseUint
(
resourceVersion
,
10
,
64
)
if
err
!=
nil
{
// TODO: Does this need to be a ValidationErrorList? I can't convince myself it does.
return
0
,
errors
.
NewInvalid
(
kind
,
""
,
fielderrors
.
ValidationErrorList
{
fielderrors
.
NewFieldInvalid
(
"resourceVersion"
,
resourceVersion
,
err
.
Error
())})
}
return
version
+
1
,
nil
}
// TransformFunc attempts to convert an object to another object for use with a watcher.
type
TransformFunc
func
(
runtime
.
Object
)
(
runtime
.
Object
,
error
)
...
...
@@ -134,7 +116,7 @@ func newEtcdWatcher(list bool, include includeFunc, filter storage.FilterFunc, e
// etcdWatch calls etcd's Watch function, and handles any errors. Meant to be called
// as a goroutine.
func
(
w
*
etcdWatcher
)
etcdWatch
(
client
EtcdClient
,
key
string
,
resourceVersion
uint64
)
{
func
(
w
*
etcdWatcher
)
etcdWatch
(
client
tools
.
EtcdClient
,
key
string
,
resourceVersion
uint64
)
{
defer
util
.
HandleCrash
()
defer
close
(
w
.
etcdError
)
if
resourceVersion
==
0
{
...
...
@@ -152,7 +134,7 @@ func (w *etcdWatcher) etcdWatch(client EtcdClient, key string, resourceVersion u
}
// etcdGetInitialWatchState turns an etcd Get request into a watch equivalent
func
etcdGetInitialWatchState
(
client
EtcdClient
,
key
string
,
recursive
bool
,
incoming
chan
<-
*
etcd
.
Response
)
(
resourceVersion
uint64
,
err
error
)
{
func
etcdGetInitialWatchState
(
client
tools
.
EtcdClient
,
key
string
,
recursive
bool
,
incoming
chan
<-
*
etcd
.
Response
)
(
resourceVersion
uint64
,
err
error
)
{
resp
,
err
:=
client
.
Get
(
key
,
false
,
recursive
)
if
err
!=
nil
{
if
!
IsEtcdNotFound
(
err
)
{
...
...
pkg/
tools
/etcd_watcher_test.go
→
pkg/
storage/etcd
/etcd_watcher_test.go
View file @
3cbbe72f
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
tools
package
etcd
import
(
"fmt"
...
...
@@ -22,10 +22,10 @@ import (
"time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
"github.com/coreos/go-etcd/etcd"
...
...
@@ -216,8 +216,8 @@ func TestWatchInterpretation_ResponseBadData(t *testing.T) {
func
TestWatchEtcdError
(
t
*
testing
.
T
)
{
codec
:=
latest
.
Codec
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
.
expectNotFoundGetSet
[
"/some/key"
]
=
struct
{}{}
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
ExpectNotFoundGet
(
"/some/key"
)
fakeClient
.
WatchImmediateError
=
fmt
.
Errorf
(
"immediate error"
)
h
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
...
...
@@ -245,10 +245,10 @@ func TestWatchEtcdError(t *testing.T) {
func
TestWatch
(
t
*
testing
.
T
)
{
codec
:=
latest
.
Codec
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
.
expectNotFoundGetSet
[
prefixedKey
]
=
struct
{}{}
fakeClient
.
ExpectNotFoundGet
(
prefixedKey
)
h
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
watching
,
err
:=
h
.
Watch
(
key
,
0
,
storage
.
Everything
)
...
...
@@ -323,13 +323,13 @@ func TestWatchEtcdState(t *testing.T) {
Endpoints
[]
api
.
EndpointSubset
}
testCases
:=
map
[
string
]
struct
{
Initial
map
[
string
]
EtcdResponseWithError
Initial
map
[
string
]
tools
.
EtcdResponseWithError
Responses
[]
*
etcd
.
Response
From
uint64
Expected
[]
*
T
}{
"from not found"
:
{
Initial
:
map
[
string
]
EtcdResponseWithError
{},
Initial
:
map
[
string
]
tools
.
EtcdResponseWithError
{},
Responses
:
[]
*
etcd
.
Response
{
{
Action
:
"create"
,
...
...
@@ -374,7 +374,7 @@ func TestWatchEtcdState(t *testing.T) {
},
},
"from initial state"
:
{
Initial
:
map
[
string
]
EtcdResponseWithError
{
Initial
:
map
[
string
]
tools
.
EtcdResponseWithError
{
prefixedKey
:
{
R
:
&
etcd
.
Response
{
Action
:
"get"
,
...
...
@@ -420,7 +420,7 @@ func TestWatchEtcdState(t *testing.T) {
}
for
k
,
testCase
:=
range
testCases
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
for
key
,
value
:=
range
testCase
.
Initial
{
fakeClient
.
Data
[
key
]
=
value
}
...
...
@@ -457,12 +457,12 @@ func TestWatchFromZeroIndex(t *testing.T) {
pod
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
testCases
:=
map
[
string
]
struct
{
Response
EtcdResponseWithError
Response
tools
.
EtcdResponseWithError
ExpectedVersion
string
ExpectedType
watch
.
EventType
}{
"get value created"
:
{
EtcdResponseWithError
{
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
&
etcd
.
Node
{
Value
:
runtime
.
EncodeOrDie
(
codec
,
pod
),
...
...
@@ -477,7 +477,7 @@ func TestWatchFromZeroIndex(t *testing.T) {
watch
.
Added
,
},
"get value modified"
:
{
EtcdResponseWithError
{
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
&
etcd
.
Node
{
Value
:
runtime
.
EncodeOrDie
(
codec
,
pod
),
...
...
@@ -494,7 +494,7 @@ func TestWatchFromZeroIndex(t *testing.T) {
}
for
k
,
testCase
:=
range
testCases
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
.
Data
[
prefixedKey
]
=
testCase
.
Response
...
...
@@ -535,8 +535,8 @@ func TestWatchListFromZeroIndex(t *testing.T) {
pod
:=
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
.
Data
[
prefixedKey
]
=
EtcdResponseWithError
{
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
fakeClient
.
Data
[
prefixedKey
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
&
etcd
.
Node
{
Dir
:
true
,
...
...
@@ -598,7 +598,7 @@ func TestWatchListIgnoresRootKey(t *testing.T) {
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
h
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
watching
,
err
:=
h
.
WatchList
(
key
,
1
,
storage
.
Everything
)
...
...
@@ -640,10 +640,10 @@ func TestWatchListIgnoresRootKey(t *testing.T) {
}
func
TestWatchFromNotFound
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
.
Data
[
prefixedKey
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
prefixedKey
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
nil
,
},
...
...
@@ -667,10 +667,10 @@ func TestWatchFromNotFound(t *testing.T) {
}
func
TestWatchFromOtherError
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
.
Data
[
prefixedKey
]
=
EtcdResponseWithError
{
fakeClient
.
Data
[
prefixedKey
]
=
tools
.
EtcdResponseWithError
{
R
:
&
etcd
.
Response
{
Node
:
nil
,
},
...
...
@@ -709,12 +709,12 @@ func TestWatchFromOtherError(t *testing.T) {
}
func
TestWatchPurposefulShutdown
(
t
*
testing
.
T
)
{
fakeClient
:=
NewFakeEtcdClient
(
t
)
fakeClient
:=
tools
.
NewFakeEtcdClient
(
t
)
h
:=
newEtcdHelper
(
fakeClient
,
codec
,
etcdtest
.
PathPrefix
())
key
:=
"/some/key"
prefixedKey
:=
etcdtest
.
AddPrefix
(
key
)
fakeClient
.
expectNotFoundGetSet
[
prefixedKey
]
=
struct
{}{}
fakeClient
.
ExpectNotFoundGet
(
prefixedKey
)
// Test purposeful shutdown
watching
,
err
:=
h
.
Watch
(
key
,
0
,
storage
.
Everything
)
...
...
@@ -733,38 +733,3 @@ func TestWatchPurposefulShutdown(t *testing.T) {
t
.
Errorf
(
"An injected error did not cause a graceful shutdown"
)
}
}
func
TestEtcdParseWatchResourceVersion
(
t
*
testing
.
T
)
{
testCases
:=
[]
struct
{
Version
string
Kind
string
ExpectVersion
uint64
Err
bool
}{
{
Version
:
""
,
ExpectVersion
:
0
},
{
Version
:
"a"
,
Err
:
true
},
{
Version
:
" "
,
Err
:
true
},
{
Version
:
"1"
,
ExpectVersion
:
2
},
{
Version
:
"10"
,
ExpectVersion
:
11
},
}
for
_
,
testCase
:=
range
testCases
{
version
,
err
:=
ParseWatchResourceVersion
(
testCase
.
Version
,
testCase
.
Kind
)
switch
{
case
testCase
.
Err
:
if
err
==
nil
{
t
.
Errorf
(
"%s: unexpected non-error"
,
testCase
.
Version
)
continue
}
if
!
errors
.
IsInvalid
(
err
)
{
t
.
Errorf
(
"%s: unexpected error: %v"
,
testCase
.
Version
,
err
)
continue
}
case
!
testCase
.
Err
&&
err
!=
nil
:
t
.
Errorf
(
"%s: unexpected error: %v"
,
testCase
.
Version
,
err
)
continue
}
if
version
!=
testCase
.
ExpectVersion
{
t
.
Errorf
(
"%s: expected version %d but was %d"
,
testCase
.
Version
,
testCase
.
ExpectVersion
,
version
)
}
}
}
pkg/storage/util.go
0 → 100644
View file @
3cbbe72f
/*
Copyright 2015 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
storage
import
(
"strconv"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/fielderrors"
)
type
SimpleUpdateFunc
func
(
runtime
.
Object
)
(
runtime
.
Object
,
error
)
// SimpleUpdateFunc converts SimpleUpdateFunc into UpdateFunc
func
SimpleUpdate
(
fn
SimpleUpdateFunc
)
UpdateFunc
{
return
func
(
input
runtime
.
Object
,
_
ResponseMeta
)
(
runtime
.
Object
,
*
uint64
,
error
)
{
out
,
err
:=
fn
(
input
)
return
out
,
nil
,
err
}
}
// ParseWatchResourceVersion takes a resource version argument and converts it to
// the etcd version we should pass to helper.Watch(). Because resourceVersion is
// an opaque value, the default watch behavior for non-zero watch is to watch
// the next value (if you pass "1", you will see updates from "2" onwards).
func
ParseWatchResourceVersion
(
resourceVersion
,
kind
string
)
(
uint64
,
error
)
{
if
resourceVersion
==
""
||
resourceVersion
==
"0"
{
return
0
,
nil
}
version
,
err
:=
strconv
.
ParseUint
(
resourceVersion
,
10
,
64
)
if
err
!=
nil
{
// TODO: Does this need to be a ValidationErrorList? I can't convince myself it does.
return
0
,
errors
.
NewInvalid
(
kind
,
""
,
fielderrors
.
ValidationErrorList
{
fielderrors
.
NewFieldInvalid
(
"resourceVersion"
,
resourceVersion
,
err
.
Error
())})
}
return
version
+
1
,
nil
}
pkg/storage/util_test.go
0 → 100644
View file @
3cbbe72f
/*
Copyright 2015 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
storage
import
(
"testing"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
)
func
TestEtcdParseWatchResourceVersion
(
t
*
testing
.
T
)
{
testCases
:=
[]
struct
{
Version
string
Kind
string
ExpectVersion
uint64
Err
bool
}{
{
Version
:
""
,
ExpectVersion
:
0
},
{
Version
:
"a"
,
Err
:
true
},
{
Version
:
" "
,
Err
:
true
},
{
Version
:
"1"
,
ExpectVersion
:
2
},
{
Version
:
"10"
,
ExpectVersion
:
11
},
}
for
_
,
testCase
:=
range
testCases
{
version
,
err
:=
ParseWatchResourceVersion
(
testCase
.
Version
,
testCase
.
Kind
)
switch
{
case
testCase
.
Err
:
if
err
==
nil
{
t
.
Errorf
(
"%s: unexpected non-error"
,
testCase
.
Version
)
continue
}
if
!
errors
.
IsInvalid
(
err
)
{
t
.
Errorf
(
"%s: unexpected error: %v"
,
testCase
.
Version
,
err
)
continue
}
case
!
testCase
.
Err
&&
err
!=
nil
:
t
.
Errorf
(
"%s: unexpected error: %v"
,
testCase
.
Version
,
err
)
continue
}
if
version
!=
testCase
.
ExpectVersion
{
t
.
Errorf
(
"%s: expected version %d but was %d"
,
testCase
.
Version
,
testCase
.
ExpectVersion
,
version
)
}
}
}
pkg/tools/fake_etcd_client.go
View file @
3cbbe72f
...
...
@@ -281,7 +281,8 @@ func (f *FakeEtcdClient) Delete(key string, recursive bool) (*etcd.Response, err
Index
:
f
.
ChangeIndex
,
}
}
if
IsEtcdNotFound
(
existing
.
E
)
{
etcdError
,
ok
:=
existing
.
E
.
(
*
etcd
.
EtcdError
)
if
ok
&&
etcdError
!=
nil
&&
etcdError
.
ErrorCode
==
EtcdErrorCodeNotFound
{
f
.
DeletedKeys
=
append
(
f
.
DeletedKeys
,
key
)
return
existing
.
R
,
existing
.
E
}
...
...
test/integration/etcd_tools_test.go
View file @
3cbbe72f
...
...
@@ -25,7 +25,8 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage"
"github.com/GoogleCloudPlatform/kubernetes/pkg/storage/etcd"
"github.com/GoogleCloudPlatform/kubernetes/pkg/tools/etcdtest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
"github.com/GoogleCloudPlatform/kubernetes/test/integration/framework"
...
...
@@ -33,7 +34,7 @@ import (
func
TestSet
(
t
*
testing
.
T
)
{
client
:=
framework
.
NewEtcdClient
()
etcdStorage
:=
tools
.
NewEtcdStorage
(
client
,
testapi
.
Codec
(),
""
)
etcdStorage
:=
etcd
.
NewEtcdStorage
(
client
,
testapi
.
Codec
(),
""
)
framework
.
WithEtcdKey
(
func
(
key
string
)
{
testObject
:=
api
.
ServiceAccount
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
if
err
:=
etcdStorage
.
Set
(
key
,
&
testObject
,
nil
,
0
);
err
!=
nil
{
...
...
@@ -56,7 +57,7 @@ func TestSet(t *testing.T) {
func
TestGet
(
t
*
testing
.
T
)
{
client
:=
framework
.
NewEtcdClient
()
etcdStorage
:=
tools
.
NewEtcdStorage
(
client
,
testapi
.
Codec
(),
""
)
etcdStorage
:=
etcd
.
NewEtcdStorage
(
client
,
testapi
.
Codec
(),
""
)
framework
.
WithEtcdKey
(
func
(
key
string
)
{
testObject
:=
api
.
ServiceAccount
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}
coded
,
err
:=
testapi
.
Codec
()
.
Encode
(
&
testObject
)
...
...
@@ -81,7 +82,7 @@ func TestGet(t *testing.T) {
func
TestWatch
(
t
*
testing
.
T
)
{
client
:=
framework
.
NewEtcdClient
()
etcdStorage
:=
tools
.
NewEtcdStorage
(
client
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
etcdStorage
:=
etcd
.
NewEtcdStorage
(
client
,
testapi
.
Codec
(),
etcdtest
.
PathPrefix
())
framework
.
WithEtcdKey
(
func
(
key
string
)
{
key
=
etcdtest
.
AddPrefix
(
key
)
resp
,
err
:=
client
.
Set
(
key
,
runtime
.
EncodeOrDie
(
testapi
.
Codec
(),
&
api
.
Pod
{
ObjectMeta
:
api
.
ObjectMeta
{
Name
:
"foo"
}}),
0
)
...
...
@@ -91,7 +92,7 @@ func TestWatch(t *testing.T) {
expectedVersion
:=
resp
.
Node
.
ModifiedIndex
// watch should load the object at the current index
w
,
err
:=
etcdStorage
.
Watch
(
key
,
0
,
tools
.
Everything
)
w
,
err
:=
etcdStorage
.
Watch
(
key
,
0
,
storage
.
Everything
)
if
err
!=
nil
{
t
.
Fatalf
(
"Unexpected error: %v"
,
err
)
}
...
...
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