aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorserg-belyakov <serg-belyakov@yandex-team.com>2023-01-23 21:09:43 +0300
committerserg-belyakov <serg-belyakov@yandex-team.com>2023-01-23 21:09:43 +0300
commit8b87d77cd8a474a37bf6b6fd65c0872be2f1a997 (patch)
tree22d6f783b87e51ac1e462f36991230e2e7df00da
parentf3453b558f68858b90b80be04497e986bbf03b4b (diff)
downloadydb-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.cpp5
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h11
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);