From b215e8a9c86d6f9b33b0c77c7013d4d27ba3d06d Mon Sep 17 00:00:00 2001 From: Stepanyuk Vladislav Date: Mon, 27 Jan 2025 05:42:11 +0000 Subject: [PATCH] issue-2725: change test suite name and correct issues --- .../storage/volume/volume_actor_acquire.cpp | 2 +- .../storage/volume/volume_actor_release.cpp | 4 +- .../storage/volume/volume_events_private.h | 2 - .../libs/storage/volume/volume_state.cpp | 25 +++ .../libs/storage/volume/volume_state.h | 24 +-- .../libs/storage/volume/volume_ut_session.cpp | 177 ++++++++---------- 6 files changed, 113 insertions(+), 121 deletions(-) diff --git a/cloud/blockstore/libs/storage/volume/volume_actor_acquire.cpp b/cloud/blockstore/libs/storage/volume/volume_actor_acquire.cpp index f0d41d150b2..5dba7995a46 100644 --- a/cloud/blockstore/libs/storage/volume/volume_actor_acquire.cpp +++ b/cloud/blockstore/libs/storage/volume/volume_actor_acquire.cpp @@ -377,7 +377,7 @@ void TVolumeActor::HandleDevicesAcquireFinished( const TEvVolumePrivate::TEvDevicesAcquireFinished::TPtr& ev, const TActorContext& ctx) { - HandleDevicesAcquireFinishedImpl(ev->Get()->Error, ctx); + HandleDevicesAcquireFinishedImpl(ev->Get()->GetError(), ctx); } } // namespace NCloud::NBlockStore::NStorage diff --git a/cloud/blockstore/libs/storage/volume/volume_actor_release.cpp b/cloud/blockstore/libs/storage/volume/volume_actor_release.cpp index e88594f09c0..6e3debf3422 100644 --- a/cloud/blockstore/libs/storage/volume/volume_actor_release.cpp +++ b/cloud/blockstore/libs/storage/volume/volume_actor_release.cpp @@ -12,6 +12,8 @@ using namespace NKikimr::NTabletFlatExecutor; namespace { +//////////////////////////////////////////////////////////////////////////////// + class TReleaseDevicesActor final : public TActorBootstrapped { @@ -276,7 +278,7 @@ void TVolumeActor::HandleDevicesReleasedFinished( const TEvVolumePrivate::TEvDevicesReleaseFinished::TPtr& ev, const NActors::TActorContext& ctx) { - HandleDevicesReleasedFinishedImpl(ev->Get()->Error, ctx); + HandleDevicesReleasedFinishedImpl(ev->Get()->GetError(), ctx); } } // namespace NCloud::NBlockStore::NStorage diff --git a/cloud/blockstore/libs/storage/volume/volume_events_private.h b/cloud/blockstore/libs/storage/volume/volume_events_private.h index 4003d1797f3..c28a6b2eeba 100644 --- a/cloud/blockstore/libs/storage/volume/volume_events_private.h +++ b/cloud/blockstore/libs/storage/volume/volume_events_private.h @@ -314,7 +314,6 @@ struct TEvVolumePrivate struct TDevicesAcquireFinished { - NProto::TError Error; }; // @@ -323,7 +322,6 @@ struct TEvVolumePrivate struct TDevicesReleaseFinished { - NProto::TError Error; }; // diff --git a/cloud/blockstore/libs/storage/volume/volume_state.cpp b/cloud/blockstore/libs/storage/volume/volume_state.cpp index 2a8fbd0d8ec..66f05128e66 100644 --- a/cloud/blockstore/libs/storage/volume/volume_state.cpp +++ b/cloud/blockstore/libs/storage/volume/volume_state.cpp @@ -811,6 +811,31 @@ const THashMultiMap& TVolumeState::GetPipeServerId2ClientId() return ClientIdsByPipeServerId; } +TVector +TVolumeState::GetAllDevicesForAcquireRelease() const +{ + const size_t allDevicesCount = + ((Meta.ReplicasSize() + 1) * Meta.DevicesSize()) + + GetMeta().MigrationsSize(); + + TVector resultDevices; + resultDevices.reserve(allDevicesCount); + + for (const auto& device: Meta.GetDevices()) { + resultDevices.emplace_back(device); + } + for (const auto& replica: Meta.GetReplicas()) { + for (const auto& device: replica.GetDevices()) { + resultDevices.emplace_back(device); + } + } + for (const auto& migration: Meta.GetMigrations()) { + resultDevices.emplace_back(migration.GetTargetDevice()); + } + + return resultDevices; +} + bool TVolumeState::CanPreemptClient( const TString& oldClientId, TInstant referenceTimestamp, diff --git a/cloud/blockstore/libs/storage/volume/volume_state.h b/cloud/blockstore/libs/storage/volume/volume_state.h index 3ec91963ae3..d27dedae766 100644 --- a/cloud/blockstore/libs/storage/volume/volume_state.h +++ b/cloud/blockstore/libs/storage/volume/volume_state.h @@ -724,29 +724,7 @@ class TVolumeState return Meta.GetResyncNeeded(); } - TVector GetAllDevicesForAcquireRelease() - { - const size_t allDevicesCount = - ((Meta.ReplicasSize() + 1) * Meta.DevicesSize()) + - GetMeta().MigrationsSize(); - - TVector resultDevices; - resultDevices.reserve(allDevicesCount); - - for (const auto& device: Meta.GetDevices()) { - resultDevices.emplace_back(device); - } - for (const auto& replica: Meta.GetReplicas()) { - for (const auto& device: replica.GetDevices()) { - resultDevices.emplace_back(device); - } - } - for (const auto& migration: Meta.GetMigrations()) { - resultDevices.emplace_back(migration.GetTargetDevice()); - } - - return resultDevices; - } + TVector GetAllDevicesForAcquireRelease() const; private: bool CanPreemptClient( diff --git a/cloud/blockstore/libs/storage/volume/volume_ut_session.cpp b/cloud/blockstore/libs/storage/volume/volume_ut_session.cpp index d7fd5ca607e..224a61e3882 100644 --- a/cloud/blockstore/libs/storage/volume/volume_ut_session.cpp +++ b/cloud/blockstore/libs/storage/volume/volume_ut_session.cpp @@ -4,10 +4,13 @@ #include #include #include + #include namespace NCloud::NBlockStore::NStorage { +using namespace std::chrono_literals; + using namespace NActors; using namespace NKikimr; @@ -24,53 +27,52 @@ namespace { //////////////////////////////////////////////////////////////////////////////// -struct TTestContext +struct TFixture: public NUnitTest::TBaseFixture { - TVolumeClient Volume; std::unique_ptr Runtime; - TIntrusivePtr DRState; -}; + TIntrusivePtr State; -TTestContext SetupTest(TDuration agentRequestTimeout = TDuration::Seconds(1)) -{ - NProto::TStorageServiceConfig config; - config.SetAcquireNonReplicatedDevices(true); - config.SetNonReplicatedVolumeDirectAcquireEnabled(true); - config.SetAgentRequestTimeout(agentRequestTimeout.MilliSeconds()); - config.SetClientRemountPeriod(2000); - auto state = MakeIntrusive(); - auto runtime = PrepareTestActorRuntime(config, state); - TVolumeClient volume(*runtime); - - volume.UpdateVolumeConfig( - 0, - 0, - 0, - 0, - false, - 1, - NCloud::NProto::STORAGE_MEDIA_SSD_NONREPLICATED, - 1024); - - return { - .Volume = std::move(volume), - .Runtime = std::move(runtime), - .DRState = std::move(state)}; -} + void SetupTest(TDuration agentRequestTimeout = 1s) + { + NProto::TStorageServiceConfig config; + config.SetAcquireNonReplicatedDevices(true); + config.SetNonReplicatedVolumeDirectAcquireEnabled(true); + config.SetAgentRequestTimeout(agentRequestTimeout.MilliSeconds()); + config.SetClientRemountPeriod(2000); + State = MakeIntrusive(); + Runtime = PrepareTestActorRuntime(config, State); + auto volume = GetVolumeClient(); + + volume.UpdateVolumeConfig( + 0, + 0, + 0, + 0, + false, + 1, + NCloud::NProto::STORAGE_MEDIA_SSD_NONREPLICATED, + 1024); + + volume.WaitReady(); + } + + TVolumeClient GetVolumeClient() const + { + return {*Runtime}; + } +}; -} // namespace +} // namespace //////////////////////////////////////////////////////////////////////////////// -Y_UNIT_TEST_SUITE(TVolumeTest) +Y_UNIT_TEST_SUITE(TVolumeSessionTest) { - Y_UNIT_TEST(ShouldPassAllParamsInAcquireDevicesRequest) + Y_UNIT_TEST_F(ShouldPassAllParamsInAcquireDevicesRequest, TFixture) { - auto [volume, runtime, _] = SetupTest(); - - TVolumeClient writerClient(*runtime); + SetupTest(); - volume.WaitReady(); + auto volume = GetVolumeClient(); auto response = volume.GetVolumeInfo(); auto diskInfo = response->Record.GetVolume(); @@ -86,7 +88,7 @@ Y_UNIT_TEST_SUITE(TVolumeTest) bool requestSended = false; - runtime->SetObserverFunc( + Runtime->SetObserverFunc( [&](TAutoPtr& event) { if (event->GetTypeRewrite() == @@ -103,9 +105,7 @@ Y_UNIT_TEST_SUITE(TVolumeTest) record.GetAccessMode(), NProto::VOLUME_ACCESS_READ_WRITE); - UNIT_ASSERT_EQUAL( - record.GetDiskId(), - diskInfo.GetDiskId()); + UNIT_ASSERT_EQUAL(record.GetDiskId(), diskInfo.GetDiskId()); const auto& deviceUUIDS = record.GetDeviceUUIDs(); UNIT_ASSERT_EQUAL( @@ -131,24 +131,22 @@ Y_UNIT_TEST_SUITE(TVolumeTest) NProto::VOLUME_ACCESS_READ_WRITE, NProto::VOLUME_MOUNT_LOCAL, 0); - writerClient.AddClient(writer); + volume.AddClient(writer); UNIT_ASSERT(requestSended); } - Y_UNIT_TEST(ShouldPassAllParamsInReleaseDevicesRequest) + Y_UNIT_TEST_F(ShouldPassAllParamsInReleaseDevicesRequest, TFixture) { - auto [volume, runtime, _] = SetupTest(); + SetupTest(); - TVolumeClient writerClient(*runtime); - - volume.WaitReady(); + auto volume = GetVolumeClient(); auto writer = CreateVolumeClientInfo( NProto::VOLUME_ACCESS_READ_WRITE, NProto::VOLUME_MOUNT_LOCAL, 0); - writerClient.AddClient(writer); + volume.AddClient(writer); auto response = volume.GetVolumeInfo(); auto diskInfo = response->Record.GetVolume(); @@ -164,7 +162,7 @@ Y_UNIT_TEST_SUITE(TVolumeTest) bool requestSended = false; - runtime->SetObserverFunc( + Runtime->SetObserverFunc( [&](TAutoPtr& event) { if (event->GetTypeRewrite() == @@ -200,15 +198,13 @@ Y_UNIT_TEST_SUITE(TVolumeTest) UNIT_ASSERT(requestSended); } - Y_UNIT_TEST(ShouldSendAcquireReleaseRequestsDirectlyToDiskAgent) + Y_UNIT_TEST_F(ShouldSendAcquireReleaseRequestsDirectlyToDiskAgent, TFixture) { - auto [volume, runtime, _] = SetupTest(); - - TVolumeClient writerClient(*runtime); - TVolumeClient readerClient1(*runtime); - TVolumeClient readerClient2(*runtime); + SetupTest(); - volume.WaitReady(); + TVolumeClient writerClient = GetVolumeClient(); + auto readerClient1 = GetVolumeClient(); + auto readerClient2 = GetVolumeClient(); ui32 acquireRequestsToDiskRegistry = 0; ui32 releaseRequestsToDiskRegistry = 0; @@ -216,7 +212,7 @@ Y_UNIT_TEST_SUITE(TVolumeTest) ui32 writerAcquireRequests = 0; ui32 releaseRequests = 0; - runtime->SetObserverFunc( + Runtime->SetObserverFunc( [&](TAutoPtr& event) { switch (event->GetTypeRewrite()) { @@ -249,8 +245,8 @@ Y_UNIT_TEST_SUITE(TVolumeTest) return TTestActorRuntime::DefaultObserverFunc(event); }); - runtime->AdvanceCurrentTime(TDuration::Seconds(2)); - runtime->DispatchEvents({}, TDuration::MilliSeconds(1)); + Runtime->AdvanceCurrentTime(2s); + Runtime->DispatchEvents({}, 1ms); UNIT_ASSERT_VALUES_EQUAL(acquireRequestsToDiskRegistry, 0); UNIT_ASSERT_VALUES_EQUAL(writerAcquireRequests, 0); @@ -282,8 +278,8 @@ Y_UNIT_TEST_SUITE(TVolumeTest) UNIT_ASSERT_VALUES_EQUAL(writerAcquireRequests, 1); UNIT_ASSERT_VALUES_EQUAL(readerAcquireRequests, 2); - runtime->AdvanceCurrentTime(TDuration::Seconds(2)); - runtime->DispatchEvents({}, TDuration::MilliSeconds(1)); + Runtime->AdvanceCurrentTime(2s); + Runtime->DispatchEvents({}, 1ms); UNIT_ASSERT_VALUES_EQUAL(acquireRequestsToDiskRegistry, 0); UNIT_ASSERT_VALUES_EQUAL(writerAcquireRequests, 2); @@ -294,8 +290,8 @@ Y_UNIT_TEST_SUITE(TVolumeTest) readerClient1.RemoveClient(reader1.GetClientId()); - runtime->AdvanceCurrentTime(TDuration::Seconds(2)); - runtime->DispatchEvents({}, TDuration::MilliSeconds(1)); + Runtime->AdvanceCurrentTime(2s); + Runtime->DispatchEvents({}, 1ms); UNIT_ASSERT_VALUES_EQUAL(acquireRequestsToDiskRegistry, 0); UNIT_ASSERT_VALUES_EQUAL(writerAcquireRequests, 3); @@ -307,8 +303,8 @@ Y_UNIT_TEST_SUITE(TVolumeTest) writerClient.RemoveClient(writer.GetClientId()); readerClient2.RemoveClient(reader2.GetClientId()); - runtime->AdvanceCurrentTime(TDuration::Seconds(2)); - runtime->DispatchEvents({}, TDuration::MilliSeconds(1)); + Runtime->AdvanceCurrentTime(2s); + Runtime->DispatchEvents({}, 1ms); UNIT_ASSERT_VALUES_EQUAL(acquireRequestsToDiskRegistry, 0); UNIT_ASSERT_VALUES_EQUAL(writerAcquireRequests, 3); @@ -318,15 +314,14 @@ Y_UNIT_TEST_SUITE(TVolumeTest) UNIT_ASSERT_VALUES_EQUAL(releaseRequestsToDiskRegistry, 0); } - Y_UNIT_TEST(ShouldRejectTimedoutAcquireRequests) + Y_UNIT_TEST_F(ShouldRejectTimedoutAcquireRequests, TFixture) { - auto [volume, runtime, _] = SetupTest(TDuration::MilliSeconds(100)); + SetupTest(100ms); - TVolumeClient writerClient(*runtime); + auto writerClient = GetVolumeClient(); - volume.WaitReady(); std::unique_ptr stollenResponse; - runtime->SetObserverFunc( + Runtime->SetObserverFunc( [&](TAutoPtr& event) { if (event->GetTypeRewrite() == @@ -349,15 +344,13 @@ Y_UNIT_TEST_SUITE(TVolumeTest) UNIT_ASSERT_VALUES_EQUAL(response->GetError().GetMessage(), "timeout"); } - Y_UNIT_TEST(ShouldPassErrorsFromDiskAgent) + Y_UNIT_TEST_F(ShouldPassErrorsFromDiskAgent, TFixture) { - auto [volume, runtime, _] = SetupTest(); + SetupTest(); - TVolumeClient writerClient(*runtime); + auto writerClient = GetVolumeClient(); - volume.WaitReady(); - - runtime->SetObserverFunc( + Runtime->SetObserverFunc( [&](TAutoPtr& event) { if (event->GetTypeRewrite() == @@ -367,7 +360,7 @@ Y_UNIT_TEST_SUITE(TVolumeTest) TEvDiskAgent::TEvAcquireDevicesResponse>( MakeError(E_TRY_AGAIN)); - runtime->Send(new IEventHandle( + Runtime->Send(new IEventHandle( event->Recipient, event->Sender, response.release(), @@ -391,16 +384,13 @@ Y_UNIT_TEST_SUITE(TVolumeTest) UNIT_ASSERT_EQUAL(response->GetError().GetCode(), E_TRY_AGAIN); } - Y_UNIT_TEST(ShouldMuteErrorsWithMuteIoErrors) + Y_UNIT_TEST_F(ShouldMuteErrorsWithMuteIoErrors, TFixture) { - auto [volume, runtime, state] = SetupTest(); + SetupTest(); - TVolumeClient writerClient(*runtime); - - volume.WaitReady(); + auto writerClient = GetVolumeClient(); - - runtime->SetObserverFunc( + Runtime->SetObserverFunc( [&](TAutoPtr& event) { if (event->GetTypeRewrite() == @@ -410,7 +400,7 @@ Y_UNIT_TEST_SUITE(TVolumeTest) TEvDiskAgent::TEvAcquireDevicesResponse>( MakeError(E_TRY_AGAIN)); - runtime->Send(new IEventHandle( + Runtime->Send(new IEventHandle( event->Recipient, event->Sender, response.release(), @@ -428,11 +418,12 @@ Y_UNIT_TEST_SUITE(TVolumeTest) NProto::VOLUME_MOUNT_LOCAL, 0); - auto& disk = state->Disks.at("vol0"); + auto& disk = State->Disks.at("vol0"); disk.IOMode = NProto::VOLUME_IO_ERROR_READ_ONLY; - disk.IOModeTs = runtime->GetCurrentTime(); + disk.IOModeTs = Runtime->GetCurrentTime(); disk.MuteIOErrors = true; + auto volume = GetVolumeClient(); volume.ReallocateDisk(); // reallocate disk will trigger pipes reset, so reestablish connection volume.ReconnectPipe(); @@ -440,13 +431,11 @@ Y_UNIT_TEST_SUITE(TVolumeTest) writerClient.AddClient(writer); } - Y_UNIT_TEST(ShouldHandleRequestsUndelivery) + Y_UNIT_TEST_F(ShouldHandleRequestsUndelivery, TFixture) { - auto [volume, runtime, state] = SetupTest(); - - TVolumeClient writerClient(*runtime); + SetupTest(); - volume.WaitReady(); + auto writerClient = GetVolumeClient(); auto writer = CreateVolumeClientInfo( NProto::VOLUME_ACCESS_READ_WRITE, @@ -454,9 +443,9 @@ Y_UNIT_TEST_SUITE(TVolumeTest) 0); auto agentNodeId = MakeDiskAgentServiceId( - state->Disks.at("vol0").Devices[0].GetNodeId()); + State->Disks.at("vol0").Devices[0].GetNodeId()); - runtime->Send(new IEventHandle( + Runtime->Send(new IEventHandle( agentNodeId, TActorId(), new TEvents::TEvPoisonPill));