Implement sync protocol

This commit is contained in:
mcrakhman 2023-07-03 18:19:23 +02:00
parent 8aa41da1ff
commit bef93d46ad
No known key found for this signature in database
GPG Key ID: DED12CFEF5B8396B
7 changed files with 167 additions and 75 deletions

View File

@ -143,28 +143,30 @@ func (d *diffSyncer) syncWithPeer(ctx context.Context, p peer.Peer) (err error)
totalLen := len(newIds) + len(changedIds) + len(removedIds) totalLen := len(newIds) + len(changedIds) + len(removedIds)
// not syncing ids which were removed through settings document // not syncing ids which were removed through settings document
missingIds := d.deletionState.Filter(newIds) missingIds := d.deletionState.Filter(newIds)
prevLen := len(changedIds) existingIds := append(d.deletionState.Filter(removedIds), d.deletionState.Filter(changedIds)...)
changedIds = slice.DiscardFromSlice(changedIds, func(s string) bool { d.syncStatus.RemoveAllExcept(p.Id(), existingIds, stateCounter)
prevExistingLen := len(existingIds)
existingIds = slice.DiscardFromSlice(existingIds, func(s string) bool {
return s == syncAclId return s == syncAclId
}) })
// if acl head is different // if we removed acl head from the list
if len(changedIds) < prevLen { if len(existingIds) < prevExistingLen {
if syncErr := d.syncAcl.SyncWithPeer(ctx, p.Id()); syncErr != nil { if syncErr := d.syncAcl.SyncWithPeer(ctx, p.Id()); syncErr != nil {
log.Warn("failed to send acl sync message to peer", zap.String("aclId", syncAclId)) log.Warn("failed to send acl sync message to peer", zap.String("aclId", syncAclId))
} }
} }
existingIds := append(d.deletionState.Filter(removedIds), d.deletionState.Filter(changedIds)...)
d.syncStatus.RemoveAllExcept(p.Id(), existingIds, stateCounter)
// treeSyncer should not get acl id, that's why we filter existing ids before
err = d.treeSyncer.SyncAll(ctx, p.Id(), existingIds, missingIds) err = d.treeSyncer.SyncAll(ctx, p.Id(), existingIds, missingIds)
if err != nil { if err != nil {
return err return err
} }
d.log.Info("sync done:", zap.Int("newIds", len(newIds)), d.log.Info("sync done:",
zap.Int("newIds", len(newIds)),
zap.Int("changedIds", len(changedIds)), zap.Int("changedIds", len(changedIds)),
zap.Int("removedIds", len(removedIds)), zap.Int("removedIds", len(removedIds)),
zap.Int("already deleted ids", totalLen-len(existingIds)-len(missingIds)), zap.Int("already deleted ids", totalLen-prevExistingLen-len(missingIds)),
zap.String("peerId", p.Id()), zap.String("peerId", p.Id()),
) )
return return

View File

