diff --git a/internal/registry/obj_selector.go b/internal/registry/obj_selector.go index 78abb37..2b733df 100644 --- a/internal/registry/obj_selector.go +++ b/internal/registry/obj_selector.go @@ -3,6 +3,7 @@ package registry import ( "context" "fmt" + "sync" "time" "github.com/nspcc-dev/neo-go/pkg/io" @@ -23,6 +24,8 @@ type ObjSelector struct { filter *ObjFilter cacheSize int kind SelectorKind + // Sync synchronizes VU used for deletion. + Sync sync.WaitGroup } // objectSelectCache is the default maximum size of a batch to select from DB. @@ -44,6 +47,7 @@ func NewObjSelector(registry *ObjRegistry, selectionSize int, kind SelectorKind, objChan: make(chan *ObjectInfo, selectionSize*2), cacheSize: selectionSize, kind: kind, + Sync: sync.WaitGroup{}, } go objSelector.selectLoop() diff --git a/scenarios/s3.js b/scenarios/s3.js index 22b031a..aa707c9 100644 --- a/scenarios/s3.js +++ b/scenarios/s3.js @@ -132,6 +132,10 @@ export function setup() { const start_timestamp = Date.now() console.log( `Load started at: ${Date(start_timestamp).toString()}`) + + if (delete_vu_count > 0){ + obj_to_delete_selector.sync.add(delete_vu_count) + } } export function teardown(data) { @@ -204,6 +208,8 @@ export function obj_delete() { const obj = obj_to_delete_selector.nextObject(); if (!obj) { if (obj_to_delete_exit_on_null) { + obj_to_delete_selector.sync.done() + obj_to_delete_selector.sync.wait() exec.test.abort("No more objects to select"); } return;