Change pullspace and pushspace methods and handlers
This commit is contained in:
parent
11e57a43f7
commit
020b1f1d71
@ -19,20 +19,31 @@ func (r *rpcHandler) PullSpace(ctx context.Context, request *spacesyncproto.Pull
|
||||
return
|
||||
}
|
||||
|
||||
description := sp.Description()
|
||||
spaceDesc, err := sp.Description()
|
||||
if err != nil {
|
||||
err = spacesyncproto.ErrUnexpected
|
||||
return
|
||||
}
|
||||
|
||||
resp = &spacesyncproto.PullSpaceResponse{
|
||||
SpaceHeader: description.SpaceHeader,
|
||||
AclPayload: description.AclPayload,
|
||||
AclPayloadId: description.AclId,
|
||||
Payload: &spacesyncproto.SpacePayload{
|
||||
SpaceHeader: spaceDesc.SpaceHeader,
|
||||
AclPayloadId: spaceDesc.AclId,
|
||||
AclPayload: spaceDesc.AclPayload,
|
||||
SpaceSettingsPayload: spaceDesc.SpaceSettingsPayload,
|
||||
SpaceSettingsPayloadId: spaceDesc.SpaceSettingsId,
|
||||
},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) {
|
||||
description := commonspace.SpaceDescription{
|
||||
SpaceHeader: req.SpaceHeader,
|
||||
AclId: req.AclPayloadId,
|
||||
AclPayload: req.AclPayload,
|
||||
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 {
|
||||
|
||||
@ -108,10 +108,24 @@ func (d *diffSyncer) sendPushSpaceRequest(ctx context.Context, cl spacesyncproto
|
||||
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{
|
||||
SpaceHeader: header,
|
||||
AclPayload: root.Payload,
|
||||
AclPayloadId: root.Id,
|
||||
Payload: spacePayload,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
@ -15,6 +15,7 @@ import (
|
||||
"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/pkg/acl/aclrecordproto"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
)
|
||||
|
||||
const CName = "common.commonspace"
|
||||
@ -161,12 +162,17 @@ func (s *service) getSpaceStorageFromRemote(ctx context.Context, id string) (st
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
st, err = s.storageProvider.CreateSpaceStorage(storage.SpaceStorageCreatePayload{
|
||||
AclWithId: &aclrecordproto.RawACLRecordWithId{
|
||||
Payload: res.AclPayload,
|
||||
Id: res.AclPayloadId,
|
||||
Payload: res.Payload.AclPayload,
|
||||
Id: res.Payload.AclPayloadId,
|
||||
},
|
||||
SpaceHeaderWithId: res.SpaceHeader,
|
||||
SpaceSettingsWithId: &treechangeproto.RawTreeChangeWithId{
|
||||
RawChange: res.Payload.SpaceSettingsPayload,
|
||||
Id: res.Payload.SpaceSettingsPayloadId,
|
||||
},
|
||||
SpaceHeaderWithId: res.Payload.SpaceHeader,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
@ -48,9 +48,11 @@ type SpaceDerivePayload struct {
|
||||
}
|
||||
|
||||
type SpaceDescription struct {
|
||||
SpaceHeader *spacesyncproto.RawSpaceHeaderWithId
|
||||
AclId string
|
||||
AclPayload []byte
|
||||
SpaceHeader *spacesyncproto.RawSpaceHeaderWithId
|
||||
AclId string
|
||||
AclPayload []byte
|
||||
SpaceSettingsId string
|
||||
SpaceSettingsPayload []byte
|
||||
}
|
||||
|
||||
func NewSpaceId(id string, repKey uint64) string {
|
||||
@ -62,7 +64,7 @@ type Space interface {
|
||||
Init(ctx context.Context) error
|
||||
|
||||
StoredIds() []string
|
||||
Description() SpaceDescription
|
||||
Description() (SpaceDescription, error)
|
||||
|
||||
SpaceSyncRpc() RpcHandler
|
||||
|
||||
@ -99,13 +101,25 @@ func (s *space) Id() string {
|
||||
return s.id
|
||||
}
|
||||
|
||||
func (s *space) Description() SpaceDescription {
|
||||
func (s *space) Description() (desc SpaceDescription, err error) {
|
||||
root := s.aclList.Root()
|
||||
return SpaceDescription{
|
||||
SpaceHeader: s.header,
|
||||
AclId: root.Id,
|
||||
AclPayload: root.Payload,
|
||||
settingsStorage, err := s.storage.TreeStorage(s.storage.SpaceSettingsId())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
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) {
|
||||
|
||||
@ -171,7 +171,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) {
|
||||
|
||||
t, err = buildObjectTree(deps.TreeStorage, deps.AclList)
|
||||
if err != nil {
|
||||
return
|
||||
@ -204,7 +203,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) {
|
||||
if s.isClosed {
|
||||
if s.isClosed { // checkAlive err
|
||||
err = ErrSyncTreeClosed
|
||||
return
|
||||
}
|
||||
|
||||
@ -19,20 +19,31 @@ func (r *rpcHandler) PullSpace(ctx context.Context, request *spacesyncproto.Pull
|
||||
return
|
||||
}
|
||||
|
||||
description := sp.Description()
|
||||
spaceDesc, err := sp.Description()
|
||||
if err != nil {
|
||||
err = spacesyncproto.ErrUnexpected
|
||||
return
|
||||
}
|
||||
|
||||
resp = &spacesyncproto.PullSpaceResponse{
|
||||
SpaceHeader: description.SpaceHeader,
|
||||
AclPayload: description.AclPayload,
|
||||
AclPayloadId: description.AclId,
|
||||
Payload: &spacesyncproto.SpacePayload{
|
||||
SpaceHeader: spaceDesc.SpaceHeader,
|
||||
AclPayloadId: spaceDesc.AclId,
|
||||
AclPayload: spaceDesc.AclPayload,
|
||||
SpaceSettingsPayload: spaceDesc.SpaceSettingsPayload,
|
||||
SpaceSettingsPayloadId: spaceDesc.SpaceSettingsId,
|
||||
},
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) {
|
||||
description := commonspace.SpaceDescription{
|
||||
SpaceHeader: req.SpaceHeader,
|
||||
AclId: req.AclPayloadId,
|
||||
AclPayload: req.AclPayload,
|
||||
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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user