@ -46,6 +46,8 @@ type AclList interface {
IsAfter(first string, second string) (bool, error) IsAfter(first string, second string) (bool, error)
HasHead(head string) bool HasHead(head string) bool
Head() *AclRecord Head() *AclRecord
RecordsAfter(ctx context.Context, id string) (records []*consensusproto.RawRecordWithId, err error)
Get(id string) (*AclRecord, error) Get(id string) (*AclRecord, error)
GetIndex(idx int) (*AclRecord, error) GetIndex(idx int) (*AclRecord, error)
Iterate(iterFunc IterFunc) Iterate(iterFunc IterFunc)
@ -287,6 +289,21 @@ func (a *aclList) Iterate(iterFunc IterFunc) {
} }
} }
func (a *aclList) RecordsAfter(ctx context.Context, id string) (records []*consensusproto.RawRecordWithId, err error) {
recIdx, ok := a.indexes[id]
if !ok {
return nil, ErrNoSuchRecord
}
for i := recIdx + 1; i < len(a.records); i++ {
rawRec, err := a.storage.GetRawRecord(ctx, a.records[i].Id)
if err != nil {
return nil, err
}
records = append(records, rawRec)
}
return
}
func (a *aclList) IterateFrom(startId string, iterFunc IterFunc) { func (a *aclList) IterateFrom(startId string, iterFunc IterFunc) {
recIdx, ok := a.indexes[startId] recIdx, ok := a.indexes[startId]
if !ok { if !ok {

View File

@ -1,6 +1,8 @@
package syncacl package syncacl
import ( import (
"context"
"github.com/anyproto/any-sync/commonspace/object/acl/list" "github.com/anyproto/any-sync/commonspace/object/acl/list"
"github.com/anyproto/any-sync/consensus/consensusproto" "github.com/anyproto/any-sync/consensus/consensusproto"
) )
@ -11,20 +13,42 @@ type RequestFactory interface {
CreateFullSyncResponse(l list.AclList, theirHead string) (*consensusproto.LogSyncMessage, error) CreateFullSyncResponse(l list.AclList, theirHead string) (*consensusproto.LogSyncMessage, error)
} }
type requestFactory struct{}
func NewRequestFactory() RequestFactory { func NewRequestFactory() RequestFactory {
return &requestFactory{} return &requestFactory{}
} }
type requestFactory struct{}
func (r *requestFactory) CreateHeadUpdate(l list.AclList, added []*consensusproto.RawRecordWithId) (msg *consensusproto.LogSyncMessage) { func (r *requestFactory) CreateHeadUpdate(l list.AclList, added []*consensusproto.RawRecordWithId) (msg *consensusproto.LogSyncMessage) {
return return consensusproto.WrapHeadUpdate(&consensusproto.LogHeadUpdate{
Head: l.Head().Id,
Records: added,
}, l.Root())
} }
func (r *requestFactory) CreateFullSyncRequest(l list.AclList, theirHead string) (req *consensusproto.LogSyncMessage, err error) { func (r *requestFactory) CreateFullSyncRequest(l list.AclList, theirHead string) (req *consensusproto.LogSyncMessage, err error) {
return if !l.HasHead(theirHead) {
return consensusproto.WrapFullRequest(&consensusproto.LogFullSyncRequest{
Head: l.Head().Id,
}, l.Root()), nil
}
records, err := l.RecordsAfter(context.Background(), theirHead)
if err != nil {
return
}
return consensusproto.WrapFullRequest(&consensusproto.LogFullSyncRequest{
Head: l.Head().Id,
Records: records,
}, l.Root()), nil
} }
func (r *requestFactory) CreateFullSyncResponse(l list.AclList, theirHead string) (*consensusproto.LogSyncMessage, error) { func (r *requestFactory) CreateFullSyncResponse(l list.AclList, theirHead string) (resp *consensusproto.LogSyncMessage, err error) {
return nil, nil records, err := l.RecordsAfter(context.Background(), theirHead)
if err != nil {
return
}
return consensusproto.WrapFullResponse(&consensusproto.LogFullSyncResponse{
Head: l.Head().Id,
Records: records,
}, l.Root()), nil
} }

View File

@ -42,6 +42,8 @@ func (s *syncAclHandler) HandleMessage(ctx context.Context, senderId string, mes
return return
} }
content := unmarshalled.GetContent() content := unmarshalled.GetContent()
head := consensusproto.GetHead(unmarshalled)
s.syncStatus.HeadsReceive(senderId, s.aclList.Id(), []string{head})
s.aclList.Lock() s.aclList.Lock()
defer s.aclList.Unlock() defer s.aclList.Unlock()
switch { switch {

View File

@ -0,0 +1,45 @@
package consensusproto
func WrapHeadUpdate(update *LogHeadUpdate, rootRecord *RawRecordWithId) *LogSyncMessage {
return &LogSyncMessage{
Content: &LogSyncContentValue{
Value: &LogSyncContentValue_HeadUpdate{HeadUpdate: update},
},
Id: rootRecord.Id,
Payload: rootRecord.Payload,
}
}
func WrapFullRequest(request *LogFullSyncRequest, rootRecord *RawRecordWithId) *LogSyncMessage {
return &LogSyncMessage{
Content: &LogSyncContentValue{
Value: &LogSyncContentValue_FullSyncRequest{FullSyncRequest: request},
},
Id: rootRecord.Id,
Payload: rootRecord.Payload,
}
}
func WrapFullResponse(response *LogFullSyncResponse, rootRecord *RawRecordWithId) *LogSyncMessage {
return &LogSyncMessage{
Content: &LogSyncContentValue{
Value: &LogSyncContentValue_FullSyncResponse{FullSyncResponse: response},
},
Id: rootRecord.Id,
Payload: rootRecord.Payload,
}
}
func GetHead(msg *LogSyncMessage) (head string) {
content := msg.GetContent()
switch {
case content.GetHeadUpdate() != nil:
return content.GetHeadUpdate().Head
case content.GetFullSyncRequest() != nil:
return content.GetFullSyncRequest().Head
case content.GetFullSyncResponse() != nil:
return content.GetFullSyncResponse().Head
default:
return ""
}
}

View File

@ -698,7 +698,7 @@ func (*LogSyncContentValue) XXX_OneofWrappers() []interface{} {
// LogSyncMessage is a message sent when we are syncing logs // LogSyncMessage is a message sent when we are syncing logs
type LogSyncMessage struct { type LogSyncMessage struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
Content *LogSyncContentValue `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` Content *LogSyncContentValue `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"`
} }
@ -742,11 +742,11 @@ func (m *LogSyncMessage) GetId() string {
return "" return ""
} }
func (m *LogSyncMessage) GetPayload() string { func (m *LogSyncMessage) GetPayload() []byte {
if m != nil { if m != nil {
return m.Payload return m.Payload
} }
return "" return nil
} }
func (m *LogSyncMessage) GetContent() *LogSyncContentValue { func (m *LogSyncMessage) GetContent() *LogSyncContentValue {
@ -939,56 +939,56 @@ func init() {
} }
var fileDescriptor_b8d7f1c16b400059 = []byte{ var fileDescriptor_b8d7f1c16b400059 = []byte{
// 780 bytes of a gzipped FileDescriptorProto // 778 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x4e, 0xe3, 0x56, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x5f, 0x4f, 0xdb, 0x56,
0x14, 0x8e, 0x6d, 0x48, 0xe2, 0x93, 0x92, 0xb8, 0x87, 0xaa, 0x72, 0xa3, 0x12, 0x22, 0x57, 0x95, 0x14, 0x8f, 0x6d, 0xc8, 0x9f, 0x93, 0x91, 0x78, 0x87, 0x69, 0xf2, 0xa2, 0x11, 0x22, 0x4f, 0x93,
0x52, 0x54, 0x85, 0x36, 0x55, 0x2b, 0x55, 0xa8, 0xaa, 0x4a, 0x14, 0x94, 0x48, 0x21, 0xb4, 0x46, 0x32, 0x34, 0x85, 0x2d, 0xd3, 0x26, 0x4d, 0x68, 0x9a, 0x46, 0x14, 0x94, 0x48, 0x21, 0x6c, 0x46,
0x14, 0xa9, 0x95, 0xaa, 0xba, 0xbe, 0x37, 0xc6, 0x25, 0xf8, 0xba, 0xf6, 0x0d, 0x90, 0x6d, 0xb7, 0x0c, 0xa9, 0x95, 0xaa, 0xba, 0xbe, 0x37, 0xc6, 0x25, 0xf8, 0xba, 0xf6, 0x0d, 0x90, 0xd7, 0xbe,
0xb3, 0x99, 0x17, 0x98, 0xf7, 0x99, 0x25, 0xcb, 0x59, 0x8e, 0x60, 0x33, 0x0f, 0x30, 0x0f, 0x30, 0xf6, 0xa5, 0x5f, 0xa0, 0xdf, 0xa7, 0x8f, 0x3c, 0xf6, 0xb1, 0x82, 0x97, 0x7e, 0x80, 0x7e, 0x80,
0xf2, 0xf5, 0x4f, 0x42, 0x7e, 0x40, 0xa3, 0x61, 0x03, 0x3e, 0xff, 0xdf, 0xf9, 0xce, 0xb9, 0x27, 0xca, 0xd7, 0x7f, 0x12, 0xf2, 0x87, 0x0a, 0x95, 0x17, 0xb8, 0xe7, 0xff, 0xef, 0xfc, 0xce, 0xf1,
0xb0, 0x6b, 0x33, 0x2f, 0xa4, 0x5e, 0x38, 0x0e, 0xa7, 0x5f, 0x7e, 0xc0, 0x38, 0xdb, 0x15, 0x7f, 0x09, 0x6c, 0x5b, 0xcc, 0x0d, 0xa8, 0x1b, 0x8c, 0x82, 0xc9, 0xcb, 0xf3, 0x19, 0x67, 0xdb, 0xe2,
0x67, 0xb4, 0x4d, 0xa1, 0xc0, 0x72, 0xa6, 0xf8, 0x35, 0x92, 0x8d, 0x7f, 0x41, 0xe9, 0x33, 0x07, 0xef, 0x94, 0xb6, 0x21, 0x14, 0x58, 0x4a, 0x15, 0xff, 0x86, 0xb2, 0xfe, 0x1c, 0x94, 0x1e, 0xb3,
0xcb, 0x20, 0xbb, 0x44, 0x97, 0xea, 0x52, 0x43, 0x35, 0x65, 0x97, 0xa0, 0x0e, 0x05, 0xdf, 0x9a, 0xb1, 0x04, 0xb2, 0x43, 0x34, 0xa9, 0x26, 0xd5, 0x0b, 0x86, 0xec, 0x10, 0xd4, 0x20, 0xe7, 0x99,
0x8c, 0x98, 0x45, 0x74, 0xb9, 0x2e, 0x35, 0x3e, 0x32, 0x53, 0x11, 0x7f, 0x84, 0x42, 0x40, 0x6d, 0xe3, 0x21, 0x33, 0x89, 0x26, 0xd7, 0xa4, 0xfa, 0x57, 0x46, 0x22, 0xe2, 0x9f, 0x90, 0xf3, 0xa9,
0x16, 0x90, 0x50, 0x57, 0xea, 0x4a, 0xa3, 0xd4, 0xda, 0x6e, 0xde, 0x4f, 0xd9, 0x34, 0xad, 0x2b, 0xc5, 0x7c, 0x12, 0x68, 0x4a, 0x4d, 0xa9, 0x17, 0x9b, 0x9b, 0x8d, 0xdb, 0x29, 0x1b, 0x86, 0x79,
0x53, 0x78, 0x9c, 0xba, 0xfc, 0xac, 0x47, 0xcc, 0xd4, 0xdf, 0x78, 0x21, 0x81, 0x9a, 0x19, 0x67, 0x61, 0x08, 0x8f, 0x63, 0x87, 0x9f, 0x74, 0x89, 0x91, 0xf8, 0xeb, 0x6f, 0x24, 0x28, 0xa4, 0xc6,
0x4b, 0x48, 0xf7, 0x4b, 0x7c, 0x0e, 0x6a, 0xe8, 0x3a, 0x9e, 0xc5, 0xc7, 0x01, 0x4d, 0xca, 0x4f, 0xe9, 0x12, 0xd2, 0xed, 0x12, 0xdf, 0x43, 0x21, 0x70, 0x6c, 0xd7, 0xe4, 0x23, 0x9f, 0xc6, 0xe5,
0x15, 0xb8, 0x03, 0x9a, 0x65, 0xdb, 0xd4, 0xe7, 0x2c, 0xe8, 0x11, 0xea, 0x71, 0x97, 0x4f, 0x74, 0x27, 0x0a, 0xdc, 0x02, 0xd5, 0xb4, 0x2c, 0xea, 0x71, 0xe6, 0x77, 0x09, 0x75, 0xb9, 0xc3, 0xc7,
0x45, 0x38, 0x2d, 0xe8, 0xf1, 0x6b, 0xf8, 0x38, 0xd5, 0x1d, 0x67, 0x19, 0xd7, 0x84, 0xf3, 0xa2, 0x9a, 0x22, 0x9c, 0xe6, 0xf4, 0xf8, 0x33, 0x7c, 0x9d, 0xe8, 0x0e, 0xd3, 0x8c, 0x2b, 0xc2, 0x79,
0xc1, 0xd8, 0x83, 0xca, 0x1c, 0xf6, 0x07, 0x40, 0xc6, 0x8c, 0xc9, 0x29, 0x63, 0x86, 0x07, 0xf9, 0xde, 0xa0, 0xef, 0x40, 0x79, 0x06, 0xfb, 0x1d, 0x20, 0x23, 0xc6, 0xe4, 0x84, 0x31, 0xdd, 0x85,
0xa4, 0xb1, 0x4f, 0x21, 0xef, 0x07, 0xf4, 0xb2, 0x97, 0xf2, 0x99, 0x48, 0x58, 0x85, 0xa2, 0x9b, 0x6c, 0xdc, 0xd8, 0xb7, 0x90, 0xf5, 0x7c, 0x7a, 0xde, 0x4d, 0xf8, 0x8c, 0x25, 0xac, 0x40, 0xde,
0x02, 0x8e, 0xbb, 0xca, 0x64, 0x44, 0x58, 0x23, 0x16, 0xb7, 0x92, 0x46, 0xc4, 0x77, 0x44, 0x03, 0x49, 0x00, 0x47, 0x5d, 0xa5, 0x32, 0x22, 0xac, 0x10, 0x93, 0x9b, 0x71, 0x23, 0xe2, 0x1d, 0xd2,
0x77, 0x2f, 0x68, 0xc8, 0xad, 0x0b, 0x5f, 0x80, 0x56, 0xcc, 0xa9, 0xc2, 0x58, 0x03, 0xf9, 0xe8, 0xc0, 0x9d, 0x33, 0x1a, 0x70, 0xf3, 0xcc, 0x13, 0xa0, 0x15, 0x63, 0xa2, 0xd0, 0x57, 0x40, 0x3e,
0xdc, 0xf8, 0x01, 0x36, 0xfa, 0xcc, 0xf9, 0x85, 0x10, 0x93, 0xfe, 0x37, 0xa6, 0x21, 0xc7, 0x2f, 0x38, 0xd5, 0xff, 0x80, 0xb5, 0x1e, 0xb3, 0xff, 0x21, 0xc4, 0xa0, 0x2f, 0x46, 0x34, 0xe0, 0xf8,
0x41, 0x19, 0x31, 0x47, 0x54, 0x2e, 0xb5, 0x36, 0xe7, 0x47, 0xd3, 0x67, 0x8e, 0x19, 0xd9, 0x8d, 0x23, 0x28, 0x43, 0x66, 0x8b, 0xca, 0xc5, 0xe6, 0xfa, 0xec, 0x68, 0x7a, 0xcc, 0x36, 0x42, 0xbb,
0x3f, 0x41, 0x8b, 0xd1, 0xce, 0x84, 0x7e, 0x02, 0xeb, 0x23, 0xe6, 0x64, 0xb0, 0x63, 0x01, 0xbf, 0xfe, 0x18, 0xd4, 0x08, 0xed, 0x54, 0xe8, 0x37, 0xb0, 0x3a, 0x64, 0x76, 0x0a, 0x3b, 0x12, 0xf0,
0x85, 0x7c, 0x3c, 0x3f, 0x81, 0xb9, 0xd4, 0xfa, 0x6c, 0xe5, 0xb8, 0xcd, 0xc4, 0xd1, 0x38, 0x84, 0x57, 0xc8, 0x46, 0xf3, 0x13, 0x98, 0x8b, 0xcd, 0xef, 0x96, 0x8e, 0xdb, 0x88, 0x1d, 0xf5, 0x7d,
0x4a, 0x9f, 0x39, 0xa7, 0x16, 0xb7, 0xcf, 0xd2, 0xdc, 0x55, 0x28, 0x5e, 0x45, 0x72, 0x8f, 0x84, 0x28, 0xf7, 0x98, 0x7d, 0x6c, 0x72, 0xeb, 0x24, 0xc9, 0x5d, 0x81, 0xfc, 0x45, 0x28, 0x77, 0x49,
0xba, 0x54, 0x57, 0x1a, 0xaa, 0x99, 0xc9, 0x58, 0x03, 0x18, 0x7b, 0x99, 0x55, 0x16, 0xd6, 0x19, 0xa0, 0x49, 0x35, 0xa5, 0x5e, 0x30, 0x52, 0x19, 0xab, 0x00, 0x23, 0x37, 0xb5, 0xca, 0xc2, 0x3a,
0x8d, 0xf1, 0x4c, 0x12, 0x4d, 0x8a, 0x7c, 0x9d, 0x4b, 0xea, 0xad, 0x42, 0x3a, 0xb3, 0x99, 0xf2, 0xa5, 0xd1, 0x5f, 0x49, 0xa2, 0x49, 0x91, 0xaf, 0x7d, 0x4e, 0xdd, 0x65, 0x48, 0xa7, 0x36, 0x53,
0xfb, 0x6d, 0x26, 0x7e, 0x05, 0xeb, 0x34, 0x08, 0x58, 0x20, 0xf8, 0x5f, 0xc2, 0x5b, 0x27, 0x08, 0xbe, 0xdf, 0x66, 0xe2, 0x4f, 0xb0, 0x4a, 0x7d, 0x9f, 0xf9, 0x82, 0xff, 0x05, 0xbc, 0xb5, 0x7d,
0xcc, 0xd8, 0xc3, 0xf8, 0x1e, 0x94, 0x4e, 0x10, 0x60, 0x33, 0x8d, 0x88, 0x20, 0x94, 0x5b, 0xfa, 0xdf, 0x88, 0x3c, 0xf4, 0xdf, 0x41, 0x69, 0xfb, 0x3e, 0x36, 0x92, 0x88, 0x10, 0x42, 0xa9, 0xa9,
0x92, 0x88, 0x36, 0x23, 0x34, 0x4c, 0xc3, 0xfe, 0x97, 0x61, 0xb3, 0xcf, 0x9c, 0xe3, 0x89, 0x67, 0x2d, 0x88, 0x68, 0x31, 0x42, 0x83, 0x24, 0xec, 0xa5, 0x0c, 0xeb, 0x3d, 0x66, 0x1f, 0x8e, 0x5d,
0xb7, 0x99, 0xc7, 0xa9, 0xc7, 0x7f, 0xb7, 0x46, 0x63, 0x8a, 0x3f, 0x03, 0x9c, 0x51, 0x8b, 0x9c, 0xab, 0xc5, 0x5c, 0x4e, 0x5d, 0xfe, 0xbf, 0x39, 0x1c, 0x51, 0xfc, 0x1b, 0xe0, 0x84, 0x9a, 0xe4,
0xf8, 0xc4, 0xe2, 0x34, 0x19, 0xdb, 0xd6, 0x92, 0xb1, 0x75, 0x33, 0xa7, 0x6e, 0xce, 0x9c, 0x09, 0xc8, 0x23, 0x26, 0xa7, 0xf1, 0xd8, 0x36, 0x16, 0x8c, 0xad, 0x93, 0x3a, 0x75, 0x32, 0xc6, 0x54,
0xc1, 0x01, 0x54, 0x86, 0xe3, 0xd1, 0x28, 0x4a, 0x9c, 0x90, 0x9d, 0x0c, 0xca, 0x58, 0x92, 0xe5, 0x08, 0xf6, 0xa1, 0x3c, 0x18, 0x0d, 0x87, 0x61, 0xe2, 0x98, 0xec, 0x78, 0x50, 0xfa, 0x82, 0x2c,
0xe0, 0xbe, 0x67, 0x37, 0x67, 0xce, 0x07, 0xe3, 0x6f, 0xa0, 0x4d, 0x55, 0xa1, 0x1f, 0xa5, 0x48, 0x7b, 0xb7, 0x3d, 0x3b, 0x19, 0x63, 0x36, 0x18, 0xff, 0x03, 0x75, 0xa2, 0x0a, 0xbc, 0x30, 0x45,
0x58, 0xf9, 0xe2, 0xc1, 0x84, 0xb1, 0x6b, 0x37, 0x67, 0x2e, 0x84, 0xef, 0x17, 0x60, 0xfd, 0x32, 0xcc, 0xca, 0x0f, 0x77, 0x26, 0x8c, 0x5c, 0x3b, 0x19, 0x63, 0x2e, 0x7c, 0x37, 0x07, 0xab, 0xe7,
0x6a, 0xd6, 0x98, 0x40, 0x39, 0xe1, 0xe0, 0x90, 0x86, 0xa1, 0xe5, 0xd0, 0xc7, 0xee, 0x8e, 0x3a, 0x61, 0xb3, 0xfa, 0x18, 0x4a, 0x31, 0x07, 0xfb, 0x34, 0x08, 0x4c, 0x9b, 0xde, 0xe3, 0xee, 0xfc,
0x7d, 0x6f, 0x3f, 0x41, 0xc1, 0x8e, 0x89, 0x7b, 0x00, 0xce, 0x3c, 0xbd, 0x66, 0x1a, 0x63, 0xfc, 0x05, 0x39, 0x2b, 0x22, 0xee, 0x0e, 0x38, 0xb3, 0xf4, 0x1a, 0x49, 0x8c, 0xfe, 0x44, 0xec, 0xd0,
0x25, 0x76, 0x68, 0xca, 0x62, 0xf4, 0xe2, 0x22, 0x16, 0x93, 0xda, 0xe2, 0xfb, 0x03, 0x36, 0xc8, 0x84, 0xc5, 0xf0, 0x8b, 0x0b, 0x59, 0x8c, 0x6b, 0x8b, 0xf7, 0x17, 0x6c, 0x90, 0x6e, 0x01, 0xce,
0xb0, 0x01, 0x17, 0xf9, 0x7d, 0xea, 0x22, 0x44, 0xec, 0xd0, 0x3c, 0xe7, 0x4f, 0x5c, 0x65, 0xe7, 0xf3, 0xfb, 0xd0, 0x45, 0x88, 0xd8, 0xa1, 0x59, 0xce, 0x1f, 0xb8, 0xca, 0xd6, 0x53, 0xc8, 0x27,
0x6f, 0x28, 0xa6, 0xdb, 0x8b, 0x65, 0x80, 0x13, 0x8f, 0x5e, 0xfb, 0xd4, 0xe6, 0x94, 0x68, 0x39, 0xdb, 0x8b, 0x25, 0x80, 0x23, 0x97, 0x5e, 0x7a, 0xd4, 0xe2, 0x94, 0xa8, 0x19, 0x5c, 0x83, 0x42,
0xdc, 0x00, 0xb5, 0xcf, 0x9c, 0xce, 0xb5, 0x1b, 0xf2, 0x50, 0x93, 0xb0, 0x02, 0xa5, 0x3e, 0x73, 0x8f, 0xd9, 0xed, 0x4b, 0x27, 0xe0, 0x81, 0x2a, 0x61, 0x19, 0x8a, 0x3d, 0x66, 0xf7, 0x19, 0xdf,
0x06, 0x8c, 0x1f, 0xb0, 0xb1, 0x47, 0x34, 0x19, 0x11, 0xca, 0x71, 0xd2, 0x36, 0xf3, 0x86, 0x23, 0x63, 0x23, 0x97, 0xa8, 0x32, 0x22, 0x94, 0xa2, 0xa4, 0x2d, 0xe6, 0x0e, 0x86, 0x8e, 0xc5, 0x55,
0xd7, 0xe6, 0x9a, 0x82, 0x1a, 0x94, 0x3a, 0xd1, 0x1b, 0x38, 0x1a, 0x0e, 0x43, 0xca, 0xb5, 0xb7, 0x05, 0x55, 0x28, 0xb6, 0xc3, 0x6f, 0xe0, 0x60, 0x30, 0x08, 0x28, 0x57, 0x3f, 0x2a, 0xcd, 0x0f,
0x4a, 0xeb, 0x8d, 0x04, 0x6a, 0x3b, 0x45, 0x83, 0x7b, 0x90, 0x8f, 0x6f, 0x18, 0x2e, 0x5b, 0xfc, 0x12, 0x14, 0x5a, 0x09, 0x1a, 0xdc, 0x81, 0x6c, 0x74, 0xc3, 0x70, 0xd1, 0xe2, 0x4f, 0x0e, 0x54,
0xe9, 0x81, 0xaa, 0xe2, 0xbc, 0xf9, 0xe8, 0x1c, 0x07, 0xa0, 0x66, 0x87, 0x0c, 0xeb, 0x0b, 0x3d, 0x05, 0x67, 0xcd, 0x07, 0xa7, 0xd8, 0x87, 0x42, 0x7a, 0xc8, 0xb0, 0x36, 0xd7, 0xe3, 0xcc, 0x8d,
0xce, 0xdd, 0xb8, 0xea, 0x63, 0x2c, 0xe0, 0x00, 0x8a, 0xe9, 0xad, 0xc1, 0xed, 0x25, 0x70, 0x66, 0xab, 0x7c, 0x8e, 0x05, 0xec, 0x43, 0x3e, 0xb9, 0x35, 0xb8, 0xb9, 0x00, 0xce, 0xf4, 0x55, 0xab,
0xaf, 0x5a, 0x75, 0x6b, 0x95, 0x83, 0x38, 0x53, 0x0d, 0xe9, 0x1b, 0x69, 0xbf, 0xf5, 0xf2, 0xb6, 0x6c, 0x2c, 0x73, 0x10, 0x67, 0xaa, 0x2e, 0xfd, 0x22, 0xed, 0x36, 0xdf, 0x5e, 0x57, 0xa5, 0xab,
0x26, 0xdd, 0xdc, 0xd6, 0xa4, 0xd7, 0xb7, 0x35, 0xe9, 0xf9, 0x5d, 0x2d, 0x77, 0x73, 0x57, 0xcb, 0xeb, 0xaa, 0xf4, 0xfe, 0xba, 0x2a, 0xbd, 0xbe, 0xa9, 0x66, 0xae, 0x6e, 0xaa, 0x99, 0x77, 0x37,
0xbd, 0xba, 0xab, 0xe5, 0xfe, 0xd0, 0x57, 0xfd, 0x74, 0xff, 0x93, 0x17, 0xff, 0xbe, 0x7b, 0x17, 0xd5, 0xcc, 0x23, 0x6d, 0xd9, 0x4f, 0xf7, 0xb3, 0xac, 0xf8, 0xf7, 0xdb, 0xa7, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x5e, 0x57, 0x8e, 0x0b, 0xdd, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x4a, 0x75, 0x11, 0xdd, 0x07, 0x00, 0x00,
} }
func (m *Log) Marshal() (dAtA []byte, err error) { func (m *Log) Marshal() (dAtA []byte, err error) {
@ -3437,7 +3437,7 @@ func (m *LogSyncMessage) Unmarshal(dAtA []byte) error {
if wireType != 2 { if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType)
} }
var stringLen uint64 var byteLen int
for shift := uint(0); ; shift += 7 { for shift := uint(0); ; shift += 7 {
if shift >= 64 { if shift >= 64 {
return ErrIntOverflowConsensus return ErrIntOverflowConsensus
@ -3447,23 +3447,25 @@ func (m *LogSyncMessage) Unmarshal(dAtA []byte) error {
} }
b := dAtA[iNdEx] b := dAtA[iNdEx]
iNdEx++ iNdEx++
stringLen |= uint64(b&0x7F) << shift byteLen |= int(b&0x7F) << shift
if b < 0x80 { if b < 0x80 {
break break
} }
} }
intStringLen := int(stringLen) if byteLen < 0 {
if intStringLen < 0 {
return ErrInvalidLengthConsensus return ErrInvalidLengthConsensus
} }
postIndex := iNdEx + intStringLen postIndex := iNdEx + byteLen
if postIndex < 0 { if postIndex < 0 {
return ErrInvalidLengthConsensus return ErrInvalidLengthConsensus
} }
if postIndex > l { if postIndex > l {
return io.ErrUnexpectedEOF return io.ErrUnexpectedEOF
} }
m.Payload = string(dAtA[iNdEx:postIndex]) m.Payload = append(m.Payload[:0], dAtA[iNdEx:postIndex]...)
if m.Payload == nil {
m.Payload = []byte{}
}
iNdEx = postIndex iNdEx = postIndex
case 3: case 3:
if wireType != 2 { if wireType != 2 {

View File

@ -88,7 +88,7 @@ message LogSyncContentValue {
// LogSyncMessage is a message sent when we are syncing logs // LogSyncMessage is a message sent when we are syncing logs
message LogSyncMessage { message LogSyncMessage {
string id = 1; string id = 1;
string payload = 2; bytes payload = 2;
LogSyncContentValue content = 3; LogSyncContentValue content = 3;
} }