forked from TrueCloudLab/frostfs-node
[#1320] shard: Fix TestGCDropsObjectInhumedFromWritecache flaky test
The `TestGCDropsObjectInhumedFromWritecache` test was flaky because a running asynchronous rebuild operation prevented GC from deleting the object. A test-only shard option `WithDisabledRebuild` has been added to fix this. Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
This commit is contained in:
parent
98fe24cdb7
commit
2b3fc50681
3 changed files with 13 additions and 3 deletions
|
@ -130,7 +130,7 @@ func (s *Shard) Init(ctx context.Context) error {
|
|||
s.gc.init(ctx)
|
||||
|
||||
s.rb = newRebuilder(s.rebuildLimiter)
|
||||
if !m.NoMetabase() {
|
||||
if !m.NoMetabase() && !s.rebuildDisabled {
|
||||
s.rb.Start(ctx, s.blobStor, s.metaBase, s.log)
|
||||
}
|
||||
s.writecacheSealCancel.Store(dummyCancel)
|
||||
|
@ -398,7 +398,7 @@ func (s *Shard) Reload(ctx context.Context, opts ...Option) error {
|
|||
defer unlock()
|
||||
|
||||
s.rb.Stop(s.log)
|
||||
if !s.info.Mode.NoMetabase() {
|
||||
if !s.info.Mode.NoMetabase() && !s.rebuildDisabled {
|
||||
defer func() {
|
||||
s.rb.Start(ctx, s.blobStor, s.metaBase, s.log)
|
||||
}()
|
||||
|
|
|
@ -187,7 +187,7 @@ func TestGCDropsObjectInhumedFromWritecache(t *testing.T) {
|
|||
|
||||
func testGCDropsObjectInhumedFromWritecache(t *testing.T, flushbeforeInhume bool) {
|
||||
sh := newCustomShard(t, true, shardOptions{
|
||||
additionalShardOptions: []Option{WithDisabledGC()},
|
||||
additionalShardOptions: []Option{WithDisabledGC(), WithDisabledRebuild()},
|
||||
wcOpts: []writecache.Option{writecache.WithDisableBackgroundFlush()},
|
||||
})
|
||||
defer func() { require.NoError(t, sh.Close()) }()
|
||||
|
|
|
@ -139,6 +139,8 @@ type cfg struct {
|
|||
reportErrorFunc func(selfID string, message string, err error)
|
||||
|
||||
rebuildLimiter RebuildWorkerLimiter
|
||||
|
||||
rebuildDisabled bool
|
||||
}
|
||||
|
||||
func defaultCfg() *cfg {
|
||||
|
@ -410,6 +412,14 @@ func WithZeroCountCallback(cb EmptyContainersCallback) Option {
|
|||
}
|
||||
}
|
||||
|
||||
// WithDisabledRebuild returns an option to disable a shard rebuild.
|
||||
// For testing purposes only.
|
||||
func WithDisabledRebuild() Option {
|
||||
return func(c *cfg) {
|
||||
c.rebuildDisabled = true
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Shard) fillInfo() {
|
||||
s.cfg.info.MetaBaseInfo = s.metaBase.DumpInfo()
|
||||
s.cfg.info.BlobStorInfo = s.blobStor.DumpInfo()
|
||||
|
|
Loading…
Reference in a new issue