Skip to content

Commit 23c4e34

Browse files
qyryqblinkov
authored andcommitted
If optional is empty, get proper JSON value (#15168)
1 parent d00f878 commit 23c4e34

File tree

3 files changed

+37
-22
lines changed

3 files changed

+37
-22
lines changed

ydb/core/ymq/actor/index_events_processor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ void TSearchEventsProcessor::OnQueuesListQueryComplete(NKqp::TEvKqp::TEvQueryRes
155155
auto customName = *parser.ColumnParser(2).GetOptionalUtf8();
156156
auto createTs = *parser.ColumnParser(3).GetOptionalUint64();
157157
auto folderId = *parser.ColumnParser(4).GetOptionalUtf8();
158-
auto tags = *parser.ColumnParser(5).GetOptionalUtf8();
158+
auto tags = parser.ColumnParser(5).GetOptionalUtf8().value_or("{}");
159159
auto insResult = ExistingQueues.insert(std::make_pair(
160160
queueName, TQueueEvent{EQueueEventType::Existed, createTs, customName, cloudId, folderId, tags}
161161
));
@@ -197,7 +197,7 @@ void TSearchEventsProcessor::OnEventsListingDone(NKqp::TEvKqp::TEvQueryResponse:
197197
auto customName = *parser.ColumnParser(3).GetOptionalUtf8();
198198
auto timestamp = *parser.ColumnParser(4).GetOptionalUint64();
199199
auto folderId = *parser.ColumnParser(5).GetOptionalUtf8();
200-
auto labels = *parser.ColumnParser(6).GetOptionalUtf8();
200+
auto labels = parser.ColumnParser(6).GetOptionalUtf8().value_or("{}");
201201
auto& qEvents = QueuesEvents[queueName];
202202
auto insResult = qEvents.insert(std::make_pair(
203203
timestamp, TQueueEvent{EQueueEventType(evType), timestamp, customName, cloudId, folderId, labels}

ydb/core/ymq/actor/yc_search_ut/index_events_processor_ut.cpp

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class TIndexProcesorTests : public TTestBase {
130130
UNIT_ASSERT(statusVal.IsSuccess());
131131
}
132132
void AddEvent(
133-
const TString& account, const TString& queueName, const EEvType& type, TInstant ts = TInstant::Zero(), TString labels = "{}")
133+
const TString& account, const TString& queueName, const EEvType& type, TInstant ts = TInstant::Zero(), TMaybe<TString> labels = "{}")
134134
{
135135
if (ts == TInstant::Zero())
136136
ts = CurrTs;
@@ -143,12 +143,12 @@ class TIndexProcesorTests : public TTestBase {
143143
<< "\"myQueueCustomName\", "
144144
<< ts.MilliSeconds() << ", "
145145
<< "\"myFolder\", "
146-
<< "\"" << labels << "\""
146+
<< (labels.Defined() ? "\"" + labels.GetRef() + "\"" : "NULL")
147147
<< ");";
148148
ExecDataQuery(queryBuilder.c_str());
149149
}
150150

151-
void AddQueue(const TString& account, const TString& queueName, TInstant ts = TInstant::Zero(), TString tags = "{}") {
151+
void AddQueue(const TString& account, const TString& queueName, TInstant ts = TInstant::Zero(), TMaybe<TString> tags = "{}") {
152152
if (ts == TInstant::Zero())
153153
ts = CurrTs;
154154
TStringBuilder queryBuilder;
@@ -159,12 +159,12 @@ class TIndexProcesorTests : public TTestBase {
159159
<< "\"myQueueCustomName\", "
160160
<< ts.MilliSeconds() << ", "
161161
<< "\"myFolder\", "
162-
<< "\"" << tags << "\""
162+
<< (tags.Defined() ? "\"" + tags.GetRef() + "\"" : "NULL")
163163
<< ");";
164164
ExecDataQuery(queryBuilder.c_str());
165165
}
166166

167-
void AddQueuesBatch(const TString& account, const TString& queueNameBase, ui64 count, ui64 startIndex = 0, TString tags = "{}") {
167+
void AddQueuesBatch(const TString& account, const TString& queueNameBase, ui64 count, ui64 startIndex = 0, TMaybe<TString> tags = "{}") {
168168
Cerr << "===Started add queue batch\n";
169169
TDeque<NYdb::NTable::TAsyncDataQueryResult> results;
170170
ui64 maxInflight = 1;
@@ -181,7 +181,7 @@ class TIndexProcesorTests : public TTestBase {
181181
<< "\"myQueueCustomName\", "
182182
<< CurrTs.MilliSeconds() << ", "
183183
<< "\"myFolder\", "
184-
<< "\"" << tags << "\""
184+
<< (tags.Defined() ? "\"" + tags.GetRef() + "\"" : "NULL")
185185
<< ");";
186186

187187
auto preparedResult = session.PrepareDataQuery(queryBuilder.c_str()).GetValueSync();
@@ -323,41 +323,56 @@ class TIndexProcesorTests : public TTestBase {
323323
TTestRunner("CreateIndexProcessor", this);
324324
}
325325

326-
void TestSingleCreateQueueEvent() {
326+
void CheckSingleCreateQueueEvent(bool nullLabels) {
327327
TTestRunner runner{"SingleCreateQueueEvent", this};
328328
const TString labels = "{\"k1\": \"v1\"}";
329329
const TString escapedLabels = EscapeC(labels);
330-
runner.AddEvent( "cloud1", "queue1", EEvType::Created, {}, escapedLabels);
330+
runner.AddEvent("cloud1", "queue1", EEvType::Created, {}, nullLabels ? Nothing() : TMaybe<TString>(escapedLabels));
331331
runner.DispatchEvents();
332332
auto messages = runner.EventsWriter->GetMessages();
333333
UNIT_ASSERT_VALUES_EQUAL(messages.size(), 2); // Events, reindex
334-
CheckEventsLine(messages[0], EEvType::Created, {}, labels);
335-
CheckEventsLine(messages[1], EEvType::Existed, {}, labels);
334+
CheckEventsLine(messages[0], EEvType::Created, {}, nullLabels ? "{}" : labels);
335+
CheckEventsLine(messages[1], EEvType::Existed, {}, nullLabels ? "{}" : labels);
336336
UNIT_ASSERT_VALUES_EQUAL(runner.CountEvents(), 0);
337337
}
338338

339-
void TestReindexSingleQueue() {
339+
void TestSingleCreateQueueEvent() {
340+
CheckSingleCreateQueueEvent(false);
341+
CheckSingleCreateQueueEvent(true);
342+
}
343+
344+
void CheckReindexSingleQueue(bool nullLabels) {
340345
TTestRunner runner{"ReindexSingleQueue", this};
341346
const TString labels = "{\"k1\": \"v1\"}";
342347
const TString escapedLabels = EscapeC(labels);
343-
runner.AddQueue("cloud1", "queue1", {}, escapedLabels);
348+
runner.AddQueue("cloud1", "queue1", {}, nullLabels ? Nothing() : TMaybe<TString>(escapedLabels));
344349
runner.DispatchEvents();
345350
auto messages = runner.EventsWriter->GetMessages();
346351
UNIT_ASSERT_VALUES_EQUAL(messages.size(), 1);
347-
CheckEventsLine(messages[0], EEvType::Existed, {}, labels);
352+
CheckEventsLine(messages[0], EEvType::Existed, {}, nullLabels ? "{}" : labels);
348353
}
349354

350-
void TestDeletedQueueNotReindexed() {
355+
void TestReindexSingleQueue() {
356+
CheckReindexSingleQueue(false);
357+
CheckReindexSingleQueue(true);
358+
}
359+
360+
void CheckDeletedQueueNotReindexed(bool nullLabels) {
351361
TTestRunner runner{"DeletedQueueNotReindexed", this};
352362
const TString labels = "{\"k1\": \"v1\"}";
353363
const TString escapedLabels = EscapeC(labels);
354-
runner.AddQueue("cloud1", "queue2", runner.PrevTs, escapedLabels);
355-
runner.AddEvent("cloud1", "queue2", EEvType::Deleted, {}, escapedLabels);
364+
runner.AddQueue("cloud1", "queue2", runner.PrevTs, nullLabels ? Nothing() : TMaybe<TString>(escapedLabels));
365+
runner.AddEvent("cloud1", "queue2", EEvType::Deleted, {}, nullLabels ? Nothing() : TMaybe<TString>(escapedLabels));
356366
Sleep(TDuration::Seconds(1));
357367
runner.DispatchEvents();
358368
auto messages = runner.EventsWriter->GetMessages();
359369
UNIT_ASSERT_VALUES_EQUAL(messages.size(), 1);
360-
CheckEventsLine(messages[0], EEvType::Deleted, {}, labels);
370+
CheckEventsLine(messages[0], EEvType::Deleted, {}, nullLabels ? "{}" : labels);
371+
}
372+
373+
void TestDeletedQueueNotReindexed() {
374+
CheckDeletedQueueNotReindexed(false);
375+
CheckDeletedQueueNotReindexed(true);
361376
}
362377

363378
void TestManyMessages() {

ydb/core/ymq/queues/common/queries.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ extern const char* const MatchQueueAttributesQuery = R"__(
9696
(And
9797
(And
9898
(And (Equal (Member queuesRead 'Shards) shards)
99-
(Equal (Member queuesRead 'Tags) tags))
99+
(Equal (Coalesce (Member queuesRead 'Tags) (Utf8String '"{}")) tags))
100100
(Equal (Member queuesRead 'Partitions) partitions))
101101
(Equal (Member queuesRead 'FifoQueue) fifo))
102102
(Equal (Coalesce (Member queuesRead 'DlqName) (Utf8String '"")) dlqName))
103-
(Bool 'true)))
103+
(Bool 'false)))
104104
105105
(let attrRow '(
106106
)__" ATTRS_KEYS_PARAM R"__(
@@ -122,7 +122,7 @@ extern const char* const MatchQueueAttributesQuery = R"__(
122122
(Equal (Member attrRead 'MessageRetentionPeriod) retention)))
123123
(Equal (Member attrRead 'VisibilityTimeout) visibility))
124124
(Equal (Coalesce (Member attrRead 'MaxReceiveCount) (Uint64 '0)) maxReceiveCount))
125-
(Bool 'true)))
125+
(Bool 'false)))
126126
127127
(let sameVersion
128128
(Equal currentVersion expectedVersion))

0 commit comments

Comments
 (0)