You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/07/30 08:55:38 UTC

[incubator-iotdb] 01/01: set props in MeasurementSchema to null by default

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

qiaojialin pushed a commit to branch release_props_memory
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 64711664a86a4a88bbe409641e2ff75bbacd5c60
Author: qiaojialin <64...@qq.com>
AuthorDate: Thu Jul 30 16:55:13 2020 +0800

    set props in MeasurementSchema to null by default
---
 .../org/apache/iotdb/db/metadata/MManager.java     |  3 ++-
 .../org/apache/iotdb/db/metadata/mnode/MNode.java  |  4 ++--
 .../qp/logical/sys/CreateTimeSeriesOperator.java   |  6 +++---
 .../db/qp/physical/sys/CreateTimeSeriesPlan.java   |  6 +++---
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |  3 ++-
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   | 22 ++++++++++++++++++++++
 .../org/apache/iotdb/session/IoTDBSessionIT.java   |  8 +++++++-
 .../tsfile/write/schema/MeasurementSchema.java     | 10 +++++-----
 8 files changed, 46 insertions(+), 16 deletions(-)

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 3e0f029..def92ff 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
@@ -307,10 +307,11 @@ public class MManager {
     String[] args = cmd.trim().split(",", -1);
     switch (args[0]) {
       case MetadataOperationType.CREATE_TIMESERIES:
-        Map<String, String> props = new HashMap<>();
+        Map<String, String> props = null;
         if (!args[5].isEmpty()) {
           String[] keyValues = args[5].split("&");
           String[] kv;
+          props = new HashMap<>();
           for (String keyValue : keyValues) {
             kv = keyValue.split("=");
             props.put(kv[0], kv[1]);
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
index 002540d..d614b7f 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/MNode.java
@@ -53,8 +53,8 @@ public class MNode implements Serializable {
    */
   protected String fullPath;
 
-  transient Map<String, MNode> children;
-  transient Map<String, MNode> aliasChildren;
+  transient Map<String, MNode> children = null;
+  transient Map<String, MNode> aliasChildren = null;
 
   protected transient ReadWriteLock lock = new ReentrantReadWriteLock();
 
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java
index ad78900..2e4f648 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTimeSeriesOperator.java
@@ -33,9 +33,9 @@ public class CreateTimeSeriesOperator extends RootOperator {
   private TSDataType dataType;
   private TSEncoding encoding;
   private CompressionType compressor;
-  private Map<String, String> props;
-  private Map<String, String> attributes;
-  private Map<String, String> tags;
+  private Map<String, String> props = null;
+  private Map<String, String> attributes = null;
+  private Map<String, String> tags = null;
   
   public CreateTimeSeriesOperator(int tokenIntType) {
     super(tokenIntType);
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
index 5d31b22..98b80dd 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
@@ -40,9 +40,9 @@ public class CreateTimeSeriesPlan extends PhysicalPlan {
   private TSEncoding encoding;
   private CompressionType compressor;
   private String alias;
-  private Map<String, String> props;
-  private Map<String, String> tags;
-  private Map<String, String> attributes;
+  private Map<String, String> props = null;
+  private Map<String, String> tags = null;
+  private Map<String, String> attributes = null;
 
   public CreateTimeSeriesPlan() {
     super(false, Operator.OperatorType.CREATE_TIMESERIES);
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index b6db893..6ad6202 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -1131,13 +1131,14 @@ public class LogicalGenerator extends SqlBaseBaseListener {
     createTimeSeriesOperator.setEncoding(TSEncoding.valueOf(encoding));
     CompressionType compressor;
     List<PropertyContext> properties = ctx.property();
-    Map<String, String> props = new HashMap<>(properties.size());
     if (ctx.compressor() != null) {
       compressor = CompressionType.valueOf(ctx.compressor().getText().toUpperCase());
     } else {
       compressor = TSFileDescriptor.getInstance().getConfig().getCompressor();
     }
+    Map<String, String> props = null;
     if (ctx.property(0) != null) {
+      props = new HashMap<>(properties.size());
       for (PropertyContext property : properties) {
         props.put(property.ID().getText().toLowerCase(),
             property.propertyValue().getText().toLowerCase());
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
index 42f3f39..2117b59 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
@@ -19,6 +19,10 @@
 package org.apache.iotdb.db.integration;
 
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.metadata.MManager;
+import org.apache.iotdb.db.metadata.mnode.MNode;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
 import org.apache.iotdb.jdbc.IoTDBSQLException;
@@ -44,6 +48,24 @@ public class IoTDBSimpleQueryIT {
   }
 
   @Test
+  public void testCreatTimeseries() throws SQLException, ClassNotFoundException, MetadataException {
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try(Connection connection = DriverManager
+        .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/",
+            "root", "root");
+        Statement statement = connection.createStatement()){
+      statement.setFetchSize(5);
+      statement.execute("SET STORAGE GROUP TO root.sg1");
+      statement.execute("CREATE TIMESERIES root.sg1.d0.s1 WITH DATATYPE=INT32,ENCODING=PLAIN");
+    } catch (SQLException e) {
+      e.printStackTrace();
+    }
+
+    MeasurementMNode mNode = (MeasurementMNode) MManager.getInstance().getNodeByPath("root.sg1.d0.s1");
+    assertNull(mNode.getSchema().getProps());
+  }
+
+  @Test
   public void testEmptyDataSet() throws SQLException, ClassNotFoundException {
     Class.forName(Config.JDBC_DRIVER_NAME);
     try(Connection connection = DriverManager
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
index 7bc3a11..c735cc4 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.session;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -35,6 +36,9 @@ import java.util.List;
 import java.util.Map;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.metadata.MManager;
+import org.apache.iotdb.db.metadata.mnode.MeasurementMNode;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
 import org.apache.iotdb.rpc.BatchExecutionException;
@@ -296,7 +300,7 @@ public class IoTDBSessionIT {
 
   @Test
   public void testCreateMultiTimeseries()
-      throws IoTDBConnectionException, BatchExecutionException, StatementExecutionException {
+      throws IoTDBConnectionException, BatchExecutionException, StatementExecutionException, MetadataException {
     session = new Session("127.0.0.1", 6667, "root", "root");
     session.open();
 
@@ -325,6 +329,8 @@ public class IoTDBSessionIT {
 
     Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.s1"));
     Assert.assertTrue(session.checkTimeseriesExists("root.sg1.d1.s2"));
+    MeasurementMNode mNode = (MeasurementMNode) MManager.getInstance().getNodeByPath("root.sg1.d1.s1");
+    assertNull(mNode.getSchema().getProps());
 
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
index 0ef47ea..608d30a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
@@ -49,7 +49,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema>, Seriali
   private TSEncoding encoding;
   private TSEncodingBuilder encodingConverter;
   private CompressionType compressor;
-  private Map<String, String> props = new HashMap<>();
+  private Map<String, String> props = null;
 
   public MeasurementSchema() {
   }
@@ -58,7 +58,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema>, Seriali
     this(measurementId, tsDataType,
         TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getValueEncoder()),
         TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
+        null);
   }
 
   /**
@@ -67,12 +67,12 @@ public class MeasurementSchema implements Comparable<MeasurementSchema>, Seriali
   public MeasurementSchema(String measurementId, TSDataType type, TSEncoding encoding) {
     this(measurementId, type, encoding,
         TSFileDescriptor.getInstance().getConfig().getCompressor(),
-        Collections.emptyMap());
+        null);
   }
 
   public MeasurementSchema(String measurementId, TSDataType type, TSEncoding encoding,
       CompressionType compressionType) {
-    this(measurementId, type, encoding, compressionType, Collections.emptyMap());
+    this(measurementId, type, encoding, compressionType, null);
   }
 
   /**
@@ -86,7 +86,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema>, Seriali
     this.type = type;
     this.measurementId = measurementId;
     this.encoding = encoding;
-    this.props = props == null ? Collections.emptyMap() : props;
+    this.props = props;
     this.compressor = compressionType;
   }