diff --git a/etcdserver/server.go b/etcdserver/server.go index dd232d5ef..d2324e57c 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -154,13 +154,13 @@ type Server interface { // EtcdServer is the production implementation of the Server interface type EtcdServer struct { - // r and inflightSnapshots must be the first elements to keep 64-bit alignment for atomic - // access to fields - - // count the number of inflight snapshots. - // MUST use atomic operation to access this field. - inflightSnapshots int64 - Cfg *ServerConfig + // inflightSnapshots holds count the number of snapshots currently inflight. + inflightSnapshots int64 // must use atomic operations to access; keep 64-bit aligned. + appliedIndex uint64 // must use atomic operations to access; keep 64-bit aligned. + // consistIndex used to hold the offset of current executing entry + // It is initialized to 0 before executing any entry. + consistIndex consistentIndex // must use atomic operations to access; keep 64-bit aligned. + Cfg *ServerConfig readych chan struct{} r raftNode @@ -195,10 +195,6 @@ type EtcdServer struct { // compactor is used to auto-compact the KV. compactor *compactor.Periodic - // consistent index used to hold the offset of current executing entry - // It is initialized to 0 before executing any entry. - consistIndex consistentIndex - // peerRt used to send requests (version, lease) to peers. peerRt http.RoundTripper reqIDGen *idutil.Generator @@ -212,8 +208,6 @@ type EtcdServer struct { // wg is used to wait for the go routines that depends on the server state // to exit when stopping the server. wg sync.WaitGroup - - appliedIndex uint64 } // NewServer creates a new EtcdServer from the supplied configuration. The diff --git a/raft/node.go b/raft/node.go index 59d61284d..22332be6b 100644 --- a/raft/node.go +++ b/raft/node.go @@ -38,7 +38,7 @@ var ( // SoftState provides state that is useful for logging and debugging. // The state is volatile and does not need to be persisted to the WAL. type SoftState struct { - Lead uint64 + Lead uint64 // must use atomic operations to access; keep 64-bit aligned. RaftState StateType } diff --git a/raft/raftpb/raft.pb.go b/raft/raftpb/raft.pb.go index 664b5b828..e60fb88df 100644 --- a/raft/raftpb/raft.pb.go +++ b/raft/raftpb/raft.pb.go @@ -183,9 +183,9 @@ func (x *ConfChangeType) UnmarshalJSON(data []byte) error { func (ConfChangeType) EnumDescriptor() ([]byte, []int) { return fileDescriptorRaft, []int{2} } type Entry struct { - Type EntryType `protobuf:"varint,1,opt,name=Type,json=type,enum=raftpb.EntryType" json:"Type"` Term uint64 `protobuf:"varint,2,opt,name=Term,json=term" json:"Term"` Index uint64 `protobuf:"varint,3,opt,name=Index,json=index" json:"Index"` + Type EntryType `protobuf:"varint,1,opt,name=Type,json=type,enum=raftpb.EntryType" json:"Type"` Data []byte `protobuf:"bytes,4,opt,name=Data,json=data" json:"Data,omitempty"` XXX_unrecognized []byte `json:"-"` } diff --git a/raft/raftpb/raft.proto b/raft/raftpb/raft.proto index 42f10d269..8cd630046 100644 --- a/raft/raftpb/raft.proto +++ b/raft/raftpb/raft.proto @@ -15,9 +15,9 @@ enum EntryType { } message Entry { + optional uint64 Term = 2 [(gogoproto.nullable) = false]; // must be 64-bit aligned for atomic operations + optional uint64 Index = 3 [(gogoproto.nullable) = false]; // must be 64-bit aligned for atomic operations optional EntryType Type = 1 [(gogoproto.nullable) = false]; - optional uint64 Term = 2 [(gogoproto.nullable) = false]; - optional uint64 Index = 3 [(gogoproto.nullable) = false]; optional bytes Data = 4; }