diff options
author | serg-belyakov <serg-belyakov@yandex-team.com> | 2023-01-23 21:09:43 +0300 |
---|---|---|
committer | serg-belyakov <serg-belyakov@yandex-team.com> | 2023-01-23 21:09:43 +0300 |
commit | 8b87d77cd8a474a37bf6b6fd65c0872be2f1a997 (patch) | |
tree | 22d6f783b87e51ac1e462f36991230e2e7df00da | |
parent | f3453b558f68858b90b80be04497e986bbf03b4b (diff) | |
download | ydb-8b87d77cd8a474a37bf6b6fd65c0872be2f1a997.tar.gz |
Add fail injection to pdisk, set deadline on wait for fail injection,
Set deadline on Wait
-rw-r--r-- | ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_async.cpp | 5 | ||||
-rw-r--r-- | ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_async.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_async.cpp index d80dae0868..a66a3f911e 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_async.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_async.cpp @@ -234,7 +234,12 @@ class TRealBlockDevice : public IBlockDevice { EIoResult ret = EIoResult::TryAgain; while (ret == EIoResult::TryAgain) { action->SubmitTime = HPNow(); + + if (op->GetType() == IAsyncIoOperation::EType::PWrite) { + PDISK_FAIL_INJECTION(1); + } ret = Device.IoContext->Submit(op, Device.SharedCallback.Get()); + if (ret == EIoResult::Ok) { return; } diff --git a/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h b/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h index 2e9ac8f3f0..7b7abf4818 100644 --- a/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h +++ b/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h @@ -26,8 +26,13 @@ class TFailInjector { TAtomic FailCounter = 0; TAutoEvent FailEvent; + TInstant Deadline = TInstant::Max(); public: + void SetDeadline(TInstant deadline) { + Deadline = deadline; + } + void SetFailCounter(ui32 failCounter) { AtomicSet(FailCounter, failCounter); } @@ -49,7 +54,7 @@ public: } void WaitForFailure() { - FailEvent.WaitI(); + FailEvent.WaitD(Deadline); } private: @@ -261,6 +266,10 @@ struct TPDiskFailureInjectionTest { ui32 failCounter = GenerateFailCounter(frequentFails); injector.SetFailCounter(failCounter); + if (TestDuration) { + injector.SetDeadline(startTime + *TestDuration); + } + Cerr << "failCounter# " << failCounter << Endl; SetupLWTrace(&injector); |