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
6a8a8597
Unverified
Commit
6a8a8597
authored
Sep 30, 2018
by
k8s-ci-robot
Committed by
GitHub
Sep 30, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #69268 from Lion-Wei/fix-graceful-termination
fix bugs introduced by ipvs graceful termination
parents
04f13b63
456c351e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
14 additions
and
38 deletions
+14
-38
graceful_termination.go
pkg/proxy/ipvs/graceful_termination.go
+4
-7
proxier.go
pkg/proxy/ipvs/proxier.go
+9
-5
ipvs.go
pkg/util/ipvs/ipvs.go
+1
-2
ipvs_test.go
pkg/util/ipvs/ipvs_test.go
+0
-24
No files found.
pkg/proxy/ipvs/graceful_termination.go
View file @
6a8a8597
...
...
@@ -82,9 +82,6 @@ func (q *graceTerminateRSList) remove(rs *listItem) bool {
}
func
(
q
*
graceTerminateRSList
)
flushList
(
handler
func
(
rsToDelete
*
listItem
)
(
bool
,
error
))
bool
{
q
.
lock
.
Lock
()
defer
q
.
lock
.
Unlock
()
success
:=
true
for
name
,
rs
:=
range
q
.
list
{
deleted
,
err
:=
handler
(
rs
)
...
...
@@ -105,8 +102,8 @@ func (q *graceTerminateRSList) exist(uniqueRS string) (*listItem, bool) {
q
.
lock
.
Lock
()
defer
q
.
lock
.
Unlock
()
if
_
,
ok
:=
q
.
list
[
uniqueRS
];
ok
{
return
nil
,
fals
e
if
rs
,
ok
:=
q
.
list
[
uniqueRS
];
ok
{
return
rs
,
tru
e
}
return
nil
,
false
}
...
...
@@ -144,7 +141,7 @@ func (m *GracefulTerminationManager) GracefulDeleteRS(vs *utilipvs.VirtualServer
}
deleted
,
err
:=
m
.
deleteRsFunc
(
ele
)
if
err
!=
nil
{
glog
.
Errorf
(
"Delete rs %q err: %v"
,
err
)
glog
.
Errorf
(
"Delete rs %q err: %v"
,
e
le
.
String
(),
e
rr
)
}
if
deleted
{
return
nil
...
...
@@ -178,7 +175,7 @@ func (m *GracefulTerminationManager) deleteRsFunc(rsToDelete *listItem) (bool, e
return
true
,
nil
}
}
return
fals
e
,
fmt
.
Errorf
(
"Failed to delete rs %q, can't find the real server"
,
rsToDelete
.
String
())
return
tru
e
,
fmt
.
Errorf
(
"Failed to delete rs %q, can't find the real server"
,
rsToDelete
.
String
())
}
func
(
m
*
GracefulTerminationManager
)
tryDeleteRs
()
{
...
...
pkg/proxy/ipvs/proxier.go
View file @
6a8a8597
...
...
@@ -1533,7 +1533,7 @@ func (proxier *Proxier) syncEndpoint(svcPortName proxy.ServicePortName, onlyNode
}
if
curEndpoints
.
Has
(
ep
)
{
// check if newEndpoint is in gracefulDelete list, i
s
true, delete this ep immediately
// check if newEndpoint is in gracefulDelete list, i
f
true, delete this ep immediately
uniqueRS
:=
GetUniqueRSName
(
vs
,
newDest
)
if
!
proxier
.
gracefuldeleteManager
.
InTerminationList
(
uniqueRS
)
{
continue
...
...
@@ -1591,10 +1591,14 @@ func (proxier *Proxier) cleanLegacyService(activeServices map[string]bool, curre
// This service was not processed in the latest sync loop so before deleting it,
// make sure it does not fall within an excluded CIDR range.
okayToDelete
:=
true
rsList
,
err
:=
proxier
.
ipvs
.
GetRealServers
(
svc
)
if
len
(
rsList
)
!=
0
&&
err
==
nil
{
glog
.
V
(
5
)
.
Infof
(
"Will not delete VS: %v, cause it have RS: %v"
,
svc
,
rsList
)
okayToDelete
=
false
rsList
,
_
:=
proxier
.
ipvs
.
GetRealServers
(
svc
)
for
_
,
rs
:=
range
rsList
{
uniqueRS
:=
GetUniqueRSName
(
svc
,
rs
)
// if there are in terminating real server in this service, then handle it later
if
proxier
.
gracefuldeleteManager
.
InTerminationList
(
uniqueRS
)
{
okayToDelete
=
false
break
}
}
for
_
,
excludedCIDR
:=
range
proxier
.
excludeCIDRs
{
// Any validation of this CIDR already should have occurred.
...
...
pkg/util/ipvs/ipvs.go
View file @
6a8a8597
...
...
@@ -108,6 +108,5 @@ func (rs *RealServer) String() string {
// We don't use struct == since it doesn't work because of slice.
func
(
rs
*
RealServer
)
Equal
(
other
*
RealServer
)
bool
{
return
rs
.
Address
.
Equal
(
other
.
Address
)
&&
rs
.
Port
==
other
.
Port
&&
rs
.
Weight
==
other
.
Weight
rs
.
Port
==
other
.
Port
}
pkg/util/ipvs/ipvs_test.go
View file @
6a8a8597
...
...
@@ -249,12 +249,10 @@ func TestRealServerEqual(t *testing.T) {
rsA
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"10.20.30.40"
),
Port
:
80
,
Weight
:
1
,
},
rsB
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"10.20.30.41"
),
Port
:
80
,
Weight
:
1
,
},
equal
:
false
,
reason
:
"IPv4 address not equal"
,
...
...
@@ -263,12 +261,10 @@ func TestRealServerEqual(t *testing.T) {
rsA
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"2012::beef"
),
Port
:
80
,
Weight
:
1
,
},
rsB
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"2017::beef"
),
Port
:
80
,
Weight
:
1
,
},
equal
:
false
,
reason
:
"IPv6 address not equal"
,
...
...
@@ -277,40 +273,22 @@ func TestRealServerEqual(t *testing.T) {
rsA
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"2012::beef"
),
Port
:
80
,
Weight
:
1
,
},
rsB
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"2012::beef"
),
Port
:
8080
,
Weight
:
1
,
},
equal
:
false
,
reason
:
"Port not equal"
,
},
{
rsA
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"10.20.30.40"
),
Port
:
8080
,
Weight
:
1
,
},
rsB
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"10.20.30.40"
),
Port
:
8080
,
Weight
:
10
,
},
equal
:
false
,
reason
:
"Weight not equal"
,
},
{
rsA
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"1.2.3.4"
),
Port
:
3080
,
Weight
:
10
,
},
rsB
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"1.2.3.4"
),
Port
:
3080
,
Weight
:
10
,
},
equal
:
true
,
reason
:
"All fields equal"
,
...
...
@@ -319,12 +297,10 @@ func TestRealServerEqual(t *testing.T) {
rsA
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"2012::beef"
),
Port
:
3080
,
Weight
:
10
,
},
rsB
:
&
RealServer
{
Address
:
net
.
ParseIP
(
"2012::beef"
),
Port
:
3080
,
Weight
:
10
,
},
equal
:
true
,
reason
:
"All fields equal"
,
...
...
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