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
72a08061
Commit
72a08061
authored
Jun 13, 2016
by
mfanjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
only update dns records when ready address available for endpoints
parent
318f37ce
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
19 deletions
+46
-19
endpoint_helper.go
...tion/pkg/federation-controller/service/endpoint_helper.go
+43
-16
servicecontroller.go
...on/pkg/federation-controller/service/servicecontroller.go
+3
-3
No files found.
federation/pkg/federation-controller/service/endpoint_helper.go
View file @
72a08061
...
...
@@ -120,27 +120,54 @@ func (cc *clusterClientCache) processEndpointDeletion(cachedService *cachedServi
func
(
cc
*
clusterClientCache
)
processEndpointUpdate
(
cachedService
*
cachedService
,
endpoint
*
v1
.
Endpoints
,
clusterName
string
,
serviceController
*
ServiceController
)
error
{
glog
.
V
(
4
)
.
Infof
(
"Processing endpoint update for %s/%s, cluster %s"
,
endpoint
.
Namespace
,
endpoint
.
Name
,
clusterName
)
cachedService
.
rwlock
.
Lock
()
var
reachable
bool
defer
cachedService
.
rwlock
.
Unlock
()
for
_
,
subset
:=
range
endpoint
.
Subsets
{
if
len
(
subset
.
Addresses
)
>
0
{
cachedService
.
endpointMap
[
clusterName
]
=
1
}
}
_
,
ok
:=
cachedService
.
endpointMap
[
clusterName
]
if
!
ok
{
// first time get endpoints, update dns record
glog
.
V
(
4
)
.
Infof
(
"Cached endpoint was not found for %s/%s, cluster %s, building one"
,
endpoint
.
Namespace
,
endpoint
.
Name
,
clusterName
)
cachedService
.
endpointMap
[
clusterName
]
=
1
if
err
:=
serviceController
.
ensureDnsRecords
(
clusterName
,
cachedService
);
err
!=
nil
{
glog
.
V
(
4
)
.
Infof
(
"Error ensuring DNS Records: %v"
,
err
)
for
i
:=
0
;
i
<
clientRetryCount
;
i
++
{
time
.
Sleep
(
cachedService
.
nextDNSUpdateDelay
())
err
:=
serviceController
.
ensureDnsRecords
(
clusterName
,
cachedService
)
if
err
==
nil
{
return
nil
for
_
,
subset
:=
range
endpoint
.
Subsets
{
if
len
(
subset
.
Addresses
)
>
0
{
reachable
=
true
break
}
}
if
reachable
{
// first time get endpoints, update dns record
glog
.
V
(
4
)
.
Infof
(
"Reachable endpoint was found for %s/%s, cluster %s, building endpointMap"
,
endpoint
.
Namespace
,
endpoint
.
Name
,
clusterName
)
cachedService
.
endpointMap
[
clusterName
]
=
1
if
err
:=
serviceController
.
ensureDnsRecords
(
clusterName
,
cachedService
);
err
!=
nil
{
glog
.
V
(
4
)
.
Infof
(
"Error ensuring DNS Records: %v"
,
err
)
for
i
:=
0
;
i
<
clientRetryCount
;
i
++
{
time
.
Sleep
(
cachedService
.
nextDNSUpdateDelay
())
err
:=
serviceController
.
ensureDnsRecords
(
clusterName
,
cachedService
)
if
err
==
nil
{
return
nil
}
}
return
err
}
}
}
else
{
for
_
,
subset
:=
range
endpoint
.
Subsets
{
if
len
(
subset
.
Addresses
)
>
0
{
reachable
=
true
break
}
}
if
!
reachable
{
// first time get endpoints, update dns record
glog
.
V
(
4
)
.
Infof
(
"Reachable endpoint was lost for %s/%s, cluster %s, deleting endpointMap"
,
endpoint
.
Namespace
,
endpoint
.
Name
,
clusterName
)
delete
(
cachedService
.
endpointMap
,
clusterName
)
if
err
:=
serviceController
.
ensureDnsRecords
(
clusterName
,
cachedService
);
err
!=
nil
{
glog
.
V
(
4
)
.
Infof
(
"Error ensuring DNS Records: %v"
,
err
)
for
i
:=
0
;
i
<
clientRetryCount
;
i
++
{
time
.
Sleep
(
cachedService
.
nextDNSUpdateDelay
())
err
:=
serviceController
.
ensureDnsRecords
(
clusterName
,
cachedService
)
if
err
==
nil
{
return
nil
}
}
return
err
}
return
err
}
}
return
nil
...
...
federation/pkg/federation-controller/service/servicecontroller.go
View file @
72a08061
...
...
@@ -76,7 +76,7 @@ type cachedService struct {
appliedState
*
v1
.
Service
// cluster endpoint map hold subset info from kubernetes clusters
// key clusterName
// value is a flag that if there is ready address, 1 means there is ready address
, 0 means no ready address
// value is a flag that if there is ready address, 1 means there is ready address
endpointMap
map
[
string
]
int
// serviceStatusMap map holds service status info from kubernetes clusters, keyed on clusterName
serviceStatusMap
map
[
string
]
v1
.
LoadBalancerStatus
...
...
@@ -101,7 +101,7 @@ type ServiceController struct {
dns
dnsprovider
.
Interface
federationClient
federation_release_1_3
.
Interface
federationName
string
zoneName
string
zoneName
string
// each federation should be configured with a single zone (e.g. "mycompany.com")
dnsZones
dnsprovider
.
Zones
serviceCache
*
serviceCache
...
...
@@ -134,7 +134,7 @@ func New(federationClient federation_release_1_3.Interface, dns dnsprovider.Inte
dns
:
dns
,
federationClient
:
federationClient
,
federationName
:
federationName
,
zoneName
:
zoneName
,
zoneName
:
zoneName
,
serviceCache
:
&
serviceCache
{
fedServiceMap
:
make
(
map
[
string
]
*
cachedService
)},
clusterCache
:
&
clusterClientCache
{
rwlock
:
sync
.
Mutex
{},
...
...
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