1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-11 10:18:28 +09:00

GO-4360: fix relation revision

Signed-off-by: AnastasiaShemyakinskaya <shem98a@mail.ru>
This commit is contained in:
AnastasiaShemyakinskaya 2024-11-04 19:13:37 +01:00
parent 5ede1352da
commit 0027b1ee9c
No known key found for this signature in database
GPG key ID: CCD60ED83B103281
6 changed files with 62 additions and 13 deletions

View file

@ -31,7 +31,7 @@ func (Migration) Name() string {
return MName
}
func (Migration) Run(ctx context.Context, log logger.CtxLogger, store dependencies.QueryableStore, space dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
func (Migration) Run(ctx context.Context, log logger.CtxLogger, store, _ dependencies.QueryableStore, space dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
spaceId := space.Id()
relations, err := listReadonlyTagAndStatusRelations(store, spaceId)

View file

@ -82,7 +82,7 @@ func TestFixReadonlyInRelations(t *testing.T) {
).Times(2)
// when
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space1"), spc)
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space1"), nil, spc)
// then
assert.NoError(t, err)
@ -99,7 +99,7 @@ func TestFixReadonlyInRelations(t *testing.T) {
// sp.EXPECT().Do(mock.Anything, mock.Anything).Times(1).Return(nil)
// when
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space2"), spc)
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space2"), nil, spc)
// then
assert.NoError(t, err)
@ -116,7 +116,7 @@ func TestFixReadonlyInRelations(t *testing.T) {
// sp.EXPECT().Do(mock.Anything, mock.Anything).Times(1).Return(nil)
// when
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space3"), spc)
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space3"), nil, spc)
// then
assert.NoError(t, err)

View file

@ -9,6 +9,7 @@ import (
"github.com/anyproto/any-sync/app/logger"
"go.uber.org/zap"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore"
"github.com/anyproto/anytype-heart/space/clientspace"
"github.com/anyproto/anytype-heart/space/internal/components/dependencies"
@ -25,7 +26,7 @@ const (
var log = logger.NewNamed(CName)
type Migration interface {
Run(context.Context, logger.CtxLogger, dependencies.QueryableStore, dependencies.SpaceWithCtx) (toMigrate, migrated int, err error)
Run(context.Context, logger.CtxLogger, dependencies.QueryableStore, dependencies.QueryableStore, dependencies.SpaceWithCtx) (toMigrate, migrated int, err error)
Name() string
}
@ -104,13 +105,14 @@ func (r *Runner) run(migrations ...Migration) (err error) {
spaceId := r.spc.Id()
store := r.store.SpaceIndex(spaceId)
marketPlaceStore := r.store.SpaceIndex(addr.AnytypeMarketplaceWorkspace)
for _, m := range migrations {
if e := r.ctx.Err(); e != nil {
err = errors.Join(err, e)
return
}
toMigrate, migrated, e := m.Run(r.ctx, log, store, r.spc)
toMigrate, migrated, e := m.Run(r.ctx, log, store, marketPlaceStore, r.spc)
if e != nil {
err = errors.Join(err, wrapError(e, m.Name(), spaceId, migrated, toMigrate))
continue

View file

@ -138,7 +138,7 @@ func (longStoreMigration) Name() string {
return "long migration"
}
func (longStoreMigration) Run(ctx context.Context, _ logger.CtxLogger, store dependencies.QueryableStore, _ dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
func (longStoreMigration) Run(ctx context.Context, _ logger.CtxLogger, store, queryableStore dependencies.QueryableStore, _ dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
for {
if _, err = store.Query(database.Query{}); err != nil {
return 0, 0, err
@ -152,7 +152,7 @@ func (longSpaceMigration) Name() string {
return "long migration"
}
func (longSpaceMigration) Run(ctx context.Context, _ logger.CtxLogger, _ dependencies.QueryableStore, space dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
func (longSpaceMigration) Run(ctx context.Context, _ logger.CtxLogger, _, store dependencies.QueryableStore, space dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
for {
if err = space.DoCtx(ctx, "", func(smartblock.SmartBlock) error {
// do smth
@ -169,6 +169,6 @@ func (instantMigration) Name() string {
return "instant migration"
}
func (instantMigration) Run(context.Context, logger.CtxLogger, dependencies.QueryableStore, dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
func (instantMigration) Run(context.Context, logger.CtxLogger, dependencies.QueryableStore, dependencies.QueryableStore, dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
return 0, 0, nil
}

View file

@ -43,13 +43,13 @@ func (Migration) Name() string {
return MName
}
func (Migration) Run(ctx context.Context, log logger.CtxLogger, store dependencies.QueryableStore, space dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
spaceObjects, err := listAllTypesAndRelations(store, space.Id())
func (Migration) Run(ctx context.Context, log logger.CtxLogger, store, marketPlace dependencies.QueryableStore, space dependencies.SpaceWithCtx) (toMigrate, migrated int, err error) {
spaceObjects, err := listAllTypesAndRelations(store)
if err != nil {
return 0, 0, fmt.Errorf("failed to get relations and types from client space: %w", err)
}
marketObjects, err := listAllTypesAndRelations(store, addr.AnytypeMarketplaceWorkspace)
marketObjects, err := listAllTypesAndRelations(marketPlace)
if err != nil {
return 0, 0, fmt.Errorf("failed to get relations from marketplace space: %w", err)
}
@ -69,7 +69,7 @@ func (Migration) Run(ctx context.Context, log logger.CtxLogger, store dependenci
return
}
func listAllTypesAndRelations(store dependencies.QueryableStore, spaceId string) (map[string]*types.Struct, error) {
func listAllTypesAndRelations(store dependencies.QueryableStore) (map[string]*types.Struct, error) {
records, err := store.Query(database.Query{
Filters: []*model.BlockContentDataviewFilter{
{

View file

@ -12,10 +12,57 @@ import (
"github.com/anyproto/anytype-heart/core/domain"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/objectstore"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
mock_space "github.com/anyproto/anytype-heart/space/clientspace/mock_clientspace"
"github.com/anyproto/anytype-heart/util/pbtypes"
)
func TestMigration_Run(t *testing.T) {
t.Run("migrate relations with different revisions", func(t *testing.T) {
// given
store := objectstore.NewStoreFixture(t)
store.AddObjects(t, "space1", []objectstore.TestObject{
{
bundle.RelationKeySpaceId: pbtypes.String("space1"),
bundle.RelationKeyRelationFormat: pbtypes.Int64(int64(model.RelationFormat_checkbox)),
bundle.RelationKeyLayout: pbtypes.Int64(int64(model.ObjectType_relation)),
bundle.RelationKeyId: pbtypes.String("id1"),
bundle.RelationKeyIsHidden: pbtypes.Bool(true),
bundle.RelationKeyRevision: pbtypes.Int64(1),
bundle.RelationKeyUniqueKey: pbtypes.String(bundle.RelationKeyDone.URL()),
bundle.RelationKeySourceObject: pbtypes.String(bundle.RelationKeyDone.BundledURL()),
},
})
marketPlace := objectstore.NewStoreFixture(t)
marketPlace.AddObjects(t, addr.AnytypeMarketplaceWorkspace, []objectstore.TestObject{
{
bundle.RelationKeySpaceId: pbtypes.String(addr.AnytypeMarketplaceWorkspace),
bundle.RelationKeyRelationFormat: pbtypes.Int64(int64(model.RelationFormat_checkbox)),
bundle.RelationKeyLayout: pbtypes.Int64(int64(model.ObjectType_relation)),
bundle.RelationKeyId: pbtypes.String(bundle.RelationKeyDone.BundledURL()),
bundle.RelationKeyRevision: pbtypes.Int64(2),
},
})
fixer := &Migration{}
ctx := context.Background()
log := logger.NewNamed("test")
spc := mock_space.NewMockSpace(t)
spc.EXPECT().Id().Return("space1").Maybe()
spc.EXPECT().DoCtx(ctx, "id1", mock.Anything).Return(nil).Times(1)
// when
migrated, toMigrate, err := fixer.Run(ctx, log, store.SpaceIndex("space1"), marketPlace.SpaceIndex(addr.AnytypeMarketplaceWorkspace), spc)
// then
assert.NoError(t, err)
assert.Equal(t, 1, migrated)
assert.Equal(t, 1, toMigrate)
})
}
func TestReviseSystemObject(t *testing.T) {
ctx := context.Background()
log := logger.NewNamed("tesr")