mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00

Now that heartbeats are distinct from MsgApp{,Resp}, the retries currently performed in stepLeader's MsgAppResp section are only performed on an actual MsgAppResp (or a new MsgProp). This means that it may take a long time to recover from a dropped MsgAppResp in a quiet cluster. This commit adds a dedicated heartbeat response message. This message does not convey the follower's current log position because the MsgHeartbeat does not include the leaders term and index. Upon receipt of a heartbeat response, the leader may retry the latest MsgApp if it believes the follower to be behind.
83 lines
2.7 KiB
Protocol Buffer
83 lines
2.7 KiB
Protocol Buffer
package raftpb;
|
|
|
|
import "code.google.com/p/gogoprotobuf/gogoproto/gogo.proto";
|
|
|
|
option (gogoproto.marshaler_all) = true;
|
|
option (gogoproto.sizer_all) = true;
|
|
option (gogoproto.unmarshaler_all) = true;
|
|
option (gogoproto.goproto_getters_all) = false;
|
|
option (gogoproto.goproto_enum_prefix_all) = false;
|
|
|
|
enum EntryType {
|
|
EntryNormal = 0;
|
|
EntryConfChange = 1;
|
|
}
|
|
|
|
message Entry {
|
|
required EntryType Type = 1 [(gogoproto.nullable) = false];
|
|
required uint64 Term = 2 [(gogoproto.nullable) = false];
|
|
required uint64 Index = 3 [(gogoproto.nullable) = false];
|
|
optional bytes Data = 4 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message SnapshotMetadata {
|
|
required ConfState conf_state = 1 [(gogoproto.nullable) = false];
|
|
required uint64 index = 2 [(gogoproto.nullable) = false];
|
|
required uint64 term = 3 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message Snapshot {
|
|
optional bytes data = 1 [(gogoproto.nullable) = false];
|
|
required SnapshotMetadata metadata = 2 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
enum MessageType {
|
|
MsgHup = 0;
|
|
MsgBeat = 1;
|
|
MsgProp = 2;
|
|
MsgApp = 3;
|
|
MsgAppResp = 4;
|
|
MsgVote = 5;
|
|
MsgVoteResp = 6;
|
|
MsgSnap = 7;
|
|
MsgHeartbeat = 8;
|
|
MsgHeartbeatResp = 9;
|
|
}
|
|
|
|
message Message {
|
|
required MessageType type = 1 [(gogoproto.nullable) = false];
|
|
required uint64 to = 2 [(gogoproto.nullable) = false];
|
|
required uint64 from = 3 [(gogoproto.nullable) = false];
|
|
required uint64 term = 4 [(gogoproto.nullable) = false];
|
|
required uint64 logTerm = 5 [(gogoproto.nullable) = false];
|
|
required uint64 index = 6 [(gogoproto.nullable) = false];
|
|
repeated Entry entries = 7 [(gogoproto.nullable) = false];
|
|
required uint64 commit = 8 [(gogoproto.nullable) = false];
|
|
required Snapshot snapshot = 9 [(gogoproto.nullable) = false];
|
|
required bool reject = 10 [(gogoproto.nullable) = false];
|
|
required uint64 rejectHint = 11 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message HardState {
|
|
required uint64 term = 1 [(gogoproto.nullable) = false];
|
|
required uint64 vote = 2 [(gogoproto.nullable) = false];
|
|
required uint64 commit = 3 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ConfState {
|
|
repeated uint64 nodes = 1 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
enum ConfChangeType {
|
|
ConfChangeAddNode = 0;
|
|
ConfChangeRemoveNode = 1;
|
|
ConfChangeUpdateNode = 2;
|
|
}
|
|
|
|
message ConfChange {
|
|
required uint64 ID = 1 [(gogoproto.nullable) = false];
|
|
required ConfChangeType Type = 2 [(gogoproto.nullable) = false];
|
|
required uint64 NodeID = 3 [(gogoproto.nullable) = false];
|
|
optional bytes Context = 4 [(gogoproto.nullable) = false];
|
|
}
|