Fix some document deletion bugs
This commit is contained in:
parent
b617cdc690
commit
8854bbbe95
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user