Skip to content

Commit 492b6f1

Browse files
authored
BanyanDB: support new Index rule type SKIPPING/TREE, and update the record log's trace_id indexType to SKIPPING (#13366)
1 parent 5d80ac2 commit 492b6f1

File tree

8 files changed

+52
-14
lines changed

8 files changed

+52
-14
lines changed

docs/en/changes/changes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
* OAP gRPC-Client support `Health Check`.
4040
* [Break Change] `health_check_xx` metrics make response 1 represents healthy, 0 represents unhealthy.
4141
* Bump up grpc to 1.70.0.
42+
* BanyanDB: support new Index rule type `SKIPPING/TREE`, and update the record `log`'s `trace_id` indexType to `SKIPPING`
43+
* BanyanDB: remove `index-only` from tag setting.
4244

4345
#### UI
4446

oap-server-bom/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<httpcore.version>4.4.16</httpcore.version>
7373
<httpasyncclient.version>4.1.5</httpasyncclient.version>
7474
<commons-compress.version>1.21</commons-compress.version>
75-
<banyandb-java-client.version>0.9.0-rc2</banyandb-java-client.version>
75+
<banyandb-java-client.version>0.9.0-rc3</banyandb-java-client.version>
7676
<kafka-clients.version>3.4.0</kafka-clients.version>
7777
<spring-kafka-test.version>2.4.6.RELEASE</spring-kafka-test.version>
7878
<consul.client.version>1.5.3</consul.client.version>

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/log/AbstractLogRecord.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public abstract class AbstractLogRecord extends Record {
6868
@Setter
6969
@Getter
7070
@Column(name = TRACE_ID, length = 150)
71+
@BanyanDB.IndexRule(indexType = BanyanDB.IndexRule.IndexType.SKIPPING)
7172
private String traceId;
7273
@Setter
7374
@Getter

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.lang.annotation.Target;
2525

2626
import lombok.Getter;
27+
import org.apache.skywalking.oap.server.core.analysis.manual.log.LogRecord;
2728
import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
2829
import org.apache.skywalking.oap.server.core.analysis.record.Record;
2930
import org.apache.skywalking.oap.server.core.storage.StorageID;
@@ -132,6 +133,16 @@ enum IndexType {
132133
* It's suitable for most tag indexing due to a better memory usage ratio and query performance.
133134
*/
134135
INVERTED,
136+
/**
137+
* The `SKIPPING` index is optimized for the majority of stream tags, which prioritizes efficient space utilization.
138+
* Such as the `trace_id` in the {@link LogRecord}.
139+
*/
140+
SKIPPING,
141+
/**
142+
* The `TREE` index is designed for storing hierarchical data.
143+
* Such as Trace Span.
144+
*/
145+
TREE
135146
}
136147
}
137148

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/BanyanDBExtension.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,8 @@ public class BanyanDBExtension {
5454
* indexType is the type of index built for a {@link ModelColumn} in BanyanDB.
5555
*
5656
* @since 9.3.0
57-
* @deprecated since 10.2. Only support {@link BanyanDB.IndexRule.IndexType#INVERTED} now. There was IndexType#TREE,
58-
* but removed.
5957
*/
58+
@Getter
6059
private final BanyanDB.IndexRule.IndexType indexType;
6160

6261
/**

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

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@
8181
import java.util.function.Function;
8282
import java.util.stream.Collectors;
8383

84+
import static org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.IndexRule.Type.TYPE_INVERTED;
85+
import static org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.IndexRule.Type.TYPE_SKIPPING;
86+
import static org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.IndexRule.Type.TYPE_TREE;
87+
8488
@Slf4j
8589
public enum MetadataRegistry {
8690
INSTANCE;
@@ -160,7 +164,7 @@ public MeasureModel registerMeasureModel(Model model, BanyanDBStorageConfig conf
160164
.collect(Collectors.toList());
161165

162166
if (model.getBanyanDBModelExtension().isStoreIDTag()) {
163-
indexRules.add(indexRule(schemaMetadata.group, BanyanDBConverter.ID, false, null));
167+
indexRules.add(indexRule(schemaMetadata.group, BanyanDBConverter.ID, false, null, null));
164168
}
165169

166170
final Measure.Builder builder = Measure.newBuilder();
@@ -368,12 +372,35 @@ Duration downSamplingDuration(DownSampling downSampling) {
368372
}
369373
}
370374

371-
IndexRule indexRule(String group, String tagName, boolean enableSort, BanyanDB.MatchQuery.AnalyzerType analyzer) {
375+
IndexRule indexRule(String group,
376+
String tagName,
377+
boolean enableSort,
378+
BanyanDB.MatchQuery.AnalyzerType analyzer,
379+
BanyanDB.IndexRule.IndexType type) {
372380
IndexRule.Builder builder = IndexRule.newBuilder()
373381
.setMetadata(Metadata.newBuilder().setName(tagName).setGroup(group))
374-
.setType(IndexRule.Type.TYPE_INVERTED).addTags(tagName);
382+
.addTags(tagName);
375383
// *Notice*: here is a reverse logic, if enableSort is true, then setNoSort is false
376384
builder.setNoSort(!enableSort);
385+
386+
if (type != null) {
387+
switch (type) {
388+
case INVERTED:
389+
builder.setType(TYPE_INVERTED);
390+
break;
391+
case TREE:
392+
builder.setType(TYPE_TREE);
393+
break;
394+
case SKIPPING:
395+
builder.setType(TYPE_SKIPPING);
396+
break;
397+
default:
398+
throw new UnsupportedOperationException("unsupported index type: " + type);
399+
}
400+
} else {
401+
builder.setType(TYPE_INVERTED);
402+
}
403+
377404
if (analyzer != null) {
378405
switch (analyzer) {
379406
case KEYWORD:
@@ -449,7 +476,8 @@ List<TagMetadata> parseTagMetadata(Model model, Schema.SchemaBuilder builder, Li
449476
tagMetadataList.add(new TagMetadata(
450477
indexRule(
451478
group, tagSpec.getName(), col.getBanyanDBExtension().isEnableSort(),
452-
col.getBanyanDBExtension().getAnalyzer()
479+
col.getBanyanDBExtension().getAnalyzer(),
480+
col.getBanyanDBExtension().getIndexType()
453481
), tagSpec));
454482
} else {
455483
tagMetadataList.add(new TagMetadata(null, tagSpec));
@@ -499,7 +527,8 @@ MeasureMetadata parseTagAndFieldMetadata(Model model, Schema.SchemaBuilder build
499527
result.tag(new TagMetadata(
500528
indexRule(
501529
group, tagSpec.getName(), col.getBanyanDBExtension().isEnableSort(),
502-
col.getBanyanDBExtension().getAnalyzer()
530+
col.getBanyanDBExtension().getAnalyzer(),
531+
col.getBanyanDBExtension().getIndexType()
503532
), tagSpec));
504533
} else {
505534
result.tag(new TagMetadata(null, tagSpec));
@@ -544,10 +573,6 @@ private TagSpec parseTagSpec(ModelColumn modelColumn) {
544573
} else {
545574
throw new IllegalStateException("type " + modelColumn.getType().toString() + " is not supported");
546575
}
547-
548-
if (modelColumn.isIndexOnly()) {
549-
tagSpec.setIndexedOnly(true);
550-
}
551576
return tagSpec.build();
552577
}
553578

oap-server/server-telemetry/telemetry-api/src/main/java/org/apache/skywalking/oap/server/telemetry/api/MetricsCreator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ HistogramMetrics createHistogramMetric(String name, String tips, MetricsTag.Keys
5353
default HealthCheckMetrics createHealthCheckerGauge(String name, MetricsTag.Keys tagKeys, MetricsTag.Values tagValues) {
5454
Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "Require non-null or empty metric name");
5555
return new HealthCheckMetrics(createGauge(Strings.lenientFormat("%s%s", HEALTH_METRIC_PREFIX, name),
56-
Strings.lenientFormat("%s health check. 1 health, 0 not health, -1 unknown", name),
56+
Strings.lenientFormat("%s health check. 1 healthy, 0 not healthy, -1 unknown", name),
5757
tagKeys, tagValues));
5858
}
5959

test/e2e-v2/script/env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ SW_AGENT_CLIENT_JS_COMMIT=af0565a67d382b683c1dbd94c379b7080db61449
2323
SW_AGENT_CLIENT_JS_TEST_COMMIT=4f1eb1dcdbde3ec4a38534bf01dded4ab5d2f016
2424
SW_KUBERNETES_COMMIT_SHA=6fe5e6f0d3b7686c6be0457733e825ee68cb9b35
2525
SW_ROVER_COMMIT=79292fe07f17f98f486e0c4471213e1961fb2d1d
26-
SW_BANYANDB_COMMIT=b90a0ff31a4d8560422c04d152e7e7188d72ea89
26+
SW_BANYANDB_COMMIT=0f3b90d9b4f628d2de02cb39ef678d636358df44
2727
SW_AGENT_PHP_COMMIT=d1114e7be5d89881eec76e5b56e69ff844691e35
2828
SW_PREDICTOR_COMMIT=54a0197654a3781a6f73ce35146c712af297c994
2929

0 commit comments

Comments
 (0)