Change pullspace and pushspace methods and handlers

This commit is contained in:
mcrakhman 2022-11-10 20:10:57 +01:00 committed by Mikhail Iudin
parent bd3aff19e7
commit 8805ba78ef
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
6 changed files with 98 additions and 42 deletions

View File

@ -19,20 +19,31 @@ func (r *rpcHandler) PullSpace(ctx context.Context, request *spacesyncproto.Pull
return return
} }
description := sp.Description() spaceDesc, err := sp.Description()
if err != nil {
err = spacesyncproto.ErrUnexpected
return
}
resp = &spacesyncproto.PullSpaceResponse{ resp = &spacesyncproto.PullSpaceResponse{
SpaceHeader: description.SpaceHeader, Payload: &spacesyncproto.SpacePayload{
AclPayload: description.AclPayload, SpaceHeader: spaceDesc.SpaceHeader,
AclPayloadId: description.AclId, AclPayloadId: spaceDesc.AclId,
AclPayload: spaceDesc.AclPayload,
SpaceSettingsPayload: spaceDesc.SpaceSettingsPayload,
SpaceSettingsPayloadId: spaceDesc.SpaceSettingsId,
},
} }
return return
} }
func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) { func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) {
description := commonspace.SpaceDescription{ description := commonspace.SpaceDescription{
SpaceHeader: req.SpaceHeader, SpaceHeader: req.Payload.SpaceHeader,
AclId: req.AclPayloadId, AclId: req.Payload.AclPayloadId,
AclPayload: req.AclPayload, AclPayload: req.Payload.AclPayload,
SpaceSettingsPayload: req.Payload.SpaceSettingsPayload,
SpaceSettingsId: req.Payload.SpaceSettingsPayloadId,
} }
err = r.s.AddSpace(ctx, description) err = r.s.AddSpace(ctx, description)
if err != nil { if err != nil {

View File

@ -108,10 +108,24 @@ func (d *diffSyncer) sendPushSpaceRequest(ctx context.Context, cl spacesyncproto
return return
} }
spaceSettingsTreeStorage, err := d.storage.TreeStorage(d.storage.SpaceSettingsId())
if err != nil {
return
}
spaceSettingsRoot, err := spaceSettingsTreeStorage.Root()
if err != nil {
return
}
spacePayload := &spacesyncproto.SpacePayload{
SpaceHeader: header,
AclPayload: root.Payload,
AclPayloadId: root.Id,
SpaceSettingsPayload: spaceSettingsRoot.RawChange,
SpaceSettingsPayloadId: spaceSettingsRoot.Id,
}
_, err = cl.PushSpace(ctx, &spacesyncproto.PushSpaceRequest{ _, err = cl.PushSpace(ctx, &spacesyncproto.PushSpaceRequest{
SpaceHeader: header, Payload: spacePayload,
AclPayload: root.Payload,
AclPayloadId: root.Id,
}) })
return return
} }

View File

@ -15,6 +15,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
) )
const CName = "common.commonspace" const CName = "common.commonspace"
@ -161,12 +162,17 @@ func (s *service) getSpaceStorageFromRemote(ctx context.Context, id string) (st
if err != nil { if err != nil {
return return
} }
st, err = s.storageProvider.CreateSpaceStorage(storage.SpaceStorageCreatePayload{ st, err = s.storageProvider.CreateSpaceStorage(storage.SpaceStorageCreatePayload{
AclWithId: &aclrecordproto.RawACLRecordWithId{ AclWithId: &aclrecordproto.RawACLRecordWithId{
Payload: res.AclPayload, Payload: res.Payload.AclPayload,
Id: res.AclPayloadId, Id: res.Payload.AclPayloadId,
}, },
SpaceHeaderWithId: res.SpaceHeader, SpaceSettingsWithId: &treechangeproto.RawTreeChangeWithId{
RawChange: res.Payload.SpaceSettingsPayload,
Id: res.Payload.SpaceSettingsPayloadId,
},
SpaceHeaderWithId: res.Payload.SpaceHeader,
}) })
return return
} }

View File

@ -48,9 +48,11 @@ type SpaceDerivePayload struct {
} }
type SpaceDescription struct { type SpaceDescription struct {
SpaceHeader *spacesyncproto.RawSpaceHeaderWithId SpaceHeader *spacesyncproto.RawSpaceHeaderWithId
AclId string AclId string
AclPayload []byte AclPayload []byte
SpaceSettingsId string
SpaceSettingsPayload []byte
} }
func NewSpaceId(id string, repKey uint64) string { func NewSpaceId(id string, repKey uint64) string {
@ -62,7 +64,7 @@ type Space interface {
Init(ctx context.Context) error Init(ctx context.Context) error
StoredIds() []string StoredIds() []string
Description() SpaceDescription Description() (SpaceDescription, error)
SpaceSyncRpc() RpcHandler SpaceSyncRpc() RpcHandler
@ -99,13 +101,25 @@ func (s *space) Id() string {
return s.id return s.id
} }
func (s *space) Description() SpaceDescription { func (s *space) Description() (desc SpaceDescription, err error) {
root := s.aclList.Root() root := s.aclList.Root()
return SpaceDescription{ settingsStorage, err := s.storage.TreeStorage(s.storage.SpaceSettingsId())
SpaceHeader: s.header, if err != nil {
AclId: root.Id, return
AclPayload: root.Payload,
} }
settingsRoot, err := settingsStorage.Root()
if err != nil {
return
}
desc = SpaceDescription{
SpaceHeader: s.header,
AclId: root.Id,
AclPayload: root.Payload,
SpaceSettingsId: settingsRoot.Id,
SpaceSettingsPayload: settingsRoot.RawChange,
}
return
} }
func (s *space) Init(ctx context.Context) (err error) { func (s *space) Init(ctx context.Context) (err error) {

View File

@ -164,7 +164,6 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
} }
func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t tree.ObjectTree, err error) { func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t tree.ObjectTree, err error) {
t, err = buildObjectTree(deps.TreeStorage, deps.AclList) t, err = buildObjectTree(deps.TreeStorage, deps.AclList)
if err != nil { if err != nil {
return return
@ -197,7 +196,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t tr
} }
func (s *SyncTree) AddContent(ctx context.Context, content tree.SignableChangeContent) (res tree.AddResult, err error) { func (s *SyncTree) AddContent(ctx context.Context, content tree.SignableChangeContent) (res tree.AddResult, err error) {
if s.isClosed { if s.isClosed { // checkAlive err
err = ErrSyncTreeClosed err = ErrSyncTreeClosed
return return
} }

View File

@ -2,42 +2,54 @@ package nodespace
import ( import (
"context" "context"
"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/pkg/acl/aclrecordproto"
) )
type rpcHandler struct { type rpcHandler struct {
s *service s *service
} }
func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) { func (r *rpcHandler) PullSpace(ctx context.Context, request *spacesyncproto.PullSpaceRequest) (resp *spacesyncproto.PullSpaceResponse, err error) {
_, err = r.s.GetSpace(ctx, req.SpaceHeader.Id) sp, err := r.s.GetSpace(ctx, request.Id)
if err == nil { if err != nil {
err = spacesyncproto.ErrSpaceExists if err != spacesyncproto.ErrSpaceMissing {
err = spacesyncproto.ErrUnexpected
}
return return
} }
if err != storage.ErrSpaceStorageMissing {
spaceDesc, err := sp.Description()
if err != nil {
err = spacesyncproto.ErrUnexpected err = spacesyncproto.ErrUnexpected
return return
} }
payload := storage.SpaceStorageCreatePayload{ resp = &spacesyncproto.PullSpaceResponse{
RecWithId: &aclrecordproto.RawACLRecordWithId{ Payload: &spacesyncproto.SpacePayload{
Payload: req.AclPayload, SpaceHeader: spaceDesc.SpaceHeader,
Id: req.AclPayloadId, AclPayloadId: spaceDesc.AclId,
AclPayload: spaceDesc.AclPayload,
SpaceSettingsPayload: spaceDesc.SpaceSettingsPayload,
SpaceSettingsPayloadId: spaceDesc.SpaceSettingsId,
}, },
SpaceHeaderWithId: req.SpaceHeader,
} }
st, err := r.s.spaceStorageProvider.CreateSpaceStorage(payload) return
}
func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) {
description := commonspace.SpaceDescription{
SpaceHeader: req.Payload.SpaceHeader,
AclId: req.Payload.AclPayloadId,
AclPayload: req.Payload.AclPayload,
SpaceSettingsPayload: req.Payload.SpaceSettingsPayload,
SpaceSettingsId: req.Payload.SpaceSettingsPayloadId,
}
err = r.s.AddSpace(ctx, description)
if err != nil { if err != nil {
err = spacesyncproto.ErrUnexpected
if err == storage.ErrSpaceStorageExists {
err = spacesyncproto.ErrSpaceExists
}
return return
} }
err = st.Close() resp = &spacesyncproto.PushSpaceResponse{}
return return
} }