diff --git a/pkg/kv/kvserver/client_replica_test.go b/pkg/kv/kvserver/client_replica_test.go index 71c9b0a0e844..a3d12df4fc79 100644 --- a/pkg/kv/kvserver/client_replica_test.go +++ b/pkg/kv/kvserver/client_replica_test.go @@ -3356,15 +3356,15 @@ func TestProposalOverhead(t *testing.T) { defer tc.Stopper().Stop(ctx) db := tc.Server(0).DB() - // NB: the expected overhead reflects the space overhead currently - // present in Raft commands. This test will fail if that overhead - // changes. Try to make this number go down and not up. It slightly - // undercounts because our proposal filter is called before - // maxLeaseIndex is filled in. The difference between the user and system - // overhead is that users ranges do not have rangefeeds on by default whereas - // system ranges do. + // NB: the expected overhead reflects the space overhead currently present + // in Raft commands. This test will fail if that overhead changes. Try to + // make this number go down and not up. It slightly undercounts because our + // proposal filter is called before MaxLeaseIndex or ClosedTimestamp are + // filled in. The difference between the user and system overhead is that + // users ranges do not have rangefeeds on by default whereas system ranges + // do. const ( - expectedUserOverhead uint32 = 45 + expectedUserOverhead uint32 = 42 ) t.Run("user-key overhead", func(t *testing.T) { userKey := tc.ScratchRange(t) diff --git a/pkg/kv/kvserver/kvserverpb/proposer_kv.pb.go b/pkg/kv/kvserver/kvserverpb/proposer_kv.pb.go index ae64003650e3..7b949c22bbb4 100644 --- a/pkg/kv/kvserver/kvserverpb/proposer_kv.pb.go +++ b/pkg/kv/kvserver/kvserverpb/proposer_kv.pb.go @@ -48,7 +48,7 @@ func (m *Split) Reset() { *m = Split{} } func (m *Split) String() string { return proto.CompactTextString(m) } func (*Split) ProtoMessage() {} func (*Split) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{0} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{0} } func (m *Split) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -83,7 +83,7 @@ func (m *Merge) Reset() { *m = Merge{} } func (m *Merge) String() string { return proto.CompactTextString(m) } func (*Merge) ProtoMessage() {} func (*Merge) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{1} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{1} } func (m *Merge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -117,7 +117,7 @@ type ChangeReplicas struct { func (m *ChangeReplicas) Reset() { *m = ChangeReplicas{} } func (*ChangeReplicas) ProtoMessage() {} func (*ChangeReplicas) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{2} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{2} } func (m *ChangeReplicas) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -169,7 +169,7 @@ func (m *ComputeChecksum) Reset() { *m = ComputeChecksum{} } func (m *ComputeChecksum) String() string { return proto.CompactTextString(m) } func (*ComputeChecksum) ProtoMessage() {} func (*ComputeChecksum) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{3} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{3} } func (m *ComputeChecksum) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -206,7 +206,7 @@ func (m *Compaction) Reset() { *m = Compaction{} } func (m *Compaction) String() string { return proto.CompactTextString(m) } func (*Compaction) ProtoMessage() {} func (*Compaction) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{4} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{4} } func (m *Compaction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -243,7 +243,7 @@ func (m *SuggestedCompaction) Reset() { *m = SuggestedCompaction{} } func (m *SuggestedCompaction) String() string { return proto.CompactTextString(m) } func (*SuggestedCompaction) ProtoMessage() {} func (*SuggestedCompaction) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{5} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{5} } func (m *SuggestedCompaction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -305,7 +305,7 @@ func (m *ReplicatedEvalResult) Reset() { *m = ReplicatedEvalResult{} } func (m *ReplicatedEvalResult) String() string { return proto.CompactTextString(m) } func (*ReplicatedEvalResult) ProtoMessage() {} func (*ReplicatedEvalResult) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{6} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{6} } func (m *ReplicatedEvalResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -349,7 +349,7 @@ func (m *ReplicatedEvalResult_AddSSTable) Reset() { *m = ReplicatedEvalR func (m *ReplicatedEvalResult_AddSSTable) String() string { return proto.CompactTextString(m) } func (*ReplicatedEvalResult_AddSSTable) ProtoMessage() {} func (*ReplicatedEvalResult_AddSSTable) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{6, 0} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{6, 0} } func (m *ReplicatedEvalResult_AddSSTable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -386,7 +386,7 @@ func (m *WriteBatch) Reset() { *m = WriteBatch{} } func (m *WriteBatch) String() string { return proto.CompactTextString(m) } func (*WriteBatch) ProtoMessage() {} func (*WriteBatch) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{7} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{7} } func (m *WriteBatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -423,7 +423,7 @@ func (m *LogicalOpLog) Reset() { *m = LogicalOpLog{} } func (m *LogicalOpLog) String() string { return proto.CompactTextString(m) } func (*LogicalOpLog) ProtoMessage() {} func (*LogicalOpLog) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{8} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{8} } func (m *LogicalOpLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -519,8 +519,11 @@ type RaftCommand struct { // in a command-specific way. If the value is not zero, the value is greater // or equal to that of the previous commands (and all before it). // - // This field is set through ClosedTimestampFooter hackery. - ClosedTimestamp hlc.Timestamp `protobuf:"bytes,17,opt,name=closed_timestamp,json=closedTimestamp,proto3" json:"closed_timestamp"` + // This field is set through ClosedTimestampFooter hackery. Unlike in the + // ClosedTimestampFooter, the field is nullable here so that it does not get + // encoded when empty. This prevents the field from being encoded twice in the + // combined RaftCommand+ClosedTimestampFooter proto. + ClosedTimestamp *hlc.Timestamp `protobuf:"bytes,17,opt,name=closed_timestamp,json=closedTimestamp,proto3" json:"closed_timestamp,omitempty"` // replicated_eval_result is a set of structured information that instructs // replicated state changes to the part of a Range's replicated state machine // that exists outside of RocksDB. @@ -544,7 +547,7 @@ func (m *RaftCommand) Reset() { *m = RaftCommand{} } func (m *RaftCommand) String() string { return proto.CompactTextString(m) } func (*RaftCommand) ProtoMessage() {} func (*RaftCommand) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{9} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{9} } func (m *RaftCommand) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -583,7 +586,7 @@ func (m *RaftCommandFooter) Reset() { *m = RaftCommandFooter{} } func (m *RaftCommandFooter) String() string { return proto.CompactTextString(m) } func (*RaftCommandFooter) ProtoMessage() {} func (*RaftCommandFooter) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{10} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{10} } func (m *RaftCommandFooter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -612,6 +615,9 @@ var xxx_messageInfo_RaftCommandFooter proto.InternalMessageInfo // buffer to fill in the closed_timestamp field after most of the proto has been // marshaled already. type ClosedTimestampFooter struct { + // NOTE: unlike in RaftCommand, there's no reason to make this field nullable. + // If we don't want to include the field, we don't need to append the encoded + // footer to an encoded RaftCommand buffer. ClosedTimestamp hlc.Timestamp `protobuf:"bytes,17,opt,name=closed_timestamp,json=closedTimestamp,proto3" json:"closed_timestamp"` } @@ -619,7 +625,7 @@ func (m *ClosedTimestampFooter) Reset() { *m = ClosedTimestampFooter{} } func (m *ClosedTimestampFooter) String() string { return proto.CompactTextString(m) } func (*ClosedTimestampFooter) ProtoMessage() {} func (*ClosedTimestampFooter) Descriptor() ([]byte, []int) { - return fileDescriptor_proposer_kv_0b3536bd0bf3d98c, []int{11} + return fileDescriptor_proposer_kv_4be80e2a938c97b0, []int{11} } func (m *ClosedTimestampFooter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1366,16 +1372,18 @@ func (m *RaftCommand) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], v) } } - dAtA[i] = 0x8a - i++ - dAtA[i] = 0x1 - i++ - i = encodeVarintProposerKv(dAtA, i, uint64(m.ClosedTimestamp.Size())) - n21, err := m.ClosedTimestamp.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.ClosedTimestamp != nil { + dAtA[i] = 0x8a + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintProposerKv(dAtA, i, uint64(m.ClosedTimestamp.Size())) + n21, err := m.ClosedTimestamp.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n21 } - i += n21 return i, nil } @@ -1666,8 +1674,10 @@ func (m *RaftCommand) Size() (n int) { n += mapEntrySize + 2 + sovProposerKv(uint64(mapEntrySize)) } } - l = m.ClosedTimestamp.Size() - n += 2 + l + sovProposerKv(uint64(l)) + if m.ClosedTimestamp != nil { + l = m.ClosedTimestamp.Size() + n += 2 + l + sovProposerKv(uint64(l)) + } return n } @@ -3411,6 +3421,9 @@ func (m *RaftCommand) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.ClosedTimestamp == nil { + m.ClosedTimestamp = &hlc.Timestamp{} + } if err := m.ClosedTimestamp.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -3691,100 +3704,101 @@ var ( ) func init() { - proto.RegisterFile("kv/kvserver/kvserverpb/proposer_kv.proto", fileDescriptor_proposer_kv_0b3536bd0bf3d98c) -} - -var fileDescriptor_proposer_kv_0b3536bd0bf3d98c = []byte{ - // 1453 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x73, 0x13, 0xc7, - 0x12, 0xb7, 0x2c, 0xc9, 0x5e, 0xb5, 0x6c, 0x69, 0x3d, 0x18, 0xd8, 0xe7, 0xf7, 0x9e, 0xe4, 0xd2, - 0xe3, 0x51, 0x4e, 0x42, 0x56, 0x94, 0x9d, 0x54, 0xa5, 0x80, 0x4a, 0x61, 0xc9, 0x10, 0x2c, 0x6c, - 0x07, 0x46, 0x86, 0xa4, 0xc8, 0x61, 0x6b, 0xb4, 0x3b, 0xac, 0x36, 0x5a, 0x69, 0x97, 0x9d, 0x91, - 0xc0, 0x9f, 0x22, 0x49, 0x55, 0x0e, 0xb9, 0x24, 0xe1, 0x98, 0xaf, 0x91, 0x1b, 0x47, 0x8e, 0x54, - 0x0e, 0xaa, 0x60, 0x2e, 0xf9, 0x0c, 0x9c, 0x52, 0x33, 0x3b, 0xab, 0x3f, 0x29, 0x13, 0x8b, 0x24, - 0xb7, 0xd9, 0x9e, 0xe9, 0x5f, 0xf7, 0xf4, 0x9f, 0x5f, 0xcf, 0xc2, 0x46, 0x67, 0x50, 0xed, 0x0c, - 0x18, 0x8d, 0x06, 0x34, 0x1a, 0x2d, 0xc2, 0x56, 0x35, 0x8c, 0x82, 0x30, 0x60, 0x34, 0xb2, 0x3a, - 0x03, 0x33, 0x8c, 0x02, 0x1e, 0xa0, 0xb2, 0x1d, 0xd8, 0x9d, 0x28, 0x20, 0x76, 0xdb, 0xec, 0x0c, - 0xcc, 0xe4, 0xa8, 0xc9, 0x78, 0x10, 0x11, 0x97, 0x86, 0xad, 0xb5, 0x15, 0xb9, 0x19, 0xb6, 0xaa, - 0x24, 0xf4, 0x62, 0x9d, 0x35, 0x94, 0x88, 0x1c, 0xc2, 0x89, 0x92, 0x9d, 0x4b, 0x64, 0x5d, 0xca, - 0xc9, 0x84, 0xfc, 0xdf, 0x0a, 0xa9, 0x4a, 0x7b, 0xae, 0xd7, 0xa3, 0xe2, 0xc0, 0xc0, 0xb6, 0xd5, - 0xe6, 0x7f, 0x4e, 0xdc, 0xdc, 0x52, 0xbb, 0x95, 0x37, 0x5c, 0x82, 0x71, 0xc2, 0xa9, 0x3a, 0x63, - 0xf4, 0xb9, 0xe7, 0x57, 0xdb, 0xbe, 0x5d, 0xe5, 0x5e, 0x97, 0x32, 0x4e, 0xba, 0xa1, 0xda, 0x59, - 0x75, 0x03, 0x37, 0x90, 0xcb, 0xaa, 0x58, 0xc5, 0xd2, 0xca, 0x4f, 0x29, 0xc8, 0x36, 0x43, 0xdf, - 0xe3, 0xa8, 0x0e, 0x8b, 0x3c, 0xf2, 0x5c, 0x97, 0x46, 0x46, 0x6a, 0x3d, 0xb5, 0x91, 0xdf, 0x2c, - 0x9b, 0xe3, 0x50, 0xa8, 0xcb, 0x98, 0xf2, 0xe8, 0x61, 0x7c, 0xac, 0xa6, 0x3d, 0x1b, 0x96, 0xe7, - 0x9e, 0x0f, 0xcb, 0x29, 0x9c, 0x68, 0xa2, 0x43, 0xc8, 0x45, 0x6d, 0x66, 0x39, 0xd4, 0xe7, 0xc4, - 0x98, 0x97, 0x30, 0xff, 0x9f, 0x80, 0x51, 0xd7, 0x33, 0x93, 0xeb, 0x99, 0xfb, 0xf7, 0xeb, 0xf5, - 0x26, 0x27, 0x9c, 0xd5, 0x74, 0x01, 0x76, 0x3c, 0x2c, 0x6b, 0xf8, 0x56, 0x73, 0x47, 0xa8, 0x63, - 0x2d, 0x6a, 0x33, 0xb9, 0xba, 0x92, 0xf9, 0xed, 0x69, 0x39, 0x55, 0xc1, 0x90, 0xdd, 0xa7, 0x91, - 0x4b, 0x67, 0xf3, 0x54, 0x1e, 0x7d, 0xb3, 0xa7, 0x0a, 0xd3, 0x81, 0x42, 0xbd, 0x4d, 0x7a, 0x2e, - 0xc5, 0x34, 0xf4, 0x3d, 0x9b, 0x30, 0xb4, 0xf7, 0x47, 0xf0, 0x8d, 0x13, 0xc0, 0xa7, 0x75, 0xfe, - 0xcc, 0xca, 0x77, 0x4f, 0xcb, 0x73, 0x95, 0x97, 0xf3, 0x50, 0xac, 0x07, 0xdd, 0xb0, 0xcf, 0x69, - 0xbd, 0x4d, 0xed, 0x0e, 0xeb, 0x77, 0xd1, 0x97, 0x90, 0xb7, 0xd5, 0xda, 0xf2, 0x1c, 0x69, 0x6b, - 0xa9, 0xb6, 0x2b, 0x10, 0x7e, 0x19, 0x96, 0xb7, 0x5c, 0x8f, 0xb7, 0xfb, 0x2d, 0xd3, 0x0e, 0xba, - 0xd5, 0x91, 0x75, 0xa7, 0x35, 0x5e, 0x57, 0xc3, 0x8e, 0x5b, 0x95, 0xa9, 0xee, 0xf7, 0x3d, 0xc7, - 0xbc, 0x77, 0x6f, 0x77, 0xe7, 0x78, 0x58, 0x86, 0x04, 0x7d, 0x77, 0x07, 0x43, 0x82, 0xbe, 0xeb, - 0xa0, 0xff, 0xc1, 0x32, 0x23, 0x03, 0x6a, 0xb1, 0x1e, 0x09, 0x59, 0x3b, 0xe0, 0x32, 0x33, 0x1a, - 0x5e, 0x12, 0xc2, 0xa6, 0x92, 0xa1, 0x2d, 0xc8, 0x74, 0x03, 0x87, 0x1a, 0xe9, 0xf5, 0xd4, 0x46, - 0xe1, 0xc4, 0x90, 0x26, 0xe8, 0xfb, 0x81, 0x43, 0xb1, 0x3c, 0x8c, 0x4a, 0x10, 0xdb, 0x09, 0x03, - 0xaf, 0xc7, 0x8d, 0x8c, 0x84, 0x9d, 0x90, 0x20, 0x03, 0x16, 0x07, 0x34, 0x62, 0x5e, 0xd0, 0x33, - 0xb2, 0xeb, 0xa9, 0x8d, 0x65, 0x9c, 0x7c, 0xa2, 0x5b, 0x90, 0xe3, 0x34, 0xea, 0x7a, 0x3d, 0xc2, - 0xa9, 0xb1, 0xb0, 0x9e, 0xde, 0xc8, 0x6f, 0x5e, 0x38, 0xc1, 0xa6, 0x8a, 0xf1, 0x0e, 0x65, 0x76, - 0xe4, 0x85, 0x3c, 0x88, 0x6a, 0x19, 0x11, 0x23, 0x3c, 0x56, 0x56, 0x99, 0xbc, 0x0f, 0x20, 0x42, - 0x4c, 0x6c, 0x2e, 0xd0, 0x57, 0x21, 0xdb, 0x3a, 0xe2, 0x94, 0xc9, 0xb8, 0xa6, 0x71, 0xfc, 0x81, - 0x2e, 0x01, 0x62, 0x7d, 0xd7, 0xa5, 0x8c, 0x53, 0xc7, 0x22, 0xdc, 0xea, 0x91, 0x5e, 0xc0, 0x64, - 0x30, 0xd2, 0x58, 0x1f, 0xed, 0x6c, 0xf3, 0x03, 0x21, 0x57, 0xb8, 0xdf, 0xce, 0xc3, 0x99, 0x66, - 0xb2, 0x35, 0x61, 0xe1, 0x2e, 0xe4, 0x18, 0x27, 0x11, 0xb7, 0x3a, 0xf4, 0x48, 0x65, 0xef, 0x83, - 0xd7, 0xc3, 0xf2, 0xe5, 0x99, 0x32, 0x97, 0xdc, 0xee, 0x36, 0x3d, 0xc2, 0x9a, 0x84, 0xb9, 0x4d, - 0x8f, 0xd0, 0x3e, 0x2c, 0xd2, 0x9e, 0x23, 0x01, 0xe7, 0xff, 0x06, 0xe0, 0x02, 0xed, 0x39, 0x02, - 0xee, 0x1e, 0x80, 0x3d, 0xf2, 0x57, 0xa6, 0x35, 0xbf, 0xf9, 0x9e, 0x79, 0x0a, 0xbd, 0x99, 0xe3, - 0x2b, 0x4e, 0xd4, 0xf3, 0x04, 0x90, 0x0a, 0xcb, 0xcf, 0x1a, 0xac, 0xaa, 0xdc, 0x70, 0xea, 0xdc, - 0x18, 0x10, 0x1f, 0x53, 0xd6, 0xf7, 0x05, 0x8d, 0x64, 0x25, 0x1f, 0xa9, 0xee, 0x7f, 0xff, 0x54, - 0x83, 0x0a, 0x45, 0xb0, 0x00, 0xc5, 0xb1, 0x2e, 0xba, 0x06, 0x59, 0x26, 0x98, 0x46, 0x79, 0x7d, - 0xf1, 0x54, 0x10, 0xc9, 0x4b, 0x38, 0x56, 0x12, 0xda, 0x5d, 0xd1, 0xfd, 0xb2, 0x1e, 0x67, 0xd1, - 0x96, 0x5c, 0x81, 0x63, 0x25, 0xb4, 0x01, 0xba, 0xc7, 0x2c, 0x9f, 0x12, 0x46, 0xad, 0x88, 0x3e, - 0xea, 0x53, 0xc6, 0x8d, 0x05, 0x59, 0xd8, 0x05, 0x8f, 0xed, 0x09, 0x31, 0x8e, 0xa5, 0x68, 0x1b, - 0x72, 0x23, 0x92, 0x35, 0x34, 0x69, 0xeb, 0xbf, 0x13, 0xb6, 0x44, 0x7b, 0x9a, 0x6d, 0xdf, 0x36, - 0x0f, 0x93, 0x43, 0xa3, 0xda, 0x4d, 0x04, 0xe8, 0x0e, 0xe8, 0x0e, 0x0d, 0x23, 0x2a, 0xa3, 0xa8, - 0x68, 0x13, 0xde, 0x82, 0x36, 0x71, 0x71, 0xac, 0x2e, 0xb9, 0x12, 0x7d, 0x0e, 0x45, 0x5b, 0xb2, - 0x93, 0x15, 0x29, 0x7a, 0x32, 0x96, 0x24, 0x60, 0xf5, 0xf4, 0xd4, 0x4f, 0xb1, 0x1a, 0x2e, 0xd8, - 0xd3, 0xcc, 0x78, 0x01, 0x0a, 0x11, 0x79, 0xc8, 0x2d, 0x3f, 0x70, 0x95, 0xa7, 0xcb, 0xb2, 0x73, - 0x96, 0x84, 0x74, 0x2f, 0x70, 0x63, 0xfb, 0x8f, 0x20, 0x4f, 0x1c, 0xc7, 0x62, 0x8c, 0x93, 0x96, - 0x4f, 0x8d, 0x15, 0x69, 0xfb, 0xfa, 0xac, 0x55, 0x30, 0x55, 0x4b, 0xe6, 0xb6, 0xe3, 0x34, 0x9b, - 0x87, 0x02, 0xa7, 0x56, 0x10, 0xf4, 0x36, 0xfe, 0xc6, 0x40, 0x1c, 0xa7, 0x19, 0xdb, 0x40, 0x37, - 0x21, 0x1b, 0xfb, 0x83, 0xa4, 0xb1, 0x77, 0x67, 0x8a, 0x9c, 0xf4, 0x56, 0x25, 0x24, 0x56, 0x47, - 0x5f, 0xa5, 0xe0, 0x4c, 0x18, 0xd1, 0x81, 0x4a, 0x7e, 0xfc, 0x36, 0x20, 0xbe, 0xb1, 0x3a, 0x4b, - 0x6a, 0xaf, 0xbf, 0x1e, 0x96, 0xaf, 0xcd, 0x4e, 0xdb, 0x42, 0xb9, 0xee, 0x07, 0x76, 0x67, 0x84, - 0x80, 0x57, 0x84, 0x6d, 0x59, 0x60, 0x77, 0x94, 0x65, 0xf4, 0x05, 0xe8, 0x76, 0x3c, 0x37, 0xac, - 0x84, 0xce, 0x8d, 0xb3, 0xd2, 0x9b, 0xcb, 0x33, 0x35, 0xf2, 0xc4, 0xc0, 0xc1, 0x45, 0x7b, 0x5a, - 0xb0, 0xf6, 0x09, 0x4c, 0x04, 0x14, 0x21, 0xc8, 0x88, 0x57, 0x4a, 0x4c, 0x65, 0x58, 0xae, 0x51, - 0x19, 0xb2, 0x76, 0x64, 0x6f, 0x6d, 0xca, 0x5e, 0x5e, 0xae, 0xe5, 0x8e, 0x87, 0xe5, 0x6c, 0x1d, - 0xd7, 0xb7, 0x36, 0x71, 0x2c, 0x8f, 0xb9, 0xa0, 0x91, 0xd1, 0x52, 0xfa, 0x7c, 0x23, 0xa3, 0x65, - 0xf5, 0x85, 0x46, 0x46, 0x5b, 0xd4, 0xb5, 0x46, 0x46, 0xcb, 0xe9, 0xd0, 0xc8, 0x68, 0x05, 0xbd, - 0xd8, 0xc8, 0x68, 0x45, 0x5d, 0x6f, 0x64, 0x34, 0x5d, 0x5f, 0x69, 0x64, 0xb4, 0x33, 0xfa, 0x6a, - 0x63, 0x41, 0xfb, 0xe6, 0x40, 0xff, 0xe1, 0xa0, 0xb2, 0x0e, 0xf0, 0x59, 0xe4, 0x71, 0x5a, 0x23, - 0xdc, 0x6e, 0x9f, 0xe4, 0x40, 0xe5, 0x2e, 0x2c, 0xed, 0x05, 0xae, 0x67, 0x13, 0xff, 0xd3, 0x70, - 0x2f, 0x70, 0xd1, 0x36, 0xa4, 0x83, 0x50, 0x90, 0xba, 0x18, 0x17, 0xef, 0x9c, 0x96, 0xe7, 0x91, - 0xaa, 0x4a, 0xb3, 0xd0, 0xad, 0x7c, 0xbf, 0x00, 0x79, 0x4c, 0x1e, 0xf2, 0x7a, 0xd0, 0xed, 0x92, + proto.RegisterFile("kv/kvserver/kvserverpb/proposer_kv.proto", fileDescriptor_proposer_kv_4be80e2a938c97b0) +} + +var fileDescriptor_proposer_kv_4be80e2a938c97b0 = []byte{ + // 1459 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x5f, 0x6f, 0x13, 0xc7, + 0x16, 0x8f, 0x63, 0x3b, 0x59, 0x1f, 0x27, 0xf6, 0x66, 0x08, 0xb0, 0x37, 0xf7, 0x5e, 0x3b, 0xf2, + 0xe5, 0xa2, 0xdc, 0x5b, 0xba, 0x46, 0x49, 0x2b, 0x55, 0x80, 0x2a, 0x62, 0x07, 0x4a, 0x4c, 0x92, + 0xc2, 0x38, 0xd0, 0x8a, 0x3e, 0xac, 0xc6, 0xbb, 0xc3, 0x7a, 0xeb, 0xb5, 0x77, 0xd9, 0x19, 0x1b, + 0xf2, 0x29, 0xda, 0x4a, 0x95, 0xda, 0xa7, 0x96, 0xc7, 0x7e, 0x8d, 0xbe, 0xf1, 0xc8, 0x23, 0xea, + 0x83, 0x55, 0xc2, 0x4b, 0x3f, 0x03, 0x4f, 0xd5, 0xcc, 0xce, 0xfa, 0x0f, 0x0a, 0x8d, 0xa1, 0x6f, + 0xb3, 0x67, 0xe6, 0xfc, 0xce, 0x99, 0xf3, 0xe7, 0x77, 0x66, 0x61, 0xa3, 0x33, 0xa8, 0x76, 0x06, + 0x8c, 0x46, 0x03, 0x1a, 0x8d, 0x16, 0x61, 0xab, 0x1a, 0x46, 0x41, 0x18, 0x30, 0x1a, 0x59, 0x9d, + 0x81, 0x19, 0x46, 0x01, 0x0f, 0x50, 0xd9, 0x0e, 0xec, 0x4e, 0x14, 0x10, 0xbb, 0x6d, 0x76, 0x06, + 0x66, 0x72, 0xd4, 0x64, 0x3c, 0x88, 0x88, 0x4b, 0xc3, 0xd6, 0xda, 0x8a, 0xdc, 0x0c, 0x5b, 0x55, + 0x12, 0x7a, 0xb1, 0xce, 0x1a, 0x4a, 0x44, 0x0e, 0xe1, 0x44, 0xc9, 0xce, 0x25, 0xb2, 0x2e, 0xe5, + 0x64, 0x42, 0xfe, 0x4f, 0x85, 0x54, 0xa5, 0x3d, 0xd7, 0xeb, 0x51, 0x71, 0x60, 0x60, 0xdb, 0x6a, + 0xf3, 0x5f, 0x27, 0x6e, 0x6e, 0xa9, 0xdd, 0xca, 0x5b, 0x2e, 0xc1, 0x38, 0xe1, 0x54, 0x9d, 0x31, + 0xfa, 0xdc, 0xf3, 0xab, 0x6d, 0xdf, 0xae, 0x72, 0xaf, 0x4b, 0x19, 0x27, 0xdd, 0x50, 0xed, 0xac, + 0xba, 0x81, 0x1b, 0xc8, 0x65, 0x55, 0xac, 0x62, 0x69, 0xe5, 0x97, 0x14, 0x64, 0x9b, 0xa1, 0xef, + 0x71, 0x54, 0x87, 0x45, 0x1e, 0x79, 0xae, 0x4b, 0x23, 0x23, 0xb5, 0x9e, 0xda, 0xc8, 0x6f, 0x96, + 0xcd, 0x71, 0x28, 0xd4, 0x65, 0x4c, 0x79, 0xf4, 0x30, 0x3e, 0x56, 0xd3, 0x9e, 0x0d, 0xcb, 0x73, + 0xcf, 0x87, 0xe5, 0x14, 0x4e, 0x34, 0xd1, 0x21, 0xe4, 0xa2, 0x36, 0xb3, 0x1c, 0xea, 0x73, 0x62, + 0xcc, 0x4b, 0x98, 0xff, 0x4e, 0xc0, 0xa8, 0xeb, 0x99, 0xc9, 0xf5, 0xcc, 0xfd, 0xfb, 0xf5, 0x7a, + 0x93, 0x13, 0xce, 0x6a, 0xba, 0x00, 0x3b, 0x1e, 0x96, 0x35, 0x7c, 0xab, 0xb9, 0x23, 0xd4, 0xb1, + 0x16, 0xb5, 0x99, 0x5c, 0x5d, 0xc9, 0xfc, 0xf1, 0xb4, 0x9c, 0xaa, 0x60, 0xc8, 0xee, 0xd3, 0xc8, + 0xa5, 0xb3, 0x79, 0x2a, 0x8f, 0xbe, 0xdd, 0x53, 0x85, 0xe9, 0x40, 0xa1, 0xde, 0x26, 0x3d, 0x97, + 0x62, 0x1a, 0xfa, 0x9e, 0x4d, 0x18, 0xda, 0x7b, 0x13, 0x7c, 0xe3, 0x04, 0xf0, 0x69, 0x9d, 0xbf, + 0xb2, 0xf2, 0xe3, 0xd3, 0xf2, 0x5c, 0xe5, 0xe5, 0x3c, 0x14, 0xeb, 0x41, 0x37, 0xec, 0x73, 0x5a, + 0x6f, 0x53, 0xbb, 0xc3, 0xfa, 0x5d, 0xf4, 0x35, 0xe4, 0x6d, 0xb5, 0xb6, 0x3c, 0x47, 0xda, 0x5a, + 0xaa, 0xed, 0x0a, 0x84, 0xdf, 0x86, 0xe5, 0x2d, 0xd7, 0xe3, 0xed, 0x7e, 0xcb, 0xb4, 0x83, 0x6e, + 0x75, 0x64, 0xdd, 0x69, 0x8d, 0xd7, 0xd5, 0xb0, 0xe3, 0x56, 0x65, 0xaa, 0xfb, 0x7d, 0xcf, 0x31, + 0xef, 0xdd, 0xdb, 0xdd, 0x39, 0x1e, 0x96, 0x21, 0x41, 0xdf, 0xdd, 0xc1, 0x90, 0xa0, 0xef, 0x3a, + 0xe8, 0x3f, 0xb0, 0xcc, 0xc8, 0x80, 0x5a, 0xac, 0x47, 0x42, 0xd6, 0x0e, 0xb8, 0xcc, 0x8c, 0x86, + 0x97, 0x84, 0xb0, 0xa9, 0x64, 0x68, 0x0b, 0x32, 0xdd, 0xc0, 0xa1, 0x46, 0x7a, 0x3d, 0xb5, 0x51, + 0x38, 0x31, 0xa4, 0x09, 0xfa, 0x7e, 0xe0, 0x50, 0x2c, 0x0f, 0xa3, 0x12, 0xc4, 0x76, 0xc2, 0xc0, + 0xeb, 0x71, 0x23, 0x23, 0x61, 0x27, 0x24, 0xc8, 0x80, 0xc5, 0x01, 0x8d, 0x98, 0x17, 0xf4, 0x8c, + 0xec, 0x7a, 0x6a, 0x63, 0x19, 0x27, 0x9f, 0xe8, 0x16, 0xe4, 0x38, 0x8d, 0xba, 0x5e, 0x8f, 0x70, + 0x6a, 0x2c, 0xac, 0xa7, 0x37, 0xf2, 0x9b, 0x17, 0x4e, 0xb0, 0xa9, 0x62, 0xbc, 0x43, 0x99, 0x1d, + 0x79, 0x21, 0x0f, 0xa2, 0x5a, 0x46, 0xc4, 0x08, 0x8f, 0x95, 0x55, 0x26, 0xef, 0x03, 0x88, 0x10, + 0x13, 0x9b, 0x0b, 0xf4, 0x55, 0xc8, 0xb6, 0x8e, 0x38, 0x65, 0x32, 0xae, 0x69, 0x1c, 0x7f, 0xa0, + 0x4b, 0x80, 0x58, 0xdf, 0x75, 0x29, 0xe3, 0xd4, 0xb1, 0x08, 0xb7, 0x7a, 0xa4, 0x17, 0x30, 0x19, + 0x8c, 0x34, 0xd6, 0x47, 0x3b, 0xdb, 0xfc, 0x40, 0xc8, 0x15, 0xee, 0xf7, 0xf3, 0x70, 0xa6, 0x99, + 0x6c, 0x4d, 0x58, 0xb8, 0x0b, 0x39, 0xc6, 0x49, 0xc4, 0xad, 0x0e, 0x3d, 0x52, 0xd9, 0xfb, 0xe8, + 0xf5, 0xb0, 0x7c, 0x79, 0xa6, 0xcc, 0x25, 0xb7, 0xbb, 0x4d, 0x8f, 0xb0, 0x26, 0x61, 0x6e, 0xd3, + 0x23, 0xb4, 0x0f, 0x8b, 0xb4, 0xe7, 0x48, 0xc0, 0xf9, 0xbf, 0x01, 0xb8, 0x40, 0x7b, 0x8e, 0x80, + 0xbb, 0x07, 0x60, 0x8f, 0xfc, 0x95, 0x69, 0xcd, 0x6f, 0x7e, 0x60, 0x9e, 0x42, 0x6f, 0xe6, 0xf8, + 0x8a, 0x13, 0xf5, 0x3c, 0x01, 0xa4, 0xc2, 0xf2, 0xab, 0x06, 0xab, 0x2a, 0x37, 0x9c, 0x3a, 0x37, + 0x06, 0xc4, 0xc7, 0x94, 0xf5, 0x7d, 0x41, 0x23, 0x59, 0xc9, 0x47, 0xaa, 0xfb, 0x3f, 0x3c, 0xd5, + 0xa0, 0x42, 0x11, 0x2c, 0x40, 0x71, 0xac, 0x8b, 0xae, 0x41, 0x96, 0x09, 0xa6, 0x51, 0x5e, 0x5f, + 0x3c, 0x15, 0x44, 0xf2, 0x12, 0x8e, 0x95, 0x84, 0x76, 0x57, 0x74, 0xbf, 0xac, 0xc7, 0x59, 0xb4, + 0x25, 0x57, 0xe0, 0x58, 0x09, 0x6d, 0x80, 0xee, 0x31, 0xcb, 0xa7, 0x84, 0x51, 0x2b, 0xa2, 0x8f, + 0xfa, 0x94, 0x71, 0x63, 0x41, 0x16, 0x76, 0xc1, 0x63, 0x7b, 0x42, 0x8c, 0x63, 0x29, 0xda, 0x86, + 0xdc, 0x88, 0x64, 0x0d, 0x4d, 0xda, 0xfa, 0xf7, 0x84, 0x2d, 0xd1, 0x9e, 0x66, 0xdb, 0xb7, 0xcd, + 0xc3, 0xe4, 0xd0, 0xa8, 0x76, 0x13, 0x01, 0xba, 0x03, 0xba, 0x43, 0xc3, 0x88, 0xca, 0x28, 0x2a, + 0xda, 0x84, 0x77, 0xa0, 0x4d, 0x5c, 0x1c, 0xab, 0x4b, 0xae, 0x44, 0x5f, 0x42, 0xd1, 0x96, 0xec, + 0x64, 0x45, 0x8a, 0x9e, 0x8c, 0x25, 0x09, 0x58, 0x3d, 0x3d, 0xf5, 0x53, 0xac, 0x86, 0x0b, 0xf6, + 0x34, 0x33, 0x5e, 0x80, 0x42, 0x44, 0x1e, 0x72, 0xcb, 0x0f, 0x5c, 0xe5, 0xe9, 0xb2, 0xec, 0x9c, + 0x25, 0x21, 0xdd, 0x0b, 0xdc, 0xd8, 0xfe, 0x23, 0xc8, 0x13, 0xc7, 0xb1, 0x18, 0xe3, 0xa4, 0xe5, + 0x53, 0x63, 0x45, 0xda, 0xbe, 0x3e, 0x6b, 0x15, 0x4c, 0xd5, 0x92, 0xb9, 0xed, 0x38, 0xcd, 0xe6, + 0xa1, 0xc0, 0xa9, 0x15, 0x04, 0xbd, 0x8d, 0xbf, 0x31, 0x10, 0xc7, 0x69, 0xc6, 0x36, 0xd0, 0x4d, + 0xc8, 0xc6, 0xfe, 0x20, 0x69, 0xec, 0xff, 0x33, 0x45, 0x4e, 0x7a, 0xab, 0x12, 0x12, 0xab, 0xa3, + 0x6f, 0x52, 0x70, 0x26, 0x8c, 0xe8, 0x40, 0x25, 0x3f, 0x7e, 0x1b, 0x10, 0xdf, 0x58, 0x9d, 0x25, + 0xb5, 0xd7, 0x5f, 0x0f, 0xcb, 0xd7, 0x66, 0xa7, 0x6d, 0xa1, 0x5c, 0xf7, 0x03, 0xbb, 0x33, 0x42, + 0xc0, 0x2b, 0xc2, 0xb6, 0x2c, 0xb0, 0x3b, 0xca, 0x32, 0xfa, 0x0a, 0x74, 0x3b, 0x9e, 0x1b, 0x56, + 0x42, 0xe7, 0xc6, 0x59, 0xe9, 0xcd, 0xe5, 0x99, 0x1a, 0x79, 0x62, 0xe0, 0xe0, 0xa2, 0x3d, 0x2d, + 0x58, 0xfb, 0x0c, 0x26, 0x02, 0x8a, 0x10, 0x64, 0xc4, 0x2b, 0x25, 0xa6, 0x32, 0x2c, 0xd7, 0xa8, + 0x0c, 0x59, 0x3b, 0xb2, 0xb7, 0x36, 0x65, 0x2f, 0x2f, 0xd7, 0x72, 0xc7, 0xc3, 0x72, 0xb6, 0x8e, + 0xeb, 0x5b, 0x9b, 0x38, 0x96, 0xc7, 0x5c, 0xd0, 0xc8, 0x68, 0x29, 0x7d, 0xbe, 0x91, 0xd1, 0xb2, + 0xfa, 0x42, 0x23, 0xa3, 0x2d, 0xea, 0x5a, 0x23, 0xa3, 0xe5, 0x74, 0x68, 0x64, 0xb4, 0x82, 0x5e, + 0x6c, 0x64, 0xb4, 0xa2, 0xae, 0x37, 0x32, 0x9a, 0xae, 0xaf, 0x34, 0x32, 0xda, 0x19, 0x7d, 0xb5, + 0xb1, 0xa0, 0x7d, 0x77, 0xa0, 0xff, 0x74, 0x50, 0x59, 0x07, 0xf8, 0x22, 0xf2, 0x38, 0xad, 0x11, + 0x6e, 0xb7, 0x4f, 0x72, 0xa0, 0x72, 0x17, 0x96, 0xf6, 0x02, 0xd7, 0xb3, 0x89, 0xff, 0x79, 0xb8, + 0x17, 0xb8, 0x68, 0x1b, 0xd2, 0x41, 0x28, 0x48, 0x5d, 0x8c, 0x8b, 0xff, 0x9d, 0x96, 0xe7, 0x91, + 0xaa, 0x4a, 0xb3, 0xd0, 0xad, 0xfc, 0xb0, 0x00, 0x79, 0x4c, 0x1e, 0xf2, 0x7a, 0xd0, 0xed, 0x92, 0x9e, 0x83, 0x2e, 0x42, 0xb1, 0x4b, 0x9e, 0xa8, 0x94, 0x7b, 0x3d, 0x87, 0x3e, 0x91, 0xb4, 0x91, - 0xc1, 0xcb, 0x5d, 0xf2, 0x44, 0x66, 0x63, 0x57, 0x08, 0xd1, 0x21, 0xfc, 0x6b, 0xa2, 0x53, 0x47, + 0xc1, 0xcb, 0x5d, 0xf2, 0x44, 0x66, 0x63, 0x57, 0x08, 0xd1, 0x21, 0xfc, 0x63, 0xa2, 0x53, 0x47, 0xef, 0x46, 0xa9, 0x27, 0x67, 0x5b, 0x7e, 0xd3, 0x38, 0x61, 0x7e, 0xc5, 0x84, 0x71, 0x7e, 0xac, 0x7a, 0x47, 0x69, 0xca, 0x0d, 0x34, 0x80, 0xf3, 0xd3, 0x50, 0x16, 0x13, 0xe4, 0xd2, 0xb3, 0xa9, - 0xe4, 0x9c, 0x74, 0xed, 0xe3, 0xd7, 0xc3, 0xf2, 0x95, 0xb7, 0x1a, 0x01, 0x12, 0xb8, 0xa9, 0x50, + 0xe4, 0x9c, 0x74, 0xed, 0xd3, 0xd7, 0xc3, 0xf2, 0x95, 0x77, 0x1a, 0x01, 0x12, 0xb8, 0xa9, 0x50, 0xf0, 0xd9, 0x70, 0xd2, 0x5e, 0x22, 0x46, 0x8f, 0xe0, 0x5c, 0x34, 0xea, 0x38, 0x8b, 0x0e, 0x88, - 0x6f, 0x45, 0xb2, 0xe7, 0x64, 0x4f, 0xe7, 0x37, 0x3f, 0xfc, 0x4b, 0x0d, 0xab, 0xe2, 0xbc, 0x1a, - 0x9d, 0x34, 0x18, 0xf6, 0x20, 0xff, 0x58, 0x64, 0xdb, 0x6a, 0x89, 0x74, 0x1b, 0x85, 0x19, 0xe7, - 0xd1, 0xb8, 0x42, 0x30, 0x3c, 0x1e, 0x57, 0x4b, 0x13, 0x0a, 0x7e, 0x9c, 0x5e, 0x2b, 0x08, 0x05, - 0x25, 0x19, 0xc5, 0x19, 0xe7, 0xcd, 0x64, 0x41, 0xe1, 0x25, 0x7f, 0xb2, 0xbc, 0x1e, 0x00, 0xf0, - 0x88, 0xd8, 0xd4, 0x92, 0x85, 0xa8, 0xcb, 0x2a, 0xbb, 0x7a, 0x7a, 0x24, 0xc6, 0xd5, 0x64, 0x1e, - 0x0a, 0xf5, 0x1d, 0xc2, 0xc9, 0x8d, 0x1e, 0x8f, 0x8e, 0x70, 0x8e, 0x27, 0xdf, 0xe8, 0x00, 0x74, - 0xdb, 0x0f, 0x18, 0x75, 0xac, 0xf1, 0xcc, 0x58, 0x99, 0x7d, 0x66, 0x14, 0x63, 0xe5, 0x91, 0x78, - 0xed, 0x1a, 0x14, 0xa6, 0x8d, 0x21, 0x1d, 0xd2, 0xc9, 0x5b, 0x24, 0x87, 0xc5, 0x52, 0xbc, 0x82, - 0x06, 0xc4, 0xef, 0xc7, 0xb3, 0x38, 0x87, 0xe3, 0x8f, 0x2b, 0xf3, 0x1f, 0x89, 0x96, 0x4d, 0xeb, - 0x99, 0x51, 0xe3, 0xce, 0xeb, 0xe9, 0xb8, 0x29, 0x7f, 0x3c, 0xa8, 0x5c, 0x85, 0x95, 0x89, 0x0b, - 0xdd, 0x0c, 0x02, 0x4e, 0xa3, 0x59, 0x9b, 0xa4, 0xe2, 0xc2, 0xd9, 0xfa, 0xb4, 0x9f, 0x0a, 0xe0, - 0x1f, 0xbe, 0x7d, 0xed, 0xd2, 0xb3, 0x97, 0xa5, 0xb9, 0x67, 0xc7, 0xa5, 0xd4, 0xf3, 0xe3, 0x52, - 0xea, 0xc5, 0x71, 0x29, 0xf5, 0xeb, 0x71, 0x29, 0xf5, 0xf5, 0xab, 0xd2, 0xdc, 0xf3, 0x57, 0xa5, - 0xb9, 0x17, 0xaf, 0x4a, 0x73, 0x0f, 0x60, 0xfc, 0x83, 0xd4, 0x5a, 0x90, 0xff, 0x3a, 0x5b, 0xbf, - 0x07, 0x00, 0x00, 0xff, 0xff, 0x38, 0xb4, 0xb7, 0xb4, 0x06, 0x0e, 0x00, 0x00, + 0x6f, 0x45, 0xb2, 0xe7, 0x64, 0x4f, 0xe7, 0x37, 0x3f, 0x7e, 0xaf, 0x86, 0x55, 0x71, 0x5e, 0x8d, + 0x4e, 0x1a, 0x0c, 0x7b, 0x90, 0x7f, 0x2c, 0xb2, 0x6d, 0xb5, 0x44, 0xba, 0x8d, 0xc2, 0x8c, 0xf3, + 0x68, 0x5c, 0x21, 0x18, 0x1e, 0x8f, 0xab, 0xa5, 0x09, 0x05, 0x3f, 0x4e, 0xaf, 0x15, 0x84, 0x82, + 0x92, 0x8c, 0xe2, 0x8c, 0xf3, 0x66, 0xb2, 0xa0, 0xf0, 0x92, 0x3f, 0x59, 0x5e, 0x0f, 0x00, 0x78, + 0x44, 0x6c, 0x6a, 0xc9, 0x42, 0xd4, 0x65, 0x95, 0x5d, 0x3d, 0x3d, 0x12, 0xe3, 0x6a, 0x32, 0x0f, + 0x85, 0xfa, 0x0e, 0xe1, 0xe4, 0x46, 0x8f, 0x47, 0x47, 0x38, 0xc7, 0x93, 0x6f, 0x74, 0x0b, 0x74, + 0xdb, 0x0f, 0x18, 0x75, 0xac, 0xf1, 0xcc, 0x58, 0x99, 0x81, 0x58, 0x70, 0x31, 0x56, 0x1b, 0x09, + 0xd6, 0xae, 0x41, 0x61, 0xda, 0x0c, 0xd2, 0x21, 0x9d, 0xbc, 0x42, 0x72, 0x58, 0x2c, 0xc5, 0xfb, + 0x67, 0x40, 0xfc, 0x7e, 0x3c, 0x85, 0x73, 0x38, 0xfe, 0xb8, 0x32, 0xff, 0x89, 0x68, 0xd6, 0xb4, + 0x9e, 0x19, 0xb5, 0xec, 0xbc, 0x9e, 0x8e, 0xdb, 0xf1, 0xe7, 0x83, 0xca, 0x55, 0x58, 0x99, 0xb8, + 0xca, 0xcd, 0x20, 0xe0, 0x34, 0x9a, 0xb5, 0x3d, 0x2a, 0x2e, 0x9c, 0xad, 0x4f, 0xfb, 0xa9, 0x00, + 0x0e, 0xde, 0xf3, 0xde, 0xaa, 0x96, 0xde, 0xbc, 0x7d, 0xed, 0xd2, 0xb3, 0x97, 0xa5, 0xb9, 0x67, + 0xc7, 0xa5, 0xd4, 0xf3, 0xe3, 0x52, 0xea, 0xc5, 0x71, 0x29, 0xf5, 0xfb, 0x71, 0x29, 0xf5, 0xed, + 0xab, 0xd2, 0xdc, 0xf3, 0x57, 0xa5, 0xb9, 0x17, 0xaf, 0x4a, 0x73, 0x0f, 0x60, 0xfc, 0x6b, 0xd4, + 0x5a, 0x90, 0x7f, 0x39, 0x5b, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x67, 0x8b, 0xdb, 0x5f, 0x00, + 0x0e, 0x00, 0x00, } diff --git a/pkg/kv/kvserver/kvserverpb/proposer_kv.proto b/pkg/kv/kvserver/kvserverpb/proposer_kv.proto index 249b4e45ca58..391588572755 100644 --- a/pkg/kv/kvserver/kvserverpb/proposer_kv.proto +++ b/pkg/kv/kvserver/kvserverpb/proposer_kv.proto @@ -255,8 +255,11 @@ message RaftCommand { // in a command-specific way. If the value is not zero, the value is greater // or equal to that of the previous commands (and all before it). // - // This field is set through ClosedTimestampFooter hackery. - util.hlc.Timestamp closed_timestamp = 17 [(gogoproto.nullable) = false]; + // This field is set through ClosedTimestampFooter hackery. Unlike in the + // ClosedTimestampFooter, the field is nullable here so that it does not get + // encoded when empty. This prevents the field from being encoded twice in the + // combined RaftCommand+ClosedTimestampFooter proto. + util.hlc.Timestamp closed_timestamp = 17; reserved 3; @@ -298,5 +301,8 @@ message RaftCommandFooter { // buffer to fill in the closed_timestamp field after most of the proto has been // marshaled already. message ClosedTimestampFooter { + // NOTE: unlike in RaftCommand, there's no reason to make this field nullable. + // If we don't want to include the field, we don't need to append the encoded + // footer to an encoded RaftCommand buffer. util.hlc.Timestamp closed_timestamp = 17 [(gogoproto.nullable) = false]; } diff --git a/pkg/kv/kvserver/replica_application_state_machine.go b/pkg/kv/kvserver/replica_application_state_machine.go index 7793ca520fdd..69130255ea85 100644 --- a/pkg/kv/kvserver/replica_application_state_machine.go +++ b/pkg/kv/kvserver/replica_application_state_machine.go @@ -445,7 +445,7 @@ func (b *replicaAppBatch) Stage(cmdI apply.Command) (apply.CheckedCommand, error cmd.raftCmd.ReplicatedEvalResult = kvserverpb.ReplicatedEvalResult{} cmd.raftCmd.WriteBatch = nil cmd.raftCmd.LogicalOpLog = nil - cmd.raftCmd.ClosedTimestamp.Reset() + cmd.raftCmd.ClosedTimestamp = nil } else { // Assert that we're not writing under the closed timestamp. We can only do // these checks on IsIntentWrite requests, since others (for example, @@ -639,7 +639,7 @@ func (b *replicaAppBatch) runPreApplyTriggersAfterStagingWriteBatch( // // Alternatively if we discover that the RHS has already been removed // from this store, clean up its data. - splitPreApply(ctx, b.batch, res.Split.SplitTrigger, b.r, cmd.raftCmd.ClosedTimestamp) + splitPreApply(ctx, b.r, b.batch, res.Split.SplitTrigger, cmd.raftCmd.ClosedTimestamp) // The rangefeed processor will no longer be provided logical ops for // its entire range, so it needs to be shut down and all registrations @@ -823,13 +823,13 @@ func (b *replicaAppBatch) stageTrivialReplicatedEvalResult( if leaseAppliedIndex := cmd.leaseIndex; leaseAppliedIndex != 0 { b.state.LeaseAppliedIndex = leaseAppliedIndex } - if cts := cmd.raftCmd.ClosedTimestamp; !cts.IsEmpty() { + if cts := cmd.raftCmd.ClosedTimestamp; cts != nil && !cts.IsEmpty() { if cts.Less(b.state.ClosedTimestamp) { log.Fatalf(ctx, "closed timestamp regressing from %s to %s when applying command %x", b.state.ClosedTimestamp, cts, cmd.idKey) } - b.state.ClosedTimestamp = cts + b.state.ClosedTimestamp = *cts if clockTS, ok := cts.TryToClockTimestamp(); ok { b.maxTS.Forward(clockTS) } diff --git a/pkg/kv/kvserver/replica_proposal_buf_test.go b/pkg/kv/kvserver/replica_proposal_buf_test.go index 8b7df4c5c981..0fdf329f933d 100644 --- a/pkg/kv/kvserver/replica_proposal_buf_test.go +++ b/pkg/kv/kvserver/replica_proposal_buf_test.go @@ -716,7 +716,12 @@ func TestProposalBufferClosedTimestamp(t *testing.T) { type reqType int checkClosedTS := func(t *testing.T, r *testProposerRaft, exp hlc.Timestamp) { require.Len(t, r.lastProps, 1) - require.Equal(t, exp, r.lastProps[0].ClosedTimestamp) + if exp.IsEmpty() { + require.Nil(t, r.lastProps[0].ClosedTimestamp) + } else { + require.NotNil(t, r.lastProps[0].ClosedTimestamp) + require.Equal(t, exp, *r.lastProps[0].ClosedTimestamp) + } } // The lease that the proposals are made under. diff --git a/pkg/kv/kvserver/stateloader/stateloader.go b/pkg/kv/kvserver/stateloader/stateloader.go index a6610a807d39..a0da9c082c76 100644 --- a/pkg/kv/kvserver/stateloader/stateloader.go +++ b/pkg/kv/kvserver/stateloader/stateloader.go @@ -298,24 +298,23 @@ func (rsl StateLoader) LoadMVCCStats( // keys. We now deem those keys to be "legacy" because they have been replaced // by the range applied state key. // -// TODO(andrei): closedTimestamp is a pointer to avoid an allocation when -// putting it in RangeAppliedState. RangeAppliedState.ClosedTimestamp is made -// non-nullable (see comments on the field), this argument should be taken by -// value. +// TODO(andrei): closedTS is a pointer to avoid an allocation when putting it in +// RangeAppliedState. RangeAppliedState.ClosedTimestamp is made non-nullable +// (see comments on the field), this argument should be taken by value. func (rsl StateLoader) SetRangeAppliedState( ctx context.Context, readWriter storage.ReadWriter, appliedIndex, leaseAppliedIndex uint64, newMS *enginepb.MVCCStats, - closedTimestamp *hlc.Timestamp, + closedTS *hlc.Timestamp, ) error { as := enginepb.RangeAppliedState{ RaftAppliedIndex: appliedIndex, LeaseAppliedIndex: leaseAppliedIndex, RangeStats: newMS.ToPersistentStats(), } - if closedTimestamp != nil && !closedTimestamp.IsEmpty() { - as.ClosedTimestamp = closedTimestamp + if closedTS != nil && !closedTS.IsEmpty() { + as.ClosedTimestamp = closedTS } // The RangeAppliedStateKey is not included in stats. This is also reflected // in C.MVCCComputeStats and ComputeStatsForRange. @@ -498,7 +497,7 @@ func (rsl StateLoader) SetMVCCStats( // SetClosedTimestamp overwrites the closed timestamp. func (rsl StateLoader) SetClosedTimestamp( - ctx context.Context, readWriter storage.ReadWriter, closedTS hlc.Timestamp, + ctx context.Context, readWriter storage.ReadWriter, closedTS *hlc.Timestamp, ) error { as, err := rsl.LoadRangeAppliedState(ctx, readWriter) if err != nil { @@ -506,7 +505,7 @@ func (rsl StateLoader) SetClosedTimestamp( } return rsl.SetRangeAppliedState( ctx, readWriter, as.RaftAppliedIndex, as.LeaseAppliedIndex, - as.RangeStats.ToStatsPtr(), &closedTS) + as.RangeStats.ToStatsPtr(), closedTS) } // SetLegacyRaftTruncatedState overwrites the truncated state. diff --git a/pkg/kv/kvserver/store_split.go b/pkg/kv/kvserver/store_split.go index 7f8dccbfa3c4..9ec16989e7f7 100644 --- a/pkg/kv/kvserver/store_split.go +++ b/pkg/kv/kvserver/store_split.go @@ -30,11 +30,10 @@ import ( // split commit. func splitPreApply( ctx context.Context, + r *Replica, readWriter storage.ReadWriter, split roachpb.SplitTrigger, - r *Replica, - // The closed timestamp used to initialize the RHS. - closedTS hlc.Timestamp, + initClosedTS *hlc.Timestamp, ) { // Sanity check that the store is in the split. // @@ -123,7 +122,7 @@ func splitPreApply( } // Persist the closed timestamp. - if err := rsl.SetClosedTimestamp(ctx, readWriter, closedTS); err != nil { + if err := rsl.SetClosedTimestamp(ctx, readWriter, initClosedTS); err != nil { log.Fatalf(ctx, "%s", err) }