aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralexnick <alexnick@yandex-team.ru>2022-04-26 17:15:25 +0300
committeralexnick <alexnick@yandex-team.ru>2022-04-26 17:15:25 +0300
commit109c9cfeeea4de50d115c57e3c3558ee4720a70d (patch)
tree10684167f739431d810ded5059e1f149aa16199d
parent28c687b211b341db3f656a7244dbd70e591dd979 (diff)
downloadydb-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.cpp16
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());