This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 5ad74eb261 BanyanDBMetricsDAO: handle storeIDTag in multiGet for 
BanyanDBModelExtension (#11002)
5ad74eb261 is described below

commit 5ad74eb2619b4cebe57a150ca328b2c1d052cb54
Author: Gao Hongtao <[email protected]>
AuthorDate: Tue Jun 27 15:40:20 2023 +0800

    BanyanDBMetricsDAO: handle storeIDTag in multiGet for 
BanyanDBModelExtension (#11002)
---
 docs/en/changes/changes.md                         |  1 +
 .../banyandb/measure/BanyanDBMetricsDAO.java       | 56 ++++++++++++++--------
 2 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index ed7811f9e9..06824dc7b2 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -25,6 +25,7 @@
 * Fix ElasticSearch scroller bug.
 * Add component ID for Aerospike(ID=149).
 * Packages with name `recevier` are renamed to `receiver`.
+* `BanyanDBMetricsDAO` handles `storeIDTag` in `multiGet` for 
`BanyanDBModelExtension`.
 
 #### UI
 
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 767da1cb92..d1350cfa64 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
@@ -43,6 +43,7 @@ import 
org.apache.skywalking.oap.server.storage.plugin.banyandb.stream.AbstractB
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -68,25 +69,44 @@ public class BanyanDBMetricsDAO extends AbstractBanyanDBDAO 
implements IMetricsD
         if (schema == null) {
             throw new IOException(model.getName() + " is not registered");
         }
-        String tc = model.getBanyanDBModelExtension().getTimestampColumn();
-        final String tsCol = Strings.isBlank(tc) ? TIME_BUCKET : tc;
-        long begin = 0L, end = 0L;
         final Map<String, List<String>> seriesIDColumns = new HashMap<>();
-        model.getColumns().forEach(c -> {
-            BanyanDBExtension ext = c.getBanyanDBExtension();
-            if (ext == null) {
-                return;
-            }
-            if (ext.isShardingKey()) {
-                seriesIDColumns.put(c.getColumnName().getName(), new 
ArrayList<>());
+        if (model.getBanyanDBModelExtension().isStoreIDTag()) {
+            seriesIDColumns.put(BanyanDBConverter.ID, new ArrayList<>());
+        } else {
+            model.getColumns().forEach(c -> {
+                BanyanDBExtension ext = c.getBanyanDBExtension();
+                if (ext == null) {
+                    return;
+                }
+                if (ext.isShardingKey()) {
+                    seriesIDColumns.put(c.getColumnName().getName(), new 
ArrayList<>());
+                }
+            });
+            if (seriesIDColumns.isEmpty()) {
+                seriesIDColumns.put(ENTITY_ID, new ArrayList<>());
             }
-        });
-        if (seriesIDColumns.isEmpty()) {
-            seriesIDColumns.put(ENTITY_ID, new ArrayList<>());
         }
+
+        String tc = model.getBanyanDBModelExtension().getTimestampColumn();
+        final String tsCol = Strings.isBlank(tc) ? TIME_BUCKET : tc;
+        long begin = 0L, end = 0L;
         StringBuilder idStr = new StringBuilder();
         for (Metrics m : metrics) {
-            AnalyticalResult result = analyze(m, tsCol, seriesIDColumns);
+            List<StorageID.Fragment> 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},
+                        String.class,
+                        true,
+                        val));
+            }
+            AnalyticalResult result = analyze(fragments, tsCol, 
seriesIDColumns);
+
             
idStr.append(result.cols()).append("=").append(m.id().build()).append(",");
             if (!result.success) {
                 continue;
@@ -180,9 +200,7 @@ public class BanyanDBMetricsDAO extends AbstractBanyanDBDAO 
implements IMetricsD
         }
     }
 
-    private AnalyticalResult analyze(Metrics m, String tsCol, Map<String, 
List<String>> seriesIDColumns) {
-        StorageID id = m.id();
-        List<StorageID.Fragment> fragments = id.read();
+    private AnalyticalResult analyze(List<StorageID.Fragment> fragments, 
String tsCol, Map<String, List<String>> seriesIDColumns) {
         AnalyticalResult result = new AnalyticalResult();
         for (StorageID.Fragment f : fragments) {
             Optional<String[]> cols = f.getName();
@@ -202,12 +220,12 @@ public class BanyanDBMetricsDAO extends 
AbstractBanyanDBDAO implements IMetricsD
                         
Preconditions.checkState(f.getType().equals(String.class));
                         seriesIDColumns.get(col).add((String) f.getValue());
                     } else {
-                        log.error("col [{}] in fragment [{}] in id [{}] is not 
ts or seriesID", col, f, id.build());
+                        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, 
id.build());
+                log.error("fragment [{}] in id [{}] doesn't contains cols", f, 
fragments);
                 return result;
             }
         }

Reply via email to