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
c2af9cac
Commit
c2af9cac
authored
Dec 15, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #18590 from mikedanese/transit
Auto commit by PR queue bot
parents
3680268c
5c1ead88
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
5 deletions
+22
-5
leaderelection.go
pkg/client/leaderelection/leaderelection.go
+11
-4
leaderelection_test.go
pkg/client/leaderelection/leaderelection_test.go
+11
-1
No files found.
pkg/client/leaderelection/leaderelection.go
View file @
c2af9cac
...
@@ -150,6 +150,7 @@ type LeaderElectionRecord struct {
...
@@ -150,6 +150,7 @@ type LeaderElectionRecord struct {
LeaseDurationSeconds
int
`json:"leaseDurationSeconds"`
LeaseDurationSeconds
int
`json:"leaseDurationSeconds"`
AcquireTime
unversioned
.
Time
`json:"acquireTime"`
AcquireTime
unversioned
.
Time
`json:"acquireTime"`
RenewTime
unversioned
.
Time
`json:"renewTime"`
RenewTime
unversioned
.
Time
`json:"renewTime"`
LeaderTransitions
int
`json:"leaderTransitions"`
}
}
// Run starts the leader election loop
// Run starts the leader election loop
...
@@ -242,8 +243,9 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
...
@@ -242,8 +243,9 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
e
.
Annotations
=
make
(
map
[
string
]
string
)
e
.
Annotations
=
make
(
map
[
string
]
string
)
}
}
if
oldLeaderElectionRecordBytes
,
found
:=
e
.
Annotations
[
LeaderElectionRecordAnnotationKey
];
found
{
var
oldLeaderElectionRecord
LeaderElectionRecord
var
oldLeaderElectionRecord
LeaderElectionRecord
if
oldLeaderElectionRecordBytes
,
found
:=
e
.
Annotations
[
LeaderElectionRecordAnnotationKey
];
found
{
if
err
:=
json
.
Unmarshal
([]
byte
(
oldLeaderElectionRecordBytes
),
&
oldLeaderElectionRecord
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
([]
byte
(
oldLeaderElectionRecordBytes
),
&
oldLeaderElectionRecord
);
err
!=
nil
{
glog
.
Errorf
(
"error unmarshaling leader election record: %v"
,
err
)
glog
.
Errorf
(
"error unmarshaling leader election record: %v"
,
err
)
return
false
return
false
...
@@ -252,9 +254,6 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
...
@@ -252,9 +254,6 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
le
.
observedRecord
=
oldLeaderElectionRecord
le
.
observedRecord
=
oldLeaderElectionRecord
le
.
observedTime
=
time
.
Now
()
le
.
observedTime
=
time
.
Now
()
}
}
if
oldLeaderElectionRecord
.
HolderIdentity
==
le
.
config
.
Identity
{
leaderElectionRecord
.
AcquireTime
=
oldLeaderElectionRecord
.
AcquireTime
}
if
le
.
observedTime
.
Add
(
le
.
config
.
LeaseDuration
)
.
After
(
now
.
Time
)
&&
if
le
.
observedTime
.
Add
(
le
.
config
.
LeaseDuration
)
.
After
(
now
.
Time
)
&&
oldLeaderElectionRecord
.
HolderIdentity
!=
le
.
config
.
Identity
{
oldLeaderElectionRecord
.
HolderIdentity
!=
le
.
config
.
Identity
{
glog
.
Infof
(
"lock is held by %v and has not yet expired"
,
oldLeaderElectionRecord
.
HolderIdentity
)
glog
.
Infof
(
"lock is held by %v and has not yet expired"
,
oldLeaderElectionRecord
.
HolderIdentity
)
...
@@ -262,6 +261,14 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
...
@@ -262,6 +261,14 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
}
}
}
}
// We're going to try to update. The leaderElectionRecord is set to it's default
// here. Let's correct it before updating.
if
oldLeaderElectionRecord
.
HolderIdentity
==
le
.
config
.
Identity
{
leaderElectionRecord
.
AcquireTime
=
oldLeaderElectionRecord
.
AcquireTime
}
else
{
leaderElectionRecord
.
LeaderTransitions
=
oldLeaderElectionRecord
.
LeaderTransitions
+
1
}
leaderElectionRecordBytes
,
err
:=
json
.
Marshal
(
leaderElectionRecord
)
leaderElectionRecordBytes
,
err
:=
json
.
Marshal
(
leaderElectionRecord
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Errorf
(
"err marshaling leader election record: %v"
,
err
)
glog
.
Errorf
(
"err marshaling leader election record: %v"
,
err
)
...
...
pkg/client/leaderelection/leaderelection_test.go
View file @
c2af9cac
...
@@ -46,6 +46,7 @@ func TestTryAcquireOrRenew(t *testing.T) {
...
@@ -46,6 +46,7 @@ func TestTryAcquireOrRenew(t *testing.T) {
}
}
expectSuccess
bool
expectSuccess
bool
transitionLeader
bool
outHolder
string
outHolder
string
}{
}{
// acquire from no endpoints
// acquire from no endpoints
...
@@ -94,7 +95,9 @@ func TestTryAcquireOrRenew(t *testing.T) {
...
@@ -94,7 +95,9 @@ func TestTryAcquireOrRenew(t *testing.T) {
},
},
},
},
},
},
expectSuccess
:
true
,
expectSuccess
:
true
,
transitionLeader
:
true
,
outHolder
:
"baz"
,
outHolder
:
"baz"
,
},
},
// acquire from led, unacked endpoints
// acquire from led, unacked endpoints
...
@@ -128,6 +131,7 @@ func TestTryAcquireOrRenew(t *testing.T) {
...
@@ -128,6 +131,7 @@ func TestTryAcquireOrRenew(t *testing.T) {
observedTime
:
past
,
observedTime
:
past
,
expectSuccess
:
true
,
expectSuccess
:
true
,
transitionLeader
:
true
,
outHolder
:
"baz"
,
outHolder
:
"baz"
,
},
},
// don't acquire from led, acked endpoints
// don't acquire from led, acked endpoints
...
@@ -225,7 +229,13 @@ func TestTryAcquireOrRenew(t *testing.T) {
...
@@ -225,7 +229,13 @@ func TestTryAcquireOrRenew(t *testing.T) {
t
.
Errorf
(
"[%v]expected holder:
\n\t
%+v
\n
got:
\n\t
%+v"
,
i
,
test
.
outHolder
,
le
.
observedRecord
.
HolderIdentity
)
t
.
Errorf
(
"[%v]expected holder:
\n\t
%+v
\n
got:
\n\t
%+v"
,
i
,
test
.
outHolder
,
le
.
observedRecord
.
HolderIdentity
)
}
}
if
len
(
test
.
reactors
)
!=
len
(
c
.
Actions
())
{
if
len
(
test
.
reactors
)
!=
len
(
c
.
Actions
())
{
t
.
Errorf
(
"[%v]wrong number of api interactions"
)
t
.
Errorf
(
"[%v]wrong number of api interactions"
,
i
)
}
if
test
.
transitionLeader
&&
le
.
observedRecord
.
LeaderTransitions
!=
1
{
t
.
Errorf
(
"[%v]leader should have transitioned but did not"
,
i
)
}
if
!
test
.
transitionLeader
&&
le
.
observedRecord
.
LeaderTransitions
!=
0
{
t
.
Errorf
(
"[%v]leader should not have transitioned but did"
,
i
)
}
}
}
}
}
}
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