Skip to content

Commit 36cbb3f

Browse files
authored
fix segfault (#1799)
1 parent d4d07df commit 36cbb3f

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

ydb/core/graph/shard/backends.cpp

+11-4
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ bool TLocalBackend::StoreMetrics(NTabletFlatExecutor::TTransactionContext& txc,
245245
if (itId == MetricsIndex.end()) {
246246
itId = MetricsIndex.emplace(name, MetricsIndex.size()).first;
247247
db.Table<Schema::MetricsIndex>().Key(name).Update<Schema::MetricsIndex::Id>(itId->second);
248+
BLOG_TRACE("Metric " << name << " has id " << itId->second);
248249
}
249250
ui64 id = itId->second;
250251
db.Table<Schema::MetricsValues>().Key(data.Timestamp.Seconds(), id).Update<Schema::MetricsValues::Value>(value);
@@ -367,8 +368,11 @@ bool TLocalBackend::DownsampleData(NTabletFlatExecutor::TTransactionContext& txc
367368
}
368369
if (!values.Timestamps.empty()) {
369370
BLOG_TRACE("Result time is " << values.Timestamps.front().Seconds());
370-
for (ui64 id = 0; id < values.Values.size(); ++id) {
371-
db.Table<Schema::MetricsValues>().Key(values.Timestamps.front().Seconds(), id).Update<Schema::MetricsValues::Value>(values.Values.front()[id]);
371+
for (ui64 id : ids) {
372+
if (!values.Values[id].empty()) {
373+
BLOG_TRACE("Updating values with id " << id);
374+
db.Table<Schema::MetricsValues>().Key(values.Timestamps.front().Seconds(), id).Update<Schema::MetricsValues::Value>(values.Values[id].front());
375+
}
372376
}
373377
}
374378
ids.clear();
@@ -400,8 +404,11 @@ bool TLocalBackend::DownsampleData(NTabletFlatExecutor::TTransactionContext& txc
400404
}
401405
if (!values.Timestamps.empty()) {
402406
BLOG_TRACE("Result time is " << values.Timestamps.front().Seconds());
403-
for (ui64 id = 0; id < values.Values.size(); ++id) {
404-
db.Table<Schema::MetricsValues>().Key(values.Timestamps.front().Seconds(), id).Update<Schema::MetricsValues::Value>(values.Values.front()[id]);
407+
for (ui64 id : ids) {
408+
if (!values.Values[id].empty()) {
409+
BLOG_TRACE("Updating values with id " << id);
410+
db.Table<Schema::MetricsValues>().Key(values.Timestamps.front().Seconds(), id).Update<Schema::MetricsValues::Value>(values.Values[id].front());
411+
}
405412
}
406413
}
407414

ydb/core/graph/ut/graph_ut.cpp

+23-5
Original file line numberDiff line numberDiff line change
@@ -341,13 +341,31 @@ Y_UNIT_TEST_SUITE(Graph) {
341341
// this call is needed to wait for establishing of pipe connection
342342
{
343343
NGraph::TEvGraph::TEvGetMetrics* event = new NGraph::TEvGraph::TEvGetMetrics();
344-
event->Record.AddMetrics("test.metric1");
344+
event->Record.AddMetrics("test.metric9");
345345
runtime.Send(NGraph::MakeGraphServiceId(), sender, event);
346346
TAutoPtr<IEventHandle> handle;
347347
NGraph::TEvGraph::TEvMetricsResult* response = runtime.GrabEdgeEventRethrow<NGraph::TEvGraph::TEvMetricsResult>(handle);
348348
Ctest << "Received result: " << response->Record.ShortDebugString() << Endl;
349349
}
350350

351+
Ctest << "Send old metrics..." << Endl;
352+
353+
{
354+
NGraph::TEvGraph::TEvSendMetrics* event = new NGraph::TEvGraph::TEvSendMetrics();
355+
{
356+
NKikimrGraph::TMetric* metric = event->Record.AddMetrics();
357+
metric->SetName("test.metric0");
358+
metric->SetValue(13);
359+
}
360+
{
361+
NKikimrGraph::TMetric* metric = event->Record.AddMetrics();
362+
metric->SetName("test.metric1");
363+
metric->SetValue(14);
364+
}
365+
event->Record.SetTime(0);
366+
runtime.Send(NGraph::MakeGraphServiceId(), sender, event);
367+
}
368+
351369
runtime.SimulateSleep(TDuration::Seconds(1));
352370

353371
Ctest << "Filling..." << Endl;
@@ -356,7 +374,7 @@ Y_UNIT_TEST_SUITE(Graph) {
356374
{
357375
NGraph::TEvGraph::TEvSendMetrics* event = new NGraph::TEvGraph::TEvSendMetrics();
358376
NKikimrGraph::TMetric* metric = event->Record.AddMetrics();
359-
metric->SetName("test.metric1");
377+
metric->SetName("test.metric9");
360378
metric->SetValue(seconds);
361379
event->Record.SetTime(60 * minutes + seconds);
362380
runtime.Send(NGraph::MakeGraphServiceId(), sender, event);
@@ -367,7 +385,7 @@ Y_UNIT_TEST_SUITE(Graph) {
367385
Ctest << "Checking..." << Endl;
368386
{
369387
NGraph::TEvGraph::TEvGetMetrics* event = new NGraph::TEvGraph::TEvGetMetrics();
370-
event->Record.AddMetrics("test.metric1");
388+
event->Record.AddMetrics("test.metric9");
371389
runtime.Send(NGraph::MakeGraphServiceId(), sender, event);
372390
TAutoPtr<IEventHandle> handle;
373391
NGraph::TEvGraph::TEvMetricsResult* response = runtime.GrabEdgeEventRethrow<NGraph::TEvGraph::TEvMetricsResult>(handle);
@@ -380,7 +398,7 @@ Y_UNIT_TEST_SUITE(Graph) {
380398
{
381399
NGraph::TEvGraph::TEvSendMetrics* event = new NGraph::TEvGraph::TEvSendMetrics();
382400
NKikimrGraph::TMetric* metric = event->Record.AddMetrics();
383-
metric->SetName("test.metric1");
401+
metric->SetName("test.metric9");
384402
metric->SetValue(seconds);
385403
runtime.Send(NGraph::MakeGraphServiceId(), sender, event);
386404
}
@@ -390,7 +408,7 @@ Y_UNIT_TEST_SUITE(Graph) {
390408
Ctest << "Checking..." << Endl;
391409
{
392410
NGraph::TEvGraph::TEvGetMetrics* event = new NGraph::TEvGraph::TEvGetMetrics();
393-
event->Record.AddMetrics("test.metric1");
411+
event->Record.AddMetrics("test.metric9");
394412
runtime.Send(NGraph::MakeGraphServiceId(), sender, event);
395413
TAutoPtr<IEventHandle> handle;
396414
NGraph::TEvGraph::TEvMetricsResult* response = runtime.GrabEdgeEventRethrow<NGraph::TEvGraph::TEvMetricsResult>(handle);

0 commit comments

Comments
 (0)