Change object creation logic

This commit is contained in:
mcrakhman authored and Mikhail Iudin committed 2023-01-05 12:45:50 +01:00
1 parent 7f19df6f6b
commit aac5b3e83c
4 files changed
+24 -33

No files matched your search

+14 -6
View File
@@ -35,8 +35,8 @@ type treeCache struct {
type TreeCache interface {
treegetter.TreeGetter
treegetter.TreePutter
GetDocument(ctx context.Context, spaceId, id string) (doc textdocument.TextDocument, err error)
CreateDocument(ctx context.Context, spaceId string, payload objecttree.ObjectTreeCreatePayload) (ot textdocument.TextDocument, err error)
}
type updateListener struct {
@@ -117,14 +117,22 @@ func (c *treeCache) GetTree(ctx context.Context, spaceId, id string) (tr objectt
return
}
func (c *treeCache) PutTree(ctx context.Context, spaceId string, payload treestorage.TreeStorageCreatePayload) (ot objecttree.ObjectTree, err error) {
ctx = context.WithValue(ctx, spaceKey, spaceId)
ctx = context.WithValue(ctx, treeCreateKey, payload)
v, err := c.cache.Get(ctx, payload.RootRawChange.Id)
func (c *treeCache) CreateDocument(ctx context.Context, spaceId string, payload objecttree.ObjectTreeCreatePayload) (ot textdocument.TextDocument, err error) {
space, err := c.clientService.GetSpace(ctx, spaceId)
if err != nil {
return
}
return v.(objecttree.ObjectTree), nil
create, err := space.CreateTree(context.Background(), payload)
if err != nil {
return
}
ctx = context.WithValue(ctx, spaceKey, spaceId)
ctx = context.WithValue(ctx, treeCreateKey, create)
v, err := c.cache.Get(ctx, create.RootRawChange.Id)
if err != nil {
return
}
return v.(textdocument.TextDocument), nil
}
func (c *treeCache) DeleteTree(ctx context.Context, spaceId, treeId string) (err error) {
+2 -2
View File
@@ -58,11 +58,11 @@ func (s *service) CreateDocument(spaceId string) (id string, err error) {
SpaceId: space.Id(),
Identity: s.account.Account().Identity,
}
tree, err := space.CreateTree(context.Background(), payload)
doc, err := s.cache.CreateDocument(context.Background(), space.Id(), payload)
if err != nil {
return
}
id = tree.Id()
id = doc.Id()
return
}
@@ -5,7 +5,6 @@ import (
"context"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/objecttree"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/object/tree/treestorage"
)
const CName = "common.object.treegetter"
@@ -15,7 +14,3 @@ type TreeGetter interface {
GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error)
DeleteTree(ctx context.Context, spaceId, treeId string) error
}
type TreePutter interface {
PutTree(ctx context.Context, spaceId string, payload treestorage.TreeStorageCreatePayload) (objecttree.ObjectTree, error)
}
+8 -20
View File
@@ -81,8 +81,8 @@ type Space interface {
SpaceSyncRpc() RpcHandler
DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (objecttree.ObjectTree, error)
CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (objecttree.ObjectTree, error)
DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error)
CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error)
PutTree(ctx context.Context, payload treestorage.TreeStorageCreatePayload, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error)
BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (objecttree.ObjectTree, error)
DeleteTree(ctx context.Context, id string) (err error)
@@ -230,51 +230,39 @@ func (s *space) DebugAllHeads() []headsync.TreeHeads {
return s.headSync.DebugAllHeads()
}
func (s *space) DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (t objecttree.ObjectTree, err error) {
func (s *space) DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error) {
if s.isClosed.Load() {
err = ErrSpaceClosed
return
}
treePutter, conforms := s.cache.(treegetter.TreePutter)
if !conforms {
err = ErrPutNotImplemented
return
}
root, err := objecttree.DeriveObjectTreeRoot(payload, s.aclList)
if err != nil {
return
}
res := treestorage.TreeStorageCreatePayload{
res = treestorage.TreeStorageCreatePayload{
RootRawChange: root,
Changes: []*treechangeproto.RawTreeChangeWithId{root},
Heads: []string{root.Id},
}
// here we must be sure that the object is created synchronously,
// so there won't be any conflicts, therefore we do it through cache
return treePutter.PutTree(ctx, s.id, res)
return
}
func (s *space) CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (t objecttree.ObjectTree, err error) {
func (s *space) CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error) {
if s.isClosed.Load() {
err = ErrSpaceClosed
return
}
treePutter, conforms := s.cache.(treegetter.TreePutter)
if !conforms {
err = ErrPutNotImplemented
return
}
root, err := objecttree.CreateObjectTreeRoot(payload, s.aclList)
if err != nil {
return
}
res := treestorage.TreeStorageCreatePayload{
res = treestorage.TreeStorageCreatePayload{
RootRawChange: root,
Changes: []*treechangeproto.RawTreeChangeWithId{root},
Heads: []string{root.Id},
}
return treePutter.PutTree(ctx, s.id, res)
return
}
func (s *space) PutTree(ctx context.Context, payload treestorage.TreeStorageCreatePayload, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error) {