diff --git a/floodsub.go b/floodsub.go index f70a0a7a..3690f623 100644 --- a/floodsub.go +++ b/floodsub.go @@ -31,6 +31,7 @@ func NewFloodSub(ctx context.Context, h host.Host, opts ...Option) (*PubSub, err type FloodSubRouter struct { p *PubSub protocols []protocol.ID + tracer *pubsubTracer } func (fs *FloodSubRouter) Protocols() []protocol.ID { @@ -39,11 +40,16 @@ func (fs *FloodSubRouter) Protocols() []protocol.ID { func (fs *FloodSubRouter) Attach(p *PubSub) { fs.p = p + fs.tracer = p.tracer } -func (fs *FloodSubRouter) AddPeer(peer.ID, protocol.ID) {} +func (fs *FloodSubRouter) AddPeer(p peer.ID, proto protocol.ID) { + fs.tracer.AddPeer(p, proto) +} -func (fs *FloodSubRouter) RemovePeer(peer.ID) {} +func (fs *FloodSubRouter) RemovePeer(p peer.ID) { + fs.tracer.RemovePeer(p) +} func (fs *FloodSubRouter) EnoughPeers(topic string, suggested int) bool { // check all peers in the topic @@ -91,13 +97,19 @@ func (fs *FloodSubRouter) Publish(from peer.ID, msg *pb.Message) { select { case mch <- out: + fs.tracer.SendRPC(out, pid) default: log.Infof("dropping message to peer %s: queue full", pid) + fs.tracer.DropRPC(out, pid) // Drop it. The peer is too slow. } } } -func (fs *FloodSubRouter) Join(topic string) {} +func (fs *FloodSubRouter) Join(topic string) { + fs.tracer.Join(topic) +} -func (fs *FloodSubRouter) Leave(topic string) {} +func (fs *FloodSubRouter) Leave(topic string) { + fs.tracer.Join(topic) +} diff --git a/gossipsub.go b/gossipsub.go index 1b2026c7..6327dfa0 100644 --- a/gossipsub.go +++ b/gossipsub.go @@ -65,6 +65,7 @@ type GossipSubRouter struct { gossip map[peer.ID][]*pb.ControlIHave // pending gossip control map[peer.ID]*pb.ControlMessage // pending control messages mcache *MessageCache + tracer *pubsubTracer } func (gs *GossipSubRouter) Protocols() []protocol.ID { @@ -73,16 +74,19 @@ func (gs *GossipSubRouter) Protocols() []protocol.ID { func (gs *GossipSubRouter) Attach(p *PubSub) { gs.p = p + gs.tracer = p.tracer go gs.heartbeatTimer() } func (gs *GossipSubRouter) AddPeer(p peer.ID, proto protocol.ID) { log.Debugf("PEERUP: Add new peer %s using %s", p, proto) + gs.tracer.AddPeer(p, proto) gs.peers[p] = proto } func (gs *GossipSubRouter) RemovePeer(p peer.ID) { log.Debugf("PEERDOWN: Remove disconnected peer %s", p) + gs.tracer.RemovePeer(p) delete(gs.peers, p) for _, peers := range gs.mesh { delete(peers, p) @@ -208,6 +212,7 @@ func (gs *GossipSubRouter) handleGraft(p peer.ID, ctl *pb.ControlMessage) []*pb. prune = append(prune, topic) } else { log.Debugf("GRAFT: Add mesh link from %s in %s", p, topic) + gs.tracer.Graft(p, topic) peers[p] = struct{}{} gs.tagPeer(p, topic) } @@ -231,6 +236,7 @@ func (gs *GossipSubRouter) handlePrune(p peer.ID, ctl *pb.ControlMessage) { peers, ok := gs.mesh[topic] if ok { log.Debugf("PRUNE: Remove mesh link to %s in %s", p, topic) + gs.tracer.Prune(p, topic) delete(peers, p) gs.untagPeer(p, topic) } @@ -294,6 +300,7 @@ func (gs *GossipSubRouter) Join(topic string) { } log.Debugf("JOIN %s", topic) + gs.tracer.Join(topic) gmap, ok = gs.fanout[topic] if ok { @@ -319,6 +326,7 @@ func (gs *GossipSubRouter) Join(topic string) { for p := range gmap { log.Debugf("JOIN: Add mesh link to %s in %s", p, topic) + gs.tracer.Graft(p, topic) gs.sendGraft(p, topic) gs.tagPeer(p, topic) } @@ -331,11 +339,13 @@ func (gs *GossipSubRouter) Leave(topic string) { } log.Debugf("LEAVE %s", topic) + gs.tracer.Leave(topic) delete(gs.mesh, topic) for p := range gmap { log.Debugf("LEAVE: Remove mesh link to %s in %s", p, topic) + gs.tracer.Prune(p, topic) gs.sendPrune(p, topic) gs.untagPeer(p, topic) } @@ -384,8 +394,10 @@ func (gs *GossipSubRouter) sendRPC(p peer.ID, out *RPC) { select { case mch <- out: + gs.tracer.SendRPC(out, p) default: log.Infof("dropping message to peer %s: queue full", p) + gs.tracer.DropRPC(out, p) // push control messages that need to be retried ctl := out.GetControl() if ctl != nil { @@ -443,6 +455,7 @@ func (gs *GossipSubRouter) heartbeat() { for _, p := range plst { log.Debugf("HEARTBEAT: Add mesh link to %s in %s", p, topic) + gs.tracer.Graft(p, topic) peers[p] = struct{}{} gs.tagPeer(p, topic) topics := tograft[p] @@ -458,6 +471,7 @@ func (gs *GossipSubRouter) heartbeat() { for _, p := range plst[:idontneed] { log.Debugf("HEARTBEAT: Remove mesh link to %s in %s", p, topic) + gs.tracer.Prune(p, topic) delete(peers, p) gs.untagPeer(p, topic) topics := toprune[p] diff --git a/pb/trace.pb.go b/pb/trace.pb.go new file mode 100644 index 00000000..009d03d4 --- /dev/null +++ b/pb/trace.pb.go @@ -0,0 +1,6257 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: trace.proto + +package pubsub_pb + +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +type TraceEvent_Type int32 + +const ( + TraceEvent_PUBLISH_MESSAGE TraceEvent_Type = 0 + TraceEvent_REJECT_MESSAGE TraceEvent_Type = 1 + TraceEvent_DUPLICATE_MESSAGE TraceEvent_Type = 2 + TraceEvent_DELIVER_MESSAGE TraceEvent_Type = 3 + TraceEvent_ADD_PEER TraceEvent_Type = 4 + TraceEvent_REMOVE_PEER TraceEvent_Type = 5 + TraceEvent_RECV_RPC TraceEvent_Type = 6 + TraceEvent_SEND_RPC TraceEvent_Type = 7 + TraceEvent_DROP_RPC TraceEvent_Type = 8 + TraceEvent_JOIN TraceEvent_Type = 9 + TraceEvent_LEAVE TraceEvent_Type = 10 + TraceEvent_GRAFT TraceEvent_Type = 11 + TraceEvent_PRUNE TraceEvent_Type = 12 +) + +var TraceEvent_Type_name = map[int32]string{ + 0: "PUBLISH_MESSAGE", + 1: "REJECT_MESSAGE", + 2: "DUPLICATE_MESSAGE", + 3: "DELIVER_MESSAGE", + 4: "ADD_PEER", + 5: "REMOVE_PEER", + 6: "RECV_RPC", + 7: "SEND_RPC", + 8: "DROP_RPC", + 9: "JOIN", + 10: "LEAVE", + 11: "GRAFT", + 12: "PRUNE", +} + +var TraceEvent_Type_value = map[string]int32{ + "PUBLISH_MESSAGE": 0, + "REJECT_MESSAGE": 1, + "DUPLICATE_MESSAGE": 2, + "DELIVER_MESSAGE": 3, + "ADD_PEER": 4, + "REMOVE_PEER": 5, + "RECV_RPC": 6, + "SEND_RPC": 7, + "DROP_RPC": 8, + "JOIN": 9, + "LEAVE": 10, + "GRAFT": 11, + "PRUNE": 12, +} + +func (x TraceEvent_Type) Enum() *TraceEvent_Type { + p := new(TraceEvent_Type) + *p = x + return p +} + +func (x TraceEvent_Type) String() string { + return proto.EnumName(TraceEvent_Type_name, int32(x)) +} + +func (x *TraceEvent_Type) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(TraceEvent_Type_value, data, "TraceEvent_Type") + if err != nil { + return err + } + *x = TraceEvent_Type(value) + return nil +} + +func (TraceEvent_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 0} +} + +type TraceEvent struct { + Type *TraceEvent_Type `protobuf:"varint,1,opt,name=type,enum=pubsub.pb.TraceEvent_Type" json:"type,omitempty"` + PeerID []byte `protobuf:"bytes,2,opt,name=peerID" json:"peerID,omitempty"` + Timestamp *int64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` + PublishMessage *TraceEvent_PublishMessage `protobuf:"bytes,4,opt,name=publishMessage" json:"publishMessage,omitempty"` + RejectMessage *TraceEvent_RejectMessage `protobuf:"bytes,5,opt,name=rejectMessage" json:"rejectMessage,omitempty"` + DuplicateMessage *TraceEvent_DuplicateMessage `protobuf:"bytes,6,opt,name=duplicateMessage" json:"duplicateMessage,omitempty"` + DeliverMessage *TraceEvent_DeliverMessage `protobuf:"bytes,7,opt,name=deliverMessage" json:"deliverMessage,omitempty"` + AddPeer *TraceEvent_AddPeer `protobuf:"bytes,8,opt,name=addPeer" json:"addPeer,omitempty"` + RemovePeer *TraceEvent_RemovePeer `protobuf:"bytes,9,opt,name=removePeer" json:"removePeer,omitempty"` + RecvRPC *TraceEvent_RecvRPC `protobuf:"bytes,10,opt,name=recvRPC" json:"recvRPC,omitempty"` + SendRPC *TraceEvent_SendRPC `protobuf:"bytes,11,opt,name=sendRPC" json:"sendRPC,omitempty"` + DropRPC *TraceEvent_DropRPC `protobuf:"bytes,12,opt,name=dropRPC" json:"dropRPC,omitempty"` + Join *TraceEvent_Join `protobuf:"bytes,13,opt,name=join" json:"join,omitempty"` + Leave *TraceEvent_Leave `protobuf:"bytes,14,opt,name=leave" json:"leave,omitempty"` + Graft *TraceEvent_Graft `protobuf:"bytes,15,opt,name=graft" json:"graft,omitempty"` + Prune *TraceEvent_Prune `protobuf:"bytes,16,opt,name=prune" json:"prune,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent) Reset() { *m = TraceEvent{} } +func (m *TraceEvent) String() string { return proto.CompactTextString(m) } +func (*TraceEvent) ProtoMessage() {} +func (*TraceEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0} +} +func (m *TraceEvent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent.Merge(m, src) +} +func (m *TraceEvent) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent proto.InternalMessageInfo + +func (m *TraceEvent) GetType() TraceEvent_Type { + if m != nil && m.Type != nil { + return *m.Type + } + return TraceEvent_PUBLISH_MESSAGE +} + +func (m *TraceEvent) GetPeerID() []byte { + if m != nil { + return m.PeerID + } + return nil +} + +func (m *TraceEvent) GetTimestamp() int64 { + if m != nil && m.Timestamp != nil { + return *m.Timestamp + } + return 0 +} + +func (m *TraceEvent) GetPublishMessage() *TraceEvent_PublishMessage { + if m != nil { + return m.PublishMessage + } + return nil +} + +func (m *TraceEvent) GetRejectMessage() *TraceEvent_RejectMessage { + if m != nil { + return m.RejectMessage + } + return nil +} + +func (m *TraceEvent) GetDuplicateMessage() *TraceEvent_DuplicateMessage { + if m != nil { + return m.DuplicateMessage + } + return nil +} + +func (m *TraceEvent) GetDeliverMessage() *TraceEvent_DeliverMessage { + if m != nil { + return m.DeliverMessage + } + return nil +} + +func (m *TraceEvent) GetAddPeer() *TraceEvent_AddPeer { + if m != nil { + return m.AddPeer + } + return nil +} + +func (m *TraceEvent) GetRemovePeer() *TraceEvent_RemovePeer { + if m != nil { + return m.RemovePeer + } + return nil +} + +func (m *TraceEvent) GetRecvRPC() *TraceEvent_RecvRPC { + if m != nil { + return m.RecvRPC + } + return nil +} + +func (m *TraceEvent) GetSendRPC() *TraceEvent_SendRPC { + if m != nil { + return m.SendRPC + } + return nil +} + +func (m *TraceEvent) GetDropRPC() *TraceEvent_DropRPC { + if m != nil { + return m.DropRPC + } + return nil +} + +func (m *TraceEvent) GetJoin() *TraceEvent_Join { + if m != nil { + return m.Join + } + return nil +} + +func (m *TraceEvent) GetLeave() *TraceEvent_Leave { + if m != nil { + return m.Leave + } + return nil +} + +func (m *TraceEvent) GetGraft() *TraceEvent_Graft { + if m != nil { + return m.Graft + } + return nil +} + +func (m *TraceEvent) GetPrune() *TraceEvent_Prune { + if m != nil { + return m.Prune + } + return nil +} + +type TraceEvent_PublishMessage struct { + MessageID []byte `protobuf:"bytes,1,opt,name=messageID" json:"messageID,omitempty"` + Topics []string `protobuf:"bytes,2,rep,name=topics" json:"topics,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_PublishMessage) Reset() { *m = TraceEvent_PublishMessage{} } +func (m *TraceEvent_PublishMessage) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_PublishMessage) ProtoMessage() {} +func (*TraceEvent_PublishMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 0} +} +func (m *TraceEvent_PublishMessage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_PublishMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_PublishMessage.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_PublishMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_PublishMessage.Merge(m, src) +} +func (m *TraceEvent_PublishMessage) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_PublishMessage) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_PublishMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_PublishMessage proto.InternalMessageInfo + +func (m *TraceEvent_PublishMessage) GetMessageID() []byte { + if m != nil { + return m.MessageID + } + return nil +} + +func (m *TraceEvent_PublishMessage) GetTopics() []string { + if m != nil { + return m.Topics + } + return nil +} + +type TraceEvent_RejectMessage struct { + MessageID []byte `protobuf:"bytes,1,opt,name=messageID" json:"messageID,omitempty"` + ReceivedFrom []byte `protobuf:"bytes,2,opt,name=receivedFrom" json:"receivedFrom,omitempty"` + Reason *string `protobuf:"bytes,3,opt,name=reason" json:"reason,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_RejectMessage) Reset() { *m = TraceEvent_RejectMessage{} } +func (m *TraceEvent_RejectMessage) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_RejectMessage) ProtoMessage() {} +func (*TraceEvent_RejectMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 1} +} +func (m *TraceEvent_RejectMessage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_RejectMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_RejectMessage.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_RejectMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_RejectMessage.Merge(m, src) +} +func (m *TraceEvent_RejectMessage) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_RejectMessage) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_RejectMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_RejectMessage proto.InternalMessageInfo + +func (m *TraceEvent_RejectMessage) GetMessageID() []byte { + if m != nil { + return m.MessageID + } + return nil +} + +func (m *TraceEvent_RejectMessage) GetReceivedFrom() []byte { + if m != nil { + return m.ReceivedFrom + } + return nil +} + +func (m *TraceEvent_RejectMessage) GetReason() string { + if m != nil && m.Reason != nil { + return *m.Reason + } + return "" +} + +type TraceEvent_DuplicateMessage struct { + MessageID []byte `protobuf:"bytes,1,opt,name=messageID" json:"messageID,omitempty"` + ReceivedFrom []byte `protobuf:"bytes,2,opt,name=receivedFrom" json:"receivedFrom,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_DuplicateMessage) Reset() { *m = TraceEvent_DuplicateMessage{} } +func (m *TraceEvent_DuplicateMessage) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_DuplicateMessage) ProtoMessage() {} +func (*TraceEvent_DuplicateMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 2} +} +func (m *TraceEvent_DuplicateMessage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_DuplicateMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_DuplicateMessage.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_DuplicateMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_DuplicateMessage.Merge(m, src) +} +func (m *TraceEvent_DuplicateMessage) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_DuplicateMessage) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_DuplicateMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_DuplicateMessage proto.InternalMessageInfo + +func (m *TraceEvent_DuplicateMessage) GetMessageID() []byte { + if m != nil { + return m.MessageID + } + return nil +} + +func (m *TraceEvent_DuplicateMessage) GetReceivedFrom() []byte { + if m != nil { + return m.ReceivedFrom + } + return nil +} + +type TraceEvent_DeliverMessage struct { + MessageID []byte `protobuf:"bytes,1,opt,name=messageID" json:"messageID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_DeliverMessage) Reset() { *m = TraceEvent_DeliverMessage{} } +func (m *TraceEvent_DeliverMessage) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_DeliverMessage) ProtoMessage() {} +func (*TraceEvent_DeliverMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 3} +} +func (m *TraceEvent_DeliverMessage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_DeliverMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_DeliverMessage.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_DeliverMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_DeliverMessage.Merge(m, src) +} +func (m *TraceEvent_DeliverMessage) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_DeliverMessage) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_DeliverMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_DeliverMessage proto.InternalMessageInfo + +func (m *TraceEvent_DeliverMessage) GetMessageID() []byte { + if m != nil { + return m.MessageID + } + return nil +} + +type TraceEvent_AddPeer struct { + PeerID []byte `protobuf:"bytes,1,opt,name=peerID" json:"peerID,omitempty"` + Proto *string `protobuf:"bytes,2,opt,name=proto" json:"proto,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_AddPeer) Reset() { *m = TraceEvent_AddPeer{} } +func (m *TraceEvent_AddPeer) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_AddPeer) ProtoMessage() {} +func (*TraceEvent_AddPeer) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 4} +} +func (m *TraceEvent_AddPeer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_AddPeer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_AddPeer.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_AddPeer) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_AddPeer.Merge(m, src) +} +func (m *TraceEvent_AddPeer) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_AddPeer) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_AddPeer.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_AddPeer proto.InternalMessageInfo + +func (m *TraceEvent_AddPeer) GetPeerID() []byte { + if m != nil { + return m.PeerID + } + return nil +} + +func (m *TraceEvent_AddPeer) GetProto() string { + if m != nil && m.Proto != nil { + return *m.Proto + } + return "" +} + +type TraceEvent_RemovePeer struct { + PeerID []byte `protobuf:"bytes,1,opt,name=peerID" json:"peerID,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_RemovePeer) Reset() { *m = TraceEvent_RemovePeer{} } +func (m *TraceEvent_RemovePeer) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_RemovePeer) ProtoMessage() {} +func (*TraceEvent_RemovePeer) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 5} +} +func (m *TraceEvent_RemovePeer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_RemovePeer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_RemovePeer.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_RemovePeer) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_RemovePeer.Merge(m, src) +} +func (m *TraceEvent_RemovePeer) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_RemovePeer) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_RemovePeer.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_RemovePeer proto.InternalMessageInfo + +func (m *TraceEvent_RemovePeer) GetPeerID() []byte { + if m != nil { + return m.PeerID + } + return nil +} + +type TraceEvent_RecvRPC struct { + ReceivedFrom []byte `protobuf:"bytes,1,opt,name=receivedFrom" json:"receivedFrom,omitempty"` + Meta *TraceEvent_RPCMeta `protobuf:"bytes,2,opt,name=meta" json:"meta,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_RecvRPC) Reset() { *m = TraceEvent_RecvRPC{} } +func (m *TraceEvent_RecvRPC) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_RecvRPC) ProtoMessage() {} +func (*TraceEvent_RecvRPC) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 6} +} +func (m *TraceEvent_RecvRPC) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_RecvRPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_RecvRPC.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_RecvRPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_RecvRPC.Merge(m, src) +} +func (m *TraceEvent_RecvRPC) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_RecvRPC) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_RecvRPC.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_RecvRPC proto.InternalMessageInfo + +func (m *TraceEvent_RecvRPC) GetReceivedFrom() []byte { + if m != nil { + return m.ReceivedFrom + } + return nil +} + +func (m *TraceEvent_RecvRPC) GetMeta() *TraceEvent_RPCMeta { + if m != nil { + return m.Meta + } + return nil +} + +type TraceEvent_SendRPC struct { + SendTo []byte `protobuf:"bytes,1,opt,name=sendTo" json:"sendTo,omitempty"` + Meta *TraceEvent_RPCMeta `protobuf:"bytes,2,opt,name=meta" json:"meta,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_SendRPC) Reset() { *m = TraceEvent_SendRPC{} } +func (m *TraceEvent_SendRPC) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_SendRPC) ProtoMessage() {} +func (*TraceEvent_SendRPC) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 7} +} +func (m *TraceEvent_SendRPC) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_SendRPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_SendRPC.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_SendRPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_SendRPC.Merge(m, src) +} +func (m *TraceEvent_SendRPC) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_SendRPC) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_SendRPC.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_SendRPC proto.InternalMessageInfo + +func (m *TraceEvent_SendRPC) GetSendTo() []byte { + if m != nil { + return m.SendTo + } + return nil +} + +func (m *TraceEvent_SendRPC) GetMeta() *TraceEvent_RPCMeta { + if m != nil { + return m.Meta + } + return nil +} + +type TraceEvent_DropRPC struct { + SendTo []byte `protobuf:"bytes,1,opt,name=sendTo" json:"sendTo,omitempty"` + Meta *TraceEvent_RPCMeta `protobuf:"bytes,2,opt,name=meta" json:"meta,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_DropRPC) Reset() { *m = TraceEvent_DropRPC{} } +func (m *TraceEvent_DropRPC) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_DropRPC) ProtoMessage() {} +func (*TraceEvent_DropRPC) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 8} +} +func (m *TraceEvent_DropRPC) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_DropRPC) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_DropRPC.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_DropRPC) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_DropRPC.Merge(m, src) +} +func (m *TraceEvent_DropRPC) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_DropRPC) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_DropRPC.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_DropRPC proto.InternalMessageInfo + +func (m *TraceEvent_DropRPC) GetSendTo() []byte { + if m != nil { + return m.SendTo + } + return nil +} + +func (m *TraceEvent_DropRPC) GetMeta() *TraceEvent_RPCMeta { + if m != nil { + return m.Meta + } + return nil +} + +type TraceEvent_Join struct { + Topic *string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_Join) Reset() { *m = TraceEvent_Join{} } +func (m *TraceEvent_Join) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_Join) ProtoMessage() {} +func (*TraceEvent_Join) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 9} +} +func (m *TraceEvent_Join) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_Join) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_Join.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_Join) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_Join.Merge(m, src) +} +func (m *TraceEvent_Join) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_Join) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_Join.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_Join proto.InternalMessageInfo + +func (m *TraceEvent_Join) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEvent_Leave struct { + Topic *string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_Leave) Reset() { *m = TraceEvent_Leave{} } +func (m *TraceEvent_Leave) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_Leave) ProtoMessage() {} +func (*TraceEvent_Leave) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 10} +} +func (m *TraceEvent_Leave) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_Leave) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_Leave.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_Leave) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_Leave.Merge(m, src) +} +func (m *TraceEvent_Leave) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_Leave) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_Leave.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_Leave proto.InternalMessageInfo + +func (m *TraceEvent_Leave) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEvent_Graft struct { + PeerID []byte `protobuf:"bytes,1,opt,name=peerID" json:"peerID,omitempty"` + Topic *string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_Graft) Reset() { *m = TraceEvent_Graft{} } +func (m *TraceEvent_Graft) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_Graft) ProtoMessage() {} +func (*TraceEvent_Graft) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 11} +} +func (m *TraceEvent_Graft) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_Graft) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_Graft.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_Graft) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_Graft.Merge(m, src) +} +func (m *TraceEvent_Graft) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_Graft) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_Graft.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_Graft proto.InternalMessageInfo + +func (m *TraceEvent_Graft) GetPeerID() []byte { + if m != nil { + return m.PeerID + } + return nil +} + +func (m *TraceEvent_Graft) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEvent_Prune struct { + PeerID []byte `protobuf:"bytes,1,opt,name=peerID" json:"peerID,omitempty"` + Topic *string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_Prune) Reset() { *m = TraceEvent_Prune{} } +func (m *TraceEvent_Prune) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_Prune) ProtoMessage() {} +func (*TraceEvent_Prune) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 12} +} +func (m *TraceEvent_Prune) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_Prune) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_Prune.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_Prune) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_Prune.Merge(m, src) +} +func (m *TraceEvent_Prune) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_Prune) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_Prune.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_Prune proto.InternalMessageInfo + +func (m *TraceEvent_Prune) GetPeerID() []byte { + if m != nil { + return m.PeerID + } + return nil +} + +func (m *TraceEvent_Prune) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEvent_RPCMeta struct { + Messages []*TraceEvent_MessageMeta `protobuf:"bytes,1,rep,name=messages" json:"messages,omitempty"` + Subscription []*TraceEvent_SubMeta `protobuf:"bytes,2,rep,name=subscription" json:"subscription,omitempty"` + Control *TraceEvent_ControlMeta `protobuf:"bytes,3,opt,name=control" json:"control,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_RPCMeta) Reset() { *m = TraceEvent_RPCMeta{} } +func (m *TraceEvent_RPCMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_RPCMeta) ProtoMessage() {} +func (*TraceEvent_RPCMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 13} +} +func (m *TraceEvent_RPCMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_RPCMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_RPCMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_RPCMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_RPCMeta.Merge(m, src) +} +func (m *TraceEvent_RPCMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_RPCMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_RPCMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_RPCMeta proto.InternalMessageInfo + +func (m *TraceEvent_RPCMeta) GetMessages() []*TraceEvent_MessageMeta { + if m != nil { + return m.Messages + } + return nil +} + +func (m *TraceEvent_RPCMeta) GetSubscription() []*TraceEvent_SubMeta { + if m != nil { + return m.Subscription + } + return nil +} + +func (m *TraceEvent_RPCMeta) GetControl() *TraceEvent_ControlMeta { + if m != nil { + return m.Control + } + return nil +} + +type TraceEvent_MessageMeta struct { + MessageID []byte `protobuf:"bytes,1,opt,name=messageID" json:"messageID,omitempty"` + Topics []string `protobuf:"bytes,2,rep,name=topics" json:"topics,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_MessageMeta) Reset() { *m = TraceEvent_MessageMeta{} } +func (m *TraceEvent_MessageMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_MessageMeta) ProtoMessage() {} +func (*TraceEvent_MessageMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 14} +} +func (m *TraceEvent_MessageMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_MessageMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_MessageMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_MessageMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_MessageMeta.Merge(m, src) +} +func (m *TraceEvent_MessageMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_MessageMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_MessageMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_MessageMeta proto.InternalMessageInfo + +func (m *TraceEvent_MessageMeta) GetMessageID() []byte { + if m != nil { + return m.MessageID + } + return nil +} + +func (m *TraceEvent_MessageMeta) GetTopics() []string { + if m != nil { + return m.Topics + } + return nil +} + +type TraceEvent_SubMeta struct { + Subscribe *bool `protobuf:"varint,1,opt,name=subscribe" json:"subscribe,omitempty"` + Topic *string `protobuf:"bytes,2,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_SubMeta) Reset() { *m = TraceEvent_SubMeta{} } +func (m *TraceEvent_SubMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_SubMeta) ProtoMessage() {} +func (*TraceEvent_SubMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 15} +} +func (m *TraceEvent_SubMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_SubMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_SubMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_SubMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_SubMeta.Merge(m, src) +} +func (m *TraceEvent_SubMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_SubMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_SubMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_SubMeta proto.InternalMessageInfo + +func (m *TraceEvent_SubMeta) GetSubscribe() bool { + if m != nil && m.Subscribe != nil { + return *m.Subscribe + } + return false +} + +func (m *TraceEvent_SubMeta) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEvent_ControlMeta struct { + Ihave []*TraceEvent_ControlIHaveMeta `protobuf:"bytes,1,rep,name=ihave" json:"ihave,omitempty"` + Iwant []*TraceEvent_ControlIWantMeta `protobuf:"bytes,2,rep,name=iwant" json:"iwant,omitempty"` + Graft []*TraceEvent_ControlGraftMeta `protobuf:"bytes,3,rep,name=graft" json:"graft,omitempty"` + Prune []*TraceEvent_ControlPruneMeta `protobuf:"bytes,4,rep,name=prune" json:"prune,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_ControlMeta) Reset() { *m = TraceEvent_ControlMeta{} } +func (m *TraceEvent_ControlMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_ControlMeta) ProtoMessage() {} +func (*TraceEvent_ControlMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 16} +} +func (m *TraceEvent_ControlMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_ControlMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_ControlMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_ControlMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_ControlMeta.Merge(m, src) +} +func (m *TraceEvent_ControlMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_ControlMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_ControlMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_ControlMeta proto.InternalMessageInfo + +func (m *TraceEvent_ControlMeta) GetIhave() []*TraceEvent_ControlIHaveMeta { + if m != nil { + return m.Ihave + } + return nil +} + +func (m *TraceEvent_ControlMeta) GetIwant() []*TraceEvent_ControlIWantMeta { + if m != nil { + return m.Iwant + } + return nil +} + +func (m *TraceEvent_ControlMeta) GetGraft() []*TraceEvent_ControlGraftMeta { + if m != nil { + return m.Graft + } + return nil +} + +func (m *TraceEvent_ControlMeta) GetPrune() []*TraceEvent_ControlPruneMeta { + if m != nil { + return m.Prune + } + return nil +} + +type TraceEvent_ControlIHaveMeta struct { + Topic *string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + MessageIDs [][]byte `protobuf:"bytes,2,rep,name=messageIDs" json:"messageIDs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_ControlIHaveMeta) Reset() { *m = TraceEvent_ControlIHaveMeta{} } +func (m *TraceEvent_ControlIHaveMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_ControlIHaveMeta) ProtoMessage() {} +func (*TraceEvent_ControlIHaveMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 17} +} +func (m *TraceEvent_ControlIHaveMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_ControlIHaveMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_ControlIHaveMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_ControlIHaveMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_ControlIHaveMeta.Merge(m, src) +} +func (m *TraceEvent_ControlIHaveMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_ControlIHaveMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_ControlIHaveMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_ControlIHaveMeta proto.InternalMessageInfo + +func (m *TraceEvent_ControlIHaveMeta) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +func (m *TraceEvent_ControlIHaveMeta) GetMessageIDs() [][]byte { + if m != nil { + return m.MessageIDs + } + return nil +} + +type TraceEvent_ControlIWantMeta struct { + MessageIDs [][]byte `protobuf:"bytes,1,rep,name=messageIDs" json:"messageIDs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_ControlIWantMeta) Reset() { *m = TraceEvent_ControlIWantMeta{} } +func (m *TraceEvent_ControlIWantMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_ControlIWantMeta) ProtoMessage() {} +func (*TraceEvent_ControlIWantMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 18} +} +func (m *TraceEvent_ControlIWantMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_ControlIWantMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_ControlIWantMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_ControlIWantMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_ControlIWantMeta.Merge(m, src) +} +func (m *TraceEvent_ControlIWantMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_ControlIWantMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_ControlIWantMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_ControlIWantMeta proto.InternalMessageInfo + +func (m *TraceEvent_ControlIWantMeta) GetMessageIDs() [][]byte { + if m != nil { + return m.MessageIDs + } + return nil +} + +type TraceEvent_ControlGraftMeta struct { + Topic *string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_ControlGraftMeta) Reset() { *m = TraceEvent_ControlGraftMeta{} } +func (m *TraceEvent_ControlGraftMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_ControlGraftMeta) ProtoMessage() {} +func (*TraceEvent_ControlGraftMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 19} +} +func (m *TraceEvent_ControlGraftMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_ControlGraftMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_ControlGraftMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_ControlGraftMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_ControlGraftMeta.Merge(m, src) +} +func (m *TraceEvent_ControlGraftMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_ControlGraftMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_ControlGraftMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_ControlGraftMeta proto.InternalMessageInfo + +func (m *TraceEvent_ControlGraftMeta) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEvent_ControlPruneMeta struct { + Topic *string `protobuf:"bytes,1,opt,name=topic" json:"topic,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEvent_ControlPruneMeta) Reset() { *m = TraceEvent_ControlPruneMeta{} } +func (m *TraceEvent_ControlPruneMeta) String() string { return proto.CompactTextString(m) } +func (*TraceEvent_ControlPruneMeta) ProtoMessage() {} +func (*TraceEvent_ControlPruneMeta) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{0, 20} +} +func (m *TraceEvent_ControlPruneMeta) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEvent_ControlPruneMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEvent_ControlPruneMeta.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEvent_ControlPruneMeta) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEvent_ControlPruneMeta.Merge(m, src) +} +func (m *TraceEvent_ControlPruneMeta) XXX_Size() int { + return m.Size() +} +func (m *TraceEvent_ControlPruneMeta) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEvent_ControlPruneMeta.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEvent_ControlPruneMeta proto.InternalMessageInfo + +func (m *TraceEvent_ControlPruneMeta) GetTopic() string { + if m != nil && m.Topic != nil { + return *m.Topic + } + return "" +} + +type TraceEventBatch struct { + Batch []*TraceEvent `protobuf:"bytes,1,rep,name=batch" json:"batch,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TraceEventBatch) Reset() { *m = TraceEventBatch{} } +func (m *TraceEventBatch) String() string { return proto.CompactTextString(m) } +func (*TraceEventBatch) ProtoMessage() {} +func (*TraceEventBatch) Descriptor() ([]byte, []int) { + return fileDescriptor_0571941a1d628a80, []int{1} +} +func (m *TraceEventBatch) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TraceEventBatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TraceEventBatch.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalTo(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TraceEventBatch) XXX_Merge(src proto.Message) { + xxx_messageInfo_TraceEventBatch.Merge(m, src) +} +func (m *TraceEventBatch) XXX_Size() int { + return m.Size() +} +func (m *TraceEventBatch) XXX_DiscardUnknown() { + xxx_messageInfo_TraceEventBatch.DiscardUnknown(m) +} + +var xxx_messageInfo_TraceEventBatch proto.InternalMessageInfo + +func (m *TraceEventBatch) GetBatch() []*TraceEvent { + if m != nil { + return m.Batch + } + return nil +} + +func init() { + proto.RegisterEnum("pubsub.pb.TraceEvent_Type", TraceEvent_Type_name, TraceEvent_Type_value) + proto.RegisterType((*TraceEvent)(nil), "pubsub.pb.TraceEvent") + proto.RegisterType((*TraceEvent_PublishMessage)(nil), "pubsub.pb.TraceEvent.PublishMessage") + proto.RegisterType((*TraceEvent_RejectMessage)(nil), "pubsub.pb.TraceEvent.RejectMessage") + proto.RegisterType((*TraceEvent_DuplicateMessage)(nil), "pubsub.pb.TraceEvent.DuplicateMessage") + proto.RegisterType((*TraceEvent_DeliverMessage)(nil), "pubsub.pb.TraceEvent.DeliverMessage") + proto.RegisterType((*TraceEvent_AddPeer)(nil), "pubsub.pb.TraceEvent.AddPeer") + proto.RegisterType((*TraceEvent_RemovePeer)(nil), "pubsub.pb.TraceEvent.RemovePeer") + proto.RegisterType((*TraceEvent_RecvRPC)(nil), "pubsub.pb.TraceEvent.RecvRPC") + proto.RegisterType((*TraceEvent_SendRPC)(nil), "pubsub.pb.TraceEvent.SendRPC") + proto.RegisterType((*TraceEvent_DropRPC)(nil), "pubsub.pb.TraceEvent.DropRPC") + proto.RegisterType((*TraceEvent_Join)(nil), "pubsub.pb.TraceEvent.Join") + proto.RegisterType((*TraceEvent_Leave)(nil), "pubsub.pb.TraceEvent.Leave") + proto.RegisterType((*TraceEvent_Graft)(nil), "pubsub.pb.TraceEvent.Graft") + proto.RegisterType((*TraceEvent_Prune)(nil), "pubsub.pb.TraceEvent.Prune") + proto.RegisterType((*TraceEvent_RPCMeta)(nil), "pubsub.pb.TraceEvent.RPCMeta") + proto.RegisterType((*TraceEvent_MessageMeta)(nil), "pubsub.pb.TraceEvent.MessageMeta") + proto.RegisterType((*TraceEvent_SubMeta)(nil), "pubsub.pb.TraceEvent.SubMeta") + proto.RegisterType((*TraceEvent_ControlMeta)(nil), "pubsub.pb.TraceEvent.ControlMeta") + proto.RegisterType((*TraceEvent_ControlIHaveMeta)(nil), "pubsub.pb.TraceEvent.ControlIHaveMeta") + proto.RegisterType((*TraceEvent_ControlIWantMeta)(nil), "pubsub.pb.TraceEvent.ControlIWantMeta") + proto.RegisterType((*TraceEvent_ControlGraftMeta)(nil), "pubsub.pb.TraceEvent.ControlGraftMeta") + proto.RegisterType((*TraceEvent_ControlPruneMeta)(nil), "pubsub.pb.TraceEvent.ControlPruneMeta") + proto.RegisterType((*TraceEventBatch)(nil), "pubsub.pb.TraceEventBatch") +} + +func init() { proto.RegisterFile("trace.proto", fileDescriptor_0571941a1d628a80) } + +var fileDescriptor_0571941a1d628a80 = []byte{ + // 889 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x95, 0xd1, 0x6e, 0xe2, 0x46, + 0x14, 0x86, 0xeb, 0x80, 0x63, 0x7c, 0x30, 0x8e, 0x99, 0x36, 0x95, 0xe5, 0xb6, 0x11, 0x9b, 0x5d, + 0x45, 0xa8, 0x2b, 0xa1, 0x2a, 0xdb, 0x55, 0xa5, 0xb6, 0x17, 0x25, 0x78, 0x92, 0x10, 0x91, 0xc4, + 0x32, 0x24, 0xbd, 0x8c, 0x8c, 0x99, 0x6e, 0xbc, 0x02, 0xdb, 0xb2, 0x07, 0xaa, 0x7d, 0xa2, 0xbe, + 0x4a, 0xef, 0xda, 0x47, 0xa8, 0x72, 0xb7, 0x6f, 0x51, 0xcd, 0x0c, 0x36, 0xc1, 0x31, 0x6c, 0xd4, + 0xde, 0xcd, 0x0c, 0xdf, 0x7f, 0xce, 0xe1, 0xcc, 0x7f, 0xc6, 0x50, 0xa7, 0x89, 0xe7, 0x93, 0x4e, + 0x9c, 0x44, 0x34, 0x42, 0x6a, 0x3c, 0x1f, 0xa7, 0xf3, 0x71, 0x27, 0x1e, 0x1f, 0x7e, 0x6c, 0x02, + 0x8c, 0xd8, 0x4f, 0x78, 0x41, 0x42, 0x8a, 0xda, 0x50, 0xa5, 0x1f, 0x62, 0x62, 0x4a, 0x2d, 0xa9, + 0xad, 0x1f, 0x5b, 0x9d, 0x1c, 0xec, 0xac, 0xa0, 0xce, 0xe8, 0x43, 0x4c, 0x90, 0x0e, 0xbb, 0x31, + 0x21, 0x49, 0xdf, 0x36, 0x77, 0x5a, 0x52, 0x5b, 0x43, 0x4d, 0x50, 0x69, 0x30, 0x23, 0x29, 0xf5, + 0x66, 0xb1, 0x59, 0x69, 0x49, 0xed, 0x0a, 0xfa, 0x19, 0xf4, 0x78, 0x3e, 0x9e, 0x06, 0xe9, 0xfd, + 0x25, 0x49, 0x53, 0xef, 0x1d, 0x31, 0xab, 0x2d, 0xa9, 0x5d, 0x3f, 0x7e, 0x55, 0x1e, 0xd6, 0x59, + 0x63, 0xd1, 0x8f, 0xd0, 0x48, 0xc8, 0x7b, 0xe2, 0xd3, 0x4c, 0x2c, 0x73, 0xf1, 0xcb, 0x72, 0xb1, + 0xfb, 0x18, 0x45, 0xbf, 0x80, 0x31, 0x99, 0xc7, 0xd3, 0xc0, 0xf7, 0x28, 0xc9, 0xe4, 0xbb, 0x5c, + 0x7e, 0x54, 0x2e, 0xb7, 0x0b, 0x34, 0xab, 0x7d, 0x42, 0xa6, 0xc1, 0x82, 0x24, 0x99, 0x5e, 0xd9, + 0x56, 0xbb, 0xbd, 0xc6, 0xa2, 0x0e, 0x28, 0xde, 0x64, 0xe2, 0x10, 0x92, 0x98, 0x35, 0x2e, 0xfb, + 0xa6, 0x5c, 0xd6, 0x15, 0x10, 0xfa, 0x1e, 0x20, 0x21, 0xb3, 0x68, 0x41, 0xb8, 0x44, 0xe5, 0x92, + 0xd6, 0xa6, 0x3f, 0x9a, 0x71, 0x2c, 0x4b, 0x42, 0xfc, 0x85, 0xeb, 0xf4, 0x4c, 0xd8, 0x96, 0xc5, + 0x15, 0x10, 0xe3, 0x53, 0x12, 0x4e, 0x18, 0x5f, 0xdf, 0xc6, 0x0f, 0x05, 0xc4, 0xf8, 0x49, 0x12, + 0xc5, 0x8c, 0xd7, 0xb6, 0xf1, 0xb6, 0x80, 0x98, 0x79, 0xde, 0x47, 0x41, 0x68, 0x36, 0x38, 0xbc, + 0xc1, 0x3c, 0x17, 0x51, 0x10, 0xa2, 0x6f, 0x41, 0x9e, 0x12, 0x6f, 0x41, 0x4c, 0x9d, 0xa3, 0x5f, + 0x95, 0xa3, 0x03, 0x86, 0x30, 0xf6, 0x5d, 0xe2, 0xfd, 0x46, 0xcd, 0xbd, 0x6d, 0xec, 0x19, 0x43, + 0x18, 0x1b, 0x27, 0xf3, 0x90, 0x98, 0xc6, 0x36, 0xd6, 0x61, 0x88, 0xf5, 0x06, 0xf4, 0x82, 0xe3, + 0x9a, 0xa0, 0xce, 0xc4, 0xb2, 0x6f, 0xf3, 0x09, 0xd0, 0x98, 0xcb, 0x69, 0x14, 0x07, 0x7e, 0x6a, + 0xee, 0xb4, 0x2a, 0x6d, 0xd5, 0x3a, 0x87, 0xc6, 0xba, 0xd3, 0x4a, 0x34, 0x5f, 0x80, 0x96, 0x10, + 0x9f, 0x04, 0x0b, 0x32, 0x39, 0x4d, 0xa2, 0xd9, 0x72, 0x3e, 0x74, 0xd8, 0x4d, 0x88, 0x97, 0x46, + 0x21, 0x1f, 0x0e, 0xd5, 0xfa, 0x09, 0x8c, 0x27, 0xa6, 0x7b, 0x6e, 0x30, 0xeb, 0x25, 0xe8, 0x05, + 0xc7, 0x3d, 0x95, 0x5a, 0x6d, 0x50, 0x32, 0x7f, 0xad, 0x86, 0x55, 0x44, 0x6d, 0xb0, 0x3e, 0x45, + 0x34, 0xe2, 0xe1, 0x54, 0xeb, 0x6b, 0x80, 0x47, 0xb6, 0x2a, 0xc0, 0xd6, 0x00, 0x94, 0xcc, 0x41, + 0xc5, 0x6a, 0x44, 0xb4, 0xd7, 0x50, 0x9d, 0x11, 0xea, 0xf1, 0x60, 0x9b, 0x4d, 0xe8, 0xf4, 0x2e, + 0x09, 0xf5, 0xac, 0x53, 0x50, 0x32, 0x7f, 0xe9, 0xb0, 0xcb, 0xfc, 0x38, 0x8a, 0xfe, 0x63, 0x9c, + 0xcc, 0x77, 0xff, 0x2b, 0xce, 0x3e, 0x54, 0xb9, 0x25, 0x1b, 0x20, 0xf3, 0x9b, 0xe6, 0x31, 0x54, + 0xeb, 0x4b, 0x90, 0x85, 0xfd, 0xf2, 0x73, 0xd1, 0xaa, 0x23, 0x90, 0x85, 0xd5, 0x4a, 0x5a, 0x5a, + 0xe0, 0xb8, 0xcd, 0x3e, 0xc5, 0xfd, 0x21, 0x81, 0xb2, 0x2c, 0x05, 0xbd, 0x81, 0xda, 0xf2, 0x0e, + 0x53, 0x53, 0x6a, 0x55, 0xda, 0xf5, 0xe3, 0x17, 0xe5, 0xb5, 0x2f, 0x2f, 0x7d, 0x29, 0xd2, 0xd2, + 0xf9, 0x38, 0xf5, 0x93, 0x20, 0xa6, 0x41, 0x14, 0x72, 0x9f, 0x6e, 0x9e, 0xec, 0xf9, 0x98, 0x8b, + 0x8e, 0x41, 0xf1, 0xa3, 0x90, 0x26, 0xd1, 0x94, 0xbb, 0x71, 0x63, 0xa2, 0x9e, 0x80, 0x78, 0xa3, + 0xbe, 0x83, 0xfa, 0xe3, 0xbc, 0xcf, 0x18, 0x96, 0xd7, 0xa0, 0x64, 0x09, 0x9b, 0xa0, 0x2e, 0xab, + 0x1c, 0x8b, 0x8f, 0x4b, 0xad, 0xd8, 0x88, 0x8f, 0x12, 0xd4, 0x1f, 0xa5, 0x43, 0x6f, 0x41, 0x0e, + 0xee, 0xd9, 0x13, 0x21, 0x3a, 0x71, 0xb4, 0xb5, 0xc0, 0xfe, 0xb9, 0xb7, 0x20, 0xb9, 0xec, 0x77, + 0x2f, 0xa4, 0xcb, 0x3e, 0x7c, 0x42, 0xf6, 0xab, 0x17, 0xd2, 0x4c, 0x26, 0x1e, 0x99, 0xca, 0x33, + 0x64, 0xdc, 0x00, 0x99, 0x4c, 0xbc, 0x37, 0xd5, 0x67, 0xc8, 0xb8, 0x1f, 0x78, 0x2b, 0xdf, 0x82, + 0xf1, 0xa4, 0xf0, 0x75, 0xff, 0x21, 0x04, 0x90, 0xb7, 0x57, 0xf4, 0x53, 0xb3, 0x8e, 0x56, 0xb2, + 0xbc, 0xf0, 0x75, 0x4e, 0xe2, 0xdc, 0x8b, 0x9c, 0x5b, 0x55, 0x5a, 0xb0, 0xf7, 0x0a, 0xc9, 0xab, + 0x2a, 0x20, 0x87, 0x7f, 0x49, 0x50, 0xe5, 0x5f, 0xfa, 0xcf, 0x61, 0xcf, 0xb9, 0x39, 0x19, 0xf4, + 0x87, 0xe7, 0x77, 0x97, 0x78, 0x38, 0xec, 0x9e, 0x61, 0xe3, 0x33, 0x84, 0x40, 0x77, 0xf1, 0x05, + 0xee, 0x8d, 0xf2, 0x33, 0x09, 0xed, 0x43, 0xd3, 0xbe, 0x71, 0x06, 0xfd, 0x5e, 0x77, 0x84, 0xf3, + 0xe3, 0x1d, 0xa6, 0xb7, 0xf1, 0xa0, 0x7f, 0x8b, 0xdd, 0xfc, 0xb0, 0x82, 0x34, 0xa8, 0x75, 0x6d, + 0xfb, 0xce, 0xc1, 0xd8, 0x35, 0xaa, 0x68, 0x0f, 0xea, 0x2e, 0xbe, 0xbc, 0xbe, 0xc5, 0xe2, 0x40, + 0x66, 0x3f, 0xbb, 0xb8, 0x77, 0x7b, 0xe7, 0x3a, 0x3d, 0x63, 0x97, 0xed, 0x86, 0xf8, 0xca, 0xe6, + 0x3b, 0x85, 0xed, 0x6c, 0xf7, 0xda, 0xe1, 0xbb, 0x1a, 0xaa, 0x41, 0xf5, 0xe2, 0xba, 0x7f, 0x65, + 0xa8, 0x48, 0x05, 0x79, 0x80, 0xbb, 0xb7, 0xd8, 0x00, 0xb6, 0x3c, 0x73, 0xbb, 0xa7, 0x23, 0xa3, + 0xce, 0x96, 0x8e, 0x7b, 0x73, 0x85, 0x0d, 0xed, 0xf0, 0x07, 0xd8, 0x5b, 0xdd, 0xca, 0x89, 0x47, + 0xfd, 0x7b, 0xf4, 0x0a, 0xe4, 0x31, 0x5b, 0x2c, 0x5d, 0xb6, 0x5f, 0x7a, 0x81, 0x27, 0xda, 0x9f, + 0x0f, 0x07, 0xd2, 0xdf, 0x0f, 0x07, 0xd2, 0x3f, 0x0f, 0x07, 0xd2, 0xbf, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xa3, 0xb7, 0xeb, 0x75, 0x4b, 0x09, 0x00, 0x00, +} + +func (m *TraceEvent) 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 *TraceEvent) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Type != nil { + dAtA[i] = 0x8 + i++ + i = encodeVarintTrace(dAtA, i, uint64(*m.Type)) + } + if m.PeerID != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.PeerID))) + i += copy(dAtA[i:], m.PeerID) + } + if m.Timestamp != nil { + dAtA[i] = 0x18 + i++ + i = encodeVarintTrace(dAtA, i, uint64(*m.Timestamp)) + } + if m.PublishMessage != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.PublishMessage.Size())) + n1, err := m.PublishMessage.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.RejectMessage != nil { + dAtA[i] = 0x2a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.RejectMessage.Size())) + n2, err := m.RejectMessage.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.DuplicateMessage != nil { + dAtA[i] = 0x32 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.DuplicateMessage.Size())) + n3, err := m.DuplicateMessage.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + } + if m.DeliverMessage != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.DeliverMessage.Size())) + n4, err := m.DeliverMessage.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.AddPeer != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.AddPeer.Size())) + n5, err := m.AddPeer.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.RemovePeer != nil { + dAtA[i] = 0x4a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.RemovePeer.Size())) + n6, err := m.RemovePeer.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + } + if m.RecvRPC != nil { + dAtA[i] = 0x52 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.RecvRPC.Size())) + n7, err := m.RecvRPC.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if m.SendRPC != nil { + dAtA[i] = 0x5a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.SendRPC.Size())) + n8, err := m.SendRPC.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + if m.DropRPC != nil { + dAtA[i] = 0x62 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.DropRPC.Size())) + n9, err := m.DropRPC.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + if m.Join != nil { + dAtA[i] = 0x6a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Join.Size())) + n10, err := m.Join.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n10 + } + if m.Leave != nil { + dAtA[i] = 0x72 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Leave.Size())) + n11, err := m.Leave.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n11 + } + if m.Graft != nil { + dAtA[i] = 0x7a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Graft.Size())) + n12, err := m.Graft.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n12 + } + if m.Prune != nil { + dAtA[i] = 0x82 + i++ + dAtA[i] = 0x1 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Prune.Size())) + n13, err := m.Prune.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n13 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_PublishMessage) 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 *TraceEvent_PublishMessage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MessageID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.MessageID))) + i += copy(dAtA[i:], m.MessageID) + } + if len(m.Topics) > 0 { + for _, s := range m.Topics { + dAtA[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_RejectMessage) 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 *TraceEvent_RejectMessage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MessageID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.MessageID))) + i += copy(dAtA[i:], m.MessageID) + } + if m.ReceivedFrom != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.ReceivedFrom))) + i += copy(dAtA[i:], m.ReceivedFrom) + } + if m.Reason != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Reason))) + i += copy(dAtA[i:], *m.Reason) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_DuplicateMessage) 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 *TraceEvent_DuplicateMessage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MessageID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.MessageID))) + i += copy(dAtA[i:], m.MessageID) + } + if m.ReceivedFrom != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.ReceivedFrom))) + i += copy(dAtA[i:], m.ReceivedFrom) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_DeliverMessage) 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 *TraceEvent_DeliverMessage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MessageID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.MessageID))) + i += copy(dAtA[i:], m.MessageID) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_AddPeer) 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 *TraceEvent_AddPeer) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PeerID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.PeerID))) + i += copy(dAtA[i:], m.PeerID) + } + if m.Proto != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Proto))) + i += copy(dAtA[i:], *m.Proto) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_RemovePeer) 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 *TraceEvent_RemovePeer) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PeerID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.PeerID))) + i += copy(dAtA[i:], m.PeerID) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_RecvRPC) 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 *TraceEvent_RecvRPC) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ReceivedFrom != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.ReceivedFrom))) + i += copy(dAtA[i:], m.ReceivedFrom) + } + if m.Meta != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Meta.Size())) + n14, err := m.Meta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n14 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_SendRPC) 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 *TraceEvent_SendRPC) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.SendTo != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.SendTo))) + i += copy(dAtA[i:], m.SendTo) + } + if m.Meta != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Meta.Size())) + n15, err := m.Meta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_DropRPC) 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 *TraceEvent_DropRPC) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.SendTo != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.SendTo))) + i += copy(dAtA[i:], m.SendTo) + } + if m.Meta != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Meta.Size())) + n16, err := m.Meta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n16 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_Join) 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 *TraceEvent_Join) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Topic != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_Leave) 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 *TraceEvent_Leave) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Topic != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_Graft) 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 *TraceEvent_Graft) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PeerID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.PeerID))) + i += copy(dAtA[i:], m.PeerID) + } + if m.Topic != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_Prune) 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 *TraceEvent_Prune) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PeerID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.PeerID))) + i += copy(dAtA[i:], m.PeerID) + } + if m.Topic != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_RPCMeta) 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 *TraceEvent_RPCMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Messages) > 0 { + for _, msg := range m.Messages { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Subscription) > 0 { + for _, msg := range m.Subscription { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.Control != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintTrace(dAtA, i, uint64(m.Control.Size())) + n17, err := m.Control.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n17 + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_MessageMeta) 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 *TraceEvent_MessageMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MessageID != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(m.MessageID))) + i += copy(dAtA[i:], m.MessageID) + } + if len(m.Topics) > 0 { + for _, s := range m.Topics { + dAtA[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + dAtA[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + dAtA[i] = uint8(l) + i++ + i += copy(dAtA[i:], s) + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_SubMeta) 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 *TraceEvent_SubMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Subscribe != nil { + dAtA[i] = 0x8 + i++ + if *m.Subscribe { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.Topic != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_ControlMeta) 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 *TraceEvent_ControlMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Ihave) > 0 { + for _, msg := range m.Ihave { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Iwant) > 0 { + for _, msg := range m.Iwant { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Graft) > 0 { + for _, msg := range m.Graft { + dAtA[i] = 0x1a + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Prune) > 0 { + for _, msg := range m.Prune { + dAtA[i] = 0x22 + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_ControlIHaveMeta) 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 *TraceEvent_ControlIHaveMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Topic != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if len(m.MessageIDs) > 0 { + for _, b := range m.MessageIDs { + dAtA[i] = 0x12 + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(b))) + i += copy(dAtA[i:], b) + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_ControlIWantMeta) 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 *TraceEvent_ControlIWantMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.MessageIDs) > 0 { + for _, b := range m.MessageIDs { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(b))) + i += copy(dAtA[i:], b) + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_ControlGraftMeta) 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 *TraceEvent_ControlGraftMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Topic != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEvent_ControlPruneMeta) 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 *TraceEvent_ControlPruneMeta) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Topic != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(len(*m.Topic))) + i += copy(dAtA[i:], *m.Topic) + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *TraceEventBatch) 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 *TraceEventBatch) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Batch) > 0 { + for _, msg := range m.Batch { + dAtA[i] = 0xa + i++ + i = encodeVarintTrace(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.XXX_unrecognized != nil { + i += copy(dAtA[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeVarintTrace(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *TraceEvent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Type != nil { + n += 1 + sovTrace(uint64(*m.Type)) + } + if m.PeerID != nil { + l = len(m.PeerID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Timestamp != nil { + n += 1 + sovTrace(uint64(*m.Timestamp)) + } + if m.PublishMessage != nil { + l = m.PublishMessage.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.RejectMessage != nil { + l = m.RejectMessage.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.DuplicateMessage != nil { + l = m.DuplicateMessage.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.DeliverMessage != nil { + l = m.DeliverMessage.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.AddPeer != nil { + l = m.AddPeer.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.RemovePeer != nil { + l = m.RemovePeer.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.RecvRPC != nil { + l = m.RecvRPC.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.SendRPC != nil { + l = m.SendRPC.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.DropRPC != nil { + l = m.DropRPC.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.Join != nil { + l = m.Join.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.Leave != nil { + l = m.Leave.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.Graft != nil { + l = m.Graft.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.Prune != nil { + l = m.Prune.Size() + n += 2 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_PublishMessage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MessageID != nil { + l = len(m.MessageID) + n += 1 + l + sovTrace(uint64(l)) + } + if len(m.Topics) > 0 { + for _, s := range m.Topics { + l = len(s) + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_RejectMessage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MessageID != nil { + l = len(m.MessageID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.ReceivedFrom != nil { + l = len(m.ReceivedFrom) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Reason != nil { + l = len(*m.Reason) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_DuplicateMessage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MessageID != nil { + l = len(m.MessageID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.ReceivedFrom != nil { + l = len(m.ReceivedFrom) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_DeliverMessage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MessageID != nil { + l = len(m.MessageID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_AddPeer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PeerID != nil { + l = len(m.PeerID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Proto != nil { + l = len(*m.Proto) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_RemovePeer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PeerID != nil { + l = len(m.PeerID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_RecvRPC) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ReceivedFrom != nil { + l = len(m.ReceivedFrom) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Meta != nil { + l = m.Meta.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_SendRPC) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SendTo != nil { + l = len(m.SendTo) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Meta != nil { + l = m.Meta.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_DropRPC) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SendTo != nil { + l = len(m.SendTo) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Meta != nil { + l = m.Meta.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_Join) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_Leave) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_Graft) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PeerID != nil { + l = len(m.PeerID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_Prune) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PeerID != nil { + l = len(m.PeerID) + n += 1 + l + sovTrace(uint64(l)) + } + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_RPCMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Messages) > 0 { + for _, e := range m.Messages { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if len(m.Subscription) > 0 { + for _, e := range m.Subscription { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.Control != nil { + l = m.Control.Size() + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_MessageMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MessageID != nil { + l = len(m.MessageID) + n += 1 + l + sovTrace(uint64(l)) + } + if len(m.Topics) > 0 { + for _, s := range m.Topics { + l = len(s) + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_SubMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Subscribe != nil { + n += 2 + } + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_ControlMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Ihave) > 0 { + for _, e := range m.Ihave { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if len(m.Iwant) > 0 { + for _, e := range m.Iwant { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if len(m.Graft) > 0 { + for _, e := range m.Graft { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if len(m.Prune) > 0 { + for _, e := range m.Prune { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_ControlIHaveMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if len(m.MessageIDs) > 0 { + for _, b := range m.MessageIDs { + l = len(b) + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_ControlIWantMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.MessageIDs) > 0 { + for _, b := range m.MessageIDs { + l = len(b) + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_ControlGraftMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEvent_ControlPruneMeta) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Topic != nil { + l = len(*m.Topic) + n += 1 + l + sovTrace(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *TraceEventBatch) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Batch) > 0 { + for _, e := range m.Batch { + l = e.Size() + n += 1 + l + sovTrace(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovTrace(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozTrace(x uint64) (n int) { + return sovTrace(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *TraceEvent) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TraceEvent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TraceEvent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var v TraceEvent_Type + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= TraceEvent_Type(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Type = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerID = append(m.PeerID[:0], dAtA[iNdEx:postIndex]...) + if m.PeerID == nil { + m.PeerID = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Timestamp = &v + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PublishMessage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PublishMessage == nil { + m.PublishMessage = &TraceEvent_PublishMessage{} + } + if err := m.PublishMessage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RejectMessage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RejectMessage == nil { + m.RejectMessage = &TraceEvent_RejectMessage{} + } + if err := m.RejectMessage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DuplicateMessage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DuplicateMessage == nil { + m.DuplicateMessage = &TraceEvent_DuplicateMessage{} + } + if err := m.DuplicateMessage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeliverMessage", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DeliverMessage == nil { + m.DeliverMessage = &TraceEvent_DeliverMessage{} + } + if err := m.DeliverMessage.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AddPeer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AddPeer == nil { + m.AddPeer = &TraceEvent_AddPeer{} + } + if err := m.AddPeer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RemovePeer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RemovePeer == nil { + m.RemovePeer = &TraceEvent_RemovePeer{} + } + if err := m.RemovePeer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RecvRPC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RecvRPC == nil { + m.RecvRPC = &TraceEvent_RecvRPC{} + } + if err := m.RecvRPC.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SendRPC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SendRPC == nil { + m.SendRPC = &TraceEvent_SendRPC{} + } + if err := m.SendRPC.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DropRPC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DropRPC == nil { + m.DropRPC = &TraceEvent_DropRPC{} + } + if err := m.DropRPC.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Join", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Join == nil { + m.Join = &TraceEvent_Join{} + } + if err := m.Join.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Leave", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Leave == nil { + m.Leave = &TraceEvent_Leave{} + } + if err := m.Leave.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Graft", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Graft == nil { + m.Graft = &TraceEvent_Graft{} + } + if err := m.Graft.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Prune", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Prune == nil { + m.Prune = &TraceEvent_Prune{} + } + if err := m.Prune.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_PublishMessage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PublishMessage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PublishMessage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageID = append(m.MessageID[:0], dAtA[iNdEx:postIndex]...) + if m.MessageID == nil { + m.MessageID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topics", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Topics = append(m.Topics, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_RejectMessage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RejectMessage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RejectMessage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageID = append(m.MessageID[:0], dAtA[iNdEx:postIndex]...) + if m.MessageID == nil { + m.MessageID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReceivedFrom", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ReceivedFrom = append(m.ReceivedFrom[:0], dAtA[iNdEx:postIndex]...) + if m.ReceivedFrom == nil { + m.ReceivedFrom = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Reason = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_DuplicateMessage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DuplicateMessage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DuplicateMessage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageID = append(m.MessageID[:0], dAtA[iNdEx:postIndex]...) + if m.MessageID == nil { + m.MessageID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReceivedFrom", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ReceivedFrom = append(m.ReceivedFrom[:0], dAtA[iNdEx:postIndex]...) + if m.ReceivedFrom == nil { + m.ReceivedFrom = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_DeliverMessage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeliverMessage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeliverMessage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageID = append(m.MessageID[:0], dAtA[iNdEx:postIndex]...) + if m.MessageID == nil { + m.MessageID = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_AddPeer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AddPeer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddPeer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerID = append(m.PeerID[:0], dAtA[iNdEx:postIndex]...) + if m.PeerID == nil { + m.PeerID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Proto", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Proto = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_RemovePeer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RemovePeer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RemovePeer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerID = append(m.PeerID[:0], dAtA[iNdEx:postIndex]...) + if m.PeerID == nil { + m.PeerID = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_RecvRPC) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RecvRPC: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RecvRPC: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReceivedFrom", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ReceivedFrom = append(m.ReceivedFrom[:0], dAtA[iNdEx:postIndex]...) + if m.ReceivedFrom == nil { + m.ReceivedFrom = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Meta == nil { + m.Meta = &TraceEvent_RPCMeta{} + } + if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_SendRPC) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SendRPC: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SendRPC: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SendTo", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SendTo = append(m.SendTo[:0], dAtA[iNdEx:postIndex]...) + if m.SendTo == nil { + m.SendTo = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Meta == nil { + m.Meta = &TraceEvent_RPCMeta{} + } + if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_DropRPC) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DropRPC: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DropRPC: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SendTo", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SendTo = append(m.SendTo[:0], dAtA[iNdEx:postIndex]...) + if m.SendTo == nil { + m.SendTo = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Meta == nil { + m.Meta = &TraceEvent_RPCMeta{} + } + if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_Join) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Join: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Join: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_Leave) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Leave: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Leave: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_Graft) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Graft: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Graft: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerID = append(m.PeerID[:0], dAtA[iNdEx:postIndex]...) + if m.PeerID == nil { + m.PeerID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_Prune) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Prune: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Prune: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerID = append(m.PeerID[:0], dAtA[iNdEx:postIndex]...) + if m.PeerID == nil { + m.PeerID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_RPCMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RPCMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RPCMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Messages", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Messages = append(m.Messages, &TraceEvent_MessageMeta{}) + if err := m.Messages[len(m.Messages)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subscription", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subscription = append(m.Subscription, &TraceEvent_SubMeta{}) + if err := m.Subscription[len(m.Subscription)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Control", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Control == nil { + m.Control = &TraceEvent_ControlMeta{} + } + if err := m.Control.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_MessageMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MessageMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MessageMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageID", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageID = append(m.MessageID[:0], dAtA[iNdEx:postIndex]...) + if m.MessageID == nil { + m.MessageID = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topics", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Topics = append(m.Topics, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_SubMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Subscribe", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Subscribe = &b + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_ControlMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControlMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControlMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ihave", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ihave = append(m.Ihave, &TraceEvent_ControlIHaveMeta{}) + if err := m.Ihave[len(m.Ihave)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Iwant", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Iwant = append(m.Iwant, &TraceEvent_ControlIWantMeta{}) + if err := m.Iwant[len(m.Iwant)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Graft", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Graft = append(m.Graft, &TraceEvent_ControlGraftMeta{}) + if err := m.Graft[len(m.Graft)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Prune", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Prune = append(m.Prune, &TraceEvent_ControlPruneMeta{}) + if err := m.Prune[len(m.Prune)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_ControlIHaveMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControlIHaveMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControlIHaveMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageIDs", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageIDs = append(m.MessageIDs, make([]byte, postIndex-iNdEx)) + copy(m.MessageIDs[len(m.MessageIDs)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_ControlIWantMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControlIWantMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControlIWantMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageIDs", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MessageIDs = append(m.MessageIDs, make([]byte, postIndex-iNdEx)) + copy(m.MessageIDs[len(m.MessageIDs)-1], dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_ControlGraftMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControlGraftMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControlGraftMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEvent_ControlPruneMeta) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControlPruneMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControlPruneMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Topic", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Topic = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TraceEventBatch) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TraceEventBatch: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TraceEventBatch: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Batch", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTrace + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTrace + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTrace + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Batch = append(m.Batch, &TraceEvent{}) + if err := m.Batch[len(m.Batch)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTrace(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthTrace + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTrace(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTrace + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTrace + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTrace + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTrace + } + iNdEx += length + if iNdEx < 0 { + return 0, ErrInvalidLengthTrace + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTrace + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipTrace(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + if iNdEx < 0 { + return 0, ErrInvalidLengthTrace + } + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthTrace = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTrace = fmt.Errorf("proto: integer overflow") +) diff --git a/pb/trace.proto b/pb/trace.proto new file mode 100644 index 00000000..1b655b09 --- /dev/null +++ b/pb/trace.proto @@ -0,0 +1,145 @@ +syntax = "proto2"; + +package pubsub.pb; + +message TraceEvent { + optional Type type = 1; + optional bytes peerID = 2; + optional int64 timestamp = 3; + + optional PublishMessage publishMessage = 4; + optional RejectMessage rejectMessage = 5; + optional DuplicateMessage duplicateMessage = 6; + optional DeliverMessage deliverMessage = 7; + optional AddPeer addPeer = 8; + optional RemovePeer removePeer = 9; + optional RecvRPC recvRPC = 10; + optional SendRPC sendRPC = 11; + optional DropRPC dropRPC = 12; + optional Join join = 13; + optional Leave leave = 14; + optional Graft graft = 15; + optional Prune prune = 16; + + enum Type { + PUBLISH_MESSAGE = 0; + REJECT_MESSAGE = 1; + DUPLICATE_MESSAGE = 2; + DELIVER_MESSAGE = 3; + ADD_PEER = 4; + REMOVE_PEER = 5; + RECV_RPC = 6; + SEND_RPC = 7; + DROP_RPC = 8; + JOIN = 9; + LEAVE = 10; + GRAFT = 11; + PRUNE = 12; + } + + message PublishMessage { + optional bytes messageID = 1; + repeated string topics = 2; + } + + message RejectMessage { + optional bytes messageID = 1; + optional bytes receivedFrom = 2; + optional string reason = 3; + } + + message DuplicateMessage { + optional bytes messageID = 1; + optional bytes receivedFrom = 2; + } + + message DeliverMessage { + optional bytes messageID = 1; + } + + message AddPeer { + optional bytes peerID = 1; + optional string proto = 2; + } + + message RemovePeer { + optional bytes peerID = 1; + } + + message RecvRPC { + optional bytes receivedFrom = 1; + optional RPCMeta meta = 2; + } + + message SendRPC { + optional bytes sendTo = 1; + optional RPCMeta meta = 2; + } + + message DropRPC { + optional bytes sendTo = 1; + optional RPCMeta meta = 2; + } + + message Join { + optional string topic = 1; + } + + message Leave { + optional string topic = 2; + } + + message Graft { + optional bytes peerID = 1; + optional string topic = 2; + } + + message Prune { + optional bytes peerID = 1; + optional string topic = 2; + } + + message RPCMeta { + repeated MessageMeta messages = 1; + repeated SubMeta subscription = 2; + optional ControlMeta control = 3; + } + + message MessageMeta { + optional bytes messageID = 1; + repeated string topics = 2; + } + + message SubMeta { + optional bool subscribe = 1; + optional string topic = 2; + } + + message ControlMeta { + repeated ControlIHaveMeta ihave = 1; + repeated ControlIWantMeta iwant = 2; + repeated ControlGraftMeta graft = 3; + repeated ControlPruneMeta prune = 4; + } + + message ControlIHaveMeta { + optional string topic = 1; + repeated bytes messageIDs = 2; + } + + message ControlIWantMeta { + repeated bytes messageIDs = 1; + } + + message ControlGraftMeta { + optional string topic = 1; + } + + message ControlPruneMeta { + optional string topic = 1; + } +} + +message TraceEventBatch { + repeated TraceEvent batch = 1; +} diff --git a/pubsub.go b/pubsub.go index e46f4dfd..530c47a4 100644 --- a/pubsub.go +++ b/pubsub.go @@ -46,6 +46,8 @@ type PubSub struct { disc *discover + tracer *pubsubTracer + // size of the outbound message channel that we maintain for each peer peerOutboundQueueSize int @@ -321,6 +323,14 @@ func WithDiscovery(d discovery.Discovery, opts ...DiscoverOpt) Option { } } +// WithEventTracer provides a tracer for the pubsub system +func WithEventTracer(tracer EventTracer) Option { + return func(p *PubSub) error { + p.tracer = &pubsubTracer{tracer: tracer, pid: p.host.ID()} + return nil + } +} + // processLoop handles all inputs arriving on the channels func (p *PubSub) processLoop(ctx context.Context) { defer func() { @@ -436,6 +446,7 @@ func (p *PubSub) processLoop(ctx context.Context) { p.handleIncomingRPC(rpc) case msg := <-p.publish: + p.tracer.PublishMessage(msg) p.pushMsg(msg) case msg := <-p.sendMsg: @@ -571,8 +582,10 @@ func (p *PubSub) announce(topic string, sub bool) { for pid, peer := range p.peers { select { case peer <- out: + p.tracer.SendRPC(out, pid) default: log.Infof("Can't send announce message to peer %s: queue full; scheduling retry", pid) + p.tracer.DropRPC(out, pid) go p.announceRetry(pid, topic, sub) } } @@ -608,8 +621,10 @@ func (p *PubSub) doAnnounceRetry(pid peer.ID, topic string, sub bool) { out := rpcWithSubs(subopt) select { case peer <- out: + p.tracer.SendRPC(out, pid) default: log.Infof("Can't send announce message to peer %s: queue full; scheduling retry", pid) + p.tracer.DropRPC(out, pid) go p.announceRetry(pid, topic, sub) } } @@ -671,6 +686,8 @@ func (p *PubSub) notifyLeave(topic string, pid peer.ID) { } func (p *PubSub) handleIncomingRPC(rpc *RPC) { + p.tracer.RecvRPC(rpc) + for _, subopt := range rpc.GetSubscriptions() { t := subopt.GetTopicid() if subopt.GetSubscribe() { @@ -724,24 +741,28 @@ func (p *PubSub) pushMsg(msg *Message) { // reject messages from blacklisted peers if p.blacklist.Contains(src) { log.Warningf("dropping message from blacklisted peer %s", src) + p.tracer.RejectMessage(msg, "blacklisted peer") return } // even if they are forwarded by good peers if p.blacklist.Contains(msg.GetFrom()) { log.Warningf("dropping message from blacklisted source %s", src) + p.tracer.RejectMessage(msg, "blacklisted source") return } // reject unsigned messages when strict before we even process the id if p.signStrict && msg.Signature == nil { log.Debugf("dropping unsigned message from %s", src) + p.tracer.RejectMessage(msg, "missing signature") return } // have we already seen and validated this message? id := msgID(msg.Message) if p.seenMessage(id) { + p.tracer.DuplicateMessage(msg) return } @@ -755,6 +776,7 @@ func (p *PubSub) pushMsg(msg *Message) { } func (p *PubSub) publishMessage(msg *Message) { + p.tracer.DeliverMessage(msg) p.notifySubs(msg) p.rt.Publish(msg.ReceivedFrom, msg.Message) } diff --git a/randomsub.go b/randomsub.go index 9435c719..ffbfc62c 100644 --- a/randomsub.go +++ b/randomsub.go @@ -29,8 +29,9 @@ func NewRandomSub(ctx context.Context, h host.Host, opts ...Option) (*PubSub, er // RandomSubRouter is a router that implements a random propagation strategy. // For each message, it selects RandomSubD peers and forwards the message to them. type RandomSubRouter struct { - p *PubSub - peers map[peer.ID]protocol.ID + p *PubSub + peers map[peer.ID]protocol.ID + tracer *pubsubTracer } func (rs *RandomSubRouter) Protocols() []protocol.ID { @@ -39,13 +40,16 @@ func (rs *RandomSubRouter) Protocols() []protocol.ID { func (rs *RandomSubRouter) Attach(p *PubSub) { rs.p = p + rs.tracer = p.tracer } func (rs *RandomSubRouter) AddPeer(p peer.ID, proto protocol.ID) { + rs.tracer.AddPeer(p, proto) rs.peers[p] = proto } func (rs *RandomSubRouter) RemovePeer(p peer.ID) { + rs.tracer.RemovePeer(p) delete(rs.peers, p) } @@ -132,12 +136,18 @@ func (rs *RandomSubRouter) Publish(from peer.ID, msg *pb.Message) { select { case mch <- out: + rs.tracer.SendRPC(out, p) default: log.Infof("dropping message to peer %s: queue full", p) + rs.tracer.DropRPC(out, p) } } } -func (rs *RandomSubRouter) Join(topic string) {} +func (rs *RandomSubRouter) Join(topic string) { + rs.tracer.Join(topic) +} -func (rs *RandomSubRouter) Leave(topic string) {} +func (rs *RandomSubRouter) Leave(topic string) { + rs.tracer.Join(topic) +} diff --git a/trace.go b/trace.go new file mode 100644 index 00000000..293f1660 --- /dev/null +++ b/trace.go @@ -0,0 +1,336 @@ +package pubsub + +import ( + "time" + + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/protocol" + + pb "github.com/libp2p/go-libp2p-pubsub/pb" +) + +// Generic event tracer interface +type EventTracer interface { + Trace(evt *pb.TraceEvent) +} + +// pubsub tracer details +type pubsubTracer struct { + tracer EventTracer + pid peer.ID +} + +func (t *pubsubTracer) PublishMessage(msg *Message) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_PUBLISH_MESSAGE.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + PublishMessage: &pb.TraceEvent_PublishMessage{ + MessageID: []byte(msgID(msg.Message)), + Topics: msg.Message.TopicIDs, + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) RejectMessage(msg *Message, reason string) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_REJECT_MESSAGE.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + RejectMessage: &pb.TraceEvent_RejectMessage{ + MessageID: []byte(msgID(msg.Message)), + ReceivedFrom: []byte(msg.ReceivedFrom), + Reason: &reason, + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) DuplicateMessage(msg *Message) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_DUPLICATE_MESSAGE.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + DuplicateMessage: &pb.TraceEvent_DuplicateMessage{ + MessageID: []byte(msgID(msg.Message)), + ReceivedFrom: []byte(msg.ReceivedFrom), + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) DeliverMessage(msg *Message) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_DELIVER_MESSAGE.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + DeliverMessage: &pb.TraceEvent_DeliverMessage{ + MessageID: []byte(msgID(msg.Message)), + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) AddPeer(p peer.ID, proto protocol.ID) { + if t == nil { + return + } + + protoStr := string(proto) + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_ADD_PEER.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + AddPeer: &pb.TraceEvent_AddPeer{ + PeerID: []byte(p), + Proto: &protoStr, + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) RemovePeer(p peer.ID) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_REMOVE_PEER.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + RemovePeer: &pb.TraceEvent_RemovePeer{ + PeerID: []byte(p), + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) RecvRPC(rpc *RPC) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_RECV_RPC.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + RecvRPC: &pb.TraceEvent_RecvRPC{ + ReceivedFrom: []byte(rpc.from), + Meta: traceRPCMeta(rpc), + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) SendRPC(rpc *RPC, p peer.ID) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_SEND_RPC.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + SendRPC: &pb.TraceEvent_SendRPC{ + SendTo: []byte(rpc.from), + Meta: traceRPCMeta(rpc), + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) DropRPC(rpc *RPC, p peer.ID) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_DROP_RPC.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + DropRPC: &pb.TraceEvent_DropRPC{ + SendTo: []byte(rpc.from), + Meta: traceRPCMeta(rpc), + }, + } + + t.tracer.Trace(evt) +} + +func traceRPCMeta(rpc *RPC) *pb.TraceEvent_RPCMeta { + rpcMeta := new(pb.TraceEvent_RPCMeta) + + var msgs []*pb.TraceEvent_MessageMeta + for _, m := range rpc.Publish { + msgs = append(msgs, &pb.TraceEvent_MessageMeta{ + MessageID: []byte(msgID(m)), + Topics: m.TopicIDs, + }) + } + rpcMeta.Messages = msgs + + var subs []*pb.TraceEvent_SubMeta + for _, sub := range rpc.Subscriptions { + subs = append(subs, &pb.TraceEvent_SubMeta{ + Subscribe: sub.Subscribe, + Topic: sub.Topicid, + }) + } + rpcMeta.Subscription = subs + + if rpc.Control != nil { + var ihave []*pb.TraceEvent_ControlIHaveMeta + for _, ctl := range rpc.Control.Ihave { + var mids [][]byte + for _, mid := range ctl.MessageIDs { + mids = append(mids, []byte(mid)) + } + ihave = append(ihave, &pb.TraceEvent_ControlIHaveMeta{ + Topic: ctl.TopicID, + MessageIDs: mids, + }) + } + + var iwant []*pb.TraceEvent_ControlIWantMeta + for _, ctl := range rpc.Control.Iwant { + var mids [][]byte + for _, mid := range ctl.MessageIDs { + mids = append(mids, []byte(mid)) + } + iwant = append(iwant, &pb.TraceEvent_ControlIWantMeta{ + MessageIDs: mids, + }) + } + + var graft []*pb.TraceEvent_ControlGraftMeta + for _, ctl := range rpc.Control.Graft { + graft = append(graft, &pb.TraceEvent_ControlGraftMeta{ + Topic: ctl.TopicID, + }) + } + + var prune []*pb.TraceEvent_ControlPruneMeta + for _, ctl := range rpc.Control.Prune { + prune = append(prune, &pb.TraceEvent_ControlPruneMeta{ + Topic: ctl.TopicID, + }) + } + + rpcMeta.Control = &pb.TraceEvent_ControlMeta{ + Ihave: ihave, + Iwant: iwant, + Graft: graft, + Prune: prune, + } + } + + return rpcMeta +} + +func (t *pubsubTracer) Join(topic string) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_JOIN.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + Join: &pb.TraceEvent_Join{ + Topic: &topic, + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) Leave(topic string) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_LEAVE.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + Leave: &pb.TraceEvent_Leave{ + Topic: &topic, + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) Graft(p peer.ID, topic string) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_GRAFT.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + Graft: &pb.TraceEvent_Graft{ + PeerID: []byte(p), + Topic: &topic, + }, + } + + t.tracer.Trace(evt) +} + +func (t *pubsubTracer) Prune(p peer.ID, topic string) { + if t == nil { + return + } + + now := time.Now().UnixNano() + evt := &pb.TraceEvent{ + Type: pb.TraceEvent_PRUNE.Enum(), + PeerID: []byte(t.pid), + Timestamp: &now, + Prune: &pb.TraceEvent_Prune{ + PeerID: []byte(p), + Topic: &topic, + }, + } + + t.tracer.Trace(evt) +} diff --git a/tracer.go b/tracer.go new file mode 100644 index 00000000..a379c892 --- /dev/null +++ b/tracer.go @@ -0,0 +1,289 @@ +package pubsub + +import ( + "compress/gzip" + "context" + "encoding/json" + "io" + "os" + "sync" + "time" + + pb "github.com/libp2p/go-libp2p-pubsub/pb" + + "github.com/libp2p/go-libp2p-core/helpers" + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/peerstore" + "github.com/libp2p/go-libp2p-core/protocol" + + ggio "github.com/gogo/protobuf/io" +) + +var TraceBufferSize = 1 << 16 // 64K ought to be enough for everyone; famous last words. +var MinTraceBatchSize = 16 + +type basicTracer struct { + ch chan struct{} + mx sync.Mutex + buf []*pb.TraceEvent + lossy bool + closed bool +} + +func (t *basicTracer) Trace(evt *pb.TraceEvent) { + t.mx.Lock() + if t.closed { + t.mx.Unlock() + return + } + + if t.lossy && len(t.buf) > TraceBufferSize { + log.Warningf("trace buffer overflow; dropping trace event") + } else { + t.buf = append(t.buf, evt) + } + t.mx.Unlock() + + select { + case t.ch <- struct{}{}: + default: + } +} + +func (t *basicTracer) Close() { + t.mx.Lock() + defer t.mx.Unlock() + if !t.closed { + t.closed = true + close(t.ch) + } +} + +// JSONTracer is a tracer that writes events to a file, encoded in ndjson. +type JSONTracer struct { + basicTracer + w io.WriteCloser +} + +// NewJsonTracer creates a new JSONTracer writing traces to file. +func NewJSONTracer(file string) (*JSONTracer, error) { + return OpenJSONTracer(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) +} + +// OpenJSONTracer creates a new JSONTracer, with explicit control of OpenFile flags and permissions. +func OpenJSONTracer(file string, flags int, perm os.FileMode) (*JSONTracer, error) { + f, err := os.OpenFile(file, flags, perm) + if err != nil { + return nil, err + } + + tr := &JSONTracer{w: f, basicTracer: basicTracer{ch: make(chan struct{}, 1)}} + go tr.doWrite() + + return tr, nil +} + +func (t *JSONTracer) doWrite() { + var buf []*pb.TraceEvent + enc := json.NewEncoder(t.w) + for { + _, ok := <-t.ch + + t.mx.Lock() + tmp := t.buf + t.buf = buf[:0] + buf = tmp + t.mx.Unlock() + + for i, evt := range buf { + err := enc.Encode(evt) + if err != nil { + log.Errorf("error writing event trace: %s", err.Error()) + } + buf[i] = nil + } + + if !ok { + t.w.Close() + return + } + } +} + +var _ EventTracer = (*JSONTracer)(nil) + +// PBTracer is a tracer that writes events to a file, as delimited protobufs. +type PBTracer struct { + basicTracer + w io.WriteCloser +} + +func NewPBTracer(file string) (*PBTracer, error) { + return OpenPBTracer(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) +} + +// OpenPBTracer creates a new PBTracer, with explicit control of OpenFile flags and permissions. +func OpenPBTracer(file string, flags int, perm os.FileMode) (*PBTracer, error) { + f, err := os.OpenFile(file, flags, perm) + if err != nil { + return nil, err + } + + tr := &PBTracer{w: f, basicTracer: basicTracer{ch: make(chan struct{}, 1)}} + go tr.doWrite() + + return tr, nil +} + +func (t *PBTracer) doWrite() { + var buf []*pb.TraceEvent + w := ggio.NewDelimitedWriter(t.w) + for { + _, ok := <-t.ch + + t.mx.Lock() + tmp := t.buf + t.buf = buf[:0] + buf = tmp + t.mx.Unlock() + + for i, evt := range buf { + err := w.WriteMsg(evt) + if err != nil { + log.Errorf("error writing event trace: %s", err.Error()) + } + buf[i] = nil + } + + if !ok { + t.w.Close() + return + } + } +} + +var _ EventTracer = (*PBTracer)(nil) + +const RemoteTracerProtoID = protocol.ID("/libp2p/pubsub/tracer/1.0.0") + +// RemoteTracer is a tracer that sends trace events to a remote peer +type RemoteTracer struct { + basicTracer + ctx context.Context + host host.Host + peer peer.ID +} + +// NewRemoteTracer constructs a RemoteTracer, tracing to the peer identified by pi +func NewRemoteTracer(ctx context.Context, host host.Host, pi peer.AddrInfo) (*RemoteTracer, error) { + tr := &RemoteTracer{ctx: ctx, host: host, peer: pi.ID, basicTracer: basicTracer{ch: make(chan struct{}, 1), lossy: true}} + host.Peerstore().AddAddrs(pi.ID, pi.Addrs, peerstore.PermanentAddrTTL) + go tr.doWrite() + return tr, nil +} + +func (t *RemoteTracer) doWrite() { + var buf []*pb.TraceEvent + + s, err := t.openStream() + if err != nil { + log.Errorf("error opening remote tracer stream: %s", err.Error()) + return + } + + var batch pb.TraceEventBatch + + gzipW := gzip.NewWriter(s) + w := ggio.NewDelimitedWriter(gzipW) + + for { + _, ok := <-t.ch + + // deadline for batch accumulation + deadline := time.Now().Add(time.Second) + + t.mx.Lock() + for len(t.buf) < MinTraceBatchSize && time.Now().Before(deadline) { + t.mx.Unlock() + time.Sleep(100 * time.Millisecond) + t.mx.Lock() + } + + tmp := t.buf + t.buf = buf[:0] + buf = tmp + t.mx.Unlock() + + if len(buf) == 0 { + goto end + } + + batch.Batch = buf + + err = w.WriteMsg(&batch) + if err != nil { + log.Errorf("error writing trace event batch: %s", err) + goto end + } + + err = gzipW.Flush() + if err != nil { + log.Errorf("error flushin gzip stream: %s", err) + goto end + } + + end: + // nil out the buffer to gc consumed events + for i := range buf { + buf[i] = nil + } + + if !ok { + if err != nil { + s.Reset() + } else { + gzipW.Close() + helpers.FullClose(s) + } + return + } + + if err != nil { + s.Reset() + s, err = t.openStream() + if err != nil { + log.Errorf("error opening remote tracer stream: %s", err.Error()) + return + } + + gzipW.Reset(s) + } + } +} + +func (t *RemoteTracer) openStream() (network.Stream, error) { + for { + ctx, cancel := context.WithTimeout(t.ctx, time.Minute) + s, err := t.host.NewStream(ctx, t.peer, RemoteTracerProtoID) + cancel() + if err != nil { + if t.ctx.Err() != nil { + return nil, err + } + + // wait a minute and try again, to account for transient server downtime + select { + case <-time.After(time.Minute): + continue + case <-t.ctx.Done(): + return nil, t.ctx.Err() + } + } + + return s, nil + } +} + +var _ EventTracer = (*RemoteTracer)(nil) diff --git a/validation.go b/validation.go index 9253f2ab..bef86da3 100644 --- a/validation.go +++ b/validation.go @@ -31,6 +31,8 @@ type ValidatorOpt func(addVal *addValReq) error type validation struct { p *PubSub + tracer *pubsubTracer + // topicVals tracks per topic validators topicVals map[string]*topicVal @@ -90,6 +92,7 @@ func newValidation() *validation { // workers func (v *validation) Start(p *PubSub) { v.p = p + v.tracer = p.tracer for i := 0; i < v.validateWorkers; i++ { go v.validateWorker() } @@ -148,6 +151,7 @@ func (v *validation) Push(src peer.ID, msg *Message) bool { case v.validateQ <- &validateReq{vals, src, msg}: default: log.Warningf("message validation throttled; dropping message from %s", src) + v.tracer.RejectMessage(msg, "validation throttled") } return false } @@ -190,6 +194,7 @@ func (v *validation) validate(vals []*topicVal, src peer.ID, msg *Message) { if msg.Signature != nil { if !v.validateSignature(msg) { log.Warningf("message signature validation failed; dropping message from %s", src) + v.tracer.RejectMessage(msg, "invalid signature") return } } @@ -198,6 +203,7 @@ func (v *validation) validate(vals []*topicVal, src peer.ID, msg *Message) { // and avoid invoking user validators more than once id := msgID(msg.Message) if !v.p.markSeen(id) { + v.tracer.DuplicateMessage(msg) return } @@ -214,6 +220,7 @@ func (v *validation) validate(vals []*topicVal, src peer.ID, msg *Message) { for _, val := range inline { if !val.validateMsg(v.p.ctx, src, msg) { log.Debugf("message validation failed; dropping message from %s", src) + v.tracer.RejectMessage(msg, "validation failed") return } } @@ -228,6 +235,7 @@ func (v *validation) validate(vals []*topicVal, src peer.ID, msg *Message) { }() default: log.Warningf("message validation throttled; dropping message from %s", src) + v.tracer.RejectMessage(msg, "validation throttled") } return } @@ -249,6 +257,7 @@ func (v *validation) validateSignature(msg *Message) bool { func (v *validation) doValidateTopic(vals []*topicVal, src peer.ID, msg *Message) { if !v.validateTopic(vals, src, msg) { log.Warningf("message validation failed; dropping message from %s", src) + v.tracer.RejectMessage(msg, "validation failed") return } @@ -286,6 +295,7 @@ loop: } if throttle { + v.tracer.RejectMessage(msg, "validation throttled") return false } @@ -310,6 +320,7 @@ func (v *validation) validateSingleTopic(val *topicVal, src peer.ID, msg *Messag default: log.Debugf("validation throttled for topic %s", val.topic) + v.tracer.RejectMessage(msg, "validation throttled") return false } }