Skip to content

Commit dc95380

Browse files
authored
Support hot/warm/cold stages TTL query in the status API. (#13156)
1 parent 33c0e8e commit dc95380

File tree

6 files changed

+99
-13
lines changed

6 files changed

+99
-13
lines changed

docs/en/changes/changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
* BanyanDB: Support `hot/warm/cold` stages configuration.
88
* Fix query continues profiling policies error when the policy is already in the cache.
9+
* Support `hot/warm/cold` stages TTL query in the status API.
910

1011
#### UI
1112

docs/en/status/query_ttl_setup.md

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
Time To Live (TTL) mechanism has different behaviors according to different storage implementations. By default, the
44
core module provides two TTL configurations: [`recordDataTTL` and `metricsDataTTL`](../setup/backend/ttl.md).
55
But some storage implementations could override these settings and provide its own TTL configurations, for example,
6-
BanyanDB provides its native TTL mechanism to support [progressive TTL](../banyandb/ttl.md) feature.
6+
BanyanDB provides its native TTL mechanism to support [progressive TTL](../banyandb/ttl.md) feature and [Data Lifecycle Stages(Hot/Warm/Cold)](../banyandb/stages.md) feature.
7+
78

89
This API is used to get the unified and effective TTL configurations.
910
- URL, `http://{core restHost}:{core restPort}/status/config/ttl`
@@ -15,17 +16,30 @@ This API is used to get the unified and effective TTL configurations.
1516
# e.g.
1617
# 1. The metadata of the service, instance, endpoint, topology map, etc.
1718
# 2. Generated metrics data from OAL and MAL engines.
19+
# 3. Banyandb storage provides Data Lifecycle Stages(Hot/Warm/Cold).
1820
#
1921
# TTLs for each granularity metrics are listed separately.
22+
#
23+
# Cover hot and warm data for BanyanDB.
2024
metrics.minute=7
21-
metrics.hour=7
22-
metrics.day=7
25+
metrics.hour=15
26+
metrics.day=15
27+
# Cold data, '-1' represents no cold stage data.
28+
metrics.minute.cold=-1
29+
metrics.hour.cold=-1
30+
metrics.day.cold=-1
2331

2432
# Records TTL includes the definition of the TTL of the records data in the storage,
2533
# Records include traces, logs, sampled slow SQL statements, HTTP requests(by Rover), alarms, etc.
2634
# Super dataset of records are traces and logs, which volume should be much larger.
35+
#
36+
# Cover hot and warm data for BanyanDB.
2737
records.default=3
2838
records.superDataset=3
39+
# Cold data, '-1' represents no cold stage data.
40+
records.default.cold=-1
41+
records.superDataset.cold=-1
42+
2943
```
3044

3145
This API also provides the response in JSON format, which is more friendly for programmatic usage.
@@ -37,12 +51,17 @@ This API also provides the response in JSON format, which is more friendly for p
3751
{
3852
"metrics": {
3953
"minute": 7,
40-
"hour": 7,
41-
"day": 7
54+
"hour": 15,
55+
"day": 15,
56+
"coldMinute": -1,
57+
"coldHour": -1,
58+
"coldDay": -1
4259
},
4360
"records": {
4461
"default": 3,
45-
"superDataset": 3
62+
"superDataset": 3,
63+
"coldValue": -1,
64+
"coldSuperDataset": -1
4665
}
4766
}
48-
```
67+
```

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/MetricsTTL.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,8 @@ public class MetricsTTL {
3333
private final int minute;
3434
private final int hour;
3535
private final int day;
36+
// -1 means no cold stage.
37+
private int coldMinute = -1;
38+
private int coldHour = -1;
39+
private int coldDay = -1;
3640
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/RecordsTTL.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,7 @@ public class RecordsTTL {
3131
@SerializedName("default")
3232
private final int value;
3333
private final int superDataset;
34+
// -1 means no cold stage.
35+
private int coldValue = -1;
36+
private int coldSuperDataset = -1;
3437
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/ttl/TTLDefinition.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,29 @@ public String generateTTLDefinition() {
3636
ttlDefinition.append("# e.g.\n");
3737
ttlDefinition.append("# 1. The metadata of the service, instance, endpoint, topology map, etc.\n");
3838
ttlDefinition.append("# 2. Generated metrics data from OAL and MAL engines.\n");
39+
ttlDefinition.append("# 3. Banyandb storage provides Data Lifecycle Stages(Hot/Warm/Cold).\n");
3940
ttlDefinition.append("#\n");
4041
ttlDefinition.append("# TTLs for each granularity metrics are listed separately.\n");
42+
ttlDefinition.append("#\n");
43+
ttlDefinition.append("# Cover hot and warm data for BanyanDB.\n");
4144
ttlDefinition.append("metrics.minute=").append(metrics.getMinute()).append("\n");
4245
ttlDefinition.append("metrics.hour=").append(metrics.getHour()).append("\n");
4346
ttlDefinition.append("metrics.day=").append(metrics.getDay()).append("\n");
47+
ttlDefinition.append("# Cold data, '-1' represents no cold stage data.\n");
48+
ttlDefinition.append("metrics.minute.cold=").append(metrics.getColdMinute()).append("\n");
49+
ttlDefinition.append("metrics.hour.cold=").append(metrics.getColdHour()).append("\n");
50+
ttlDefinition.append("metrics.day.cold=").append(metrics.getColdDay()).append("\n");
4451
ttlDefinition.append("\n");
4552
ttlDefinition.append("# Records TTL includes the definition of the TTL of the records data in the storage,\n");
4653
ttlDefinition.append("# Records include traces, logs, sampled slow SQL statements, HTTP requests(by Rover), alarms, etc.\n");
4754
ttlDefinition.append("# Super dataset of records are traces and logs, which volume should be much larger.\n");
55+
ttlDefinition.append("#\n");
56+
ttlDefinition.append("# Cover hot and warm data for BanyanDB.\n");
4857
ttlDefinition.append("records.default=").append(records.getValue()).append("\n");
4958
ttlDefinition.append("records.superDataset=").append(records.getSuperDataset()).append("\n");
59+
ttlDefinition.append("# Cold data, '-1' represents no cold stage data.\n");
60+
ttlDefinition.append("records.default.cold=").append(records.getColdValue()).append("\n");
61+
ttlDefinition.append("records.superDataset.cold=").append(records.getColdSuperDataset()).append("\n");
5062
return ttlDefinition.toString();
5163
}
5264

oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBTTLStatusQuery.java

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,72 @@
2424
import org.apache.skywalking.oap.server.core.storage.ttl.TTLDefinition;
2525

2626
public class BanyanDBTTLStatusQuery implements StorageTTLStatusQuery {
27-
private final int grNormalTTLDays;
28-
private final int grSuperTTLDays;
29-
private final int gmMinuteTTLDays;
30-
private final int gmHourTTLDays;
31-
private final int gmDayTTLDays;
27+
private int grNormalTTLDays;
28+
private int grSuperTTLDays;
29+
// -1 means no cold stage.
30+
private int grColdNormalTTLDays = -1;
31+
private int grColdSuperTTLDays = -1;
32+
private int gmMinuteTTLDays;
33+
private int gmHourTTLDays;
34+
private int gmDayTTLDays;
35+
private int gmColdMinuteTTLDays = -1;
36+
private int gmColdHourTTLDays = -1;
37+
private int gmColdDayTTLDays = -1;
3238

3339
public BanyanDBTTLStatusQuery(BanyanDBStorageConfig config) {
3440
grNormalTTLDays = config.getRecordsNormal().getTtl();
3541
grSuperTTLDays = config.getRecordsSuper().getTtl();
3642
gmMinuteTTLDays = config.getMetricsMin().getTtl();
3743
gmHourTTLDays = config.getMetricsHour().getTtl();
3844
gmDayTTLDays = config.getMetricsDay().getTtl();
45+
config.getRecordsNormal().getAdditionalLifecycleStages().forEach(stage -> {
46+
if (stage.getName().equals(BanyanDBStorageConfig.StageName.warm)) {
47+
grNormalTTLDays = grNormalTTLDays + stage.getTtl();
48+
} else if (stage.getName().equals(BanyanDBStorageConfig.StageName.cold)) {
49+
grColdNormalTTLDays = stage.getTtl();
50+
}
51+
});
52+
config.getRecordsSuper().getAdditionalLifecycleStages().forEach(stage -> {
53+
if (stage.getName().equals(BanyanDBStorageConfig.StageName.warm)) {
54+
grSuperTTLDays = grSuperTTLDays + stage.getTtl();
55+
} else if (stage.getName().equals(BanyanDBStorageConfig.StageName.cold)) {
56+
grColdSuperTTLDays = stage.getTtl();
57+
}
58+
});
59+
config.getMetricsMin().getAdditionalLifecycleStages().forEach(stage -> {
60+
if (stage.getName().equals(BanyanDBStorageConfig.StageName.warm)) {
61+
gmMinuteTTLDays = gmMinuteTTLDays + stage.getTtl();
62+
} else if (stage.getName().equals(BanyanDBStorageConfig.StageName.cold)) {
63+
gmColdMinuteTTLDays = stage.getTtl();
64+
}
65+
});
66+
config.getMetricsHour().getAdditionalLifecycleStages().forEach(stage -> {
67+
if (stage.getName().equals(BanyanDBStorageConfig.StageName.warm)) {
68+
gmHourTTLDays = gmHourTTLDays + stage.getTtl();
69+
} else if (stage.getName().equals(BanyanDBStorageConfig.StageName.cold)) {
70+
gmColdHourTTLDays = stage.getTtl();
71+
}
72+
});
73+
config.getMetricsDay().getAdditionalLifecycleStages().forEach(stage -> {
74+
if (stage.getName().equals(BanyanDBStorageConfig.StageName.warm)) {
75+
gmDayTTLDays = gmDayTTLDays + stage.getTtl();
76+
} else if (stage.getName().equals(BanyanDBStorageConfig.StageName.cold)) {
77+
gmColdDayTTLDays = stage.getTtl();
78+
}
79+
});
3980
}
4081

4182
@Override
4283
public TTLDefinition getTTL() {
43-
return new TTLDefinition(
84+
TTLDefinition definition = new TTLDefinition(
4485
new MetricsTTL(gmMinuteTTLDays, gmHourTTLDays, gmDayTTLDays),
4586
new RecordsTTL(grNormalTTLDays, grSuperTTLDays)
4687
);
88+
definition.getRecords().setColdValue(grColdNormalTTLDays);
89+
definition.getRecords().setColdSuperDataset(grColdSuperTTLDays);
90+
definition.getMetrics().setColdMinute(gmColdMinuteTTLDays);
91+
definition.getMetrics().setColdHour(gmColdHourTTLDays);
92+
definition.getMetrics().setColdDay(gmColdDayTTLDays);
93+
return definition;
4794
}
4895
}

0 commit comments

Comments
 (0)