diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 3ad9115575a4..cc8ae2e6efcc 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -88,6 +88,9 @@ | **Total** | **158** | - | - | * BanyanDB: make `BanyanDBMetricsDAO` output `scan all blocks` info log only when the model is not `indexModel`. +* BanyanDB: fix the `BanyanDBMetricsDAO.multiGet` not work properly in `IndexMode`. +* BanyanDB: remove `@StoreIDAsTag`, and automatically create a virtual String tag `id` for the SeriesID in `IndexMode`. +* Remove method `appendMutant` from StorageID. #### UI diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheReadCommand.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheReadCommand.java index dd56ec9e7488..4f67e8076bf8 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheReadCommand.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheReadCommand.java @@ -49,7 +49,7 @@ public class TopNCacheReadCommand extends TopN { @Override public StorageID id() { - return new StorageID().appendMutant(null, id); + return new StorageID().append(id); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheWriteCommand.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheWriteCommand.java index 239f967d79a3..1a862f4705a9 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheWriteCommand.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/cache/TopNCacheWriteCommand.java @@ -49,7 +49,7 @@ public class TopNCacheWriteCommand extends TopN { @Override public StorageID id() { - return new StorageID().appendMutant(null, id); + return new StorageID().append(id); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java index 9930c737c98b..8877df314cb8 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java @@ -49,7 +49,7 @@ public class TopNDatabaseStatement extends TopN { @Override public StorageID id() { - return new StorageID().appendMutant(null, id); + return new StorageID().append(id); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java index 27b00390c777..b5d80b776c82 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/endpoint/EndpointTraffic.java @@ -57,7 +57,6 @@ public class EndpointTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_ID) - @BanyanDB.SeriesID(index = 0) private String serviceId; @Setter @Getter @@ -65,7 +64,6 @@ public class EndpointTraffic extends Metrics { @ElasticSearch.Column(legacyName = "name") @ElasticSearch.MatchQuery @BanyanDB.MatchQuery(analyzer = BanyanDB.MatchQuery.AnalyzerType.URL) - @BanyanDB.SeriesID(index = 1) private String name = Const.EMPTY_STRING; @Setter @Getter @@ -77,11 +75,7 @@ protected StorageID id0() { // Downgrade the time bucket to day level only. // supportDownSampling == false for this entity. return new StorageID() - .appendMutant( - new String[] { - SERVICE_ID, - NAME - }, + .append( IDManager.EndpointID.buildId( this.getServiceId(), this.getName()) ); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/instance/InstanceTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/instance/InstanceTraffic.java index 12815c0eb847..c1901a97bf2f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/instance/InstanceTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/instance/InstanceTraffic.java @@ -61,14 +61,12 @@ public class InstanceTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_ID) - @BanyanDB.SeriesID(index = 0) private String serviceId; @Setter @Getter @Column(name = NAME, storageOnly = true) @ElasticSearch.Column(legacyName = "name") - @BanyanDB.SeriesID(index = 1) private String name; @Setter @@ -135,10 +133,7 @@ public RemoteData.Builder serialize() { @Override protected StorageID id0() { return new StorageID() - .appendMutant(new String[] { - SERVICE_ID, - NAME - }, IDManager.ServiceInstanceID.buildId(serviceId, name)); + .append(IDManager.ServiceInstanceID.buildId(serviceId, name)); } public static class Builder implements StorageBuilder { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/networkalias/NetworkAddressAlias.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/networkalias/NetworkAddressAlias.java index 8e8c4894194a..dedb8bdc1544 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/networkalias/NetworkAddressAlias.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/networkalias/NetworkAddressAlias.java @@ -55,17 +55,14 @@ public class NetworkAddressAlias extends Metrics { @Setter @Getter @Column(name = ADDRESS) - @BanyanDB.SeriesID(index = 0) private String address; @Setter @Getter @Column(name = REPRESENT_SERVICE_ID) - @BanyanDB.SeriesID(index = 1) private String representServiceId; @Setter @Getter @Column(name = REPRESENT_SERVICE_INSTANCE_ID) - @BanyanDB.SeriesID(index = 2) private String representServiceInstanceId; @Setter @Getter @@ -89,8 +86,7 @@ public boolean combine(final Metrics metrics) { @Override protected StorageID id0() { - return new StorageID().appendMutant( - new String[] {ADDRESS}, IDManager.NetworkAddressAliasDefine.buildId(address)); + return new StorageID().append(IDManager.NetworkAddressAliasDefine.buildId(address)); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ProcessTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ProcessTraffic.java index 5a1d8589e461..902488f62300 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ProcessTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ProcessTraffic.java @@ -50,7 +50,6 @@ "instanceId", "name", }) -@BanyanDB.StoreIDAsTag @BanyanDB.IndexMode public class ProcessTraffic extends Metrics { public static final String INDEX_NAME = "process_traffic"; @@ -74,7 +73,6 @@ public class ProcessTraffic extends Metrics { @Setter @Getter @Column(name = INSTANCE_ID, length = 600) - @BanyanDB.SeriesID(index = 0) private String instanceId; @Getter @@ -84,7 +82,6 @@ public class ProcessTraffic extends Metrics { @Setter @Getter @Column(name = NAME, length = 500) - @BanyanDB.SeriesID(index = 1) private String name; @Setter @@ -196,10 +193,7 @@ protected StorageID id0() { if (processId == null) { processId = IDManager.ProcessID.buildId(instanceId, name); } - return new StorageID().appendMutant(new String[] { - INSTANCE_ID, - NAME - }, processId); + return new StorageID().append(processId); } public static class Builder implements StorageBuilder { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ServiceLabelRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ServiceLabelRecord.java index 6863cca54f9f..7151719c8ddd 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ServiceLabelRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/process/ServiceLabelRecord.java @@ -55,10 +55,8 @@ public class ServiceLabelRecord extends Metrics { public static final String SERVICE_ID = "service_id"; public static final String LABEL = "label"; - @BanyanDB.SeriesID(index = 0) @Column(name = SERVICE_ID) private String serviceId; - @BanyanDB.SeriesID(index = 1) @Column(name = LABEL, length = 50) private String label; @@ -83,9 +81,7 @@ public Metrics toDay() { @Override protected StorageID id0() { - return new StorageID() - .append(SERVICE_ID, serviceId) - .append(LABEL, label); + return new StorageID().append(serviceId).append(label); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagAutocompleteData.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagAutocompleteData.java index fb76f3f826f8..ed26d9e439c7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagAutocompleteData.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/searchtag/TagAutocompleteData.java @@ -57,18 +57,15 @@ public class TagAutocompleteData extends Metrics { @Getter @Column(name = TAG_KEY) @ElasticSearch.EnableDocValues - @BanyanDB.SeriesID(index = 1) private String tagKey; @Setter @Getter @Column(name = TAG_VALUE, length = Tag.TAG_LENGTH) - @BanyanDB.SeriesID(index = 2) private String tagValue; @Setter @Getter @Column(name = TAG_TYPE) - @BanyanDB.SeriesID(index = 0) private String tagType; @Override @@ -94,10 +91,10 @@ public Metrics toDay() { @Override protected StorageID id0() { return new StorageID() - .appendMutant(new String[] {TIME_BUCKET}, toTimeBucketInDay()) - .append(TAG_TYPE, tagType) - .append(TAG_KEY, tagKey) - .append(TAG_VALUE, tagValue); + .append(toTimeBucketInDay()) + .append(tagType) + .append(tagKey) + .append(tagValue); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTraffic.java index 65f60fe6fbc7..f064ff165fee 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/service/ServiceTraffic.java @@ -67,7 +67,6 @@ public class ServiceTraffic extends Metrics { @Column(name = NAME) @ElasticSearch.Column(legacyName = "name") @ElasticSearch.MatchQuery - @BanyanDB.SeriesID(index = 1) private String name = Const.EMPTY_STRING; @Setter @@ -90,7 +89,6 @@ public class ServiceTraffic extends Metrics { @Setter @Getter @Column(name = LAYER) - @BanyanDB.SeriesID(index = 0) private Layer layer = Layer.UNDEFINED; /** @@ -107,10 +105,7 @@ protected StorageID id0() { } else { id = encode(name) + Const.POINT + Layer.UNDEFINED.value(); } - return new StorageID().appendMutant(new String[] { - NAME, - LAYER - }, id); + return new StorageID().append(id); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java index 222ba130a1aa..77b0cb92043c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java @@ -38,7 +38,6 @@ }, callSuper = false) public abstract class Metrics extends StreamData implements StorageData { public static final String ENTITY_ID = "entity_id"; - public static final String ID = "id"; /** * Time attribute diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/instance/InstanceHierarchyRelationTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/instance/InstanceHierarchyRelationTraffic.java index a2b6743d1b4d..39497adab706 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/instance/InstanceHierarchyRelationTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/instance/InstanceHierarchyRelationTraffic.java @@ -51,25 +51,21 @@ public class InstanceHierarchyRelationTraffic extends Metrics { @Setter @Getter @Column(name = INSTANCE_ID, length = 250) - @BanyanDB.SeriesID(index = 0) private String instanceId; @Setter @Getter @Column(name = SERVICE_LAYER) - @BanyanDB.SeriesID(index = 1) private Layer serviceLayer = Layer.UNDEFINED; @Setter @Getter @Column(name = RELATED_INSTANCE_ID, length = 250) - @BanyanDB.SeriesID(index = 2) private String relatedInstanceId; @Setter @Getter @Column(name = RELATED_SERVICE_LAYER) - @BanyanDB.SeriesID(index = 3) private Layer relatedServiceLayer = Layer.UNDEFINED; @Override @@ -77,12 +73,7 @@ protected StorageID id0() { String id = IDManager.ServiceInstanceID.buildInstanceHierarchyRelationId( new IDManager.ServiceInstanceID.InstanceHierarchyRelationDefine( instanceId, serviceLayer, relatedInstanceId, relatedServiceLayer)); - return new StorageID().appendMutant(new String[] { - INSTANCE_ID, - RELATED_INSTANCE_ID, - SERVICE_LAYER, - RELATED_SERVICE_LAYER - }, id); + return new StorageID().append(id); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/service/ServiceHierarchyRelationTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/service/ServiceHierarchyRelationTraffic.java index 972b60ef2d11..03f6a6420a9b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/service/ServiceHierarchyRelationTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/hierarchy/service/ServiceHierarchyRelationTraffic.java @@ -54,7 +54,6 @@ public class ServiceHierarchyRelationTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_ID, length = 250) - @BanyanDB.SeriesID(index = 0) private String serviceId; /** @@ -63,7 +62,6 @@ public class ServiceHierarchyRelationTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_LAYER) - @BanyanDB.SeriesID(index = 1) private Layer serviceLayer = Layer.UNDEFINED; /** @@ -72,7 +70,6 @@ public class ServiceHierarchyRelationTraffic extends Metrics { @Setter @Getter @Column(name = RELATED_SERVICE_ID, length = 250) - @BanyanDB.SeriesID(index = 2) private String relatedServiceId; /** @@ -81,7 +78,6 @@ public class ServiceHierarchyRelationTraffic extends Metrics { @Setter @Getter @Column(name = RELATED_SERVICE_LAYER) - @BanyanDB.SeriesID(index = 3) private Layer relatedServiceLayer = Layer.UNDEFINED; @Override @@ -90,12 +86,7 @@ protected StorageID id0() { new IDManager.ServiceID.ServiceHierarchyRelationDefine( serviceId, serviceLayer, relatedServiceId, relatedServiceLayer)); - return new StorageID().appendMutant(new String[] { - SERVICE_ID, - SERVICE_LAYER, - RELATED_SERVICE_ID, - RELATED_SERVICE_LAYER - }, id); + return new StorageID().append(id); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/asyncprofiler/storage/JFRProfilingDataRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/asyncprofiler/storage/JFRProfilingDataRecord.java index 44263ed5c89e..5456c18ae332 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/asyncprofiler/storage/JFRProfilingDataRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/asyncprofiler/storage/JFRProfilingDataRecord.java @@ -73,13 +73,7 @@ public class JFRProfilingDataRecord extends Record { @Override public StorageID id() { - return new StorageID().appendMutant( - new String[]{ - TASK_ID, - INSTANCE_ID, - EVENT_TYPE, - UPLOAD_TIME - }, + return new StorageID().append( Hashing.sha256().newHasher() .putString(taskId, StandardCharsets.UTF_8) .putString(instanceId, StandardCharsets.UTF_8) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingDataRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingDataRecord.java index fe0f123c365a..5458770f2286 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingDataRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingDataRecord.java @@ -66,12 +66,7 @@ public class EBPFProfilingDataRecord extends Record { @Override public StorageID id() { - return new StorageID().appendMutant( - new String[] { - SCHEDULE_ID, - STACK_ID_LIST, - UPLOAD_TIME - }, + return new StorageID().append( Hashing.sha256().newHasher() .putString(scheduleId, Charsets.UTF_8) .putString(stackIdList, Charsets.UTF_8) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingScheduleRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingScheduleRecord.java index 4ec6953194d5..53d6985f00b7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingScheduleRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingScheduleRecord.java @@ -62,7 +62,6 @@ public class EBPFProfilingScheduleRecord extends Metrics { public static final String EBPF_PROFILING_SCHEDULE_ID = "ebpf_profiling_schedule_id"; @Column(name = TASK_ID) - @BanyanDB.SeriesID(index = 0) private String taskId; @Column(name = PROCESS_ID, length = 600) private String processId; @@ -73,7 +72,6 @@ public class EBPFProfilingScheduleRecord extends Metrics { @Column(name = END_TIME) private long endTime; @Column(name = EBPF_PROFILING_SCHEDULE_ID) - @BanyanDB.SeriesID(index = 1) private String scheduleId; @Override @@ -101,7 +99,7 @@ public Metrics toDay() { @Override protected StorageID id0() { - return new StorageID().append(TASK_ID, taskId).append(EBPF_PROFILING_SCHEDULE_ID, scheduleId); + return new StorageID().append(taskId).append(scheduleId); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java index b0c36454ecfd..11f47800c6b3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java @@ -93,11 +93,7 @@ public class EBPFProfilingTaskRecord extends NoneStream { @Override public StorageID id() { - return new StorageID().appendMutant( - new String[] { - LOGICAL_ID, - CREATE_TIME - }, + return new StorageID().append( Hashing.sha256().newHasher() .putString(logicalId, Charsets.UTF_8) .putLong(createTime) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageData.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageData.java index c48ad1215dc3..91152e594b78 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageData.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageData.java @@ -22,6 +22,8 @@ * Any persistent entity should be an implementation of this interface. */ public interface StorageData { + String ID = "id"; + String TIME_BUCKET = "time_bucket"; /** diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageID.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageID.java index 85cec8282514..49d9d26b94e4 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageID.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageID.java @@ -20,7 +20,6 @@ import com.google.common.base.Joiner; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -61,52 +60,52 @@ public StorageID() { fragments = new ArrayList<>(2); } - public StorageID append(String name, String value) { - if (StringUtil.isBlank(name)) { - throw new IllegalArgumentException("The name of storage ID should not be null or empty."); + public StorageID append(String value) { + if (sealed) { + throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment"); } + fragments.add(new Fragment(null, String.class, value)); + return this; + } + + public StorageID append(long value) { if (sealed) { - throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, name=" + name); + throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, name="); } - fragments.add(new Fragment(new String[] {name}, String.class, false, value)); + fragments.add(new Fragment(null, Long.class, value)); return this; } - public StorageID append(String name, long value) { + public StorageID append(String name, String value) { if (StringUtil.isBlank(name)) { throw new IllegalArgumentException("The name of storage ID should not be null or empty."); } if (sealed) { throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, name=" + name); } - fragments.add(new Fragment(new String[] {name}, Long.class, false, value)); + fragments.add(new Fragment(name, String.class, value)); return this; } - public StorageID append(String name, int value) { + public StorageID append(String name, long value) { if (StringUtil.isBlank(name)) { throw new IllegalArgumentException("The name of storage ID should not be null or empty."); } if (sealed) { throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, name=" + name); } - fragments.add(new Fragment(new String[] {name}, Integer.class, false, value)); + fragments.add(new Fragment(name, Long.class, value)); return this; } - public StorageID appendMutant(String[] source, long value) { - if (sealed) { - throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, source=" + Arrays.toString(source)); + public StorageID append(String name, int value) { + if (StringUtil.isBlank(name)) { + throw new IllegalArgumentException("The name of storage ID should not be null or empty."); } - fragments.add(new Fragment(source, Long.class, true, value)); - return this; - } - - public StorageID appendMutant(final String[] source, final String value) { if (sealed) { - throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, source=" + Arrays.toString(source)); + throw new IllegalStateException("The storage ID is sealed. Can't append a new fragment, name=" + name); } - fragments.add(new Fragment(source, String.class, true, value)); + fragments.add(new Fragment(name, Integer.class, value)); return this; } @@ -145,24 +144,18 @@ public static class Fragment { * The column name of the value, or the original column names of the mutate value. * * The names could be - * 1. Always one column if this is not {@link #mutate} and from a certain persistent column. - * 2. Be null if {@link #mutate} is true and no relative column, such as the original value is not in - * the persistence. - * 3. One or multi-values if the value is built through a symmetrical or asymmetrical encoding algorithm. + * 1. Always one column if this is from a certain persistent column. + * 2. Be null if no relative column, such as the original value is not in the persistence. */ - private final String[] name; + private final String name; /** * Represent the class type of the {@link #value}. */ private final Class type; - /** - * If true, the field was from {@link #name}, and value is changed by internal rules. - * Such as time bucket downsampling, use a day-level time-bucket to build the ID for a minute dimension metric. - */ - private final boolean mutate; + private final Object value; - public Optional getName() { + public Optional getName() { return Optional.ofNullable(name); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java index 9908f24d8c9c..9c3038560709 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java @@ -179,16 +179,6 @@ enum IndexType { @interface MeasureField { } - /** - * StoreIDTag indicates a metric store its ID as a tag for searching. - * - * @since 9.4.0 - */ - @Target({ElementType.TYPE}) - @Retention(RetentionPolicy.RUNTIME) - @interface StoreIDAsTag { - } - /** * Match query is designed for BanyanDB match query with specific analyzer. It is a fuzzy query implementation * powered by analyzer. @@ -237,14 +227,15 @@ enum AnalyzerType { * IndexMode metric is a half-time series metric, which means the metric is time relative, and still affected by * metric TTL, but its ID doesn't include time bucket. The entity has a unique name to represent the entity. *

