diff options
author | ilnaz <ilnaz@ydb.tech> | 2023-10-12 17:47:01 +0300 |
---|---|---|
committer | ilnaz <ilnaz@ydb.tech> | 2023-10-12 18:24:27 +0300 |
commit | 87fffaba46dde32a7c0ee0147251cd2d96542648 (patch) | |
tree | cc8ba592321cc2f53572f107508e0e7893eec496 | |
parent | b163a3d343f6e5c37b528f2ea6ba5b5e08c433eb (diff) | |
download | ydb-87fffaba46dde32a7c0ee0147251cd2d96542648.tar.gz |
Fix TestProcessingQueue KIKIMR-19621
-rw-r--r-- | ydb/core/cms/cms_ut.cpp | 70 | ||||
-rw-r--r-- | ydb/core/cms/cms_ut_common.cpp | 17 | ||||
-rw-r--r-- | ydb/core/cms/cms_ut_common.h | 1 |
3 files changed, 55 insertions, 33 deletions
diff --git a/ydb/core/cms/cms_ut.cpp b/ydb/core/cms/cms_ut.cpp index bd3e348770f..9ea723195a8 100644 --- a/ydb/core/cms/cms_ut.cpp +++ b/ydb/core/cms/cms_ut.cpp @@ -1449,32 +1449,70 @@ Y_UNIT_TEST_SUITE(TCmsTest) { Y_UNIT_TEST(TestProcessingQueue) { - const ui32 RequestsCount = 8; - TCmsTestEnv env(RequestsCount); + const ui32 nodes = 8; + TCmsTestEnv env(nodes); + env.CreateDefaultCmsPipe(); + + auto makeRequest = [&env](ui32 nodeId) { + auto ev = MakePermissionRequest("user", false, true, false, + MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(nodeId), 60000000, "storage") + ); + ev->Record.SetDuration(60000000); + ev->Record.SetAvailabilityMode(MODE_FORCE_RESTART); + env.SendToCms(ev.Release()); + }; + + TActorId cmsActorId; + { + makeRequest(0); + auto ev = env.GrabEdgeEvent<TEvCms::TEvPermissionResponse>(env.GetSender()); + cmsActorId = ev->Sender; + } + + THolder<IEventHandle> delayedClusterInfo; + env.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) { + if (ev->Recipient == cmsActorId && ev->GetTypeRewrite() == TCms::TEvPrivate::EvClusterInfo) { + delayedClusterInfo.Reset(ev.Release()); + return TTestActorRuntime::EEventAction::DROP; + } + return TTestActorRuntime::EEventAction::PROCESS; + }); // We need to send messages in fixed order - env.CreateDefaultCmsPipe(); - env.ProcessQueueCount = 0; - for (ui32 i = 0; i < RequestsCount; ++i) { - auto req = MakePermissionRequest("user", true, true, false, - MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(i), 60000000, "storage")); - req->Record.SetDuration(600000); - req->Record.SetAvailabilityMode(MODE_MAX_AVAILABILITY); + for (ui32 i = 0; i < nodes; ++i) { + makeRequest(i); + } - env.SendToCms(req.Release()); + if (!delayedClusterInfo) { + TDispatchOptions opts; + opts.FinalEvents.emplace_back([&delayedClusterInfo](IEventHandle&) { + return bool(delayedClusterInfo); + }); + env.DispatchEvents(opts); } - env.DestroyDefaultCmsPipe(); + + ui32 processQueueCount = 0; + env.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) { + if (ev->Recipient == cmsActorId && ev->GetTypeRewrite() == TCms::TEvPrivate::EvProcessQueue) { + ++processQueueCount; + } + return TTestActorRuntime::EEventAction::PROCESS; + }); + + env.Send(delayedClusterInfo.Release(), 0, true); // Check responses order - for (ui32 i = 0; i < RequestsCount; ++i) { - TAutoPtr<IEventHandle> handle; - auto reply = env.GrabEdgeEventRethrow<TEvCms::TEvPermissionResponse>(handle); - const auto &rec = reply->Record; + for (ui32 i = 0; i < nodes; ++i) { + auto ev = env.GrabEdgeEvent<TEvCms::TEvPermissionResponse>(env.GetSender()); + const auto &rec = ev->Get()->Record; UNIT_ASSERT_VALUES_EQUAL(rec.permissions_size(), 1); UNIT_ASSERT_VALUES_EQUAL(rec.permissions()[0].GetAction().GetHost(), ToString(env.GetNodeId(i))); } - UNIT_ASSERT_VALUES_EQUAL(env.ProcessQueueCount, RequestsCount); + + // first request processed without EvProcessQueue + UNIT_ASSERT_VALUES_EQUAL(processQueueCount, nodes - 1); + env.DestroyDefaultCmsPipe(); } Y_UNIT_TEST(TestLogOperationsRollback) diff --git a/ydb/core/cms/cms_ut_common.cpp b/ydb/core/cms/cms_ut_common.cpp index e8e0771192e..2e394612f26 100644 --- a/ydb/core/cms/cms_ut_common.cpp +++ b/ydb/core/cms/cms_ut_common.cpp @@ -533,7 +533,6 @@ static void SetupServices(TTestActorRuntime &runtime, TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options) : TTestBasicRuntime(options.NodeCount, options.DataCenterCount, false) , CmsId(MakeCmsID(0)) - , ProcessQueueCount(0) , CmsTabletActor(TActorId()) { TFakeNodeWhiteboardService::Config.MutableResponse()->SetSuccess(true); @@ -546,7 +545,7 @@ TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options) GenerateExtendedInfo(*this, config, options.VDisks, 4, options.Tenants, options.UseMirror3dcErasure); - SetObserverFunc([&ProcessQueueCount = ProcessQueueCount, &CmsTabletActor = CmsTabletActor](TTestActorRuntimeBase&, + SetObserverFunc([](TTestActorRuntimeBase&, TAutoPtr<IEventHandle> &event) -> auto { if (event->GetTypeRewrite() == TEvBlobStorage::EvControllerConfigRequest || event->GetTypeRewrite() == TEvConfigsDispatcher::EvGetConfigRequest) { @@ -555,20 +554,6 @@ TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options) event = IEventHandle::Forward(event, fakeId); } - if (event->GetTypeRewrite() == TCms::TEvPrivate::EvProcessQueue - && event->Recipient == CmsTabletActor) { - ++ProcessQueueCount; - } - - if (event->GetTypeRewrite() == TCms::TEvPrivate::EvUpdateClusterInfo - || event->GetTypeRewrite() == TEvCms::EvClusterStateRequest - || event->GetTypeRewrite() == TEvCms::EvNotification - || event->GetTypeRewrite() == TEvCms::EvResetMarkerRequest - || event->GetTypeRewrite() == TEvCms::EvSetMarkerRequest - || event->GetTypeRewrite() == TEvCms::EvGetClusterInfoRequest) { - --ProcessQueueCount; - } - return TTestActorRuntime::EEventAction::PROCESS; }); diff --git a/ydb/core/cms/cms_ut_common.h b/ydb/core/cms/cms_ut_common.h index 88513c84f19..f2ed2429358 100644 --- a/ydb/core/cms/cms_ut_common.h +++ b/ydb/core/cms/cms_ut_common.h @@ -368,7 +368,6 @@ public: void EnableNoisyBSCPipe(); const ui64 CmsId; - i32 ProcessQueueCount; private: void SetupLogging(); |