1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00

Fix EOF error

This commit is contained in:
mcrakhman 2024-07-30 20:57:43 +02:00
parent e70272d79f
commit 2b9a8ee4cc
No known key found for this signature in database
GPG key ID: DED12CFEF5B8396B
9 changed files with 184 additions and 110 deletions

View file

@ -54,6 +54,10 @@ func (l *loadIterator) NextBatch(maxSize int) (batch IteratorBatch, err error) {
l.lastChange = c
rawEntry := l.cache[c.Id]
if rawEntry.removed {
batch.Heads = slice.DiscardFromSlice(batch.Heads, func(s string) bool {
return slices.Contains(c.PreviousIds, s)
})
batch.Heads = append(batch.Heads, c.Id)
return true
}
if curSize+rawEntry.size > maxSize && len(batch.Batch) != 0 {

View file

@ -45,8 +45,10 @@ func (r *responseProducer) NewResponse(batchSize int) (*Response, error) {
}
func (r *responseProducer) EmptyResponse() *Response {
headsCopy := make([]string, len(r.tree.Heads()))
copy(headsCopy, r.tree.Heads())
return &Response{
heads: r.tree.Heads(),
heads: headsCopy,
spaceId: r.spaceId,
objectId: r.objectId,
root: r.tree.Header(),

View file

@ -154,7 +154,7 @@ func (s *syncHandler) HandleStreamRequest(ctx context.Context, rq syncdeps.Reque
return nil, err
}
var returnReq *objectmessages.Request
if slice.UnsortedEquals(curHeads, request.Heads) {
if slice.UnsortedEquals(curHeads, request.Heads) || slice.ContainsSorted(request.Heads, curHeads) {
resp := producer.EmptyResponse()
s.tree.Unlock()
protoResp, err := resp.ProtoMessage()

View file

@ -2,17 +2,20 @@ package spacesyncproto
import (
"errors"
"github.com/anyproto/any-sync/net/rpc/rpcerr"
)
var (
errGroup = rpcerr.ErrGroup(ErrCodes_ErrorOffset)
ErrUnexpected = errGroup.Register(errors.New("unexpected error"), uint64(ErrCodes_Unexpected))
ErrSpaceMissing = errGroup.Register(errors.New("space is missing"), uint64(ErrCodes_SpaceMissing))
ErrSpaceExists = errGroup.Register(errors.New("space exists"), uint64(ErrCodes_SpaceExists))
ErrSpaceNotInCache = errGroup.Register(errors.New("space not in cache"), uint64(ErrCodes_SpaceNotInCache))
ErrSpaceIsDeleted = errGroup.Register(errors.New("space is deleted"), uint64(ErrCodes_SpaceIsDeleted))
ErrPeerIsNotResponsible = errGroup.Register(errors.New("peer is not responsible for space"), uint64(ErrCodes_PeerIsNotResponsible))
ErrReceiptInvalid = errGroup.Register(errors.New("space receipt is not valid"), uint64(ErrCodes_ReceiptIsInvalid))
ErrUnexpected = errGroup.Register(errors.New("unexpected error"), uint64(ErrCodes_Unexpected))
ErrSpaceMissing = errGroup.Register(errors.New("space is missing"), uint64(ErrCodes_SpaceMissing))
ErrSpaceExists = errGroup.Register(errors.New("space exists"), uint64(ErrCodes_SpaceExists))
ErrSpaceNotInCache = errGroup.Register(errors.New("space not in cache"), uint64(ErrCodes_SpaceNotInCache))
ErrSpaceIsDeleted = errGroup.Register(errors.New("space is deleted"), uint64(ErrCodes_SpaceIsDeleted))
ErrPeerIsNotResponsible = errGroup.Register(errors.New("peer is not responsible for space"), uint64(ErrCodes_PeerIsNotResponsible))
ErrReceiptInvalid = errGroup.Register(errors.New("space receipt is not valid"), uint64(ErrCodes_ReceiptIsInvalid))
ErrDuplicateRequest = errGroup.Register(errors.New("duplicate request"), uint64(ErrCodes_DuplicateRequest))
ErrTooManyRequestsFromPeer = errGroup.Register(errors.New("too many requests from peer"), uint64(ErrCodes_TooManyRequestsFromPeer))
)

View file

@ -12,6 +12,8 @@ enum ErrCodes {
PeerIsNotResponsible = 5;
ReceiptIsInvalid = 6;
InvalidPayload = 7;
DuplicateRequest = 8;
TooManyRequestsFromPeer = 9;
ErrorOffset = 100;
}

View file

@ -25,15 +25,17 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
type ErrCodes int32
const (
ErrCodes_Unexpected ErrCodes = 0
ErrCodes_SpaceMissing ErrCodes = 1
ErrCodes_SpaceExists ErrCodes = 2
ErrCodes_SpaceNotInCache ErrCodes = 3
ErrCodes_SpaceIsDeleted ErrCodes = 4
ErrCodes_PeerIsNotResponsible ErrCodes = 5
ErrCodes_ReceiptIsInvalid ErrCodes = 6
ErrCodes_InvalidPayload ErrCodes = 7
ErrCodes_ErrorOffset ErrCodes = 100
ErrCodes_Unexpected ErrCodes = 0
ErrCodes_SpaceMissing ErrCodes = 1
ErrCodes_SpaceExists ErrCodes = 2
ErrCodes_SpaceNotInCache ErrCodes = 3
ErrCodes_SpaceIsDeleted ErrCodes = 4
ErrCodes_PeerIsNotResponsible ErrCodes = 5
ErrCodes_ReceiptIsInvalid ErrCodes = 6
ErrCodes_InvalidPayload ErrCodes = 7
ErrCodes_DuplicateRequest ErrCodes = 8
ErrCodes_TooManyRequestsFromPeer ErrCodes = 9
ErrCodes_ErrorOffset ErrCodes = 100
)
var ErrCodes_name = map[int32]string{
@ -45,19 +47,23 @@ var ErrCodes_name = map[int32]string{
5: "PeerIsNotResponsible",
6: "ReceiptIsInvalid",
7: "InvalidPayload",
8: "DuplicateRequest",
9: "TooManyRequestsFromPeer",
100: "ErrorOffset",
}
var ErrCodes_value = map[string]int32{
"Unexpected": 0,
"SpaceMissing": 1,
"SpaceExists": 2,
"SpaceNotInCache": 3,
"SpaceIsDeleted": 4,
"PeerIsNotResponsible": 5,
"ReceiptIsInvalid": 6,
"InvalidPayload": 7,
"ErrorOffset": 100,
"Unexpected": 0,
"SpaceMissing": 1,
"SpaceExists": 2,
"SpaceNotInCache": 3,
"SpaceIsDeleted": 4,
"PeerIsNotResponsible": 5,
"ReceiptIsInvalid": 6,
"InvalidPayload": 7,
"DuplicateRequest": 8,
"TooManyRequestsFromPeer": 9,
"ErrorOffset": 100,
}
func (x ErrCodes) String() string {
@ -1709,87 +1715,89 @@ func init() {
}
var fileDescriptor_80e49f1f4ac27799 = []byte{
// 1273 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0x4d, 0x6f, 0x1b, 0xc5,
0x1b, 0xf7, 0x6e, 0x9c, 0xd8, 0x7e, 0xb2, 0x76, 0xb7, 0x13, 0xb7, 0xf5, 0xdf, 0xad, 0x1c, 0x6b,
0xf5, 0x17, 0x8a, 0x72, 0xc8, 0x2b, 0x42, 0x6a, 0x81, 0x43, 0x9a, 0xa4, 0x64, 0x81, 0x36, 0xd1,
0x98, 0xaa, 0x12, 0x12, 0x87, 0xc9, 0xee, 0x24, 0x5e, 0x58, 0xef, 0x9a, 0x9d, 0x71, 0x1b, 0x1f,
0x39, 0x71, 0x43, 0x9c, 0xe1, 0xa3, 0xf0, 0x05, 0x38, 0x96, 0x1b, 0x47, 0x94, 0x7c, 0x0d, 0x0e,
0x68, 0x66, 0x67, 0xdf, 0xec, 0x75, 0x28, 0xea, 0xc5, 0xd9, 0xe7, 0xed, 0xf7, 0xbc, 0xce, 0x33,
0x13, 0xd8, 0x75, 0xc2, 0xd1, 0x28, 0x0c, 0xd8, 0x98, 0x38, 0x74, 0x5b, 0xfe, 0xb2, 0x69, 0xe0,
0x8c, 0xa3, 0x90, 0x87, 0xdb, 0xf2, 0x97, 0x65, 0xdc, 0x2d, 0xc9, 0x40, 0x8d, 0x94, 0x61, 0x51,
0x68, 0x9e, 0x50, 0xe2, 0x0e, 0xa6, 0x81, 0x83, 0x49, 0x70, 0x49, 0x11, 0x82, 0xea, 0x45, 0x14,
0x8e, 0x3a, 0x5a, 0x5f, 0xdb, 0xa8, 0x62, 0xf9, 0x8d, 0x5a, 0xa0, 0xf3, 0xb0, 0xa3, 0x4b, 0x8e,
0xce, 0x43, 0xd4, 0x86, 0x65, 0xdf, 0x1b, 0x79, 0xbc, 0xb3, 0xd4, 0xd7, 0x36, 0x9a, 0x38, 0x26,
0x50, 0x17, 0xea, 0xd4, 0xa7, 0x23, 0x1a, 0x70, 0xd6, 0xa9, 0xf6, 0xb5, 0x8d, 0x3a, 0x4e, 0x69,
0xeb, 0x0a, 0x5a, 0xa9, 0x1b, 0xca, 0x26, 0x3e, 0x17, 0x7e, 0x86, 0x84, 0x0d, 0xa5, 0x1f, 0x03,
0xcb, 0x6f, 0xf4, 0x49, 0x0e, 0x41, 0xef, 0x2f, 0x6d, 0xac, 0xee, 0xf5, 0xb7, 0xb2, 0xd8, 0x8b,
0x00, 0xc7, 0xb1, 0x62, 0xe6, 0x43, 0x44, 0xe5, 0x84, 0x93, 0x20, 0x8d, 0x4a, 0x12, 0xd6, 0xc7,
0x70, 0xaf, 0xd4, 0x50, 0x24, 0xe5, 0xb9, 0xd2, 0x7d, 0x03, 0xeb, 0x9e, 0x2b, 0x03, 0xa2, 0xc4,
0x95, 0x69, 0x36, 0xb0, 0xfc, 0xb6, 0x7e, 0xd2, 0xe0, 0x4e, 0x66, 0xfd, 0xfd, 0x84, 0x32, 0x8e,
0x3a, 0x50, 0x93, 0x31, 0xd9, 0x89, 0x71, 0x42, 0xa2, 0x1d, 0x58, 0x89, 0x44, 0x0d, 0x93, 0xe0,
0x3b, 0x65, 0xc1, 0x0b, 0x05, 0xac, 0xf4, 0xd0, 0x36, 0xd4, 0x5d, 0xef, 0xe2, 0xe2, 0xab, 0xe9,
0x98, 0xca, 0xa8, 0x5b, 0x7b, 0x6b, 0x39, 0x9b, 0x23, 0x25, 0xc2, 0xa9, 0x92, 0x75, 0x05, 0x66,
0x2e, 0x9b, 0x71, 0x18, 0x30, 0x8a, 0xf6, 0xa1, 0x16, 0xc9, 0xcc, 0x58, 0x47, 0x93, 0x7e, 0xff,
0xb7, 0xb0, 0x68, 0x38, 0xd1, 0x2c, 0x78, 0xd6, 0xdf, 0xc5, 0xf3, 0xaf, 0x1a, 0xdc, 0x3d, 0x3d,
0xff, 0x96, 0x3a, 0x5c, 0xc0, 0x3d, 0xa7, 0x8c, 0x91, 0x4b, 0x7a, 0x4b, 0x31, 0x1e, 0x41, 0x23,
0x8a, 0x2b, 0x66, 0x27, 0x35, 0xcd, 0x18, 0xc2, 0x2e, 0xa2, 0x63, 0x7f, 0x6a, 0xbb, 0x32, 0xef,
0x06, 0x4e, 0x48, 0x21, 0x19, 0x93, 0xa9, 0x1f, 0x12, 0x57, 0x0e, 0x91, 0x81, 0x13, 0x52, 0xcc,
0x57, 0x28, 0x03, 0xb0, 0xdd, 0xce, 0xb2, 0x34, 0x4a, 0x69, 0x8b, 0x82, 0x39, 0x10, 0x8e, 0xcf,
0x26, 0x6c, 0x98, 0x34, 0x6a, 0x37, 0x43, 0x12, 0xb1, 0xad, 0xee, 0x3d, 0xc8, 0x65, 0x18, 0x6b,
0xc7, 0xe2, 0xcc, 0x45, 0x0f, 0xe0, 0x30, 0xa2, 0x2e, 0x0d, 0xb8, 0x47, 0x7c, 0x19, 0xb5, 0x81,
0x73, 0x1c, 0x6b, 0x0d, 0xee, 0xe6, 0xdc, 0xc4, 0xf5, 0xb7, 0xac, 0xd4, 0xb7, 0xef, 0x27, 0xbe,
0x67, 0x86, 0xcb, 0x7a, 0x96, 0x1a, 0x0a, 0x1d, 0xd5, 0xb8, 0xff, 0x1e, 0xa0, 0xf5, 0x83, 0x0e,
0x46, 0x5e, 0x82, 0x0e, 0x60, 0x55, 0xda, 0x88, 0x3e, 0xd3, 0x48, 0xe1, 0xac, 0xe7, 0x70, 0x30,
0x79, 0x33, 0xc8, 0x14, 0x5e, 0x79, 0x7c, 0x68, 0xbb, 0x38, 0x6f, 0x23, 0x92, 0x26, 0x8e, 0xaf,
0x00, 0x93, 0xa4, 0x33, 0x0e, 0xb2, 0xc0, 0xc8, 0xa8, 0xb4, 0x61, 0x05, 0x1e, 0xda, 0x83, 0xb6,
0x84, 0x1c, 0x50, 0xce, 0xbd, 0xe0, 0x92, 0x9d, 0x15, 0x5a, 0x58, 0x2a, 0x43, 0x1f, 0xc1, 0xfd,
0x32, 0x7e, 0xda, 0xdd, 0x05, 0x52, 0xeb, 0x0f, 0x0d, 0x56, 0x73, 0x29, 0x89, 0xb9, 0xf0, 0x64,
0x83, 0xf8, 0x54, 0x6d, 0x93, 0x94, 0x16, 0x53, 0xc8, 0xbd, 0x11, 0x65, 0x9c, 0x8c, 0xc6, 0x32,
0xb5, 0x25, 0x9c, 0x31, 0x84, 0x54, 0xfa, 0x48, 0xcf, 0x5f, 0x03, 0x67, 0x0c, 0xf4, 0x01, 0xb4,
0xc4, 0x50, 0x7a, 0x0e, 0xe1, 0x5e, 0x18, 0x7c, 0x41, 0xa7, 0x32, 0x9b, 0x2a, 0x9e, 0xe1, 0x8a,
0xc5, 0xc1, 0x28, 0x8d, 0xa3, 0x36, 0xb0, 0xfc, 0x46, 0x5b, 0x80, 0x72, 0x25, 0x4e, 0xaa, 0xb1,
0x22, 0x35, 0x4a, 0x24, 0xd6, 0x19, 0xb4, 0x8a, 0x8d, 0x42, 0xfd, 0xf9, 0xc6, 0x1a, 0xc5, 0xbe,
0x89, 0xe8, 0xbd, 0xcb, 0x80, 0xf0, 0x49, 0x44, 0x55, 0xdb, 0x32, 0x86, 0x75, 0x04, 0xed, 0xb2,
0xd6, 0xcb, 0x73, 0x49, 0xde, 0x14, 0x50, 0x33, 0x86, 0x9a, 0x5b, 0x3d, 0x9d, 0xdb, 0x5f, 0x34,
0x68, 0x0f, 0xf2, 0x6d, 0x38, 0x0c, 0x03, 0x2e, 0xb6, 0xe7, 0xa7, 0x60, 0xc4, 0x87, 0xef, 0x88,
0xfa, 0x94, 0xd3, 0x92, 0x01, 0x3e, 0xcd, 0x89, 0x4f, 0x2a, 0xb8, 0xa0, 0x8e, 0x9e, 0xa8, 0xec,
0x94, 0xb5, 0x2e, 0xad, 0xef, 0xcf, 0x8e, 0x7f, 0x6a, 0x9c, 0x57, 0x7e, 0x5a, 0x83, 0xe5, 0xd7,
0xc4, 0x9f, 0x50, 0xab, 0x07, 0x46, 0xde, 0xc9, 0xdc, 0xa1, 0xdb, 0x57, 0x73, 0xa2, 0xc4, 0xff,
0x87, 0xa6, 0x2b, 0xbf, 0xa2, 0x33, 0x4a, 0xa3, 0x74, 0x63, 0x15, 0x99, 0xd6, 0x37, 0x70, 0xaf,
0x90, 0xf0, 0x20, 0x20, 0x63, 0x36, 0x0c, 0xb9, 0x38, 0x26, 0xb1, 0xa6, 0x6b, 0xbb, 0xf1, 0xa6,
0x6d, 0xe0, 0x1c, 0x67, 0x1e, 0x5e, 0x2f, 0x83, 0xff, 0x51, 0x03, 0x23, 0x81, 0x3e, 0x22, 0x9c,
0xa0, 0xc7, 0x50, 0x73, 0xe2, 0x9a, 0xaa, 0xed, 0xbd, 0x3e, 0x5b, 0x85, 0x99, 0xd2, 0xe3, 0x44,
0x5f, 0x5c, 0x97, 0x4c, 0x45, 0xa7, 0x2a, 0xd8, 0x5f, 0x64, 0x9b, 0x64, 0x81, 0x53, 0x0b, 0xeb,
0x3b, 0xb5, 0x92, 0x06, 0x93, 0x73, 0xe6, 0x44, 0xde, 0x58, 0x8c, 0xb3, 0x38, 0x4b, 0x6a, 0x81,
0x27, 0x29, 0xa6, 0x34, 0x7a, 0x02, 0x2b, 0xc4, 0x11, 0x5a, 0xea, 0xc2, 0xb0, 0xe6, 0x9c, 0xe5,
0x90, 0x0e, 0xa4, 0x26, 0x56, 0x16, 0x96, 0x0d, 0x6b, 0x07, 0x8e, 0x7f, 0xe0, 0xba, 0x98, 0x3a,
0x61, 0xe4, 0xfe, 0xfb, 0x5d, 0x9a, 0xbb, 0x06, 0xf4, 0xc2, 0x35, 0x60, 0x7d, 0x09, 0xed, 0x22,
0x94, 0xda, 0xa6, 0x5d, 0xa8, 0x47, 0x92, 0x93, 0x82, 0xa5, 0xf4, 0x2d, 0x68, 0x9f, 0x4b, 0xb4,
0xcf, 0x28, 0x8f, 0xd1, 0xd8, 0x3b, 0x45, 0x46, 0x1c, 0xff, 0x24, 0x7b, 0x2a, 0x24, 0xa4, 0xb5,
0x0b, 0xf7, 0x66, 0xb0, 0x54, 0x68, 0xf2, 0xb6, 0x93, 0x2c, 0x59, 0x54, 0x03, 0x27, 0xe4, 0xe6,
0x6f, 0x1a, 0xd4, 0x8f, 0xa3, 0xe8, 0x30, 0x74, 0x29, 0x43, 0x2d, 0x80, 0x97, 0x01, 0xbd, 0x1a,
0x53, 0x87, 0x53, 0xd7, 0xac, 0x20, 0x53, 0xed, 0xfa, 0xe7, 0x1e, 0x63, 0x5e, 0x70, 0x69, 0x6a,
0xe8, 0x8e, 0x9a, 0xe8, 0xe3, 0x2b, 0x8f, 0x71, 0x66, 0xea, 0x68, 0x0d, 0xee, 0x48, 0xc6, 0x8b,
0x90, 0xdb, 0xc1, 0x21, 0x71, 0x86, 0xd4, 0x5c, 0x42, 0x08, 0x5a, 0x92, 0x69, 0xb3, 0x78, 0xf2,
0x5d, 0xb3, 0x8a, 0x3a, 0xd0, 0x96, 0x13, 0xc8, 0x5e, 0x84, 0x5c, 0xc5, 0xe5, 0x9d, 0xfb, 0xd4,
0x5c, 0x46, 0x6d, 0x30, 0x31, 0x75, 0xa8, 0x37, 0xe6, 0x36, 0xb3, 0x83, 0xd7, 0xc4, 0xf7, 0x5c,
0x73, 0x45, 0x60, 0x28, 0x42, 0xad, 0x28, 0xb3, 0x26, 0xbc, 0x1f, 0x47, 0x51, 0x18, 0x9d, 0x5e,
0x5c, 0x30, 0xca, 0x4d, 0x77, 0xf3, 0x31, 0x3c, 0x58, 0xd0, 0x78, 0xd4, 0x84, 0x86, 0xe2, 0x9e,
0x53, 0xb3, 0x22, 0x4c, 0x5f, 0x06, 0x2c, 0x65, 0x68, 0x9b, 0x9b, 0x50, 0x4f, 0x1e, 0x19, 0x68,
0x15, 0x6a, 0x76, 0xe0, 0x89, 0x0b, 0xd6, 0xac, 0xa0, 0xbb, 0xd0, 0x3c, 0x8b, 0xa8, 0x43, 0x7c,
0x67, 0xe2, 0x13, 0x11, 0xbb, 0xb6, 0xf7, 0x77, 0x15, 0x1a, 0xb1, 0x9f, 0x69, 0xe0, 0xa0, 0x43,
0xa8, 0x27, 0x8f, 0x1a, 0xd4, 0x2d, 0x7d, 0xe9, 0xc8, 0x0e, 0x76, 0x1f, 0x96, 0xbf, 0x82, 0xe2,
0x8e, 0x3c, 0x53, 0x88, 0xe2, 0x22, 0x47, 0x0f, 0xe7, 0xae, 0xdd, 0xec, 0x15, 0xd1, 0x7d, 0x54,
0x2e, 0x9c, 0xc3, 0xf1, 0xfd, 0x32, 0x9c, 0xf4, 0x45, 0x50, 0x86, 0x93, 0x7b, 0x0a, 0x60, 0x30,
0xb3, 0xc7, 0xd5, 0x80, 0x47, 0x94, 0x8c, 0xd0, 0xa3, 0xb9, 0x65, 0x9a, 0x7b, 0x79, 0x75, 0x6f,
0x95, 0x6e, 0x68, 0x3b, 0x1a, 0x3a, 0x01, 0xc8, 0x04, 0xef, 0x83, 0x86, 0x5e, 0xc1, 0x83, 0x8c,
0xa9, 0x12, 0x7a, 0xff, 0x20, 0x77, 0x34, 0x74, 0x0a, 0x46, 0xfe, 0x2c, 0xa3, 0x5e, 0x4e, 0xbf,
0x64, 0x5f, 0x74, 0xd7, 0x17, 0xca, 0xd3, 0x3a, 0x36, 0x0b, 0x47, 0x10, 0xcd, 0x58, 0xcc, 0x1d,
0xf4, 0x6e, 0x7f, 0xb1, 0x42, 0x8c, 0xf9, 0xf4, 0xc3, 0xdf, 0xaf, 0x7b, 0xda, 0xdb, 0xeb, 0x9e,
0xf6, 0xd7, 0x75, 0x4f, 0xfb, 0xf9, 0xa6, 0x57, 0x79, 0x7b, 0xd3, 0xab, 0xfc, 0x79, 0xd3, 0xab,
0x7c, 0xdd, 0x5d, 0xfc, 0xaf, 0xd7, 0xf9, 0x8a, 0xfc, 0xb3, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff,
0xff, 0x62, 0xd6, 0x1a, 0x50, 0x9f, 0x0d, 0x00, 0x00,
// 1300 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xcb, 0x6f, 0x1b, 0x45,
0x18, 0xf7, 0x6e, 0x9c, 0xd8, 0xfe, 0xb2, 0x76, 0xb7, 0x13, 0xb7, 0x31, 0x6e, 0xe5, 0x5a, 0x2b,
0x84, 0xa2, 0x1c, 0xda, 0x26, 0x41, 0x48, 0x2d, 0x70, 0x48, 0xf3, 0x20, 0x0b, 0xa4, 0x89, 0xc6,
0xad, 0x2a, 0x21, 0x71, 0x98, 0xec, 0x4e, 0xe2, 0x85, 0xf5, 0xae, 0xd9, 0x19, 0xb7, 0xf1, 0x91,
0x13, 0x37, 0xc4, 0x19, 0xfe, 0x21, 0x8e, 0xe5, 0xc6, 0x11, 0x25, 0x77, 0xfe, 0x02, 0x0e, 0x68,
0x66, 0x67, 0x5f, 0xf6, 0x3a, 0x14, 0xf5, 0xe2, 0xec, 0xf7, 0xfa, 0x7d, 0xcf, 0xf9, 0x66, 0x02,
0x5b, 0x4e, 0x38, 0x1a, 0x85, 0x01, 0x1b, 0x13, 0x87, 0x3e, 0x92, 0xbf, 0x6c, 0x1a, 0x38, 0xe3,
0x28, 0xe4, 0xe1, 0x23, 0xf9, 0xcb, 0x32, 0xee, 0x43, 0xc9, 0x40, 0x8d, 0x94, 0x61, 0x51, 0x68,
0x1e, 0x51, 0xe2, 0x0e, 0xa6, 0x81, 0x83, 0x49, 0x70, 0x41, 0x11, 0x82, 0xea, 0x79, 0x14, 0x8e,
0x3a, 0x5a, 0x5f, 0xdb, 0xa8, 0x62, 0xf9, 0x8d, 0x5a, 0xa0, 0xf3, 0xb0, 0xa3, 0x4b, 0x8e, 0xce,
0x43, 0xd4, 0x86, 0x65, 0xdf, 0x1b, 0x79, 0xbc, 0xb3, 0xd4, 0xd7, 0x36, 0x9a, 0x38, 0x26, 0x50,
0x17, 0xea, 0xd4, 0xa7, 0x23, 0x1a, 0x70, 0xd6, 0xa9, 0xf6, 0xb5, 0x8d, 0x3a, 0x4e, 0x69, 0xeb,
0x12, 0x5a, 0xa9, 0x1b, 0xca, 0x26, 0x3e, 0x17, 0x7e, 0x86, 0x84, 0x0d, 0xa5, 0x1f, 0x03, 0xcb,
0x6f, 0xf4, 0x59, 0x0e, 0x41, 0xef, 0x2f, 0x6d, 0xac, 0x6e, 0xf7, 0x1f, 0x66, 0xb1, 0x17, 0x01,
0x0e, 0x62, 0xc5, 0xcc, 0x87, 0x88, 0xca, 0x09, 0x27, 0x41, 0x1a, 0x95, 0x24, 0xac, 0x4f, 0xe1,
0x4e, 0xa9, 0xa1, 0x48, 0xca, 0x73, 0xa5, 0xfb, 0x06, 0xd6, 0x3d, 0x57, 0x06, 0x44, 0x89, 0x2b,
0xd3, 0x6c, 0x60, 0xf9, 0x6d, 0xfd, 0xac, 0xc1, 0xad, 0xcc, 0xfa, 0x87, 0x09, 0x65, 0x1c, 0x75,
0xa0, 0x26, 0x63, 0xb2, 0x13, 0xe3, 0x84, 0x44, 0x8f, 0x61, 0x25, 0x12, 0x35, 0x4c, 0x82, 0xef,
0x94, 0x05, 0x2f, 0x14, 0xb0, 0xd2, 0x43, 0x8f, 0xa0, 0xee, 0x7a, 0xe7, 0xe7, 0x2f, 0xa6, 0x63,
0x2a, 0xa3, 0x6e, 0x6d, 0xaf, 0xe5, 0x6c, 0xf6, 0x95, 0x08, 0xa7, 0x4a, 0xd6, 0x25, 0x98, 0xb9,
0x6c, 0xc6, 0x61, 0xc0, 0x28, 0xda, 0x81, 0x5a, 0x24, 0x33, 0x63, 0x1d, 0x4d, 0xfa, 0xfd, 0x60,
0x61, 0xd1, 0x70, 0xa2, 0x59, 0xf0, 0xac, 0xbf, 0x8b, 0xe7, 0xdf, 0x34, 0xb8, 0x7d, 0x72, 0xf6,
0x1d, 0x75, 0xb8, 0x80, 0x3b, 0xa6, 0x8c, 0x91, 0x0b, 0x7a, 0x43, 0x31, 0xee, 0x43, 0x23, 0x8a,
0x2b, 0x66, 0x27, 0x35, 0xcd, 0x18, 0xc2, 0x2e, 0xa2, 0x63, 0x7f, 0x6a, 0xbb, 0x32, 0xef, 0x06,
0x4e, 0x48, 0x21, 0x19, 0x93, 0xa9, 0x1f, 0x12, 0x57, 0x0e, 0x91, 0x81, 0x13, 0x52, 0xcc, 0x57,
0x28, 0x03, 0xb0, 0xdd, 0xce, 0xb2, 0x34, 0x4a, 0x69, 0x8b, 0x82, 0x39, 0x10, 0x8e, 0x4f, 0x27,
0x6c, 0x98, 0x34, 0x6a, 0x2b, 0x43, 0x12, 0xb1, 0xad, 0x6e, 0xaf, 0xe7, 0x32, 0x8c, 0xb5, 0x63,
0x71, 0xe6, 0xa2, 0x07, 0xb0, 0x17, 0x51, 0x97, 0x06, 0xdc, 0x23, 0xbe, 0x8c, 0xda, 0xc0, 0x39,
0x8e, 0xb5, 0x06, 0xb7, 0x73, 0x6e, 0xe2, 0xfa, 0x5b, 0x56, 0xea, 0xdb, 0xf7, 0x13, 0xdf, 0x33,
0xc3, 0x65, 0x1d, 0xa6, 0x86, 0x42, 0x47, 0x35, 0xee, 0xff, 0x07, 0x68, 0xfd, 0xa8, 0x83, 0x91,
0x97, 0xa0, 0x5d, 0x58, 0x95, 0x36, 0xa2, 0xcf, 0x34, 0x52, 0x38, 0x0f, 0x72, 0x38, 0x98, 0xbc,
0x19, 0x64, 0x0a, 0xaf, 0x3c, 0x3e, 0xb4, 0x5d, 0x9c, 0xb7, 0x11, 0x49, 0x13, 0xc7, 0x57, 0x80,
0x49, 0xd2, 0x19, 0x07, 0x59, 0x60, 0x64, 0x54, 0xda, 0xb0, 0x02, 0x0f, 0x6d, 0x43, 0x5b, 0x42,
0x0e, 0x28, 0xe7, 0x5e, 0x70, 0xc1, 0x4e, 0x0b, 0x2d, 0x2c, 0x95, 0xa1, 0x4f, 0xe0, 0x6e, 0x19,
0x3f, 0xed, 0xee, 0x02, 0xa9, 0xf5, 0x87, 0x06, 0xab, 0xb9, 0x94, 0xc4, 0x5c, 0x78, 0xb2, 0x41,
0x7c, 0xaa, 0xb6, 0x49, 0x4a, 0x8b, 0x29, 0xe4, 0xde, 0x88, 0x32, 0x4e, 0x46, 0x63, 0x99, 0xda,
0x12, 0xce, 0x18, 0x42, 0x2a, 0x7d, 0xa4, 0xe7, 0xaf, 0x81, 0x33, 0x06, 0xfa, 0x08, 0x5a, 0x62,
0x28, 0x3d, 0x87, 0x70, 0x2f, 0x0c, 0xbe, 0xa2, 0x53, 0x99, 0x4d, 0x15, 0xcf, 0x70, 0xc5, 0xe2,
0x60, 0x94, 0xc6, 0x51, 0x1b, 0x58, 0x7e, 0xa3, 0x87, 0x80, 0x72, 0x25, 0x4e, 0xaa, 0xb1, 0x22,
0x35, 0x4a, 0x24, 0xd6, 0x29, 0xb4, 0x8a, 0x8d, 0x42, 0xfd, 0xf9, 0xc6, 0x1a, 0xc5, 0xbe, 0x89,
0xe8, 0xbd, 0x8b, 0x80, 0xf0, 0x49, 0x44, 0x55, 0xdb, 0x32, 0x86, 0xb5, 0x0f, 0xed, 0xb2, 0xd6,
0xcb, 0x73, 0x49, 0xde, 0x14, 0x50, 0x33, 0x86, 0x9a, 0x5b, 0x3d, 0x9d, 0xdb, 0x5f, 0x35, 0x68,
0x0f, 0xf2, 0x6d, 0xd8, 0x0b, 0x03, 0x2e, 0xb6, 0xe7, 0xe7, 0x60, 0xc4, 0x87, 0x6f, 0x9f, 0xfa,
0x94, 0xd3, 0x92, 0x01, 0x3e, 0xc9, 0x89, 0x8f, 0x2a, 0xb8, 0xa0, 0x8e, 0x9e, 0xaa, 0xec, 0x94,
0xb5, 0x2e, 0xad, 0xef, 0xce, 0x8e, 0x7f, 0x6a, 0x9c, 0x57, 0x7e, 0x56, 0x83, 0xe5, 0xd7, 0xc4,
0x9f, 0x50, 0xab, 0x07, 0x46, 0xde, 0xc9, 0xdc, 0xa1, 0xdb, 0x51, 0x73, 0xa2, 0xc4, 0x1f, 0x42,
0xd3, 0x95, 0x5f, 0xd1, 0x29, 0xa5, 0x51, 0xba, 0xb1, 0x8a, 0x4c, 0xeb, 0x5b, 0xb8, 0x53, 0x48,
0x78, 0x10, 0x90, 0x31, 0x1b, 0x86, 0x5c, 0x1c, 0x93, 0x58, 0xd3, 0xb5, 0xdd, 0x78, 0xd3, 0x36,
0x70, 0x8e, 0x33, 0x0f, 0xaf, 0x97, 0xc1, 0xff, 0xa4, 0x81, 0x91, 0x40, 0xef, 0x13, 0x4e, 0xd0,
0x13, 0xa8, 0x39, 0x71, 0x4d, 0xd5, 0xf6, 0x7e, 0x30, 0x5b, 0x85, 0x99, 0xd2, 0xe3, 0x44, 0x5f,
0x5c, 0x97, 0x4c, 0x45, 0xa7, 0x2a, 0xd8, 0x5f, 0x64, 0x9b, 0x64, 0x81, 0x53, 0x0b, 0xeb, 0x7b,
0xb5, 0x92, 0x06, 0x93, 0x33, 0xe6, 0x44, 0xde, 0x58, 0x8c, 0xb3, 0x38, 0x4b, 0x6a, 0x81, 0x27,
0x29, 0xa6, 0x34, 0x7a, 0x0a, 0x2b, 0xc4, 0x11, 0x5a, 0xea, 0xc2, 0xb0, 0xe6, 0x9c, 0xe5, 0x90,
0x76, 0xa5, 0x26, 0x56, 0x16, 0x96, 0x0d, 0x6b, 0xbb, 0x8e, 0xbf, 0xeb, 0xba, 0x98, 0x3a, 0x61,
0xe4, 0xfe, 0xf7, 0x5d, 0x9a, 0xbb, 0x06, 0xf4, 0xc2, 0x35, 0x60, 0x7d, 0x0d, 0xed, 0x22, 0x94,
0xda, 0xa6, 0x5d, 0xa8, 0x47, 0x92, 0x93, 0x82, 0xa5, 0xf4, 0x0d, 0x68, 0x5f, 0x4a, 0xb4, 0x2f,
0x28, 0x8f, 0xd1, 0xd8, 0x3b, 0x45, 0x46, 0x1c, 0xff, 0x28, 0x7b, 0x2a, 0x24, 0xa4, 0xb5, 0x05,
0x77, 0x66, 0xb0, 0x54, 0x68, 0xf2, 0xb6, 0x93, 0x2c, 0x59, 0x54, 0x03, 0x27, 0xe4, 0xe6, 0xdf,
0x1a, 0xd4, 0x0f, 0xa2, 0x68, 0x2f, 0x74, 0x29, 0x43, 0x2d, 0x80, 0x97, 0x01, 0xbd, 0x1c, 0x53,
0x87, 0x53, 0xd7, 0xac, 0x20, 0x53, 0xed, 0xfa, 0x63, 0x8f, 0x31, 0x2f, 0xb8, 0x30, 0x35, 0x74,
0x4b, 0x4d, 0xf4, 0xc1, 0xa5, 0xc7, 0x38, 0x33, 0x75, 0xb4, 0x06, 0xb7, 0x24, 0xe3, 0x79, 0xc8,
0xed, 0x60, 0x8f, 0x38, 0x43, 0x6a, 0x2e, 0x21, 0x04, 0x2d, 0xc9, 0xb4, 0x59, 0x3c, 0xf9, 0xae,
0x59, 0x45, 0x1d, 0x68, 0xcb, 0x09, 0x64, 0xcf, 0x43, 0xae, 0xe2, 0xf2, 0xce, 0x7c, 0x6a, 0x2e,
0xa3, 0x36, 0x98, 0x98, 0x3a, 0xd4, 0x1b, 0x73, 0x9b, 0xd9, 0xc1, 0x6b, 0xe2, 0x7b, 0xae, 0xb9,
0x22, 0x30, 0x14, 0xa1, 0x56, 0x94, 0x59, 0x13, 0x9a, 0xfb, 0x93, 0x78, 0xf5, 0x51, 0x55, 0x27,
0xb3, 0x8e, 0xee, 0xc1, 0xfa, 0x8b, 0x30, 0x3c, 0x26, 0xc1, 0x54, 0xf1, 0xd8, 0x61, 0x14, 0x8e,
0x84, 0x33, 0xb3, 0x21, 0x02, 0x3e, 0x88, 0xa2, 0x30, 0x3a, 0x39, 0x3f, 0x67, 0x94, 0x9b, 0xee,
0xe6, 0x13, 0x58, 0x5f, 0x30, 0x2b, 0xa8, 0x09, 0x0d, 0xc5, 0x3d, 0xa3, 0x66, 0x45, 0x98, 0xbe,
0x0c, 0x58, 0xca, 0xd0, 0x36, 0x37, 0xa1, 0x9e, 0xbc, 0x4b, 0xd0, 0x2a, 0xd4, 0xec, 0xc0, 0x13,
0x77, 0xb2, 0x59, 0x41, 0xb7, 0xa1, 0x79, 0x1a, 0x51, 0x87, 0xf8, 0xce, 0xc4, 0x27, 0x22, 0x5d,
0x6d, 0xfb, 0x9f, 0x2a, 0x34, 0x62, 0x3f, 0xd3, 0xc0, 0x41, 0x7b, 0x50, 0x4f, 0xde, 0x41, 0xa8,
0x5b, 0xfa, 0x38, 0x92, 0x81, 0x77, 0xef, 0x95, 0x3f, 0x9c, 0xe2, 0x26, 0x1e, 0x2a, 0x44, 0x71,
0xf7, 0xa3, 0x7b, 0x73, 0x37, 0x75, 0xf6, 0xf0, 0xe8, 0xde, 0x2f, 0x17, 0xce, 0xe1, 0xf8, 0x7e,
0x19, 0x4e, 0xfa, 0x88, 0x28, 0xc3, 0xc9, 0xbd, 0x1e, 0x30, 0x98, 0xd9, 0x7b, 0x6c, 0xc0, 0x23,
0x4a, 0x46, 0xe8, 0xfe, 0xdc, 0xfe, 0xcd, 0x3d, 0xd6, 0xba, 0x37, 0x4a, 0x37, 0xb4, 0xc7, 0x1a,
0x3a, 0x02, 0xc8, 0x04, 0xef, 0x83, 0x86, 0x5e, 0xc1, 0x7a, 0xc6, 0x54, 0x09, 0xbd, 0x7f, 0x90,
0x8f, 0x35, 0x74, 0x02, 0x46, 0xfe, 0xf8, 0xa3, 0x5e, 0x4e, 0xbf, 0x64, 0xc5, 0x74, 0x1f, 0x2c,
0x94, 0xa7, 0x75, 0x6c, 0x16, 0x4e, 0x2d, 0x9a, 0xb1, 0x98, 0xdb, 0x0d, 0xdd, 0xfe, 0x62, 0x85,
0x18, 0xf3, 0xd9, 0xc7, 0xbf, 0x5f, 0xf5, 0xb4, 0xb7, 0x57, 0x3d, 0xed, 0xaf, 0xab, 0x9e, 0xf6,
0xcb, 0x75, 0xaf, 0xf2, 0xf6, 0xba, 0x57, 0xf9, 0xf3, 0xba, 0x57, 0xf9, 0xa6, 0xbb, 0xf8, 0xbf,
0xb5, 0xb3, 0x15, 0xf9, 0x67, 0xe7, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xd2, 0x9a, 0xb5,
0xd2, 0x0d, 0x00, 0x00,
}
func (m *HeadSyncRange) Marshal() (dAtA []byte, err error) {

View file

@ -99,11 +99,11 @@ func (r *requestManager) HandleDeprecatedObjectSync(ctx context.Context, req *sp
func (r *requestManager) HandleStreamRequest(ctx context.Context, rq syncdeps.Request, stream drpc.Stream) error {
size := rq.MsgSize()
if !r.incomingGuard.TryTake(fullId(rq.PeerId(), rq.ObjectId())) {
return nil
return spacesyncproto.ErrDuplicateRequest
}
defer r.incomingGuard.Release(fullId(rq.PeerId(), rq.ObjectId()))
if !r.limit.Take(rq.PeerId()) {
return nil
return spacesyncproto.ErrTooManyRequestsFromPeer
}
defer r.limit.Release(rq.PeerId())
r.metric.UpdateQueueSize(size, syncdeps.MsgTypeIncomingRequest, true)

View file

@ -4,6 +4,9 @@ import (
"hash/fnv"
"math/rand"
"sort"
"golang.org/x/exp/constraints"
"golang.org/x/exp/slices"
)
func DifferenceRemovedAdded(a, b []string) (removed []string, added []string) {
@ -119,6 +122,27 @@ func UnsortedEquals(s1, s2 []string) bool {
return SortedEquals(s1Sorted, s2Sorted)
}
func ContainsSorted[T constraints.Ordered](first []T, second []T) bool {
if len(first) < len(second) {
return false
}
slices.Sort(first)
slices.Sort(second)
i := 0
j := 0
for i < len(first) && j < len(second) {
if first[i] == second[j] {
i++
j++
} else if first[i] < second[j] {
i++
} else {
j++
}
}
return j == len(second)
}
func DiscardFromSlice[T any](elements []T, isDiscarded func(T) bool) []T {
var (
finishedIdx = 0

View file

@ -103,3 +103,34 @@ func TestCompareMaps(t *testing.T) {
})
}
}
func TestContainsSorted(t *testing.T) {
tests := []struct {
name string
first []int
second []int
expected bool
}{
{"both empty", []int{}, []int{}, true},
{"first empty", []int{}, []int{1}, false},
{"second empty", []int{1, 2, 3}, []int{}, true},
{"both non-empty and first contains second", []int{1, 2, 3, 4, 5}, []int{2, 3, 4}, true},
{"both non-empty and first does not contain second", []int{1, 2, 3, 4, 5}, []int{3, 4, 6}, false},
{"both non-empty and first shorter than second", []int{1, 2, 3}, []int{1, 2, 3, 4}, false},
{"both non-empty and first equals second", []int{1, 2, 3}, []int{1, 2, 3}, true},
{"both non-empty and first contains second at the beginning", []int{1, 2, 3, 4, 5}, []int{1, 2, 3}, true},
{"both non-empty and first contains second at the end", []int{1, 2, 3, 4, 5}, []int{3, 4, 5}, true},
{"non-consecutive elements", []int{1, 3, 5, 7, 9}, []int{3, 7}, true},
{"unsorted first contains sorted second", []int{5, 1, 3, 2, 4}, []int{2, 3, 4}, true},
{"unsorted first does not contain sorted second", []int{5, 1, 3, 2, 4}, []int{3, 4, 6}, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := ContainsSorted(tt.first, tt.second)
if result != tt.expected {
t.Errorf("ContainsSorted(%v, %v) = %v; want %v", tt.first, tt.second, result, tt.expected)
}
})
}
}