aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilnaz <ilnaz@ydb.tech>2023-10-12 17:47:01 +0300
committerilnaz <ilnaz@ydb.tech>2023-10-12 18:24:27 +0300
commit87fffaba46dde32a7c0ee0147251cd2d96542648 (patch)
treecc8ba592321cc2f53572f107508e0e7893eec496
parentb163a3d343f6e5c37b528f2ea6ba5b5e08c433eb (diff)
downloadydb-87fffaba46dde32a7c0ee0147251cd2d96542648.tar.gz
Fix TestProcessingQueue KIKIMR-19621
-rw-r--r--ydb/core/cms/cms_ut.cpp70
-rw-r--r--ydb/core/cms/cms_ut_common.cpp17
-rw-r--r--ydb/core/cms/cms_ut_common.h1
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();