You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by su...@apache.org on 2021/03/17 03:31:33 UTC

[iotdb] branch jira_1238 created (now eea879a)

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

sunzesong pushed a change to branch jira_1238
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at eea879a  [IOTDB-1238] Make aligned timeseries MeasurementMNode name start with "$#$"

This branch includes the following new commits:

     new eea879a  [IOTDB-1238] Make aligned timeseries MeasurementMNode name start with "$#$"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: [IOTDB-1238] Make aligned timeseries MeasurementMNode name start with "$#$"

Posted by su...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sunzesong pushed a commit to branch jira_1238
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit eea879aae7d8edb97329ef64e66332976e6e59d1
Author: samperson1997 <sz...@mails.tsinghua.edu.cn>
AuthorDate: Wed Mar 17 11:24:52 2021 +0800

    [IOTDB-1238] Make aligned timeseries MeasurementMNode name start with "$#$"
---
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |  1 +
 .../org/apache/iotdb/db/metadata/MManager.java     | 11 ++-----
 .../java/org/apache/iotdb/db/metadata/MTree.java   | 10 ++++--
 .../iotdb/db/metadata/logfile/MLogWriter.java      |  8 +++--
 .../iotdb/db/metadata/mnode/StorageGroupMNode.java | 26 ++++++++++++++--
 .../db/qp/physical/sys/StorageGroupMNodePlan.java  | 36 +++++++++++++++++++---
 .../iotdb/db/metadata/MManagerBasicTest.java       | 20 ++++++++++++
 .../tsfile/write/DefaultDeviceTemplateTest.java    |  2 +-
 8 files changed, 94 insertions(+), 20 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index 5aaf98f..fa70319 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -109,6 +109,7 @@ public class IoTDBConstant {
 
   public static final String PATH_WILDCARD = "*";
   public static final String TIME = "time";
+  public static final String ALIGN_TIMESERIES_PREFIX = "$#$";
 
   // sdt parameters
   public static final String LOSS = "loss";
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 929b211..9a322c3 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -1092,12 +1092,7 @@ public class MManager {
 
   public IMeasurementSchema getSeriesSchema(PartialPath device, String measurement)
       throws MetadataException {
-    MNode node = mtree.getNodeByPath(device);
-    MNode leaf = node.getChild(measurement);
-    if (leaf != null) {
-      return ((MeasurementMNode) leaf).getSchema();
-    }
-    return null;
+    return getSeriesSchema(new PartialPath(device.getFullPath(), measurement));
   }
 
   /**
@@ -1110,9 +1105,7 @@ public class MManager {
    *     measurements = ["2", "0"]
    */
   public IMeasurementSchema getSeriesSchema(PartialPath fullPath) throws MetadataException {
-    MNode node = mtree.getNodeByPath(fullPath.getDevicePath());
-    MNode leaf = node.getChild(fullPath.getMeasurement());
-
+    MNode leaf = mtree.getNodeByPath(fullPath);
     if (fullPath instanceof VectorPartialPath) {
       List<PartialPath> measurements = ((VectorPartialPath) fullPath).getSubSensorsPathList();
       String[] measurementIndices = new String[measurements.size()];
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index 721576a..cb311a1 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -302,11 +302,13 @@ public class MTree implements Serializable {
     }
     MNode cur = root;
     boolean hasSetStorageGroup = false;
+    StorageGroupMNode storageGroupMNode = null;
     // e.g, devicePath = root.sg.d1, create internal nodes and set cur to d1 node
     for (int i = 1; i < deviceNodeNames.length; i++) {
       String nodeName = deviceNodeNames[i];
       if (cur instanceof StorageGroupMNode) {
         hasSetStorageGroup = true;
+        storageGroupMNode = (StorageGroupMNode) cur;
       }
       if (!cur.hasChild(nodeName)) {
         if (!hasSetStorageGroup) {
@@ -316,8 +318,12 @@ public class MTree implements Serializable {
       }
       cur = cur.getChild(nodeName);
     }
-
-    String leafName = measurements.get(0) + ".align";
+    int alignedTimeseriesIndex = 0;
+    if (storageGroupMNode != null) {
+      alignedTimeseriesIndex = storageGroupMNode.getAlignedTimeseriesIndex();
+      storageGroupMNode.addAlignedTimeseriesIndex();
+    }
+    String leafName = IoTDBConstant.ALIGN_TIMESERIES_PREFIX + alignedTimeseriesIndex;
 
     // synchronize check and add, we need addChild and add Alias become atomic operation
     // only write on mtree will be synchronized
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
index 20331b9..0c4b9ce 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
@@ -193,7 +193,8 @@ public class MLogWriter implements AutoCloseable {
       childSize = node.getChildren().size();
     }
     StorageGroupMNodePlan plan =
-        new StorageGroupMNodePlan(node.getName(), node.getDataTTL(), childSize);
+        new StorageGroupMNodePlan(
+            node.getName(), node.getDataTTL(), childSize, node.getAlignedTimeseriesIndex());
     putLog(plan);
   }
 
@@ -425,7 +426,10 @@ public class MLogWriter implements AutoCloseable {
                 CompressionType.values()[Integer.parseInt(words[5])]));
       case "1":
         return new StorageGroupMNodePlan(
-            words[1], Long.parseLong(words[2]), Integer.parseInt(words[3]));
+            words[1],
+            Long.parseLong(words[2]),
+            Integer.parseInt(words[3]),
+            words.length == 5 ? Integer.parseInt(words[4]) : 0);
       case "0":
         return new MNodePlan(words[1], Integer.parseInt(words[2]));
       default:
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java
index 016c0b2..cfb2a71 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/StorageGroupMNode.java
@@ -33,9 +33,18 @@ public class StorageGroupMNode extends MNode {
    */
   private long dataTTL;
 
+  private int alignedTimeseriesIndex;
+
   public StorageGroupMNode(MNode parent, String name, long dataTTL) {
     super(parent, name);
     this.dataTTL = dataTTL;
+    this.alignedTimeseriesIndex = 0;
+  }
+
+  public StorageGroupMNode(MNode parent, String name, long dataTTL, int alignedTimeseriesIndex) {
+    super(parent, name);
+    this.dataTTL = dataTTL;
+    this.alignedTimeseriesIndex = alignedTimeseriesIndex;
   }
 
   public long getDataTTL() {
@@ -46,6 +55,14 @@ public class StorageGroupMNode extends MNode {
     this.dataTTL = dataTTL;
   }
 
+  public int getAlignedTimeseriesIndex() {
+    return alignedTimeseriesIndex;
+  }
+
+  public void addAlignedTimeseriesIndex() {
+    this.alignedTimeseriesIndex++;
+  }
+
   @Override
   public void serializeTo(MLogWriter logWriter) throws IOException {
     serializeChildren(logWriter);
@@ -54,10 +71,15 @@ public class StorageGroupMNode extends MNode {
   }
 
   public static StorageGroupMNode deserializeFrom(StorageGroupMNodePlan plan) {
-    return new StorageGroupMNode(null, plan.getName(), plan.getDataTTL());
+    return new StorageGroupMNode(
+        null, plan.getName(), plan.getDataTTL(), plan.getAlignedTimeseriesIndex());
   }
 
   public static StorageGroupMNode deserializeFrom(String[] nodeInfo) {
-    return new StorageGroupMNode(null, nodeInfo[1], Long.valueOf(nodeInfo[2]));
+    return new StorageGroupMNode(
+        null,
+        nodeInfo[1],
+        Long.parseLong(nodeInfo[2]),
+        nodeInfo.length == 4 ? Integer.parseInt(nodeInfo[3]) : 0);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/StorageGroupMNodePlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/StorageGroupMNodePlan.java
index 64f0153..89c00b7 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/StorageGroupMNodePlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/StorageGroupMNodePlan.java
@@ -32,15 +32,19 @@ import java.util.Objects;
 public class StorageGroupMNodePlan extends MNodePlan {
   private long dataTTL;
 
+  private int alignedTimeseriesIndex;
+
   public StorageGroupMNodePlan() {
     super(false, Operator.OperatorType.STORAGE_GROUP_MNODE);
   }
 
-  public StorageGroupMNodePlan(String name, long dataTTL, int childSize) {
+  public StorageGroupMNodePlan(
+      String name, long dataTTL, int childSize, int alignedTimeseriesIndex) {
     super(false, Operator.OperatorType.STORAGE_GROUP_MNODE);
     this.name = name;
     this.dataTTL = dataTTL;
     this.childSize = childSize;
+    this.alignedTimeseriesIndex = alignedTimeseriesIndex;
   }
 
   @Override
@@ -56,12 +60,21 @@ public class StorageGroupMNodePlan extends MNodePlan {
     this.dataTTL = dataTTL;
   }
 
+  public int getAlignedTimeseriesIndex() {
+    return alignedTimeseriesIndex;
+  }
+
+  public void setAlignedTimeseriesIndex(int alignedTimeseriesIndex) {
+    this.alignedTimeseriesIndex = alignedTimeseriesIndex;
+  }
+
   @Override
   public void serialize(ByteBuffer buffer) {
     buffer.put((byte) PhysicalPlanType.STORAGE_GROUP_MNODE.ordinal());
     putString(buffer, name);
     buffer.putLong(dataTTL);
     buffer.putInt(childSize);
+    buffer.putInt(alignedTimeseriesIndex);
 
     buffer.putLong(index);
   }
@@ -72,6 +85,7 @@ public class StorageGroupMNodePlan extends MNodePlan {
     putString(stream, name);
     stream.writeLong(dataTTL);
     stream.writeInt(childSize);
+    stream.writeInt(alignedTimeseriesIndex);
 
     stream.writeLong(index);
   }
@@ -81,12 +95,25 @@ public class StorageGroupMNodePlan extends MNodePlan {
     name = readString(buffer);
     dataTTL = buffer.getLong();
     childSize = buffer.getInt();
+    if (buffer.hasRemaining()) {
+      alignedTimeseriesIndex = buffer.getInt();
+    } else {
+      alignedTimeseriesIndex = 0;
+    }
     index = buffer.getLong();
   }
 
   @Override
   public String toString() {
-    return "StorageGroupMNode{" + name + "," + dataTTL + "," + childSize + "}";
+    return "StorageGroupMNode{"
+        + name
+        + ","
+        + dataTTL
+        + ","
+        + childSize
+        + ","
+        + alignedTimeseriesIndex
+        + "}";
   }
 
   @Override
@@ -100,11 +127,12 @@ public class StorageGroupMNodePlan extends MNodePlan {
     StorageGroupMNodePlan that = (StorageGroupMNodePlan) o;
     return Objects.equals(name, that.name)
         && Objects.equals(dataTTL, that.dataTTL)
-        && Objects.equals(childSize, that.childSize);
+        && Objects.equals(childSize, that.childSize)
+        && Objects.equals(alignedTimeseriesIndex, that.alignedTimeseriesIndex);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(name, dataTTL, childSize);
+    return Objects.hash(name, dataTTL, childSize, alignedTimeseriesIndex);
   }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 8f8e92c..aec8eb6 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -272,6 +272,16 @@ public class MManagerBasicTest {
     assertTrue(manager.isPathExist(new PartialPath("root.laptop.d1.s1")));
     assertTrue(manager.isPathExist(new PartialPath("root.laptop.d1.s2")));
     assertTrue(manager.isPathExist(new PartialPath("root.laptop.d1.s3")));
+    try {
+      assertEquals(
+          1,
+          manager
+              .getStorageGroupNodeByStorageGroupPath(new PartialPath("root.laptop"))
+              .getAlignedTimeseriesIndex());
+    } catch (MetadataException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
 
     try {
       manager.deleteTimeseries(new PartialPath("root.laptop.d1.s2"));
@@ -331,6 +341,16 @@ public class MManagerBasicTest {
     assertTrue(manager.isPathExist(new PartialPath("root.laptop.d1.s0")));
     assertTrue(manager.isPathExist(new PartialPath("root.laptop.d1.s2")));
     assertTrue(manager.isPathExist(new PartialPath("root.laptop.d1.s4")));
+    try {
+      assertEquals(
+          2,
+          manager
+              .getStorageGroupNodeByStorageGroupPath(new PartialPath("root.laptop"))
+              .getAlignedTimeseriesIndex());
+    } catch (MetadataException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
   }
 
   @Test
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/DefaultDeviceTemplateTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/DefaultDeviceTemplateTest.java
index 68abcfc..82f7df8 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/DefaultDeviceTemplateTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/DefaultDeviceTemplateTest.java
@@ -50,7 +50,7 @@ public class DefaultDeviceTemplateTest {
       MeasurementSchema s1 = new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN);
       MeasurementSchema s2 = new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.PLAIN);
 
-      List<MeasurementSchema> schemaList = new ArrayList<>();
+      List<IMeasurementSchema> schemaList = new ArrayList<>();
       schemaList.add(s1);
       schemaList.add(s2);