Dmitrii Stepanov
d3b209c8e1
All checks were successful
Vulncheck / Vulncheck (pull_request) Successful in 1m3s
DCO action / DCO (pull_request) Successful in 1m28s
Pre-commit hooks / Pre-commit (pull_request) Successful in 2m2s
Build / Build Components (pull_request) Successful in 2m15s
Tests and linters / Run gofumpt (pull_request) Successful in 2m10s
Tests and linters / gopls check (pull_request) Successful in 2m21s
Tests and linters / Staticcheck (pull_request) Successful in 2m55s
Tests and linters / Lint (pull_request) Successful in 3m29s
Tests and linters / Tests (pull_request) Successful in 3m47s
Tests and linters / Tests with -race (pull_request) Successful in 3m58s
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>
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package blobstor
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type StorageIDUpdate interface {
|
|
UpdateStorageID(ctx context.Context, addr oid.Address, storageID []byte) error
|
|
}
|
|
|
|
type ConcurrentWorkersLimiter interface {
|
|
AcquireWorkSlot(ctx context.Context) error
|
|
ReleaseWorkSlot()
|
|
}
|
|
|
|
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,
|
|
FillPercent: fillPercent,
|
|
})
|
|
summary.FilesRemoved += res.FilesRemoved
|
|
summary.ObjectsMoved += res.ObjectsMoved
|
|
if err != nil {
|
|
b.log.Error(logs.BlobstorRebuildFailedToRebuildStorages,
|
|
zap.String("failed_storage_path", storage.Storage.Path()),
|
|
zap.String("failed_storage_type", storage.Storage.Type()),
|
|
zap.Error(err))
|
|
rErr = err
|
|
break
|
|
}
|
|
}
|
|
b.log.Info(logs.BlobstorRebuildRebuildStoragesCompleted,
|
|
zap.Bool("success", rErr == nil),
|
|
zap.Uint64("total_files_removed", summary.FilesRemoved),
|
|
zap.Uint64("total_objects_moved", summary.ObjectsMoved))
|
|
return rErr
|
|
}
|