1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-11 10:18:08 +09:00

Update tree cache for document creation

This commit is contained in:
mcrakhman 2022-07-21 11:03:39 +02:00 committed by Mikhail Iudin
parent b8016c1d44
commit 57c09e263d
No known key found for this signature in database
GPG key ID: FAAAA8BAABDFF1C0
5 changed files with 35 additions and 9 deletions

View file

@ -279,7 +279,7 @@ func (a *aclTree) AddRawChanges(ctx context.Context, rawChanges ...*aclpb.RawCha
var err error
var mode Mode
var changes []*Change
var changes []*Change // TODO: = addChangesBuf[:0] ...
for _, ch := range rawChanges {
change, err := NewFromRawChange(ch)
// TODO: think what if we will have incorrect signatures on rawChanges, how everything will work

View file

@ -0,0 +1 @@
package document

View file

@ -35,6 +35,7 @@ func NewMessageService() app.Component {
type Service interface {
RegisterMessageSender(peerId string) chan *syncpb.SyncContent
UnregisterMessageSender(peerId string)
HandleMessage(peerId string, msg *syncpb.SyncContent) error
SendMessage(peerId string, msg *syncpb.SyncContent) error
}

View file

@ -238,7 +238,14 @@ func (r *requestHandler) prepareFullSyncResponse(
}
func (r *requestHandler) createTree(ctx context.Context, response *syncpb.SyncFullResponse) error {
return r.treeCache.Add(ctx, response.TreeId, response.TreeHeader, response.Changes)
return r.treeCache.Add(
ctx,
response.TreeId,
response.TreeHeader,
response.Changes,
func(tree acltree.ACLTree) error {
return nil
})
}
func wrapHeadUpdate(update *syncpb.SyncHeadUpdate) *syncpb.SyncContent {

View file

@ -13,9 +13,13 @@ import (
const CName = "treecache"
type ACLTreeFunc = func(tree acltree.ACLTree) error
type ChangeBuildFunc = func(builder acltree.ChangeBuilder) error
type Service interface {
Do(ctx context.Context, treeId string, f func(tree acltree.ACLTree) error) error
Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange) error
Do(ctx context.Context, treeId string, f ACLTreeFunc) error
Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange, f ACLTreeFunc) error
Create(ctx context.Context, build ChangeBuildFunc, f ACLTreeFunc) error
}
type service struct {
@ -28,7 +32,22 @@ func NewTreeCache() app.ComponentRunnable {
return &service{}
}
func (s *service) Do(ctx context.Context, treeId string, f func(tree acltree.ACLTree) error) error {
func (s *service) Create(ctx context.Context, build ChangeBuildFunc, f ACLTreeFunc) error {
acc := s.account.Account()
st, err := acltree.CreateNewTreeStorageWithACL(acc, build, s.treeProvider.CreateTreeStorage)
if err != nil {
return err
}
id, err := st.TreeID()
if err != nil {
return err
}
return s.Do(ctx, id, f)
}
func (s *service) Do(ctx context.Context, treeId string, f ACLTreeFunc) error {
tree, err := s.cache.Get(ctx, treeId)
defer s.cache.Release(treeId)
if err != nil {
@ -40,14 +59,12 @@ func (s *service) Do(ctx context.Context, treeId string, f func(tree acltree.ACL
return f(tree.(acltree.ACLTree))
}
func (s *service) Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange) error {
func (s *service) Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange, f ACLTreeFunc) error {
_, err := s.treeProvider.CreateTreeStorage(treeId, header, changes)
if err != nil {
return err
}
// forcing the tree to build
_, err = s.cache.Get(ctx, treeId)
return err
return s.Do(ctx, treeId, f)
}
func (s *service) Init(ctx context.Context, a *app.App) (err error) {