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

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


The following commit(s) were added to refs/heads/master by this push:
     new 392b64e  [IOTDB-738] Fix measurements has blank (#1308)
392b64e is described below

commit 392b64e756ec24f7403d2f966561278ce10417ad
Author: Jialin Qiao <[email protected]>
AuthorDate: Wed Jun 3 18:10:12 2020 +0800

    [IOTDB-738] Fix measurements has blank (#1308)
    
    * fix auto create InternalMNode for sg
    * fix do not trim measurement
---
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  2 +-
 .../engine/storagegroup/StorageGroupProcessor.java |  6 ++--
 .../org/apache/iotdb/db/metadata/MManager.java     | 18 ++----------
 .../java/org/apache/iotdb/db/metadata/MTree.java   | 11 ++++++--
 .../iotdb/db/metadata/mnode/InternalMNode.java     |  6 ++--
 .../apache/iotdb/db/metadata/mnode/LeafMNode.java  |  8 +++++-
 .../iotdb/db/metadata/mnode/StorageGroupMNode.java |  4 +--
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  | 32 ++++++++++------------
 .../iotdb/db/qp/physical/crud/InsertPlan.java      | 10 ++++---
 .../db/qp/physical/crud/InsertTabletPlan.java      |  6 ++--
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  3 +-
 11 files changed, 53 insertions(+), 53 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
index f5bfe5e..4629023 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
@@ -100,7 +100,7 @@ public abstract class AbstractMemTable implements IMemTable 
{
   public void insert(InsertPlan insertPlan) {
     for (int i = 0; i < insertPlan.getValues().length; i++) {
 
-      if (insertPlan.getSchemas()[i] == null) {
+      if (insertPlan.getValues()[i] == null) {
         continue;
       }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 6d8a3fe..dabc095 100755
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -768,7 +768,7 @@ public class StorageGroupProcessor {
       String[] measurementList = plan.getMeasurements();
       for (int i = 0; i < measurementList.length; i++) {
         // Update cached last value with high priority
-        ((LeafMNode) manager.getChild(node, measurementList[i], 
plan.getDeviceId()))
+        ((LeafMNode) node.getChild(measurementList[i]))
             .updateCachedLast(plan.composeLastTimeValuePair(i), true, 
latestFlushedTime);
       }
     } catch (MetadataException e) {
@@ -819,11 +819,11 @@ public class StorageGroupProcessor {
       node = 
manager.getDeviceNodeWithAutoCreateAndReadLock(plan.getDeviceId());
       String[] measurementList = plan.getMeasurements();
       for (int i = 0; i < measurementList.length; i++) {
-        if (plan.getSchemas()[i] == null) {
+        if (plan.getValues()[i] == null) {
           continue;
         }
         // Update cached last value with high priority
-        ((LeafMNode) manager.getChild(node, measurementList[i], 
plan.getDeviceId()))
+        ((LeafMNode) node.getChild(measurementList[i]))
             .updateCachedLast(plan.composeTimeValuePair(i), true, 
latestFlushedTime);
       }
     } catch (MetadataException e) {
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 e7ae081..0c48fe5 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
@@ -19,6 +19,7 @@
 package org.apache.iotdb.db.metadata;
 
 import org.apache.iotdb.db.conf.IoTDBConfig;
+import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.conf.adapter.ActiveTimeSeriesCounter;
 import org.apache.iotdb.db.conf.adapter.IoTDBConfigDynamicAdapter;
@@ -863,19 +864,6 @@ public class MManager {
     }
   }
 
-  public MNode getChild(MNode parent, String child, String info) {
-    MNode childNode = parent.getChild(child);
-    int tempCount = 0;
-    while (childNode == null) {
-      tempCount ++;
-      if (tempCount % 10000 == 0) {
-        logger.warn("try to get child {} 10000 times from {}", child, info);
-      }
-      childNode = parent.getChild(child);
-    }
-    return childNode;
-  }
-
   /**
    * Get storage group node by path. If storage group is not set, 
StorageGroupNotSetException will
    * be thrown
@@ -928,11 +916,11 @@ public class MManager {
         String storageGroupName = MetaUtils.getStorageGroupNameByLevel(path, 
sgLevel);
         setStorageGroup(storageGroupName);
       }
-      node = mtree.getDeviceNodeWithAutoCreating(path);
+      node = mtree.getDeviceNodeWithAutoCreating(path, sgLevel);
       return node;
     } catch (StorageGroupAlreadySetException e) {
       // ignore set storage group concurrently
-      node = mtree.getDeviceNodeWithAutoCreating(path);
+      node = mtree.getDeviceNodeWithAutoCreating(path, sgLevel);
       return node;
     } finally {
       if (node != null) {
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 4551f0a..86134b3 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
@@ -138,7 +138,7 @@ public class MTree implements Serializable {
    *
    * <p>e.g., get root.sg.d1, get or create all internal nodes and return the 
node of d1
    */
-  MNode getDeviceNodeWithAutoCreating(String deviceId) throws 
MetadataException {
+  MNode getDeviceNodeWithAutoCreating(String deviceId, int sgLevel) throws 
MetadataException {
     String[] nodeNames = MetaUtils.getNodeNames(deviceId);
     if (nodeNames.length <= 1 || !nodeNames[0].equals(root.getName())) {
       throw new IllegalPathException(deviceId);
@@ -146,7 +146,12 @@ public class MTree implements Serializable {
     MNode cur = root;
     for (int i = 1; i < nodeNames.length; i++) {
       if (!cur.hasChild(nodeNames[i])) {
-        cur.addChild(nodeNames[i], new InternalMNode(cur, nodeNames[i]));
+        if (i == sgLevel) {
+          cur.addChild(nodeNames[i], new StorageGroupMNode(cur, nodeNames[i],
+              IoTDBDescriptor.getInstance().getConfig().getDefaultTTL()));
+        } else {
+          cur.addChild(nodeNames[i], new InternalMNode(cur, nodeNames[i]));
+        }
       }
       cur = cur.getChild(nodeNames[i]);
     }
@@ -205,7 +210,7 @@ public class MTree implements Serializable {
     } else {
       StorageGroupMNode storageGroupMNode =
           new StorageGroupMNode(
-              cur, nodeNames[i], path, 
IoTDBDescriptor.getInstance().getConfig().getDefaultTTL());
+              cur, nodeNames[i], 
IoTDBDescriptor.getInstance().getConfig().getDefaultTTL());
       cur.addChild(nodeNames[i], storageGroupMNode);
     }
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java
index 2d199cb..67c2537 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/InternalMNode.java
@@ -18,9 +18,9 @@
  */
 package org.apache.iotdb.db.metadata.mnode;
 
+import java.util.LinkedHashMap;
 import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
@@ -49,7 +49,7 @@ public class InternalMNode extends MNode {
   }
 
   @Override
-  public void addChild(String name, MNode child) {
+  public synchronized void addChild(String name, MNode child) {
     children.put(name, child);
   }
 
@@ -89,7 +89,7 @@ public class InternalMNode extends MNode {
   }
 
   @Override
-  public MNode getChild(String name) {
+  public synchronized MNode getChild(String name) {
     return children.containsKey(name) ? children.get(name) : 
aliasChildren.get(name);
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/LeafMNode.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/LeafMNode.java
index bb64a10..3f65929 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/LeafMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/LeafMNode.java
@@ -26,9 +26,13 @@ import 
org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import java.util.Collections;
 import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class LeafMNode extends MNode {
 
+  private static final Logger logger = 
LoggerFactory.getLogger(LeafMNode.class);
+
   private static final long serialVersionUID = -1199657856921206435L;
 
   /**
@@ -73,7 +77,9 @@ public class LeafMNode extends MNode {
 
   @Override
   public MNode getChild(String name) {
-    return null;
+    logger.warn("current node {} is a LeafMNode, can not get child {}", 
super.name, name);
+    throw new RuntimeException(
+        String.format("current node %s is a LeafMNode, can not get child %s", 
super.name, name));
   }
 
   @Override
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 a122d95..02c668f 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
@@ -29,10 +29,10 @@ public class StorageGroupMNode extends InternalMNode {
   private long dataTTL;
 
 
-  public StorageGroupMNode(MNode parent, String name, String fullPath, long 
dataTTL) {
+  public StorageGroupMNode(MNode parent, String name, long dataTTL) {
     super(parent, name);
     this.dataTTL = dataTTL;
-    this.fullPath = fullPath;
+    this.fullPath = getFullPath();
   }
 
   public long getDataTTL() {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java 
b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index dde4957..2358311 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -875,7 +875,7 @@ public class PlanExecutor implements IPlanExecutor {
       MeasurementSchema[] schemas = new 
MeasurementSchema[measurementList.length];
 
       for (int i = 0; i < measurementList.length; i++) {
-        String measurement = measurementList[i];
+        String measurement = measurementList[i].trim();
         try {
           if (!node.hasChild(measurement)) {
             if 
(!IoTDBDescriptor.getInstance().getConfig().isAutoCreateSchemaEnabled()) {
@@ -886,7 +886,7 @@ public class PlanExecutor implements IPlanExecutor {
             Path path = new Path(deviceId, measurement);
             internalCreateTimeseries(path.toString(), dataType);
           }
-          LeafMNode measurementNode = (LeafMNode) 
MManager.getInstance().getChild(node, measurement, deviceId);
+          LeafMNode measurementNode = (LeafMNode) node.getChild(measurement);
 
           schemas[i] = measurementNode.getSchema();
           // reset measurement to common name instead of alias
@@ -977,10 +977,8 @@ public class PlanExecutor implements IPlanExecutor {
           Collections.emptyMap());
     } catch (PathAlreadyExistException e) {
       if (logger.isDebugEnabled()) {
-        logger.debug(
-            "Ignore PathAlreadyExistException when Concurrent inserting"
-                + " a non-exist time series {}",
-            path);
+        logger.debug("Ignore PathAlreadyExistException when Concurrent 
inserting"
+                + " a non-exist time series {}", path);
       }
     }
   }
@@ -1020,31 +1018,31 @@ public class PlanExecutor implements IPlanExecutor {
       IoTDBConfig conf = IoTDBDescriptor.getInstance().getConfig();
       MeasurementSchema[] schemas = new 
MeasurementSchema[measurementList.length];
 
+      String measurement;
       for (int i = 0; i < measurementList.length; i++) {
+        measurement = measurementList[i].trim();
         // check if timeseries exists
-        if (!node.hasChild(measurementList[i])) {
+        if (!node.hasChild(measurement)) {
           if (!conf.isAutoCreateSchemaEnabled()) {
-            throw new QueryProcessException(
-                String.format(
-                    "Current deviceId[%s] does not contain measurement:%s",
-                    deviceId, measurementList[i]));
+            throw new QueryProcessException(String.format(
+                "Current deviceId[%s] does not contain measurement:%s", 
deviceId, measurement));
           }
-          Path path = new Path(deviceId, measurementList[i]);
+          Path path = new Path(deviceId, measurement);
           TSDataType dataType = dataTypes[i];
           internalCreateTimeseries(path.getFullPath(), dataType);
         }
-        LeafMNode measurementNode = (LeafMNode) 
MManager.getInstance().getChild(node, measurementList[i], deviceId);
+        LeafMNode measurementNode = (LeafMNode) node.getChild(measurement);
 
         // check data type
         if (measurementNode.getSchema().getType() != 
insertTabletPlan.getDataTypes()[i]) {
-          throw new QueryProcessException(
-              String.format(
+          throw new QueryProcessException(String.format(
                   "Datatype mismatch, Insert measurement %s type %s, metadata 
tree type %s",
-                  measurementList[i],
-                  insertTabletPlan.getDataTypes()[i],
+                  measurement, insertTabletPlan.getDataTypes()[i],
                   measurementNode.getSchema().getType()));
         }
         schemas[i] = measurementNode.getSchema();
+        // reset measurement to common name instead of alias
+        measurementList[i] = measurementNode.getName();
       }
       insertTabletPlan.setSchemas(schemas);
       return StorageEngine.getInstance().insertTablet(insertTabletPlan);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java
index c28095c..119cc53 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java
@@ -188,6 +188,7 @@ public class InsertPlan extends PhysicalPlan {
               measurements[i], values[i], types[i]);
           if 
(IoTDBDescriptor.getInstance().getConfig().isEnablePartialInsert()) {
             markMeasurementInsertionFailed(i);
+            schemas[i] = null;
           } else {
             throw e;
           }
@@ -204,7 +205,6 @@ public class InsertPlan extends PhysicalPlan {
       failedMeasurements = new ArrayList<>();
     }
     failedMeasurements.add(measurements[index]);
-    schemas[index] = null;
     measurements[index] = null;
     types[index] = null;
     values[index] = null;
@@ -225,7 +225,7 @@ public class InsertPlan extends PhysicalPlan {
   }
 
   public void setDeviceId(String deviceId) {
-    this.deviceId = deviceId;
+    this.deviceId = deviceId.trim();
   }
 
   public String[] getMeasurements() {
@@ -279,8 +279,10 @@ public class InsertPlan extends PhysicalPlan {
       }
     }
 
-    for (MeasurementSchema schema : schemas) {
-      schema.serializeTo(stream);
+    for (MeasurementSchema schema: schemas) {
+      if (schema != null) {
+        schema.serializeTo(stream);
+      }
     }
 
     try {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java
 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java
index 4fcd813..20ab59b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java
@@ -73,18 +73,18 @@ public class InsertTabletPlan extends PhysicalPlan {
 
   public InsertTabletPlan(String deviceId, List<String> measurements) {
     super(false, OperatorType.BATCHINSERT);
-    this.deviceId = deviceId;
+    this.deviceId = deviceId.trim();
     setMeasurements(measurements);
   }
   public InsertTabletPlan(String deviceId, String[] measurements) {
     super(false, OperatorType.BATCHINSERT);
-    this.deviceId = deviceId;
+    this.deviceId = deviceId.trim();
     setMeasurements(measurements);
   }
 
   public InsertTabletPlan(String deviceId, String[] measurements, 
List<Integer> dataTypes) {
     super(false, OperatorType.BATCHINSERT);
-    this.deviceId = deviceId;
+    this.deviceId = deviceId.trim();
     this.measurements = measurements;
     setDataTypes(dataTypes);
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java 
b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 27cfd44..93d6770 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -1331,6 +1331,7 @@ public class TSServiceImpl implements TSIService.Iface, 
ServerContext {
     if (status != null) {
       return status;
     }
+    logger.info("createTimeseries {}", req.getPath());
     return executePlan(plan);
   }
 
@@ -1340,7 +1341,7 @@ public class TSServiceImpl implements TSIService.Iface, 
ServerContext {
       logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
       return 
RpcUtils.getTSBatchExecuteStatementResp(TSStatusCode.NOT_LOGIN_ERROR);
     }
-
+    logger.info("createMultiTimeseries, first is {}", req.getPaths().get(0));
     List<TSStatus> statusList = new ArrayList<>(req.paths.size());
     for (int i = 0; i < req.paths.size(); i++) {
       CreateTimeSeriesPlan plan = new CreateTimeSeriesPlan(new 
Path(req.getPaths().get(i)),

Reply via email to