Files
Chris LuandGitHub d7d834b8f9 peer chunk sharing 1/8: proto definitions (#9130)
proto: define MountRegister/MountList and MountPeer service

Adds the wire types for peer chunk sharing between weed mount clients:

* filer.proto: MountRegister / MountList RPCs so each mount can heartbeat
  its peer-serve address into a filer-hosted registry, and refresh the
  list of peers. Tiny payload; the filer stores only O(fleet_size) state.

* mount_peer.proto (new): ChunkAnnounce / ChunkLookup RPCs for the
  mount-to-mount chunk directory. Each fid's directory entry lives on
  an HRW-assigned mount; announces and lookups route to that mount.

No behavior yet — later PRs wire the RPCs into the filer and mount.
See design-weed-mount-peer-chunk-sharing.md for the full design.
2026-04-18 20:02:55 -07:00

582 lines
18 KiB
Go

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.6
// protoc v6.33.4
// source: mount_peer.proto
package mount_peer_pb
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
unsafe "unsafe"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type ChunkAnnounceRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
FileIds []string `protobuf:"bytes,1,rep,name=file_ids,json=fileIds,proto3" json:"file_ids,omitempty"`
PeerAddr string `protobuf:"bytes,2,opt,name=peer_addr,json=peerAddr,proto3" json:"peer_addr,omitempty"`
Rack string `protobuf:"bytes,3,opt,name=rack,proto3" json:"rack,omitempty"`
TtlSeconds int32 `protobuf:"varint,4,opt,name=ttl_seconds,json=ttlSeconds,proto3" json:"ttl_seconds,omitempty"`
DataCenter string `protobuf:"bytes,5,opt,name=data_center,json=dataCenter,proto3" json:"data_center,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ChunkAnnounceRequest) Reset() {
*x = ChunkAnnounceRequest{}
mi := &file_mount_peer_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ChunkAnnounceRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChunkAnnounceRequest) ProtoMessage() {}
func (x *ChunkAnnounceRequest) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ChunkAnnounceRequest.ProtoReflect.Descriptor instead.
func (*ChunkAnnounceRequest) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{0}
}
func (x *ChunkAnnounceRequest) GetFileIds() []string {
if x != nil {
return x.FileIds
}
return nil
}
func (x *ChunkAnnounceRequest) GetPeerAddr() string {
if x != nil {
return x.PeerAddr
}
return ""
}
func (x *ChunkAnnounceRequest) GetRack() string {
if x != nil {
return x.Rack
}
return ""
}
func (x *ChunkAnnounceRequest) GetTtlSeconds() int32 {
if x != nil {
return x.TtlSeconds
}
return 0
}
func (x *ChunkAnnounceRequest) GetDataCenter() string {
if x != nil {
return x.DataCenter
}
return ""
}
type ChunkAnnounceResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
RejectedFileIds []string `protobuf:"bytes,1,rep,name=rejected_file_ids,json=rejectedFileIds,proto3" json:"rejected_file_ids,omitempty"` // receiver is not the owner of these fids
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ChunkAnnounceResponse) Reset() {
*x = ChunkAnnounceResponse{}
mi := &file_mount_peer_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ChunkAnnounceResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChunkAnnounceResponse) ProtoMessage() {}
func (x *ChunkAnnounceResponse) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ChunkAnnounceResponse.ProtoReflect.Descriptor instead.
func (*ChunkAnnounceResponse) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{1}
}
func (x *ChunkAnnounceResponse) GetRejectedFileIds() []string {
if x != nil {
return x.RejectedFileIds
}
return nil
}
type ChunkLookupRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
FileIds []string `protobuf:"bytes,1,rep,name=file_ids,json=fileIds,proto3" json:"file_ids,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ChunkLookupRequest) Reset() {
*x = ChunkLookupRequest{}
mi := &file_mount_peer_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ChunkLookupRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChunkLookupRequest) ProtoMessage() {}
func (x *ChunkLookupRequest) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ChunkLookupRequest.ProtoReflect.Descriptor instead.
func (*ChunkLookupRequest) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{2}
}
func (x *ChunkLookupRequest) GetFileIds() []string {
if x != nil {
return x.FileIds
}
return nil
}
type ChunkLookupResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
PeersByFid map[string]*PeerSet `protobuf:"bytes,1,rep,name=peers_by_fid,json=peersByFid,proto3" json:"peers_by_fid,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
NotOwnerFileIds []string `protobuf:"bytes,2,rep,name=not_owner_file_ids,json=notOwnerFileIds,proto3" json:"not_owner_file_ids,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ChunkLookupResponse) Reset() {
*x = ChunkLookupResponse{}
mi := &file_mount_peer_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ChunkLookupResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChunkLookupResponse) ProtoMessage() {}
func (x *ChunkLookupResponse) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ChunkLookupResponse.ProtoReflect.Descriptor instead.
func (*ChunkLookupResponse) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{3}
}
func (x *ChunkLookupResponse) GetPeersByFid() map[string]*PeerSet {
if x != nil {
return x.PeersByFid
}
return nil
}
func (x *ChunkLookupResponse) GetNotOwnerFileIds() []string {
if x != nil {
return x.NotOwnerFileIds
}
return nil
}
type PeerSet struct {
state protoimpl.MessageState `protogen:"open.v1"`
Peers []*PeerInfo `protobuf:"bytes,1,rep,name=peers,proto3" json:"peers,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *PeerSet) Reset() {
*x = PeerSet{}
mi := &file_mount_peer_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *PeerSet) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PeerSet) ProtoMessage() {}
func (x *PeerSet) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PeerSet.ProtoReflect.Descriptor instead.
func (*PeerSet) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{4}
}
func (x *PeerSet) GetPeers() []*PeerInfo {
if x != nil {
return x.Peers
}
return nil
}
type PeerInfo struct {
state protoimpl.MessageState `protogen:"open.v1"`
PeerAddr string `protobuf:"bytes,1,opt,name=peer_addr,json=peerAddr,proto3" json:"peer_addr,omitempty"`
Rack string `protobuf:"bytes,2,opt,name=rack,proto3" json:"rack,omitempty"`
DataCenter string `protobuf:"bytes,3,opt,name=data_center,json=dataCenter,proto3" json:"data_center,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *PeerInfo) Reset() {
*x = PeerInfo{}
mi := &file_mount_peer_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *PeerInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PeerInfo) ProtoMessage() {}
func (x *PeerInfo) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PeerInfo.ProtoReflect.Descriptor instead.
func (*PeerInfo) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{5}
}
func (x *PeerInfo) GetPeerAddr() string {
if x != nil {
return x.PeerAddr
}
return ""
}
func (x *PeerInfo) GetRack() string {
if x != nil {
return x.Rack
}
return ""
}
func (x *PeerInfo) GetDataCenter() string {
if x != nil {
return x.DataCenter
}
return ""
}
type FetchChunkRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
FileId string `protobuf:"bytes,1,opt,name=file_id,json=fileId,proto3" json:"file_id,omitempty"`
ExpectedEtag string `protobuf:"bytes,2,opt,name=expected_etag,json=expectedEtag,proto3" json:"expected_etag,omitempty"` // caller's expected MD5 over the FULL chunk.
// Only meaningful when offset=0 and length=0
// (a whole-chunk fetch); partial reads can't
// be verified against a whole-chunk MD5.
// Fetcher re-verifies end-to-end.
ExpectedSize uint64 `protobuf:"varint,3,opt,name=expected_size,json=expectedSize,proto3" json:"expected_size,omitempty"` // filer-reported chunk byte count; server sizes
// its cache-read buffer to exactly this so a
// sub-max-part-size chunk doesn't trigger the
// cache wrapper's all-or-nothing miss path.
Offset uint64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset,omitempty"` // optional: byte offset within the chunk to
// start reading from. 0 (default) means a
// whole-chunk transfer starting at byte zero.
Length uint64 `protobuf:"varint,5,opt,name=length,proto3" json:"length,omitempty"` // optional: number of bytes to return from
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *FetchChunkRequest) Reset() {
*x = FetchChunkRequest{}
mi := &file_mount_peer_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *FetchChunkRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FetchChunkRequest) ProtoMessage() {}
func (x *FetchChunkRequest) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[6]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FetchChunkRequest.ProtoReflect.Descriptor instead.
func (*FetchChunkRequest) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{6}
}
func (x *FetchChunkRequest) GetFileId() string {
if x != nil {
return x.FileId
}
return ""
}
func (x *FetchChunkRequest) GetExpectedEtag() string {
if x != nil {
return x.ExpectedEtag
}
return ""
}
func (x *FetchChunkRequest) GetExpectedSize() uint64 {
if x != nil {
return x.ExpectedSize
}
return 0
}
func (x *FetchChunkRequest) GetOffset() uint64 {
if x != nil {
return x.Offset
}
return 0
}
func (x *FetchChunkRequest) GetLength() uint64 {
if x != nil {
return x.Length
}
return 0
}
type FetchChunkResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // next frame of chunk bytes; concatenate across stream
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *FetchChunkResponse) Reset() {
*x = FetchChunkResponse{}
mi := &file_mount_peer_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *FetchChunkResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FetchChunkResponse) ProtoMessage() {}
func (x *FetchChunkResponse) ProtoReflect() protoreflect.Message {
mi := &file_mount_peer_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FetchChunkResponse.ProtoReflect.Descriptor instead.
func (*FetchChunkResponse) Descriptor() ([]byte, []int) {
return file_mount_peer_proto_rawDescGZIP(), []int{7}
}
func (x *FetchChunkResponse) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
var File_mount_peer_proto protoreflect.FileDescriptor
const file_mount_peer_proto_rawDesc = "" +
"\n" +
"\x10mount_peer.proto\x12\rmount_peer_pb\"\xa4\x01\n" +
"\x14ChunkAnnounceRequest\x12\x19\n" +
"\bfile_ids\x18\x01 \x03(\tR\afileIds\x12\x1b\n" +
"\tpeer_addr\x18\x02 \x01(\tR\bpeerAddr\x12\x12\n" +
"\x04rack\x18\x03 \x01(\tR\x04rack\x12\x1f\n" +
"\vttl_seconds\x18\x04 \x01(\x05R\n" +
"ttlSeconds\x12\x1f\n" +
"\vdata_center\x18\x05 \x01(\tR\n" +
"dataCenter\"C\n" +
"\x15ChunkAnnounceResponse\x12*\n" +
"\x11rejected_file_ids\x18\x01 \x03(\tR\x0frejectedFileIds\"/\n" +
"\x12ChunkLookupRequest\x12\x19\n" +
"\bfile_ids\x18\x01 \x03(\tR\afileIds\"\xef\x01\n" +
"\x13ChunkLookupResponse\x12T\n" +
"\fpeers_by_fid\x18\x01 \x03(\v22.mount_peer_pb.ChunkLookupResponse.PeersByFidEntryR\n" +
"peersByFid\x12+\n" +
"\x12not_owner_file_ids\x18\x02 \x03(\tR\x0fnotOwnerFileIds\x1aU\n" +
"\x0fPeersByFidEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12,\n" +
"\x05value\x18\x02 \x01(\v2\x16.mount_peer_pb.PeerSetR\x05value:\x028\x01\"8\n" +
"\aPeerSet\x12-\n" +
"\x05peers\x18\x01 \x03(\v2\x17.mount_peer_pb.PeerInfoR\x05peers\"\\\n" +
"\bPeerInfo\x12\x1b\n" +
"\tpeer_addr\x18\x01 \x01(\tR\bpeerAddr\x12\x12\n" +
"\x04rack\x18\x02 \x01(\tR\x04rack\x12\x1f\n" +
"\vdata_center\x18\x03 \x01(\tR\n" +
"dataCenter\"\xa6\x01\n" +
"\x11FetchChunkRequest\x12\x17\n" +
"\afile_id\x18\x01 \x01(\tR\x06fileId\x12#\n" +
"\rexpected_etag\x18\x02 \x01(\tR\fexpectedEtag\x12#\n" +
"\rexpected_size\x18\x03 \x01(\x04R\fexpectedSize\x12\x16\n" +
"\x06offset\x18\x04 \x01(\x04R\x06offset\x12\x16\n" +
"\x06length\x18\x05 \x01(\x04R\x06length\"(\n" +
"\x12FetchChunkResponse\x12\x12\n" +
"\x04data\x18\x01 \x01(\fR\x04data2\x98\x02\n" +
"\tMountPeer\x12\\\n" +
"\rChunkAnnounce\x12#.mount_peer_pb.ChunkAnnounceRequest\x1a$.mount_peer_pb.ChunkAnnounceResponse\"\x00\x12V\n" +
"\vChunkLookup\x12!.mount_peer_pb.ChunkLookupRequest\x1a\".mount_peer_pb.ChunkLookupResponse\"\x00\x12U\n" +
"\n" +
"FetchChunk\x12 .mount_peer_pb.FetchChunkRequest\x1a!.mount_peer_pb.FetchChunkResponse\"\x000\x01B6Z4github.com/seaweedfs/seaweedfs/weed/pb/mount_peer_pbb\x06proto3"
var (
file_mount_peer_proto_rawDescOnce sync.Once
file_mount_peer_proto_rawDescData []byte
)
func file_mount_peer_proto_rawDescGZIP() []byte {
file_mount_peer_proto_rawDescOnce.Do(func() {
file_mount_peer_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_mount_peer_proto_rawDesc), len(file_mount_peer_proto_rawDesc)))
})
return file_mount_peer_proto_rawDescData
}
var file_mount_peer_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_mount_peer_proto_goTypes = []any{
(*ChunkAnnounceRequest)(nil), // 0: mount_peer_pb.ChunkAnnounceRequest
(*ChunkAnnounceResponse)(nil), // 1: mount_peer_pb.ChunkAnnounceResponse
(*ChunkLookupRequest)(nil), // 2: mount_peer_pb.ChunkLookupRequest
(*ChunkLookupResponse)(nil), // 3: mount_peer_pb.ChunkLookupResponse
(*PeerSet)(nil), // 4: mount_peer_pb.PeerSet
(*PeerInfo)(nil), // 5: mount_peer_pb.PeerInfo
(*FetchChunkRequest)(nil), // 6: mount_peer_pb.FetchChunkRequest
(*FetchChunkResponse)(nil), // 7: mount_peer_pb.FetchChunkResponse
nil, // 8: mount_peer_pb.ChunkLookupResponse.PeersByFidEntry
}
var file_mount_peer_proto_depIdxs = []int32{
8, // 0: mount_peer_pb.ChunkLookupResponse.peers_by_fid:type_name -> mount_peer_pb.ChunkLookupResponse.PeersByFidEntry
5, // 1: mount_peer_pb.PeerSet.peers:type_name -> mount_peer_pb.PeerInfo
4, // 2: mount_peer_pb.ChunkLookupResponse.PeersByFidEntry.value:type_name -> mount_peer_pb.PeerSet
0, // 3: mount_peer_pb.MountPeer.ChunkAnnounce:input_type -> mount_peer_pb.ChunkAnnounceRequest
2, // 4: mount_peer_pb.MountPeer.ChunkLookup:input_type -> mount_peer_pb.ChunkLookupRequest
6, // 5: mount_peer_pb.MountPeer.FetchChunk:input_type -> mount_peer_pb.FetchChunkRequest
1, // 6: mount_peer_pb.MountPeer.ChunkAnnounce:output_type -> mount_peer_pb.ChunkAnnounceResponse
3, // 7: mount_peer_pb.MountPeer.ChunkLookup:output_type -> mount_peer_pb.ChunkLookupResponse
7, // 8: mount_peer_pb.MountPeer.FetchChunk:output_type -> mount_peer_pb.FetchChunkResponse
6, // [6:9] is the sub-list for method output_type
3, // [3:6] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
}
func init() { file_mount_peer_proto_init() }
func file_mount_peer_proto_init() {
if File_mount_peer_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_mount_peer_proto_rawDesc), len(file_mount_peer_proto_rawDesc)),
NumEnums: 0,
NumMessages: 9,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_mount_peer_proto_goTypes,
DependencyIndexes: file_mount_peer_proto_depIdxs,
MessageInfos: file_mount_peer_proto_msgTypes,
}.Build()
File_mount_peer_proto = out.File
file_mount_peer_proto_goTypes = nil
file_mount_peer_proto_depIdxs = nil
}