diff --git a/client/document/textdocument/textdocument.go b/client/document/textdocument/textdocument.go index 954160d9..4334afb9 100644 --- a/client/document/textdocument/textdocument.go +++ b/client/document/textdocument/textdocument.go @@ -106,7 +106,3 @@ func (t *textDocument) Text() (text string, err error) { func (t *textDocument) TreeDump() string { return t.TreeDump() } - -func (t *textDocument) Close() error { - return nil -} diff --git a/client/storage/spacestorage.go b/client/storage/spacestorage.go index 278abc0e..5c4f1866 100644 --- a/client/storage/spacestorage.go +++ b/client/storage/spacestorage.go @@ -78,7 +78,7 @@ func createSpaceStorage(db *badger.DB, payload spacestorage.SpaceStorageCreatePa _, err = spaceStore.CreateTreeStorage(storage.TreeStorageCreatePayload{ RootRawChange: payload.SpaceSettingsWithId, Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId}, - Heads: []string{payload.SpaceHeaderWithId.Id}, + Heads: []string{payload.SpaceSettingsWithId.Id}, }) if err != nil { return diff --git a/client/storage/treestorage.go b/client/storage/treestorage.go index d74d376c..a9403eed 100644 --- a/client/storage/treestorage.go +++ b/client/storage/treestorage.go @@ -166,15 +166,15 @@ func (t *treeStorage) storedKeys() (keys [][]byte, err error) { for it.Rewind(); it.Valid(); it.Next() { item := it.Item() key := item.Key() - // if it is a heads key - if len(key) <= len(t.keys.HeadsKey()) { - continue - } keyCopy := make([]byte, 0, len(key)) keyCopy = item.KeyCopy(key) keys = append(keys, keyCopy) } return nil }) + if err != nil { + return + } + keys = append(keys, t.keys.RootIdKey()) return } diff --git a/common/commonspace/settingsdocument/settingsdocument.go b/common/commonspace/settingsdocument/settingsdocument.go index 5ba52732..54995af2 100644 --- a/common/commonspace/settingsdocument/settingsdocument.go +++ b/common/commonspace/settingsdocument/settingsdocument.go @@ -20,6 +20,7 @@ const ( type SettingsDocument interface { tree.ObjectTree + Init(ctx context.Context) (err error) Refresh() DeleteObject(id string) (err error) NotifyObjectUpdate(id string) @@ -48,10 +49,11 @@ type settingsDocument struct { lastChangeId string prov deletedIdsProvider removeNotifyFunc RemoveObjectsFunc + buildFunc BuildTreeFunc deletionStateLock sync.Mutex } -func NewSettingsDocument(ctx context.Context, deps Deps, spaceId string) (doc SettingsDocument, err error) { +func NewSettingsDocument(deps Deps, spaceId string) (doc SettingsDocument, err error) { s := &settingsDocument{ account: deps.Account, spaceId: spaceId, @@ -59,11 +61,9 @@ func NewSettingsDocument(ctx context.Context, deps Deps, spaceId string) (doc Se treeGetter: deps.TreeGetter, store: deps.Store, removeNotifyFunc: deps.RemoveFunc, + buildFunc: deps.BuildFunc, } - s.ObjectTree, err = deps.BuildFunc(ctx, deps.Store.SpaceSettingsId(), s) - if err != nil { - return - } + // this is needed mainly for testing if deps.prov == nil { s.prov = &provider{} @@ -99,6 +99,11 @@ func (s *settingsDocument) Rebuild(tr tree.ObjectTree) { s.toBeDeleted(ids) } +func (s *settingsDocument) Init(ctx context.Context) (err error) { + s.ObjectTree, err = s.buildFunc(ctx, s.store.SpaceSettingsId(), s) + return +} + func (s *settingsDocument) Refresh() { s.Lock() defer s.Unlock() diff --git a/common/commonspace/space.go b/common/commonspace/space.go index f8502ff5..8ee4ba5b 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -150,6 +150,7 @@ func (s *space) Init(ctx context.Context) (err error) { if err != nil { return } + s.aclList = syncacl.NewSyncACL(aclList, s.syncService.StreamPool()) deps := settingsdocument.Deps{ BuildFunc: s.BuildTree, @@ -158,7 +159,7 @@ func (s *space) Init(ctx context.Context) (err error) { Store: s.storage, RemoveFunc: s.diffService.RemoveObjects, } - s.settingsDocument, err = settingsdocument.NewSettingsDocument(context.Background(), deps, s.id) + s.settingsDocument, err = settingsdocument.NewSettingsDocument(deps, s.id) if err != nil { return } @@ -166,8 +167,10 @@ func (s *space) Init(ctx context.Context) (err error) { s.diffService.UpdateHeads(id, heads) s.settingsDocument.NotifyObjectUpdate(id) }) - s.settingsDocument.Refresh() - s.aclList = syncacl.NewSyncACL(aclList, s.syncService.StreamPool()) + err = s.settingsDocument.Init(ctx) + if err != nil { + return + } objectGetter := newCommonSpaceGetter(s.id, s.aclList, s.cache, s.settingsDocument) s.syncService.Init(objectGetter) s.diffService.Init(initialIds) @@ -175,6 +178,7 @@ func (s *space) Init(ctx context.Context) (err error) { s.settingsDocument.Refresh() return nil }, log) + s.settingsSync.Run() return nil } diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index 90a346ae..de1a06c5 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -277,8 +277,8 @@ func (s *SyncTree) Close() (err error) { log.With("id", s.ID()).Debug("closing sync tree") s.Lock() defer s.Unlock() - if err = s.checkAlive(); err != nil { - return + if s.isClosed { + return ErrSyncTreeClosed } s.isClosed = true return diff --git a/common/pkg/acl/tree/changebuilder.go b/common/pkg/acl/tree/changebuilder.go index ace60b23..5547b332 100644 --- a/common/pkg/acl/tree/changebuilder.go +++ b/common/pkg/acl/tree/changebuilder.go @@ -156,7 +156,8 @@ func (c *changeBuilder) BuildContent(payload BuilderContent) (ch *Change, rawIdC IsSnapshot: payload.IsSnapshot, } if payload.ReadKey != nil { - encrypted, err := payload.ReadKey.Encrypt(payload.Content) + var encrypted []byte + encrypted, err = payload.ReadKey.Encrypt(payload.Content) if err != nil { return } @@ -191,7 +192,6 @@ func (c *changeBuilder) BuildContent(payload BuilderContent) (ch *Change, rawIdC } ch = NewChange(id, change, signature) - ch.Model = payload.Content rawIdChange = &treechangeproto.RawTreeChangeWithId{ RawChange: marshalledRawChange, diff --git a/common/pkg/acl/tree/objecttree.go b/common/pkg/acl/tree/objecttree.go index 00b009c2..bb8dfc6a 100644 --- a/common/pkg/acl/tree/objecttree.go +++ b/common/pkg/acl/tree/objecttree.go @@ -528,7 +528,7 @@ func (ot *objectTree) Close() error { } func (ot *objectTree) Delete() error { - return nil + return ot.treeStorage.Delete() } func (ot *objectTree) SnapshotPath() []string { diff --git a/node/storage/keys.go b/node/storage/keys.go index 5dabc5da..ef728d74 100644 --- a/node/storage/keys.go +++ b/node/storage/keys.go @@ -47,7 +47,7 @@ func (t treeKeys) RawChangeKey(id string) []byte { } func (t treeKeys) isTreeRecordKey(key string) bool { - return strings.HasPrefix(key, t.prefix) && !strings.HasSuffix(key, "/heads") + return strings.HasPrefix(key, t.prefix) } type spaceKeys struct { diff --git a/node/storage/spacestorage.go b/node/storage/spacestorage.go index e700e0da..232dc838 100644 --- a/node/storage/spacestorage.go +++ b/node/storage/spacestorage.go @@ -137,7 +137,7 @@ func createSpaceStorage(rootPath string, payload spacestorage.SpaceStorageCreate _, err = store.CreateTreeStorage(storage.TreeStorageCreatePayload{ RootRawChange: payload.SpaceSettingsWithId, Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId}, - Heads: []string{payload.SpaceHeaderWithId.Id}, + Heads: []string{payload.SpaceSettingsWithId.Id}, }) if err != nil { return