Add push space logic and change storage interface

This commit is contained in:
mcrakhman 2022-09-28 09:18:04 +02:00 committed by Mikhail Iudin
parent 8cfe3df997
commit b8bdbacbce
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
11 changed files with 150 additions and 107 deletions

View File

@ -7,8 +7,8 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/peer"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/rpcerr"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf"
treestorage "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/storage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/ldiff" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/ldiff"
"go.uber.org/zap" "go.uber.org/zap"
"strings" "strings"
@ -100,8 +100,12 @@ func (d *diffService) syncWithPeer(ctx context.Context, p peer.Peer) (err error)
cl := spacesyncproto.NewDRPCSpaceClient(p) cl := spacesyncproto.NewDRPCSpaceClient(p)
rdiff := remotediff.NewRemoteDiff(d.spaceId, cl) rdiff := remotediff.NewRemoteDiff(d.spaceId, cl)
newIds, changedIds, removedIds, err := d.diff.Diff(ctx, rdiff) newIds, changedIds, removedIds, err := d.diff.Diff(ctx, rdiff)
if err != nil { err = rpcerr.Unwrap(err)
return nil if err != nil && err != spacesyncproto.ErrSpaceMissing {
return err
}
if err == spacesyncproto.ErrSpaceMissing {
return d.sendPushSpaceRequest(ctx, cl)
} }
d.pingTreesInCache(ctx, newIds) d.pingTreesInCache(ctx, newIds)
@ -122,11 +126,11 @@ func (d *diffService) pingTreesInCache(ctx context.Context, trees []string) {
func (d *diffService) fillDiff(objectIds []string) { func (d *diffService) fillDiff(objectIds []string) {
var els = make([]ldiff.Element, 0, len(objectIds)) var els = make([]ldiff.Element, 0, len(objectIds))
for _, id := range objectIds { for _, id := range objectIds {
st, err := d.storage.Storage(id) st, err := d.storage.TreeStorage(id)
if err != nil { if err != nil {
continue continue
} }
heads, err := st.(treestorage.TreeStorage).Heads() heads, err := st.Heads()
if err != nil { if err != nil {
continue continue
} }
@ -138,6 +142,30 @@ func (d *diffService) fillDiff(objectIds []string) {
d.diff.Set(els...) d.diff.Set(els...)
} }
func (d *diffService) sendPushSpaceRequest(ctx context.Context, cl spacesyncproto.DRPCSpaceClient) (err error) {
aclStorage, err := d.storage.ACLStorage()
if err != nil {
return
}
root, err := aclStorage.Root()
if err != nil {
return
}
header, err := d.storage.SpaceHeader()
if err != nil {
return
}
_, err = cl.PushSpace(ctx, &spacesyncproto.PushSpaceRequest{
SpaceId: d.spaceId,
SpaceHeader: header,
AclRoot: root,
})
return
}
func concatStrings(strs []string) string { func concatStrings(strs []string) string {
var ( var (
b strings.Builder b strings.Builder

View File

@ -114,7 +114,7 @@ func (s *space) BuildTree(ctx context.Context, id string, listener synctree.Upda
) )
} }
store, err := s.storage.Storage(id) store, err := s.storage.TreeStorage(id)
if err != nil && err != treestorage.ErrUnknownTreeId { if err != nil && err != treestorage.ErrUnknownTreeId {
return return
} }

View File

@ -0,0 +1,13 @@
package spacesyncproto
import (
"errors"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/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))
)

View File

@ -7,6 +7,8 @@ import "pkg/acl/aclrecordproto/protos/aclrecord.proto";
enum ErrCodes { enum ErrCodes {
Unexpected = 0; Unexpected = 0;
SpaceMissing = 1;
ErrorOffset = 16;
} }
service Space { service Space {

View File

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

View File

@ -11,6 +11,8 @@ const CName = "commonspace.storage"
type SpaceStorage interface { type SpaceStorage interface {
storage.Provider storage.Provider
ACLStorage() (storage.ListStorage, error)
SpaceHeader() (*spacesyncproto.SpaceHeader, error)
StoredIds() ([]string, error) StoredIds() ([]string, error)
} }

View File

@ -99,6 +99,8 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) {
cl := spacesyncproto.NewDRPCSpaceClient(peer) cl := spacesyncproto.NewDRPCSpaceClient(peer)
stream, err := cl.Stream(ctx) stream, err := cl.Stream(ctx)
if err != nil { if err != nil {
// so here probably the request is failed because there is no such space,
// but diffService should handle such cases by sending pushSpace
continue continue
} }
// sending empty message for the server to understand from which space is it coming // sending empty message for the server to understand from which space is it coming

View File

@ -3,20 +3,36 @@ package nodespace
import ( import (
"context" "context"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage"
) )
type rpcHandler struct { type rpcHandler struct {
s *service s *service
} }
func (r *rpcHandler) PushSpace(ctx context.Context, request *spacesyncproto.PushSpaceRequest) (*spacesyncproto.PushSpaceResponse, error) { func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) {
return nil, nil _, err = r.s.GetSpace(ctx, req.SpaceId)
if err == nil {
resp = &spacesyncproto.PushSpaceResponse{}
return
}
payload := storage.SpaceStorageCreatePayload{
RecWithId: req.AclRoot,
SpaceHeader: req.SpaceHeader,
Id: req.SpaceId,
}
_, err = r.s.spaceStorageProvider.CreateSpaceStorage(payload)
if err != nil {
err = spacesyncproto.ErrUnexpected
return
}
return
} }
func (r *rpcHandler) HeadSync(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (*spacesyncproto.HeadSyncResponse, error) { func (r *rpcHandler) HeadSync(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (*spacesyncproto.HeadSyncResponse, error) {
sp, err := r.s.GetSpace(ctx, req.SpaceId) sp, err := r.s.GetSpace(ctx, req.SpaceId)
if err != nil { if err != nil {
return nil, err return nil, spacesyncproto.ErrSpaceMissing
} }
return sp.SpaceSyncRpc().HeadSync(ctx, req) return sp.SpaceSyncRpc().HeadSync(ctx, req)
} }
@ -28,7 +44,7 @@ func (r *rpcHandler) Stream(stream spacesyncproto.DRPCSpace_StreamStream) error
} }
sp, err := r.s.GetSpace(stream.Context(), msg.SpaceId) sp, err := r.s.GetSpace(stream.Context(), msg.SpaceId)
if err != nil { if err != nil {
return err return spacesyncproto.ErrSpaceMissing
} }
return sp.SpaceSyncRpc().Stream(stream) return sp.SpaceSyncRpc().Stream(stream)
} }

View File

@ -6,6 +6,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/storage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server"
"github.com/anytypeio/go-anytype-infrastructure-experiments/config" "github.com/anytypeio/go-anytype-infrastructure-experiments/config"
"github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace/nodecache" "github.com/anytypeio/go-anytype-infrastructure-experiments/node/nodespace/nodecache"
@ -30,11 +31,13 @@ type service struct {
conf config.Space conf config.Space
spaceCache ocache.OCache spaceCache ocache.OCache
commonSpace commonspace.Service commonSpace commonspace.Service
spaceStorageProvider storage.SpaceStorageProvider
} }
func (s *service) Init(a *app.App) (err error) { func (s *service) Init(a *app.App) (err error) {
s.conf = a.MustComponent(config.CName).(*config.Config).Space s.conf = a.MustComponent(config.CName).(*config.Config).Space
s.commonSpace = a.MustComponent(commonspace.CName).(commonspace.Service) s.commonSpace = a.MustComponent(commonspace.CName).(commonspace.Service)
s.spaceStorageProvider = a.MustComponent(storage.CName).(storage.SpaceStorageProvider)
s.spaceCache = ocache.New( s.spaceCache = ocache.New(
func(ctx context.Context, id string) (value ocache.Object, err error) { func(ctx context.Context, id string) (value ocache.Object, err error) {
return s.commonSpace.GetSpace(ctx, id, nodecache.NewNodeCache(s.conf.GCTTL)) return s.commonSpace.GetSpace(ctx, id, nodecache.NewNodeCache(s.conf.GCTTL))

View File

@ -134,22 +134,11 @@ func (t *inMemoryTreeStorage) GetRawChange(ctx context.Context, changeId string)
} }
type inMemoryStorageProvider struct { type inMemoryStorageProvider struct {
objects map[string]Storage objects map[string]TreeStorage
sync.RWMutex sync.RWMutex
} }
func (i *inMemoryStorageProvider) AddStorage(id string, st Storage) error { func (i *inMemoryStorageProvider) TreeStorage(id string) (TreeStorage, error) {
i.Lock()
defer i.Unlock()
if _, exists := i.objects[id]; exists {
return fmt.Errorf("storage already exists")
}
i.objects[id] = st
return nil
}
func (i *inMemoryStorageProvider) Storage(id string) (Storage, error) {
i.RLock() i.RLock()
defer i.RUnlock() defer i.RUnlock()
if tree, exists := i.objects[id]; exists { if tree, exists := i.objects[id]; exists {
@ -170,20 +159,8 @@ func (i *inMemoryStorageProvider) CreateTreeStorage(payload TreeStorageCreatePay
return res, nil return res, nil
} }
func (i *inMemoryStorageProvider) CreateACLListStorage(payload ACLListStorageCreatePayload) (ListStorage, error) {
i.Lock()
defer i.Unlock()
res, err := NewInMemoryACLListStorage(payload.ListId, payload.Records)
if err != nil {
return nil, err
}
i.objects[payload.ListId] = res
return res, nil
}
func NewInMemoryTreeStorageProvider() Provider { func NewInMemoryTreeStorageProvider() Provider {
return &inMemoryStorageProvider{ return &inMemoryStorageProvider{
objects: make(map[string]Storage), objects: make(map[string]TreeStorage),
} }
} }

View File

@ -2,7 +2,6 @@ package storage
import ( import (
"errors" "errors"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclrecordproto"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treechangeproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treechangeproto"
) )
@ -15,13 +14,7 @@ type TreeStorageCreatePayload struct {
Heads []string Heads []string
} }
type ACLListStorageCreatePayload struct {
ListId string
Records []*aclrecordproto.RawACLRecordWithId
}
type Provider interface { type Provider interface {
Storage(id string) (Storage, error) TreeStorage(id string) (TreeStorage, error)
CreateTreeStorage(payload TreeStorageCreatePayload) (TreeStorage, error) CreateTreeStorage(payload TreeStorageCreatePayload) (TreeStorage, error)
CreateACLListStorage(payload ACLListStorageCreatePayload) (ListStorage, error)
} }