diff options
author | alexnick <alexnick@yandex-team.ru> | 2022-04-26 17:15:25 +0300 |
---|---|---|
committer | alexnick <alexnick@yandex-team.ru> | 2022-04-26 17:15:25 +0300 |
commit | 109c9cfeeea4de50d115c57e3c3558ee4720a70d (patch) | |
tree | 10684167f739431d810ded5059e1f149aa16199d | |
parent | 28c687b211b341db3f656a7244dbd70e591dd979 (diff) | |
download | ydb-109c9cfeeea4de50d115c57e3c3558ee4720a70d.tar.gz |
fix for not fully created topic or double topics in request KIKIMR-14801
ref:d321f97d494f6a2aaedc3866ba787deab45a0a22
-rw-r--r-- | ydb/core/client/server/msgbus_server_persqueue.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/ydb/core/client/server/msgbus_server_persqueue.cpp b/ydb/core/client/server/msgbus_server_persqueue.cpp index 9c3c9e4e80a..65ebb6715af 100644 --- a/ydb/core/client/server/msgbus_server_persqueue.cpp +++ b/ydb/core/client/server/msgbus_server_persqueue.cpp @@ -323,10 +323,7 @@ bool TPersQueueBaseRequestProcessor::CreateChildren(const TActorContext& ctx) { entry.PQGroupInfo->Description.GetPQTabletConfig() ); auto name = converter->GetClientsideName(); - if (name.empty()) { - name = entry.Path.back(); - } - if (!TopicsToRequest.empty() && !IsIn(TopicsToRequest, name)) { + if (name.empty() || !TopicsToRequest.empty() && !IsIn(TopicsToRequest, name)) { continue; } ChildrenToCreate.emplace_back(new TPerTopicInfo(entry, converter)); @@ -357,6 +354,17 @@ bool TPersQueueBaseRequestProcessor::CreateChildrenIfNeeded(const TActorContext& THolder<TPerTopicInfo> perTopicInfo(ChildrenToCreate.front().Release()); ChildrenToCreate.pop_front(); const auto& name = perTopicInfo->Converter->GetClientsideName(); + if (name.empty()) { + continue; + } + + if (topics.find(name) != topics.end()) { + LOG_ERROR_S(ctx, NKikimrServices::PERSQUEUE, "already present topic '" << name << "'"); + SendErrorReplyAndDie(ctx, MSTATUS_ERROR, NPersQueue::NErrorCode::UNKNOWN_TOPIC, + TStringBuilder() << "already present topic '" << name << "' Marker# PQ95"); + return true; + } + THolder<IActor> childActor = CreateTopicSubactor(perTopicInfo->TopicEntry, name); if (childActor.Get() != nullptr) { const TActorId actorId = ctx.Register(childActor.Release()); |