+ * If a metric is annotated with IndexMode, the installer will automatically create a virtual String tag 'id' for the SeriesID. + * We don't need to declare other columns as SeriesID. + * The value of 'id' is generated by the {@link Metrics#id()} method. + *

* The entity should be a kind of metadata entity, e.g. ServiceTraffic. - * The return({@link StorageID} of {@link Metrics#id()} should not include any time relative column. + * The return({@link StorageID} of {@link Metrics#id()} should not include any time relative column and column name. *

      * 
-     *         return new StorageID().appendMutant(new String[] {
-     *             NAME,
-     *             LAYER
-     *         }, id);
+     *         return new StorageID().append(id);
      * 
      * 
*

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/BanyanDBModelExtension.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/BanyanDBModelExtension.java index 7adecdff908a..08a568fca576 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/BanyanDBModelExtension.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/BanyanDBModelExtension.java @@ -39,17 +39,9 @@ public class BanyanDBModelExtension { @Setter private String timestampColumn; - /** - * storeIDTag indicates whether a metric stores its ID as a tag. - * The installer will create a virtual string ID tag without timestamp. - */ - @Getter - @Setter - private boolean storeIDTag; - /** * indexMode indicates whether a metric is in the index mode. - * + * Since 10.3.0, the installer will automatically create a virtual String tag 'id' for the SeriesID. * @since 10.2.0 */ @Getter diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java index df85a92ed760..6a427e31bdc2 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java @@ -99,10 +99,6 @@ public Model add(Class aClass, int scopeId, Storage storage) throws StorageEx banyanDBModelExtension.setTimestampColumn(timestampColumn); } - if (aClass.isAnnotationPresent(BanyanDB.StoreIDAsTag.class)) { - banyanDBModelExtension.setStoreIDTag(true); - } - if (aClass.isAnnotationPresent(BanyanDB.IndexMode.class)) { banyanDBModelExtension.setIndexMode(true); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceRelationTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceRelationTraffic.java index b91722d9f278..13e6aebbd656 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceRelationTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceRelationTraffic.java @@ -51,19 +51,15 @@ public class ZipkinServiceRelationTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_NAME) - @BanyanDB.SeriesID(index = 0) private String serviceName; @Setter @Getter @Column(name = REMOTE_SERVICE_NAME) - @BanyanDB.SeriesID(index = 1) private String remoteServiceName; @Override protected StorageID id0() { - return new StorageID() - .append(SERVICE_NAME, serviceName) - .append(REMOTE_SERVICE_NAME, remoteServiceName); + return new StorageID().append(serviceName).append(remoteServiceName); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceSpanTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceSpanTraffic.java index f814b0ff72d6..9ea7d4346646 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceSpanTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceSpanTraffic.java @@ -53,19 +53,15 @@ public class ZipkinServiceSpanTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_NAME) - @BanyanDB.SeriesID(index = 0) private String serviceName; @Setter @Getter @Column(name = SPAN_NAME) - @BanyanDB.SeriesID(index = 1) private String spanName = Const.EMPTY_STRING; @Override protected StorageID id0() { - return new StorageID() - .append(SERVICE_NAME, serviceName) - .append(SPAN_NAME, spanName); + return new StorageID().append(serviceName).append(SPAN_NAME, spanName); } @Override diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceTraffic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceTraffic.java index 847c68f85373..3e367fbfae5b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceTraffic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinServiceTraffic.java @@ -50,12 +50,11 @@ public class ZipkinServiceTraffic extends Metrics { @Setter @Getter @Column(name = SERVICE_NAME) - @BanyanDB.SeriesID(index = 0) private String serviceName = Const.EMPTY_STRING; @Override protected StorageID id0() { - return new StorageID().append(SERVICE_NAME, serviceName); + return new StorageID().append(serviceName); } @Override diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBConverter.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBConverter.java index cbd8ecd12092..14b166177f6d 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBConverter.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/BanyanDBConverter.java @@ -40,9 +40,9 @@ import java.util.List; -public class BanyanDBConverter { +import static org.apache.skywalking.oap.server.core.storage.StorageData.ID; - public static final String ID = "id"; +public class BanyanDBConverter { public static class StorageToStream implements Convert2Entity { private final MetadataRegistry.Schema schema; diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java index a30c0de90b7f..545bbe71c376 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java @@ -84,6 +84,7 @@ import static org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.IndexRule.Type.TYPE_INVERTED; import static org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.IndexRule.Type.TYPE_SKIPPING; import static org.apache.skywalking.banyandb.database.v1.BanyandbDatabase.IndexRule.Type.TYPE_TREE; +import static org.apache.skywalking.oap.server.core.analysis.metrics.Metrics.ID; @Slf4j public enum MetadataRegistry { @@ -106,7 +107,7 @@ public StreamModel registerStreamModel(Model model, BanyanDBStorageConfig config // 1) a list of TagFamilySpec, // 2) a list of IndexRule, List tags = parseTagMetadata(model, schemaBuilder, seriesIDColumns, schemaMetadata.group); - List tagFamilySpecs = schemaMetadata.extractTagFamilySpec(tags, false); + List tagFamilySpecs = schemaMetadata.extractTagFamilySpec(tags); // iterate over tagFamilySpecs to save tag names for (final TagFamilySpec tagFamilySpec : tagFamilySpecs) { for (final TagSpec tagSpec : tagFamilySpec.getTagsList()) { @@ -142,6 +143,11 @@ public MeasureModel registerMeasureModel(Model model, BanyanDBStorageConfig conf // parse and set seriesIDs List seriesIDColumns = parseEntityNames(modelColumnMap); List shardingKeyColumns = parseShardingKeyNames(modelColumnMap); + boolean isIndexMode = model.getBanyanDBModelExtension().isIndexMode(); + if (isIndexMode) { + // in index mode, seriesID must contain ID + seriesIDColumns.add(ID); + } if (seriesIDColumns.isEmpty()) { throw new StorageException("model " + model.getName() + " doesn't contain series id"); } @@ -149,8 +155,11 @@ public MeasureModel registerMeasureModel(Model model, BanyanDBStorageConfig conf // this can be used to build both // 1) a list of TagFamilySpec, // 2) a list of IndexRule, - MeasureMetadata tagsAndFields = parseTagAndFieldMetadata(model, schemaBuilder, seriesIDColumns, schemaMetadata.group); - List tagFamilySpecs = schemaMetadata.extractTagFamilySpec(tagsAndFields.tags, model.getBanyanDBModelExtension().isStoreIDTag()); + MeasureMetadata tagsAndFields = parseTagAndFieldMetadata( + model, schemaBuilder, seriesIDColumns, schemaMetadata.group, + isIndexMode + ); + List tagFamilySpecs = schemaMetadata.extractTagFamilySpec(tagsAndFields.tags); // iterate over tagFamilySpecs to save tag names Set tags = tagFamilySpecs.stream() .flatMap(tagFamilySpec -> tagFamilySpec.getTagsList().stream()) @@ -163,10 +172,6 @@ public MeasureModel registerMeasureModel(Model model, BanyanDBStorageConfig conf .filter(Objects::nonNull) .collect(Collectors.toList()); - if (model.getBanyanDBModelExtension().isStoreIDTag()) { - indexRules.add(indexRule(schemaMetadata.group, BanyanDBConverter.ID, false, null, null)); - } - final Measure.Builder builder = Measure.newBuilder(); builder.setMetadata(BanyandbCommon.Metadata.newBuilder().setGroup(schemaMetadata.getGroup()) .setName(schemaMetadata.name())); @@ -505,7 +510,11 @@ private static class MeasureMetadata { * * @since 9.4.0 Skip {@link Metrics#TIME_BUCKET} */ - MeasureMetadata parseTagAndFieldMetadata(Model model, Schema.SchemaBuilder builder, List seriesIDColumns, String group) { + MeasureMetadata parseTagAndFieldMetadata(Model model, + Schema.SchemaBuilder builder, + List seriesIDColumns, + String group, + boolean shouldAddID) { // skip metric MeasureMetadata.MeasureMetadataBuilder result = MeasureMetadata.builder(); for (final ModelColumn col : model.getColumns()) { @@ -537,7 +546,12 @@ MeasureMetadata parseTagAndFieldMetadata(Model model, Schema.SchemaBuilder build result.tag(new TagMetadata(null, tagSpec)); } } - + // add additional ID tag + if (shouldAddID) { + result.tag(new TagMetadata( + null, TagSpec.newBuilder().setType(TagType.TAG_TYPE_STRING).setName(ID).build() + )); + } return result.build(); } @@ -685,7 +699,7 @@ static String formatName(String modelName, DownSampling downSampling) { return modelName + "_" + downSampling.getName(); } - private List extractTagFamilySpec(List tagMetadataList, boolean shouldAddID) { + private List extractTagFamilySpec(List tagMetadataList) { final String indexFamily = SchemaMetadata.this.indexFamily(); final String nonIndexFamily = SchemaMetadata.this.nonIndexFamily(); Map> tagMetadataMap = tagMetadataList.stream() @@ -696,9 +710,6 @@ private List extractTagFamilySpec(List tagMetadataLi final TagFamilySpec.Builder b = TagFamilySpec.newBuilder(); b.setName(entry.getKey()); b.addAllTags(entry.getValue().stream().map(TagMetadata::getTagSpec).collect(Collectors.toList())); - if (shouldAddID && indexFamily.equals(entry.getKey())) { - b.addTags(TagSpec.newBuilder().setType(TagType.TAG_TYPE_STRING).setName(BanyanDBConverter.ID)); - } tagFamilySpecs.add(b.build()); } diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java index a2bb2ff05d77..a15efc8564fb 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java @@ -19,13 +19,11 @@ package org.apache.skywalking.oap.server.storage.plugin.banyandb.measure; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.apache.commons.lang3.StringUtils; import org.apache.skywalking.banyandb.model.v1.BanyandbModel; -import org.apache.skywalking.banyandb.v1.client.AbstractCriteria; import org.apache.skywalking.banyandb.v1.client.AbstractQuery; import org.apache.skywalking.banyandb.v1.client.DataPoint; import org.apache.skywalking.banyandb.v1.client.MeasureQuery; @@ -65,6 +63,7 @@ import java.util.stream.Collectors; import static org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic.PropertyUtil.LANGUAGE; +import static org.apache.skywalking.oap.server.core.storage.StorageData.ID; public class BanyanDBMetadataQueryDAO extends AbstractBanyanDBDAO implements IMetadataQueryDAO { private static final Set SERVICE_TRAFFIC_TAGS = ImmutableSet.of(ServiceTraffic.NAME, @@ -169,15 +168,7 @@ public List getInstances(List instanceIds) throws IOExc new QueryBuilder() { @Override protected void apply(MeasureQuery query) { - List instanceRelationsQueryConditions = new ArrayList<>(instanceIds.size()); - for (final String instanceId : instanceIds) { - final IDManager.ServiceInstanceID.InstanceIDDefinition def = IDManager.ServiceInstanceID.analysisId(instanceId); - instanceRelationsQueryConditions.add( - and(Lists.newArrayList(eq(InstanceTraffic.SERVICE_ID, def.getServiceId()), eq(InstanceTraffic.NAME, def.getName()))) - ); - } - query.criteria(or(instanceRelationsQueryConditions)); - query.limit(instanceIds.size()); + query.and(in(ID, instanceIds)); } }); return resp.getDataPoints().stream().map(e -> buildInstance(e, schema)).collect(Collectors.toList()); @@ -377,7 +368,7 @@ public Process getProcess(String processId) throws IOException { @Override protected void apply(MeasureQuery query) { if (StringUtil.isNotEmpty(processId)) { - query.and(eq(BanyanDBConverter.ID, processId)); + query.and(eq(ID, processId)); } } }); diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsDAO.java index 1bce2c9c2e51..ef8f86c6bb8c 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsDAO.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetricsDAO.java @@ -51,6 +51,7 @@ import java.util.Optional; import static org.apache.skywalking.oap.server.core.analysis.metrics.Metrics.ENTITY_ID; +import static org.apache.skywalking.oap.server.core.storage.StorageData.ID; import static org.apache.skywalking.oap.server.core.storage.StorageData.TIME_BUCKET; @Slf4j @@ -69,8 +70,8 @@ public List multiGet(Model model, List metrics) throws IOExcep throw new IOException(model.getName() + " is not registered"); } final Map> seriesIDColumns = new HashMap<>(); - if (model.getBanyanDBModelExtension().isStoreIDTag()) { - seriesIDColumns.put(BanyanDBConverter.ID, new ArrayList<>()); + if (model.getBanyanDBModelExtension().isIndexMode()) { + seriesIDColumns.put(ID, new ArrayList<>()); } else { model.getColumns().forEach(c -> { BanyanDBExtension ext = c.getBanyanDBExtension(); @@ -92,17 +93,11 @@ public List multiGet(Model model, List metrics) throws IOExcep StringBuilder idStr = new StringBuilder(); for (Metrics m : metrics) { List fragments = m.id().read(); - if (model.getBanyanDBModelExtension().isStoreIDTag()) { - if (fragments.size() != 1) { - log.error("[{}]fragments' size is more than expected", fragments); - continue; - } - Object val = fragments.get(0).getValue(); - fragments = Arrays.asList(new StorageID.Fragment( - new String[]{BanyanDBConverter.ID}, + if (model.getBanyanDBModelExtension().isIndexMode()) { + fragments = Arrays.asList(new StorageID.Fragment( + ID, String.class, - true, - val)); + m.id().build())); } AnalyticalResult result = analyze(fragments, tsCol, seriesIDColumns); @@ -158,7 +153,7 @@ public InsertRequest prepareBatchInsert(Model model, Metrics metrics, SessionCac TimeBucket.getTimestamp(metrics.getTimeBucket(), model.getDownsampling())); // timestamp final BanyanDBConverter.MeasureToStorage toStorage = new BanyanDBConverter.MeasureToStorage(schema, measureWrite); storageBuilder.entity2Storage(metrics, toStorage); - if (model.getBanyanDBModelExtension().isStoreIDTag()) { + if (model.getBanyanDBModelExtension().isIndexMode()) { toStorage.acceptID(metrics.id().build()); } return new BanyanDBMeasureInsertRequest(toStorage.obtain(), callback); @@ -175,7 +170,7 @@ public UpdateRequest prepareBatchUpdate(Model model, Metrics metrics, SessionCac TimeBucket.getTimestamp(metrics.getTimeBucket(), model.getDownsampling())); // timestamp final BanyanDBConverter.MeasureToStorage toStorage = new BanyanDBConverter.MeasureToStorage(schema, measureWrite); storageBuilder.entity2Storage(metrics, toStorage); - if (model.getBanyanDBModelExtension().isStoreIDTag()) { + if (model.getBanyanDBModelExtension().isIndexMode()) { toStorage.acceptID(metrics.id().build()); } return new BanyanDBMeasureUpdateRequest(toStorage.obtain()); @@ -183,16 +178,14 @@ public UpdateRequest prepareBatchUpdate(Model model, Metrics metrics, SessionCac private static class AnalyticalResult { private boolean success; - private List cols = new ArrayList<>(); + private final List cols = new ArrayList<>(); private long begin; private long end; private String cols() { StringBuilder b = new StringBuilder(); - for (String[] col : this.cols) { - for (String c : col) { - b.append(c).append(","); - } + for (String col : this.cols) { + b.append(col).append(","); b.append(" "); } return b.toString(); @@ -202,26 +195,25 @@ private String cols() { private AnalyticalResult analyze(List fragments, String tsCol, Map> seriesIDColumns) { AnalyticalResult result = new AnalyticalResult(); for (StorageID.Fragment f : fragments) { - Optional cols = f.getName(); - if (cols.isPresent()) { - result.cols.add(cols.get()); - for (String col : cols.get()) { - if (tsCol.equals(col)) { - long timeBucket = (long) f.getValue(); - long epoch = TimeBucket.getTimestamp(timeBucket); - if (result.begin == 0 || epoch < result.begin) { - result.begin = epoch; - } - if (result.end == 0 || epoch > result.end) { - result.end = epoch; - } - } else if (seriesIDColumns.containsKey(col)) { - Preconditions.checkState(f.getType().equals(String.class)); - seriesIDColumns.get(col).add((String) f.getValue()); - } else { - log.error("col [{}] in fragment [{}] id [{}] is not ts or seriesID", col, f, fragments); - return result; + Optional c = f.getName(); + if (c.isPresent()) { + String col = c.get(); + result.cols.add(col); + if (tsCol.equals(col)) { + long timeBucket = (long) f.getValue(); + long epoch = TimeBucket.getTimestamp(timeBucket); + if (result.begin == 0 || epoch < result.begin) { + result.begin = epoch; + } + if (result.end == 0 || epoch > result.end) { + result.end = epoch; } + } else if (seriesIDColumns.containsKey(col)) { + Preconditions.checkState(f.getType().equals(String.class)); + seriesIDColumns.get(col).add((String) f.getValue()); + } else { + log.error("col [{}] in fragment [{}] id [{}] is not ts or seriesID", col, f, fragments); + return result; } } else { log.error("fragment [{}] in id [{}] doesn't contains cols", f, fragments); diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/JDBCTableInstaller.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/JDBCTableInstaller.java index d6560cf6f5b1..ad5f7c860d85 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/JDBCTableInstaller.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/JDBCTableInstaller.java @@ -26,7 +26,7 @@ import org.apache.skywalking.oap.server.core.analysis.DownSampling; import org.apache.skywalking.oap.server.core.analysis.Layer; import org.apache.skywalking.oap.server.core.analysis.TimeBucket; -import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics; +import org.apache.skywalking.oap.server.core.storage.StorageData; import org.apache.skywalking.oap.server.core.storage.model.ColumnName; import org.apache.skywalking.oap.server.core.storage.model.Model; import org.apache.skywalking.oap.server.core.storage.model.ModelColumn; @@ -57,7 +57,7 @@ */ @Slf4j public class JDBCTableInstaller extends ModelInstaller { - public static final String ID_COLUMN = Metrics.ID; + public static final String ID_COLUMN = StorageData.ID; public static final String TABLE_COLUMN = "table_name"; public JDBCTableInstaller(Client client, ModuleManager moduleManager) {