Simplify space locked solution
This commit is contained in:
parent
494b7552ce
commit
9ae5710854
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user