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:
parent
5ede1352da
commit
0027b1ee9c
6 changed files with 62 additions and 13 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
{
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue