forked from TrueCloudLab/frostfs-node
[#1337] shard: Disable background rebuild
Since `frostfs-cli control shards rebuild` command was added, there is no need for background rebuild now. For failover tests used used value 1 to rebuild only schema change. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
edb1747af7
commit
d3b209c8e1
16 changed files with 49 additions and 138 deletions
|
@ -60,7 +60,7 @@ func (b *Blobovniczas) Rebuild(ctx context.Context, prm common.RebuildPrm) (comm
|
|||
b.log.Debug(logs.BlobovniczaTreeCompletedPreviousRebuildSuccess)
|
||||
|
||||
b.log.Debug(logs.BlobovniczaTreeCollectingDBToRebuild)
|
||||
dbsToMigrate, err := b.getDBsToRebuild(ctx, prm.Action)
|
||||
dbsToMigrate, err := b.getDBsToRebuild(ctx, prm.FillPercent)
|
||||
if err != nil {
|
||||
b.log.Warn(logs.BlobovniczaTreeCollectingDBToRebuildFailed, zap.Error(err))
|
||||
success = false
|
||||
|
@ -94,27 +94,20 @@ func (b *Blobovniczas) migrateDBs(ctx context.Context, dbs []string, prm common.
|
|||
return res, nil
|
||||
}
|
||||
|
||||
func (b *Blobovniczas) getDBsToRebuild(ctx context.Context, action common.RebuildAction) ([]string, error) {
|
||||
schemaChange := make(map[string]struct{})
|
||||
fillPercent := make(map[string]struct{})
|
||||
var err error
|
||||
if action.SchemaChange {
|
||||
schemaChange, err = b.selectDBsDoNotMatchSchema(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
func (b *Blobovniczas) getDBsToRebuild(ctx context.Context, fillPercent int) ([]string, error) {
|
||||
withSchemaChange, err := b.selectDBsDoNotMatchSchema(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if action.FillPercent {
|
||||
fillPercent, err = b.selectDBsDoNotMatchFillPercent(ctx, action.FillPercentValue)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
withFillPercent, err := b.selectDBsDoNotMatchFillPercent(ctx, fillPercent)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for k := range fillPercent {
|
||||
schemaChange[k] = struct{}{}
|
||||
for k := range withFillPercent {
|
||||
withSchemaChange[k] = struct{}{}
|
||||
}
|
||||
result := make([]string, 0, len(schemaChange))
|
||||
for db := range schemaChange {
|
||||
result := make([]string, 0, len(withSchemaChange))
|
||||
for db := range withSchemaChange {
|
||||
result = append(result, db)
|
||||
}
|
||||
return result, nil
|
||||
|
|
|
@ -145,7 +145,7 @@ func testRebuildFailoverValidate(t *testing.T, dir string, obj *objectSDK.Object
|
|||
WithBlobovniczaShallowWidth(2),
|
||||
WithBlobovniczaShallowDepth(2),
|
||||
WithRootPath(dir),
|
||||
WithBlobovniczaSize(100*1024*1024),
|
||||
WithBlobovniczaSize(10*1024),
|
||||
WithWaitBeforeDropDB(0),
|
||||
WithOpenedCacheSize(1000))
|
||||
require.NoError(t, b.Open(mode.ComponentReadWrite))
|
||||
|
@ -164,6 +164,7 @@ func testRebuildFailoverValidate(t *testing.T, dir string, obj *objectSDK.Object
|
|||
rRes, err := b.Rebuild(context.Background(), common.RebuildPrm{
|
||||
MetaStorage: metaStub,
|
||||
WorkerLimiter: &rebuildLimiterStub{},
|
||||
FillPercent: 1,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(1), rRes.ObjectsMoved)
|
||||
|
|
|
@ -79,11 +79,7 @@ func TestBlobovniczaTreeFillPercentRebuild(t *testing.T) {
|
|||
rRes, err := b.Rebuild(context.Background(), common.RebuildPrm{
|
||||
MetaStorage: metaStub,
|
||||
WorkerLimiter: &rebuildLimiterStub{},
|
||||
Action: common.RebuildAction{
|
||||
SchemaChange: false,
|
||||
FillPercent: true,
|
||||
FillPercentValue: 60,
|
||||
},
|
||||
FillPercent: 60,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
dataMigrated := rRes.ObjectsMoved > 0 || rRes.FilesRemoved > 0 || metaStub.updatedCount > 0
|
||||
|
@ -135,11 +131,7 @@ func TestBlobovniczaTreeFillPercentRebuild(t *testing.T) {
|
|||
rRes, err := b.Rebuild(context.Background(), common.RebuildPrm{
|
||||
MetaStorage: metaStub,
|
||||
WorkerLimiter: &rebuildLimiterStub{},
|
||||
Action: common.RebuildAction{
|
||||
SchemaChange: false,
|
||||
FillPercent: true,
|
||||
FillPercentValue: 90, // 64KB / 100KB = 64%
|
||||
},
|
||||
FillPercent: 90, // 64KB / 100KB = 64%
|
||||
})
|
||||
require.NoError(t, err)
|
||||
dataMigrated := rRes.ObjectsMoved > 0 || rRes.FilesRemoved > 0 || metaStub.updatedCount > 0
|
||||
|
@ -204,11 +196,7 @@ func TestBlobovniczaTreeFillPercentRebuild(t *testing.T) {
|
|||
rRes, err := b.Rebuild(context.Background(), common.RebuildPrm{
|
||||
MetaStorage: metaStub,
|
||||
WorkerLimiter: &rebuildLimiterStub{},
|
||||
Action: common.RebuildAction{
|
||||
SchemaChange: false,
|
||||
FillPercent: true,
|
||||
FillPercentValue: 80,
|
||||
},
|
||||
FillPercent: 80,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(49), rRes.FilesRemoved)
|
||||
|
@ -281,11 +269,7 @@ func TestBlobovniczaTreeFillPercentRebuild(t *testing.T) {
|
|||
rRes, err := b.Rebuild(context.Background(), common.RebuildPrm{
|
||||
MetaStorage: metaStub,
|
||||
WorkerLimiter: &rebuildLimiterStub{},
|
||||
Action: common.RebuildAction{
|
||||
SchemaChange: false,
|
||||
FillPercent: true,
|
||||
FillPercentValue: 80,
|
||||
},
|
||||
FillPercent: 80,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, uint64(49), rRes.FilesRemoved)
|
||||
|
@ -357,7 +341,7 @@ func TestBlobovniczaTreeRebuildLargeObject(t *testing.T) {
|
|||
var rPrm common.RebuildPrm
|
||||
rPrm.MetaStorage = metaStub
|
||||
rPrm.WorkerLimiter = &rebuildLimiterStub{}
|
||||
rPrm.Action = common.RebuildAction{SchemaChange: true}
|
||||
rPrm.FillPercent = 1
|
||||
rRes, err := b.Rebuild(context.Background(), rPrm)
|
||||
require.NoError(t, err)
|
||||
dataMigrated := rRes.ObjectsMoved > 0 || rRes.FilesRemoved > 0 || metaStub.updatedCount > 0
|
||||
|
@ -446,7 +430,7 @@ func testBlobovniczaTreeRebuildHelper(t *testing.T, sourceDepth, sourceWidth, ta
|
|||
var rPrm common.RebuildPrm
|
||||
rPrm.MetaStorage = metaStub
|
||||
rPrm.WorkerLimiter = &rebuildLimiterStub{}
|
||||
rPrm.Action = common.RebuildAction{SchemaChange: true}
|
||||
rPrm.FillPercent = 1
|
||||
rRes, err := b.Rebuild(context.Background(), rPrm)
|
||||
require.NoError(t, err)
|
||||
dataMigrated := rRes.ObjectsMoved > 0 || rRes.FilesRemoved > 0 || metaStub.updatedCount > 0
|
||||
|
|
|
@ -11,17 +11,10 @@ type RebuildRes struct {
|
|||
FilesRemoved uint64
|
||||
}
|
||||
|
||||
type RebuildAction struct {
|
||||
SchemaChange bool
|
||||
|
||||
FillPercent bool
|
||||
FillPercentValue int
|
||||
}
|
||||
|
||||
type RebuildPrm struct {
|
||||
MetaStorage MetaStorage
|
||||
WorkerLimiter ConcurrentWorkersLimiter
|
||||
Action RebuildAction
|
||||
FillPercent int
|
||||
}
|
||||
|
||||
type MetaStorage interface {
|
||||
|
|
|
@ -18,14 +18,14 @@ type ConcurrentWorkersLimiter interface {
|
|||
ReleaseWorkSlot()
|
||||
}
|
||||
|
||||
func (b *BlobStor) Rebuild(ctx context.Context, upd StorageIDUpdate, limiter ConcurrentWorkersLimiter, action common.RebuildAction) error {
|
||||
func (b *BlobStor) Rebuild(ctx context.Context, upd StorageIDUpdate, limiter ConcurrentWorkersLimiter, fillPercent int) error {
|
||||
var summary common.RebuildRes
|
||||
var rErr error
|
||||
for _, storage := range b.storage {
|
||||
res, err := storage.Storage.Rebuild(ctx, common.RebuildPrm{
|
||||
MetaStorage: upd,
|
||||
WorkerLimiter: limiter,
|
||||
Action: action,
|
||||
FillPercent: fillPercent,
|
||||
})
|
||||
summary.FilesRemoved += res.FilesRemoved
|
||||
summary.ObjectsMoved += res.ObjectsMoved
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue