|
@@ -173,11 +173,13 @@ func TestApplyRepeat(t *testing.T) {
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- Cfg: &ServerConfig{},
|
|
|
|
|
- store: st,
|
|
|
|
|
- cluster: cl,
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ Cfg: &ServerConfig{},
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ cluster: cl,
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
|
|
s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
|
|
|
s.start()
|
|
s.start()
|
|
@@ -635,9 +637,11 @@ func TestDoProposal(t *testing.T) {
|
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- store: st,
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
|
|
srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
|
|
|
srv.start()
|
|
srv.start()
|
|
@@ -788,6 +792,7 @@ func TestSyncTimeout(t *testing.T) {
|
|
|
func TestSyncTrigger(t *testing.T) {
|
|
func TestSyncTrigger(t *testing.T) {
|
|
|
n := newReadyNode()
|
|
n := newReadyNode()
|
|
|
st := make(chan time.Time, 1)
|
|
st := make(chan time.Time, 1)
|
|
|
|
|
+ tk := &time.Ticker{C: st}
|
|
|
srv := &EtcdServer{
|
|
srv := &EtcdServer{
|
|
|
Cfg: &ServerConfig{TickMs: 1},
|
|
Cfg: &ServerConfig{TickMs: 1},
|
|
|
r: raftNode{
|
|
r: raftNode{
|
|
@@ -795,9 +800,10 @@ func TestSyncTrigger(t *testing.T) {
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
store: mockstore.NewNop(),
|
|
store: mockstore.NewNop(),
|
|
|
- SyncTicker: st,
|
|
|
|
|
|
|
+ SyncTicker: tk,
|
|
|
reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -910,9 +916,11 @@ func TestTriggerSnap(t *testing.T) {
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
storage: p,
|
|
storage: p,
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- store: st,
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
|
|
srv.applyV2 = &applierV2store{store: srv.store, cluster: srv.cluster}
|
|
|
|
|
|
|
@@ -979,9 +987,11 @@ func TestConcurrentApplyAndSnapshotV3(t *testing.T) {
|
|
|
storage: mockstorage.NewStorageRecorder(testdir),
|
|
storage: mockstorage.NewStorageRecorder(testdir),
|
|
|
raftStorage: rs,
|
|
raftStorage: rs,
|
|
|
msgSnapC: make(chan raftpb.Message, maxInFlightMsgSnap),
|
|
msgSnapC: make(chan raftpb.Message, maxInFlightMsgSnap),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- store: st,
|
|
|
|
|
- cluster: cl,
|
|
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ cluster: cl,
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
|
|
s.applyV2 = &applierV2store{store: s.store, cluster: s.cluster}
|
|
|
|
|
|
|
@@ -1059,11 +1069,13 @@ func TestAddMember(t *testing.T) {
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- Cfg: &ServerConfig{},
|
|
|
|
|
- store: st,
|
|
|
|
|
- cluster: cl,
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ Cfg: &ServerConfig{},
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ cluster: cl,
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
s.start()
|
|
s.start()
|
|
|
m := membership.Member{ID: 1234, RaftAttributes: membership.RaftAttributes{PeerURLs: []string{"foo"}}}
|
|
m := membership.Member{ID: 1234, RaftAttributes: membership.RaftAttributes{PeerURLs: []string{"foo"}}}
|
|
@@ -1099,11 +1111,13 @@ func TestRemoveMember(t *testing.T) {
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- Cfg: &ServerConfig{},
|
|
|
|
|
- store: st,
|
|
|
|
|
- cluster: cl,
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ Cfg: &ServerConfig{},
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ cluster: cl,
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
s.start()
|
|
s.start()
|
|
|
err := s.RemoveMember(context.TODO(), 1234)
|
|
err := s.RemoveMember(context.TODO(), 1234)
|
|
@@ -1138,10 +1152,12 @@ func TestUpdateMember(t *testing.T) {
|
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
raftStorage: raft.NewMemoryStorage(),
|
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
storage: mockstorage.NewStorageRecorder(""),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- store: st,
|
|
|
|
|
- cluster: cl,
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ store: st,
|
|
|
|
|
+ cluster: cl,
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
s.start()
|
|
s.start()
|
|
|
wm := membership.Member{ID: 1234, RaftAttributes: membership.RaftAttributes{PeerURLs: []string{"http://127.0.0.1:1"}}}
|
|
wm := membership.Member{ID: 1234, RaftAttributes: membership.RaftAttributes{PeerURLs: []string{"http://127.0.0.1:1"}}}
|
|
@@ -1173,11 +1189,12 @@ func TestPublish(t *testing.T) {
|
|
|
readych: make(chan struct{}),
|
|
readych: make(chan struct{}),
|
|
|
Cfg: &ServerConfig{TickMs: 1},
|
|
Cfg: &ServerConfig{TickMs: 1},
|
|
|
id: 1,
|
|
id: 1,
|
|
|
- r: raftNode{Node: n},
|
|
|
|
|
|
|
+ r: raftNode{Node: n, ticker: &time.Ticker{}},
|
|
|
attributes: membership.Attributes{Name: "node1", ClientURLs: []string{"http://a", "http://b"}},
|
|
attributes: membership.Attributes{Name: "node1", ClientURLs: []string{"http://a", "http://b"}},
|
|
|
cluster: &membership.RaftCluster{},
|
|
cluster: &membership.RaftCluster{},
|
|
|
w: w,
|
|
w: w,
|
|
|
reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
srv.publish(time.Hour)
|
|
srv.publish(time.Hour)
|
|
|
|
|
|
|
@@ -1216,13 +1233,15 @@ func TestPublishStopped(t *testing.T) {
|
|
|
r: raftNode{
|
|
r: raftNode{
|
|
|
Node: newNodeNop(),
|
|
Node: newNodeNop(),
|
|
|
transport: rafthttp.NewNopTransporter(),
|
|
transport: rafthttp.NewNopTransporter(),
|
|
|
|
|
+ ticker: &time.Ticker{},
|
|
|
},
|
|
},
|
|
|
- cluster: &membership.RaftCluster{},
|
|
|
|
|
- w: mockwait.NewNop(),
|
|
|
|
|
- done: make(chan struct{}),
|
|
|
|
|
- stopping: make(chan struct{}),
|
|
|
|
|
- stop: make(chan struct{}),
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ cluster: &membership.RaftCluster{},
|
|
|
|
|
+ w: mockwait.NewNop(),
|
|
|
|
|
+ done: make(chan struct{}),
|
|
|
|
|
+ stopping: make(chan struct{}),
|
|
|
|
|
+ stop: make(chan struct{}),
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
close(srv.stopping)
|
|
close(srv.stopping)
|
|
|
srv.publish(time.Hour)
|
|
srv.publish(time.Hour)
|
|
@@ -1232,11 +1251,12 @@ func TestPublishStopped(t *testing.T) {
|
|
|
func TestPublishRetry(t *testing.T) {
|
|
func TestPublishRetry(t *testing.T) {
|
|
|
n := newNodeRecorderStream()
|
|
n := newNodeRecorderStream()
|
|
|
srv := &EtcdServer{
|
|
srv := &EtcdServer{
|
|
|
- Cfg: &ServerConfig{TickMs: 1},
|
|
|
|
|
- r: raftNode{Node: n},
|
|
|
|
|
- w: mockwait.NewNop(),
|
|
|
|
|
- stopping: make(chan struct{}),
|
|
|
|
|
- reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
|
|
+ Cfg: &ServerConfig{TickMs: 1},
|
|
|
|
|
+ r: raftNode{Node: n, ticker: &time.Ticker{}},
|
|
|
|
|
+ w: mockwait.NewNop(),
|
|
|
|
|
+ stopping: make(chan struct{}),
|
|
|
|
|
+ reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
// expect multiple proposals from retrying
|
|
// expect multiple proposals from retrying
|
|
|
ch := make(chan struct{})
|
|
ch := make(chan struct{})
|
|
@@ -1270,11 +1290,12 @@ func TestUpdateVersion(t *testing.T) {
|
|
|
srv := &EtcdServer{
|
|
srv := &EtcdServer{
|
|
|
id: 1,
|
|
id: 1,
|
|
|
Cfg: &ServerConfig{TickMs: 1},
|
|
Cfg: &ServerConfig{TickMs: 1},
|
|
|
- r: raftNode{Node: n},
|
|
|
|
|
|
|
+ r: raftNode{Node: n, ticker: &time.Ticker{}},
|
|
|
attributes: membership.Attributes{Name: "node1", ClientURLs: []string{"http://node1.com"}},
|
|
attributes: membership.Attributes{Name: "node1", ClientURLs: []string{"http://node1.com"}},
|
|
|
cluster: &membership.RaftCluster{},
|
|
cluster: &membership.RaftCluster{},
|
|
|
w: w,
|
|
w: w,
|
|
|
reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
reqIDGen: idutil.NewGenerator(0, time.Time{}),
|
|
|
|
|
+ SyncTicker: &time.Ticker{},
|
|
|
}
|
|
}
|
|
|
srv.updateClusterVersion("2.0.0")
|
|
srv.updateClusterVersion("2.0.0")
|
|
|
|
|
|