Simplify space locked solution

This commit is contained in:
mcrakhman 2022-12-03 11:48:18 +01:00
parent 494b7552ce
commit 9ae5710854
No known key found for this signature in database
GPG Key ID: DED12CFEF5B8396B
3 changed files with 87 additions and 92 deletions

View File

@ -106,16 +106,6 @@ type space struct {
treesUsed atomic.Int32
}
func (s *space) StartTree() {
s.treesUsed.Add(1)
log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("starting tree")
}
func (s *space) CloseTree() {
s.treesUsed.Add(-1)
log.With(zap.Int32("trees used", s.treesUsed.Load())).Debug("closing tree")
}
func (s *space) LastUsage() time.Time {
return s.syncService.LastUsage()
}
@ -236,7 +226,7 @@ func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePay
Listener: listener,
AclList: s.aclList,
SpaceStorage: s.storage,
TreeUsageController: s,
TreeUsage: &s.treesUsed,
}
return synctree.DeriveSyncTree(ctx, deps)
}
@ -255,7 +245,7 @@ func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePay
Listener: listener,
AclList: s.aclList,
SpaceStorage: s.storage,
TreeUsageController: s,
TreeUsage: &s.treesUsed,
}
return synctree.CreateSyncTree(ctx, deps)
}
@ -273,7 +263,7 @@ func (s *space) BuildTree(ctx context.Context, id string, listener updatelistene
Listener: listener,
AclList: s.aclList,
SpaceStorage: s.storage,
TreeUsageController: s,
TreeUsage: &s.treesUsed,
}
return synctree.BuildSyncTreeOrGetRemote(ctx, id, deps)
}

View File

@ -18,6 +18,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
"github.com/gogo/protobuf/proto"
"go.uber.org/zap"
"sync/atomic"
)
var (
@ -30,11 +31,6 @@ type SyncTree interface {
synchandler.SyncHandler
}
type TreeUsageController interface {
StartTree()
CloseTree()
}
// SyncTree sends head updates to sync service and also sends new changes to update listener
type syncTree struct {
tree.ObjectTree
@ -42,7 +38,7 @@ type syncTree struct {
syncClient SyncClient
notifiable diffservice.HeadNotifiable
listener updatelistener.UpdateListener
usageController TreeUsageController
treeUsage *atomic.Int32
isClosed bool
isDeleted bool
}
@ -63,7 +59,7 @@ type CreateDeps struct {
Listener updatelistener.UpdateListener
AclList list.ACLList
SpaceStorage spacestorage.SpaceStorage
TreeUsageController TreeUsageController
TreeUsage *atomic.Int32
}
type BuildDeps struct {
@ -75,7 +71,7 @@ type BuildDeps struct {
AclList list.ACLList
SpaceStorage spacestorage.SpaceStorage
TreeStorage storage.TreeStorage
TreeUsageController TreeUsageController
TreeUsage *atomic.Int32
}
func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) {
@ -92,7 +88,7 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error
ObjectTree: objTree,
syncClient: syncClient,
notifiable: deps.HeadNotifiable,
usageController: deps.TreeUsageController,
treeUsage: deps.TreeUsage,
listener: deps.Listener,
}
syncHandler := newSyncTreeHandler(syncTree, syncClient)
@ -103,9 +99,7 @@ func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error
if syncTree.listener != nil {
syncTree.listener.Rebuild(syncTree)
}
if syncTree.usageController != nil {
syncTree.usageController.StartTree()
}
syncTree.treeUsage.Add(1)
headUpdate := syncClient.CreateHeadUpdate(t, nil)
err = syncClient.BroadcastAsync(headUpdate)
@ -126,7 +120,7 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error
ObjectTree: objTree,
syncClient: syncClient,
notifiable: deps.HeadNotifiable,
usageController: deps.TreeUsageController,
treeUsage: deps.TreeUsage,
listener: deps.Listener,
}
syncHandler := newSyncTreeHandler(syncTree, syncClient)
@ -138,9 +132,7 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error
if syncTree.listener != nil {
syncTree.listener.Rebuild(syncTree)
}
if syncTree.usageController != nil {
syncTree.usageController.StartTree()
}
syncTree.treeUsage.Add(1)
headUpdate := syncClient.CreateHeadUpdate(t, nil)
err = syncClient.BroadcastAsync(headUpdate)
@ -230,7 +222,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy
ObjectTree: objTree,
syncClient: syncClient,
notifiable: deps.HeadNotifiable,
usageController: deps.TreeUsageController,
treeUsage: deps.TreeUsage,
listener: deps.Listener,
}
syncHandler := newSyncTreeHandler(syncTree, syncClient)
@ -241,9 +233,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy
if syncTree.listener != nil {
syncTree.listener.Rebuild(syncTree)
}
if syncTree.usageController != nil {
syncTree.usageController.StartTree()
}
syncTree.treeUsage.Add(1)
headUpdate := syncTree.syncClient.CreateHeadUpdate(t, nil)
// here we will have different behaviour based on who is sending this update
@ -337,9 +327,7 @@ func (s *syncTree) Close() (err error) {
if s.isClosed {
return ErrSyncTreeClosed
}
if s.usageController != nil {
s.usageController.CloseTree()
}
s.treeUsage.Add(-1)
s.isClosed = true
return
}

View File

@ -209,6 +209,23 @@ func (s *service) registerClientCommands() {
}
return
}}
s.clientCommands["all-spaces"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) {
if len(params) != 0 {
err = ErrIncorrectParamsCount
return
}
resp, err := client.AllSpaces(context.Background(), server.Address, &apiproto.AllSpacesRequest{})
if err != nil {
return
}
for treeIdx, spaceId := range resp.SpaceIds {
res += spaceId
if treeIdx != len(resp.SpaceIds)-1 {
res += "\n"
}
}
return
}}
}
func (s *service) registerNodeCommands() {