From 600456f4ba0f5be41b5e322e6b35e12acbdcbc5b Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sun, 13 Sep 2015 08:28:10 -0700 Subject: [PATCH] etcdserverpb: update proto file for raftInternalRequest We needs to assign each raftInternalRequest an ID for getting the response after it goes through raft. We also needs an empty response for error case. --- etcdserver/etcdserverpb/raft_internal.pb.go | 164 ++++++++++++++------ etcdserver/etcdserverpb/raft_internal.proto | 17 +- 2 files changed, 123 insertions(+), 58 deletions(-) diff --git a/etcdserver/etcdserverpb/raft_internal.pb.go b/etcdserver/etcdserverpb/raft_internal.pb.go index 540fc9a4c..fb79e9399 100644 --- a/etcdserver/etcdserverpb/raft_internal.pb.go +++ b/etcdserver/etcdserverpb/raft_internal.pb.go @@ -17,17 +17,25 @@ var _ = proto.Marshal // An InternalRaftRequest is the union of all requests which can be // sent via raft. type InternalRaftRequest struct { - V2 *Request `protobuf:"bytes,1,opt,name=v2" json:"v2,omitempty"` - Range *RangeRequest `protobuf:"bytes,2,opt,name=range" json:"range,omitempty"` - Put *PutRequest `protobuf:"bytes,3,opt,name=put" json:"put,omitempty"` - DeleteRange *DeleteRangeRequest `protobuf:"bytes,4,opt,name=delete_range" json:"delete_range,omitempty"` - Txn *TxnRequest `protobuf:"bytes,5,opt,name=txn" json:"txn,omitempty"` + ID uint64 `protobuf:"varint,1,opt,proto3" json:"ID,omitempty"` + V2 *Request `protobuf:"bytes,2,opt,name=v2" json:"v2,omitempty"` + Range *RangeRequest `protobuf:"bytes,3,opt,name=range" json:"range,omitempty"` + Put *PutRequest `protobuf:"bytes,4,opt,name=put" json:"put,omitempty"` + DeleteRange *DeleteRangeRequest `protobuf:"bytes,5,opt,name=delete_range" json:"delete_range,omitempty"` + Txn *TxnRequest `protobuf:"bytes,6,opt,name=txn" json:"txn,omitempty"` } func (m *InternalRaftRequest) Reset() { *m = InternalRaftRequest{} } func (m *InternalRaftRequest) String() string { return proto.CompactTextString(m) } func (*InternalRaftRequest) ProtoMessage() {} +type EmptyResponse struct { +} + +func (m *EmptyResponse) Reset() { *m = EmptyResponse{} } +func (m *EmptyResponse) String() string { return proto.CompactTextString(m) } +func (*EmptyResponse) ProtoMessage() {} + func (m *InternalRaftRequest) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -43,8 +51,13 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { _ = i var l int _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.ID)) + } if m.V2 != nil { - data[i] = 0xa + data[i] = 0x12 i++ i = encodeVarintRaftInternal(data, i, uint64(m.V2.Size())) n1, err := m.V2.MarshalTo(data[i:]) @@ -54,7 +67,7 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { i += n1 } if m.Range != nil { - data[i] = 0x12 + data[i] = 0x1a i++ i = encodeVarintRaftInternal(data, i, uint64(m.Range.Size())) n2, err := m.Range.MarshalTo(data[i:]) @@ -64,7 +77,7 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { i += n2 } if m.Put != nil { - data[i] = 0x1a + data[i] = 0x22 i++ i = encodeVarintRaftInternal(data, i, uint64(m.Put.Size())) n3, err := m.Put.MarshalTo(data[i:]) @@ -74,7 +87,7 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { i += n3 } if m.DeleteRange != nil { - data[i] = 0x22 + data[i] = 0x2a i++ i = encodeVarintRaftInternal(data, i, uint64(m.DeleteRange.Size())) n4, err := m.DeleteRange.MarshalTo(data[i:]) @@ -84,7 +97,7 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { i += n4 } if m.Txn != nil { - data[i] = 0x2a + data[i] = 0x32 i++ i = encodeVarintRaftInternal(data, i, uint64(m.Txn.Size())) n5, err := m.Txn.MarshalTo(data[i:]) @@ -96,6 +109,24 @@ func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *EmptyResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EmptyResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + func encodeFixed64RaftInternal(data []byte, offset int, v uint64) int { data[offset] = uint8(v) data[offset+1] = uint8(v >> 8) @@ -126,6 +157,9 @@ func encodeVarintRaftInternal(data []byte, offset int, v uint64) int { func (m *InternalRaftRequest) Size() (n int) { var l int _ = l + if m.ID != 0 { + n += 1 + sovRaftInternal(uint64(m.ID)) + } if m.V2 != nil { l = m.V2.Size() n += 1 + l + sovRaftInternal(uint64(l)) @@ -149,6 +183,12 @@ func (m *InternalRaftRequest) Size() (n int) { return n } +func (m *EmptyResponse) Size() (n int) { + var l int + _ = l + return n +} + func sovRaftInternal(x uint64) (n int) { for { n++ @@ -162,42 +202,6 @@ func sovRaftInternal(x uint64) (n int) { func sozRaftInternal(x uint64) (n int) { return sovRaftInternal(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (this *InternalRaftRequest) GetValue() interface{} { - if this.V2 != nil { - return this.V2 - } - if this.Range != nil { - return this.Range - } - if this.Put != nil { - return this.Put - } - if this.DeleteRange != nil { - return this.DeleteRange - } - if this.Txn != nil { - return this.Txn - } - return nil -} - -func (this *InternalRaftRequest) SetValue(value interface{}) bool { - switch vt := value.(type) { - case *Request: - this.V2 = vt - case *RangeRequest: - this.Range = vt - case *PutRequest: - this.Put = vt - case *DeleteRangeRequest: - this.DeleteRange = vt - case *TxnRequest: - this.Txn = vt - default: - return false - } - return true -} func (m *InternalRaftRequest) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -218,6 +222,22 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error { wireType := int(wire & 0x7) switch fieldNum { case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field V2", wireType) } @@ -247,7 +267,7 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) } @@ -277,7 +297,7 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 3: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Put", wireType) } @@ -307,7 +327,7 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 4: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field DeleteRange", wireType) } @@ -337,7 +357,7 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 5: + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Txn", wireType) } @@ -393,6 +413,50 @@ func (m *InternalRaftRequest) Unmarshal(data []byte) error { return nil } +func (m *EmptyResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + switch fieldNum { + default: + var sizeOfWire int + for { + sizeOfWire++ + wire >>= 7 + if wire == 0 { + break + } + } + iNdEx -= sizeOfWire + skippy, err := skipRaftInternal(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRaftInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + return nil +} func skipRaftInternal(data []byte) (n int, err error) { l := len(data) iNdEx := 0 diff --git a/etcdserver/etcdserverpb/raft_internal.proto b/etcdserver/etcdserverpb/raft_internal.proto index 7cf7b67d0..b774b6cb4 100644 --- a/etcdserver/etcdserverpb/raft_internal.proto +++ b/etcdserver/etcdserverpb/raft_internal.proto @@ -13,12 +13,13 @@ option (gogoproto.goproto_getters_all) = false; // An InternalRaftRequest is the union of all requests which can be // sent via raft. message InternalRaftRequest { - option (gogoproto.onlyone) = true; - oneof value { - Request v2 = 1; - RangeRequest range = 2; - PutRequest put = 3; - DeleteRangeRequest delete_range = 4; - TxnRequest txn = 5; - } + uint64 ID = 1; + Request v2 = 2; + RangeRequest range = 3; + PutRequest put = 4; + DeleteRangeRequest delete_range = 5; + TxnRequest txn = 6; +} + +message EmptyResponse { }