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);