@cryptotaxi247 / netdata-1 / commits / b6a506d83

Preserve label source during migration (#16821)

Stelios Fragkakis committed Jan 22, 2024 at 12:41 UTC b6a506d83753caf7ca232655548f4925c59e4dba
1 file changed +20 -14
database/rrdlabels.c
+20 -14
@@ -1006,8 +1006,9 @@ void rrdlabels_migrate_to_these(RRDLABELS *dst, RRDLABELS *src) {
1006 if(unlikely(!PValue || PValue == PJERR))
1007 fatal("RRDLABELS migrate: corrupted labels array");
1008
1009 - RRDLABEL_SRC flag = RRDLABEL_FLAG_NEW;
1009 + RRDLABEL_SRC flag;
1010 if (!*PValue) {
1011 + flag = (ls & ~(RRDLABEL_FLAG_OLD | RRDLABEL_FLAG_NEW)) | RRDLABEL_FLAG_NEW;
1012 dup_label(label);
1013 size_t mem_after_judyl = JudyLMemUsed(dst->JudyL);
1014 STATS_PLUS_MEMORY(&dictionary_stats_category_rrdlabels, 0, mem_after_judyl - mem_before_judyl, 0);
@@ -1338,7 +1339,7 @@ RRDLABEL *rrdlabels_find_label_with_key(RRDLABELS *labels, const char *key, RRDL
1339 if (lb->index.key == this_key) {
1340 if (source)
1341 *source = ls;
1341 - break;
1342 + break;
1343 }
1344 }
1345 lfe_done(labels);
@@ -1454,7 +1455,7 @@ static int rrdlabels_unittest_expect_value(RRDLABELS *labels, const char *key, c
1455 {
1456 RRDLABEL_SRC source;
1457 RRDLABEL *label = rrdlabels_find_label_with_key(labels, key, &source);
1457 - return (!label || strcmp(string2str(label->index.value), value) != 0 || !(source & required_source));
1458 + return (!label || strcmp(string2str(label->index.value), value) != 0 || (source != required_source));
1459 }
1460
1461 static int rrdlabels_unittest_double_check()
@@ -1465,15 +1466,15 @@ static int rrdlabels_unittest_double_check()
1466 RRDLABELS *labels = rrdlabels_create();
1467
1468 rrdlabels_add(labels, "key1", "value1", RRDLABEL_SRC_CONFIG);
1468 - ret += rrdlabels_unittest_expect_value(labels, "key1", "value1", RRDLABEL_FLAG_NEW);
1469 + ret += rrdlabels_unittest_expect_value(labels, "key1", "value1", RRDLABEL_FLAG_NEW | RRDLABEL_SRC_CONFIG);
1470
1470 - rrdlabels_add(labels, "key1", "value2", RRDLABEL_SRC_K8S);
1471 - ret += !rrdlabels_unittest_expect_value(labels, "key1", "value2", RRDLABEL_FLAG_OLD);
1471 + rrdlabels_add(labels, "key1", "value2", RRDLABEL_SRC_CONFIG);
1472 + ret += !rrdlabels_unittest_expect_value(labels, "key1", "value2", RRDLABEL_FLAG_OLD | RRDLABEL_SRC_CONFIG);
1473
1473 - rrdlabels_add(labels, "key1", "value3", RRDLABEL_SRC_ACLK);
1474 - ret += !rrdlabels_unittest_expect_value(labels, "key1", "value3", RRDLABEL_FLAG_OLD);
1474 + rrdlabels_add(labels, "key2", "value1", RRDLABEL_SRC_ACLK|RRDLABEL_SRC_AUTO);
1475 + ret += !rrdlabels_unittest_expect_value(labels, "key1", "value3", RRDLABEL_FLAG_NEW | RRDLABEL_SRC_ACLK);
1476
1476 - ret += (rrdlabels_entries(labels) != 1);
1477 + ret += (rrdlabels_entries(labels) != 2);
1478
1479 rrdlabels_destroy(labels);
1480
@@ -1533,6 +1534,12 @@ static int rrdlabels_unittest_migrate_check()
1534 fprintf(stderr, "Labels2 entries found %zu (should be 3)\n", rrdlabels_entries(labels2));
1535
1536 rrdlabels_migrate_to_these(labels1, labels2);
1537 +
1538 + int rc = 0;
1539 + rc = rrdlabels_unittest_expect_value(labels1, "key1", "value2", RRDLABEL_FLAG_OLD | RRDLABEL_SRC_CONFIG);
1540 + if (rc)
1541 + return rc;
1542 +
1543 fprintf(stderr, "labels1 (migrated) entries found %zu (should be 3)\n", rrdlabels_entries(labels1));
1544 size_t entries = rrdlabels_entries(labels1);
1545
@@ -1556,19 +1563,18 @@ static int rrdlabels_unittest_migrate_check()
1563 rrdlabels_add(labels2, "key1", "value1", RRDLABEL_SRC_CONFIG);
1564 rrdlabels_add(labels2, "key2", "value2", RRDLABEL_SRC_CONFIG);
1565
1559 - int rc = 0;
1560 - rc = rrdlabels_unittest_expect_value(labels1, "key1", "value1", RRDLABEL_FLAG_NEW);
1566 + rc = rrdlabels_unittest_expect_value(labels1, "key1", "value1", RRDLABEL_FLAG_NEW | RRDLABEL_SRC_CONFIG);
1567 if (rc)
1568 return rc;
1569
1570 rrdlabels_walkthrough_index_read(labels2, unittest_dump_labels, "\nlabels2");
1571
1572 rrdlabels_copy(labels1, labels2); // labels1 should have 5 keys
1567 - rc = rrdlabels_unittest_expect_value(labels1, "key1", "value1", RRDLABEL_FLAG_OLD);
1573 + rc = rrdlabels_unittest_expect_value(labels1, "key1", "value1", RRDLABEL_FLAG_OLD | RRDLABEL_SRC_CONFIG);
1574 if (rc)
1575 return rc;
1576
1571 - rc = rrdlabels_unittest_expect_value(labels1, "key0", "value0", RRDLABEL_FLAG_NEW);
1577 + rc = rrdlabels_unittest_expect_value(labels1, "key0", "value0", RRDLABEL_FLAG_NEW | RRDLABEL_SRC_CONFIG);
1578 if (rc)
1579 return rc;
1580
@@ -1580,7 +1586,7 @@ static int rrdlabels_unittest_migrate_check()
1586 return 1;
1587
1588 rrdlabels_add(labels1, "key0", "value0", RRDLABEL_SRC_CONFIG);
1583 - rc = rrdlabels_unittest_expect_value(labels1, "key0", "value0", RRDLABEL_FLAG_OLD);
1589 + rc = rrdlabels_unittest_expect_value(labels1, "key0", "value0", RRDLABEL_FLAG_OLD | RRDLABEL_SRC_CONFIG);
1590
1591 rrdlabels_destroy(labels1);
1592 rrdlabels_destroy(labels2);