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 {
|
func (t *textDocument) TreeDump() string {
|
||||||
return t.TreeDump()
|
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{
|
_, err = spaceStore.CreateTreeStorage(storage.TreeStorageCreatePayload{
|
||||||
RootRawChange: payload.SpaceSettingsWithId,
|
RootRawChange: payload.SpaceSettingsWithId,
|
||||||
Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId},
|
Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId},
|
||||||
Heads: []string{payload.SpaceHeaderWithId.Id},
|
Heads: []string{payload.SpaceSettingsWithId.Id},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|||||||
@ -166,15 +166,15 @@ func (t *treeStorage) storedKeys() (keys [][]byte, err error) {
|
|||||||
for it.Rewind(); it.Valid(); it.Next() {
|
for it.Rewind(); it.Valid(); it.Next() {
|
||||||
item := it.Item()
|
item := it.Item()
|
||||||
key := item.Key()
|
key := item.Key()
|
||||||
// if it is a heads key
|
|
||||||
if len(key) <= len(t.keys.HeadsKey()) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
keyCopy := make([]byte, 0, len(key))
|
keyCopy := make([]byte, 0, len(key))
|
||||||
keyCopy = item.KeyCopy(key)
|
keyCopy = item.KeyCopy(key)
|
||||||
keys = append(keys, keyCopy)
|
keys = append(keys, keyCopy)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
keys = append(keys, t.keys.RootIdKey())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ const (
|
|||||||
|
|
||||||
type SettingsDocument interface {
|
type SettingsDocument interface {
|
||||||
tree.ObjectTree
|
tree.ObjectTree
|
||||||
|
Init(ctx context.Context) (err error)
|
||||||
Refresh()
|
Refresh()
|
||||||
DeleteObject(id string) (err error)
|
DeleteObject(id string) (err error)
|
||||||
NotifyObjectUpdate(id string)
|
NotifyObjectUpdate(id string)
|
||||||
@ -48,10 +49,11 @@ type settingsDocument struct {
|
|||||||
lastChangeId string
|
lastChangeId string
|
||||||
prov deletedIdsProvider
|
prov deletedIdsProvider
|
||||||
removeNotifyFunc RemoveObjectsFunc
|
removeNotifyFunc RemoveObjectsFunc
|
||||||
|
buildFunc BuildTreeFunc
|
||||||
deletionStateLock sync.Mutex
|
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{
|
s := &settingsDocument{
|
||||||
account: deps.Account,
|
account: deps.Account,
|
||||||
spaceId: spaceId,
|
spaceId: spaceId,
|
||||||
@ -59,11 +61,9 @@ func NewSettingsDocument(ctx context.Context, deps Deps, spaceId string) (doc Se
|
|||||||
treeGetter: deps.TreeGetter,
|
treeGetter: deps.TreeGetter,
|
||||||
store: deps.Store,
|
store: deps.Store,
|
||||||
removeNotifyFunc: deps.RemoveFunc,
|
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
|
// this is needed mainly for testing
|
||||||
if deps.prov == nil {
|
if deps.prov == nil {
|
||||||
s.prov = &provider{}
|
s.prov = &provider{}
|
||||||
@ -99,6 +99,11 @@ func (s *settingsDocument) Rebuild(tr tree.ObjectTree) {
|
|||||||
s.toBeDeleted(ids)
|
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() {
|
func (s *settingsDocument) Refresh() {
|
||||||
s.Lock()
|
s.Lock()
|
||||||
defer s.Unlock()
|
defer s.Unlock()
|
||||||
|
|||||||
@ -150,6 +150,7 @@ func (s *space) Init(ctx context.Context) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
s.aclList = syncacl.NewSyncACL(aclList, s.syncService.StreamPool())
|
||||||
|
|
||||||
deps := settingsdocument.Deps{
|
deps := settingsdocument.Deps{
|
||||||
BuildFunc: s.BuildTree,
|
BuildFunc: s.BuildTree,
|
||||||
@ -158,7 +159,7 @@ func (s *space) Init(ctx context.Context) (err error) {
|
|||||||
Store: s.storage,
|
Store: s.storage,
|
||||||
RemoveFunc: s.diffService.RemoveObjects,
|
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 {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -166,8 +167,10 @@ func (s *space) Init(ctx context.Context) (err error) {
|
|||||||
s.diffService.UpdateHeads(id, heads)
|
s.diffService.UpdateHeads(id, heads)
|
||||||
s.settingsDocument.NotifyObjectUpdate(id)
|
s.settingsDocument.NotifyObjectUpdate(id)
|
||||||
})
|
})
|
||||||
s.settingsDocument.Refresh()
|
err = s.settingsDocument.Init(ctx)
|
||||||
s.aclList = syncacl.NewSyncACL(aclList, s.syncService.StreamPool())
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
objectGetter := newCommonSpaceGetter(s.id, s.aclList, s.cache, s.settingsDocument)
|
objectGetter := newCommonSpaceGetter(s.id, s.aclList, s.cache, s.settingsDocument)
|
||||||
s.syncService.Init(objectGetter)
|
s.syncService.Init(objectGetter)
|
||||||
s.diffService.Init(initialIds)
|
s.diffService.Init(initialIds)
|
||||||
@ -175,6 +178,7 @@ func (s *space) Init(ctx context.Context) (err error) {
|
|||||||
s.settingsDocument.Refresh()
|
s.settingsDocument.Refresh()
|
||||||
return nil
|
return nil
|
||||||
}, log)
|
}, log)
|
||||||
|
s.settingsSync.Run()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -277,8 +277,8 @@ func (s *SyncTree) Close() (err error) {
|
|||||||
log.With("id", s.ID()).Debug("closing sync tree")
|
log.With("id", s.ID()).Debug("closing sync tree")
|
||||||
s.Lock()
|
s.Lock()
|
||||||
defer s.Unlock()
|
defer s.Unlock()
|
||||||
if err = s.checkAlive(); err != nil {
|
if s.isClosed {
|
||||||
return
|
return ErrSyncTreeClosed
|
||||||
}
|
}
|
||||||
s.isClosed = true
|
s.isClosed = true
|
||||||
return
|
return
|
||||||
|
|||||||
@ -156,7 +156,8 @@ func (c *changeBuilder) BuildContent(payload BuilderContent) (ch *Change, rawIdC
|
|||||||
IsSnapshot: payload.IsSnapshot,
|
IsSnapshot: payload.IsSnapshot,
|
||||||
}
|
}
|
||||||
if payload.ReadKey != nil {
|
if payload.ReadKey != nil {
|
||||||
encrypted, err := payload.ReadKey.Encrypt(payload.Content)
|
var encrypted []byte
|
||||||
|
encrypted, err = payload.ReadKey.Encrypt(payload.Content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -191,7 +192,6 @@ func (c *changeBuilder) BuildContent(payload BuilderContent) (ch *Change, rawIdC
|
|||||||
}
|
}
|
||||||
|
|
||||||
ch = NewChange(id, change, signature)
|
ch = NewChange(id, change, signature)
|
||||||
ch.Model = payload.Content
|
|
||||||
|
|
||||||
rawIdChange = &treechangeproto.RawTreeChangeWithId{
|
rawIdChange = &treechangeproto.RawTreeChangeWithId{
|
||||||
RawChange: marshalledRawChange,
|
RawChange: marshalledRawChange,
|
||||||
|
|||||||
@ -528,7 +528,7 @@ func (ot *objectTree) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ot *objectTree) Delete() error {
|
func (ot *objectTree) Delete() error {
|
||||||
return nil
|
return ot.treeStorage.Delete()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ot *objectTree) SnapshotPath() []string {
|
func (ot *objectTree) SnapshotPath() []string {
|
||||||
|
|||||||
@ -47,7 +47,7 @@ func (t treeKeys) RawChangeKey(id string) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t treeKeys) isTreeRecordKey(key string) bool {
|
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 {
|
type spaceKeys struct {
|
||||||
|
|||||||
@ -137,7 +137,7 @@ func createSpaceStorage(rootPath string, payload spacestorage.SpaceStorageCreate
|
|||||||
_, err = store.CreateTreeStorage(storage.TreeStorageCreatePayload{
|
_, err = store.CreateTreeStorage(storage.TreeStorageCreatePayload{
|
||||||
RootRawChange: payload.SpaceSettingsWithId,
|
RootRawChange: payload.SpaceSettingsWithId,
|
||||||
Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId},
|
Changes: []*treechangeproto.RawTreeChangeWithId{payload.SpaceSettingsWithId},
|
||||||
Heads: []string{payload.SpaceHeaderWithId.Id},
|
Heads: []string{payload.SpaceSettingsWithId.Id},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user