Update tree cache for document creation
This commit is contained in:
parent
b8016c1d44
commit
57c09e263d
@ -279,7 +279,7 @@ func (a *aclTree) AddRawChanges(ctx context.Context, rawChanges ...*aclpb.RawCha
|
|||||||
var err error
|
var err error
|
||||||
var mode Mode
|
var mode Mode
|
||||||
|
|
||||||
var changes []*Change
|
var changes []*Change // TODO: = addChangesBuf[:0] ...
|
||||||
for _, ch := range rawChanges {
|
for _, ch := range rawChanges {
|
||||||
change, err := NewFromRawChange(ch)
|
change, err := NewFromRawChange(ch)
|
||||||
// TODO: think what if we will have incorrect signatures on rawChanges, how everything will work
|
// 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 {
|
type Service interface {
|
||||||
RegisterMessageSender(peerId string) chan *syncpb.SyncContent
|
RegisterMessageSender(peerId string) chan *syncpb.SyncContent
|
||||||
UnregisterMessageSender(peerId string)
|
UnregisterMessageSender(peerId string)
|
||||||
|
|
||||||
HandleMessage(peerId string, msg *syncpb.SyncContent) error
|
HandleMessage(peerId string, msg *syncpb.SyncContent) error
|
||||||
SendMessage(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 {
|
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 {
|
func wrapHeadUpdate(update *syncpb.SyncHeadUpdate) *syncpb.SyncContent {
|
||||||
|
|||||||
@ -13,9 +13,13 @@ import (
|
|||||||
|
|
||||||
const CName = "treecache"
|
const CName = "treecache"
|
||||||
|
|
||||||
|
type ACLTreeFunc = func(tree acltree.ACLTree) error
|
||||||
|
type ChangeBuildFunc = func(builder acltree.ChangeBuilder) error
|
||||||
|
|
||||||
type Service interface {
|
type Service interface {
|
||||||
Do(ctx context.Context, treeId string, f func(tree acltree.ACLTree) error) error
|
Do(ctx context.Context, treeId string, f ACLTreeFunc) error
|
||||||
Add(ctx context.Context, treeId string, header *treepb.TreeHeader, changes []*aclpb.RawChange) 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 {
|
type service struct {
|
||||||
@ -28,7 +32,22 @@ func NewTreeCache() app.ComponentRunnable {
|
|||||||
return &service{}
|
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)
|
tree, err := s.cache.Get(ctx, treeId)
|
||||||
defer s.cache.Release(treeId)
|
defer s.cache.Release(treeId)
|
||||||
if err != nil {
|
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))
|
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)
|
_, err := s.treeProvider.CreateTreeStorage(treeId, header, changes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// forcing the tree to build
|
return s.Do(ctx, treeId, f)
|
||||||
_, err = s.cache.Get(ctx, treeId)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) Init(ctx context.Context, a *app.App) (err error) {
|
func (s *service) Init(ctx context.Context, a *app.App) (err error) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user