Change pullspace and pushspace methods and handlers
This commit is contained in:
parent
bd3aff19e7
commit
8805ba78ef
@ -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 {
|
||||||
|
|||||||
@ -108,10 +108,24 @@ func (d *diffSyncer) sendPushSpaceRequest(ctx context.Context, cl spacesyncproto
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = cl.PushSpace(ctx, &spacesyncproto.PushSpaceRequest{
|
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,
|
SpaceHeader: header,
|
||||||
AclPayload: root.Payload,
|
AclPayload: root.Payload,
|
||||||
AclPayloadId: root.Id,
|
AclPayloadId: root.Id,
|
||||||
|
SpaceSettingsPayload: spaceSettingsRoot.RawChange,
|
||||||
|
SpaceSettingsPayloadId: spaceSettingsRoot.Id,
|
||||||
|
}
|
||||||
|
_, err = cl.PushSpace(ctx, &spacesyncproto.PushSpaceRequest{
|
||||||
|
Payload: spacePayload,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,6 +51,8 @@ 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())
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
settingsRoot, err := settingsStorage.Root()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
desc = SpaceDescription{
|
||||||
SpaceHeader: s.header,
|
SpaceHeader: s.header,
|
||||||
AclId: root.Id,
|
AclId: root.Id,
|
||||||
AclPayload: root.Payload,
|
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) {
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
|
||||||
if err != nil {
|
|
||||||
err = spacesyncproto.ErrUnexpected
|
|
||||||
if err == storage.ErrSpaceStorageExists {
|
|
||||||
err = spacesyncproto.ErrSpaceExists
|
|
||||||
}
|
}
|
||||||
return
|
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 = st.Close()
|
err = r.s.AddSpace(ctx, description)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
resp = &spacesyncproto.PushSpaceResponse{}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user