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:
parent
b8016c1d44
commit
57c09e263d
5 changed files with 35 additions and 9 deletions
|
@ -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
|
||||
|
|
1
service/sync/document/service.go
Normal file
1
service/sync/document/service.go
Normal file
|
@ -0,0 +1 @@
|
|||
package document
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue