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
c75cefa2
Commit
c75cefa2
authored
Aug 16, 2016
by
Marcin Wielgus
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FederatedInformer returns clusterName + obj pair when needed
parent
ec4d645d
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
12 deletions
+20
-12
federated_informer.go
...tion/pkg/federation-controller/util/federated_informer.go
+18
-11
federated_informer_test.go
...pkg/federation-controller/util/federated_informer_test.go
+2
-1
No files found.
federation/pkg/federation-controller/util/federated_informer.go
View file @
c75cefa2
...
@@ -40,10 +40,16 @@ const (
...
@@ -40,10 +40,16 @@ const (
userAgentName
=
"federation-service-controller"
userAgentName
=
"federation-service-controller"
)
)
// An object with an origin information.
type
FederatedObject
struct
{
Object
interface
{}
ClusterName
string
}
// FederatedReadOnlyStore is an overlay over multiple stores created in federated clusters.
// FederatedReadOnlyStore is an overlay over multiple stores created in federated clusters.
type
FederatedReadOnlyStore
interface
{
type
FederatedReadOnlyStore
interface
{
// Returns all items in the store.
// Returns all items in the store.
List
()
([]
interface
{}
,
error
)
List
()
([]
FederatedObject
,
error
)
// Returns all items from a cluster.
// Returns all items from a cluster.
ListFromCluster
(
clusterName
string
)
([]
interface
{},
error
)
ListFromCluster
(
clusterName
string
)
([]
interface
{},
error
)
...
@@ -52,7 +58,7 @@ type FederatedReadOnlyStore interface {
...
@@ -52,7 +58,7 @@ type FederatedReadOnlyStore interface {
GetByKey
(
clusterName
string
,
key
string
)
(
interface
{},
bool
,
error
)
GetByKey
(
clusterName
string
,
key
string
)
(
interface
{},
bool
,
error
)
// Returns the items stored under the given key in all clusters.
// Returns the items stored under the given key in all clusters.
GetFromAllClusters
(
key
string
)
([]
interface
{}
,
error
)
GetFromAllClusters
(
key
string
)
([]
FederatedObject
,
error
)
// Checks whether stores for all clusters form the lists (and only these) are there and
// Checks whether stores for all clusters form the lists (and only these) are there and
// are synced. This is only a basic check whether the data inside of the store is usable.
// are synced. This is only a basic check whether the data inside of the store is usable.
...
@@ -382,14 +388,15 @@ func (f *federatedInformerImpl) GetTargetStore() FederatedReadOnlyStore {
...
@@ -382,14 +388,15 @@ func (f *federatedInformerImpl) GetTargetStore() FederatedReadOnlyStore {
}
}
// Returns all items in the store.
// Returns all items in the store.
func
(
fs
*
federatedStoreImpl
)
List
()
([]
interface
{}
,
error
)
{
func
(
fs
*
federatedStoreImpl
)
List
()
([]
FederatedObject
,
error
)
{
fs
.
federatedInformer
.
Lock
()
fs
.
federatedInformer
.
Lock
()
defer
fs
.
federatedInformer
.
Unlock
()
defer
fs
.
federatedInformer
.
Unlock
()
result
:=
make
([]
interface
{},
0
)
result
:=
make
([]
FederatedObject
,
0
)
for
_
,
targetInformer
:=
range
fs
.
federatedInformer
.
targetInformers
{
for
clusterName
,
targetInformer
:=
range
fs
.
federatedInformer
.
targetInformers
{
values
:=
targetInformer
.
store
.
List
()
for
_
,
value
:=
range
targetInformer
.
store
.
List
()
{
result
=
append
(
result
,
values
...
)
result
=
append
(
result
,
FederatedObject
{
ClusterName
:
clusterName
,
Object
:
value
})
}
}
}
return
result
,
nil
return
result
,
nil
}
}
...
@@ -418,18 +425,18 @@ func (fs *federatedStoreImpl) GetByKey(clusterName string, key string) (interfac
...
@@ -418,18 +425,18 @@ func (fs *federatedStoreImpl) GetByKey(clusterName string, key string) (interfac
}
}
// Returns the items stored under the given key in all clusters.
// Returns the items stored under the given key in all clusters.
func
(
fs
*
federatedStoreImpl
)
GetFromAllClusters
(
key
string
)
([]
interface
{}
,
error
)
{
func
(
fs
*
federatedStoreImpl
)
GetFromAllClusters
(
key
string
)
([]
FederatedObject
,
error
)
{
fs
.
federatedInformer
.
Lock
()
fs
.
federatedInformer
.
Lock
()
defer
fs
.
federatedInformer
.
Unlock
()
defer
fs
.
federatedInformer
.
Unlock
()
result
:=
make
([]
interface
{}
,
0
)
result
:=
make
([]
FederatedObject
,
0
)
for
_
,
targetInformer
:=
range
fs
.
federatedInformer
.
targetInformers
{
for
clusterName
,
targetInformer
:=
range
fs
.
federatedInformer
.
targetInformers
{
value
,
exist
,
err
:=
targetInformer
.
store
.
GetByKey
(
key
)
value
,
exist
,
err
:=
targetInformer
.
store
.
GetByKey
(
key
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
if
exist
{
if
exist
{
result
=
append
(
result
,
value
)
result
=
append
(
result
,
FederatedObject
{
ClusterName
:
clusterName
,
Object
:
value
}
)
}
}
}
}
return
result
,
nil
return
result
,
nil
...
...
federation/pkg/federation-controller/util/federated_informer_test.go
View file @
c75cefa2
...
@@ -121,7 +121,8 @@ func TestFederatedInformer(t *testing.T) {
...
@@ -121,7 +121,8 @@ func TestFederatedInformer(t *testing.T) {
assert
.
Contains
(
t
,
readyClusters
,
&
cluster
)
assert
.
Contains
(
t
,
readyClusters
,
&
cluster
)
serviceList
,
err
:=
informer
.
GetTargetStore
()
.
List
()
serviceList
,
err
:=
informer
.
GetTargetStore
()
.
List
()
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
assert
.
Contains
(
t
,
serviceList
,
&
service
)
federatedService
:=
FederatedObject
{
ClusterName
:
"mycluster"
,
Object
:
&
service
}
assert
.
Contains
(
t
,
serviceList
,
federatedService
)
service1
,
found
,
err
:=
informer
.
GetTargetStore
()
.
GetByKey
(
"mycluster"
,
"ns1/s1"
)
service1
,
found
,
err
:=
informer
.
GetTargetStore
()
.
GetByKey
(
"mycluster"
,
"ns1/s1"
)
assert
.
NoError
(
t
,
err
)
assert
.
NoError
(
t
,
err
)
assert
.
True
(
t
,
found
)
assert
.
True
(
t
,
found
)
...
...
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