Skip to content

Commit

Permalink
GO-3446: Replicate any-sync-node storage logic
Browse files Browse the repository at this point in the history
  • Loading branch information
deff7 committed May 14, 2024
1 parent 7960d66 commit bb64f88
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 21 deletions.
8 changes: 4 additions & 4 deletions space/spacecore/storage/sqlitestorage/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ func initStmts(s *storageService) (err error) {
return
}
if s.stmt.deleteTree, err = s.writeDb.Prepare(`
INSERT INTO trees (id, deleteStatus, spaceId, heads) VALUES(?, ?, "", NULL)
ON CONFLICT (id) DO UPDATE SET deleteStatus = ?, heads = NULL
INSERT INTO trees (id, spaceId, heads) VALUES(?, "", NULL)
ON CONFLICT (id) DO UPDATE SET heads = NULL
`); err != nil {
return
}
Expand All @@ -79,7 +79,7 @@ func initStmts(s *storageService) (err error) {
if s.stmt.change, err = s.readDb.Prepare(`SELECT data FROM changes WHERE id = ? AND spaceId = ?`); err != nil {
return
}
if s.stmt.hasTree, err = s.readDb.Prepare(`SELECT COUNT(*) FROM trees WHERE id = ? AND spaceId = ? AND (deleteStatus = '' OR deleteStatus IS NULL)`); err != nil {
if s.stmt.hasTree, err = s.readDb.Prepare(`SELECT COUNT(*) FROM trees WHERE id = ? AND spaceId = ? AND heads IS NOT NULL`); err != nil {
return
}
if s.stmt.hasChange, err = s.readDb.Prepare(`SELECT COUNT(*) FROM changes WHERE id = ? AND treeId = ?`); err != nil {
Expand All @@ -91,7 +91,7 @@ func initStmts(s *storageService) (err error) {
if s.stmt.deleteChangesByTree, err = s.writeDb.Prepare(`DELETE FROM changes WHERE treeId = ?`); err != nil {
return
}
if s.stmt.loadTreeHeads, err = s.readDb.Prepare(`SELECT heads FROM trees WHERE id = ? AND (deleteStatus = '' OR deleteStatus IS NULL)`); err != nil {
if s.stmt.loadTreeHeads, err = s.readDb.Prepare(`SELECT heads FROM trees WHERE id = ? AND heads IS NOT NULL`); err != nil {
return
}
if s.stmt.loadSpace, err = s.readDb.Prepare(`SELECT header, settingsId, aclId, hash, oldHash, isDeleted FROM spaces WHERE id = ?`); err != nil {
Expand Down
4 changes: 1 addition & 3 deletions space/spacecore/storage/sqlitestorage/tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage"
"github.com/anyproto/any-sync/commonspace/spacestorage"
)

func newTreeStorage(ss *spaceStorage, treeId string) (treestorage.TreeStorage, error) {
Expand Down Expand Up @@ -173,8 +172,7 @@ func (t *treeStorage) Delete() error {
return err
}

status := spacestorage.TreeDeletedStatusDeleted
if _, err := tx.Stmt(t.service.stmt.deleteTree).Exec(t.treeId, status, status); err != nil {
if _, err := tx.Stmt(t.service.stmt.deleteTree).Exec(t.treeId); err != nil {
_ = tx.Rollback()
return err
}
Expand Down
39 changes: 25 additions & 14 deletions space/spacecore/storage/sqlitestorage/tree_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (

"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
"github.com/anyproto/any-sync/commonspace/object/tree/treestorage"
"github.com/anyproto/any-sync/commonspace/spacestorage"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
Expand Down Expand Up @@ -124,19 +123,31 @@ func TestTreeStorage_Delete(t *testing.T) {
_, err = ss.TreeStorage(payload.RootRawChange.Id)
require.ErrorIs(t, err, treestorage.ErrUnknownTreeId)

var heads sql.NullString
err := fx.readDb.QueryRow("SELECT heads FROM trees WHERE id = ?", payload.RootRawChange.Id).Scan(&heads)
require.NoError(t, err)
assert.False(t, heads.Valid)
assert.Empty(t, heads.String)

status, err := ss.TreeDeletedStatus(payload.RootRawChange.Id)
require.NoError(t, err)
assert.Equal(t, spacestorage.TreeDeletedStatusDeleted, status)

ok, err := ss.HasTree(payload.RootRawChange.Id)
require.NoError(t, err)
assert.False(t, ok)
t.Run("heads should be nulled", func(t *testing.T) {
var heads sql.NullString
err := fx.readDb.QueryRow("SELECT heads FROM trees WHERE id = ?", payload.RootRawChange.Id).Scan(&heads)
require.NoError(t, err)
assert.False(t, heads.Valid)
assert.Empty(t, heads.String)
})

t.Run("tree is deleted: has tree should return false", func(t *testing.T) {
ok, err := ss.HasTree(payload.RootRawChange.Id)
require.NoError(t, err)
assert.False(t, ok)
})

t.Run("tree deleted status updates independently, so should not be changed", func(t *testing.T) {
status, err := ss.TreeDeletedStatus(payload.RootRawChange.Id)
require.NoError(t, err)
assert.Equal(t, "", status)
})

t.Run("stored ids still contains deleted tree id", func(t *testing.T) {
ids, err := ss.StoredIds()
require.NoError(t, err)
assert.Contains(t, ids, payload.RootRawChange.Id)
})
})
}

Expand Down

0 comments on commit bb64f88

Please sign in to comment.