@@ -240,9 +240,9 @@ type catchupState struct {
240
240
241
241
// lps holds peer state of last time and last index replicated.
242
242
type lps struct {
243
- ts int64 // Last timestamp
244
- li uint64 // Last index replicated
245
- kp bool // Known peer
243
+ ts time. Time // Last timestamp
244
+ li uint64 // Last index replicated
245
+ kp bool // Known peer
246
246
}
247
247
248
248
const (
@@ -502,13 +502,13 @@ func (s *Server) initRaftNode(accName string, cfg *RaftConfig, labels pprofLabel
502
502
}
503
503
504
504
// Make sure to track ourselves.
505
- n .peers [n .id ] = & lps {time .Now (). UnixNano () , 0 , true }
505
+ n .peers [n .id ] = & lps {time .Now (), 0 , true }
506
506
507
507
// Track known peers
508
508
for _ , peer := range ps .knownPeers {
509
509
if peer != n .id {
510
510
// Set these to 0 to start but mark as known peer.
511
- n .peers [peer ] = & lps {0 , 0 , true }
511
+ n .peers [peer ] = & lps {time. Time {} , 0 , true }
512
512
}
513
513
}
514
514
@@ -1446,9 +1446,8 @@ func (n *raft) isCurrent(includeForwardProgress bool) bool {
1446
1446
1447
1447
// Check to see that we have heard from the current leader lately.
1448
1448
if n .leader != noLeader && n .leader != n .id && n .catchup == nil {
1449
- okInterval := int64 (hbInterval ) * 2
1450
- ts := time .Now ().UnixNano ()
1451
- if ps := n .peers [n .leader ]; ps == nil || ps .ts == 0 && (ts - ps .ts ) > okInterval {
1449
+ okInterval := hbInterval * 2
1450
+ if ps := n .peers [n .leader ]; ps == nil || time .Since (ps .ts ) > okInterval {
1452
1451
n .debug ("Not current, no recent leader contact" )
1453
1452
return false
1454
1453
}
@@ -1586,14 +1585,12 @@ func (n *raft) StepDown(preferred ...string) error {
1586
1585
preferred = nil
1587
1586
}
1588
1587
1589
- nowts := time .Now ().UnixNano ()
1590
-
1591
1588
// If we have a preferred check it first.
1592
1589
if maybeLeader != noLeader {
1593
1590
var isHealthy bool
1594
1591
if ps , ok := n .peers [maybeLeader ]; ok {
1595
1592
si , ok := n .s .nodeToInfo .Load (maybeLeader )
1596
- isHealthy = ok && ! si .(nodeInfo ).offline && ( nowts - ps .ts ) < int64 ( hbInterval * 3 )
1593
+ isHealthy = ok && ! si .(nodeInfo ).offline && time . Since ( ps .ts ) < hbInterval * 3
1597
1594
}
1598
1595
if ! isHealthy {
1599
1596
maybeLeader = noLeader
@@ -1608,7 +1605,7 @@ func (n *raft) StepDown(preferred ...string) error {
1608
1605
continue
1609
1606
}
1610
1607
si , ok := n .s .nodeToInfo .Load (peer )
1611
- isHealthy := ok && ! si .(nodeInfo ).offline && ( nowts - ps .ts ) < int64 ( hbInterval * 3 )
1608
+ isHealthy := ok && ! si .(nodeInfo ).offline && time . Since ( ps .ts ) < hbInterval * 3
1612
1609
if isHealthy {
1613
1610
maybeLeader = peer
1614
1611
break
@@ -1733,7 +1730,7 @@ func (n *raft) Peers() []*Peer {
1733
1730
p := & Peer {
1734
1731
ID : id ,
1735
1732
Current : id == n .leader || ps .li >= n .applied ,
1736
- Last : time . Unix ( 0 , ps .ts ) ,
1733
+ Last : ps .ts ,
1737
1734
Lag : lag ,
1738
1735
}
1739
1736
peers = append (peers , p )
@@ -2633,11 +2630,10 @@ func (n *raft) Quorum() bool {
2633
2630
n .RLock ()
2634
2631
defer n .RUnlock ()
2635
2632
2636
- now , nc := time . Now (). UnixNano (), 0
2633
+ nc := 0
2637
2634
for id , peer := range n .peers {
2638
- if id == n .id || time .Duration (now - peer .ts ) < lostQuorumInterval {
2639
- nc ++
2640
- if nc >= n .qn {
2635
+ if id == n .id || time .Since (peer .ts ) < lostQuorumInterval {
2636
+ if nc ++ ; nc >= n .qn {
2641
2637
return true
2642
2638
}
2643
2639
}
@@ -2659,11 +2655,10 @@ func (n *raft) lostQuorumLocked() bool {
2659
2655
return false
2660
2656
}
2661
2657
2662
- now , nc := time . Now (). UnixNano (), 0
2658
+ nc := 0
2663
2659
for id , peer := range n .peers {
2664
- if id == n .id || time .Duration (now - peer .ts ) < lostQuorumInterval {
2665
- nc ++
2666
- if nc >= n .qn {
2660
+ if id == n .id || time .Since (peer .ts ) < lostQuorumInterval {
2661
+ if nc ++ ; nc >= n .qn {
2667
2662
return false
2668
2663
}
2669
2664
}
@@ -2979,7 +2974,7 @@ func (n *raft) applyCommit(index uint64) error {
2979
2974
2980
2975
if lp , ok := n .peers [newPeer ]; ! ok {
2981
2976
// We are not tracking this one automatically so we need to bump cluster size.
2982
- n .peers [newPeer ] = & lps {time .Now (). UnixNano () , 0 , true }
2977
+ n .peers [newPeer ] = & lps {time .Now (), 0 , true }
2983
2978
} else {
2984
2979
// Mark as added.
2985
2980
lp .kp = true
@@ -3135,9 +3130,9 @@ func (n *raft) trackPeer(peer string) error {
3135
3130
}
3136
3131
}
3137
3132
if ps := n .peers [peer ]; ps != nil {
3138
- ps .ts = time .Now (). UnixNano ()
3133
+ ps .ts = time .Now ()
3139
3134
} else if ! isRemoved {
3140
- n .peers [peer ] = & lps {time .Now (). UnixNano () , 0 , false }
3135
+ n .peers [peer ] = & lps {time .Now (), 0 , false }
3141
3136
}
3142
3137
n .Unlock ()
3143
3138
@@ -3432,9 +3427,9 @@ func (n *raft) processAppendEntry(ae *appendEntry, sub *subscription) {
3432
3427
// Track leader directly
3433
3428
if isNew && ae .leader != noLeader {
3434
3429
if ps := n .peers [ae .leader ]; ps != nil {
3435
- ps .ts = time .Now (). UnixNano ()
3430
+ ps .ts = time .Now ()
3436
3431
} else {
3437
- n .peers [ae .leader ] = & lps {time .Now (). UnixNano () , 0 , true }
3432
+ n .peers [ae .leader ] = & lps {time .Now (), 0 , true }
3438
3433
}
3439
3434
}
3440
3435
@@ -3695,9 +3690,9 @@ CONTINUE:
3695
3690
if newPeer := string (e .Data ); len (newPeer ) == idLen {
3696
3691
// Track directly, but wait for commit to be official
3697
3692
if ps := n .peers [newPeer ]; ps != nil {
3698
- ps .ts = time .Now (). UnixNano ()
3693
+ ps .ts = time .Now ()
3699
3694
} else {
3700
- n .peers [newPeer ] = & lps {time .Now (). UnixNano () , 0 , false }
3695
+ n .peers [newPeer ] = & lps {time .Now (), 0 , false }
3701
3696
}
3702
3697
// Store our peer in our global peer map for all peers.
3703
3698
peers .LoadOrStore (newPeer , newPeer )
@@ -3754,7 +3749,7 @@ func (n *raft) processPeerState(ps *peerState) {
3754
3749
lp .kp = true
3755
3750
n .peers [peer ] = lp
3756
3751
} else {
3757
- n .peers [peer ] = & lps {0 , 0 , true }
3752
+ n .peers [peer ] = & lps {time. Time {} , 0 , true }
3758
3753
}
3759
3754
}
3760
3755
n .debug ("Update peers from leader to %+v" , n .peers )
0 commit comments