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

[iotdb] branch fix_plan_corrupt_bug created (now f2d6f84)

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

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


      at f2d6f84  fix stackoverflow when parse plan failed

This branch includes the following new commits:

     new f2d6f84  fix stackoverflow when parse plan failed

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: fix stackoverflow when parse plan failed

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

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

commit f2d6f84360e0ff2235dac59908bd9472bc04c9d1
Author: chaow <xu...@gmail.com>
AuthorDate: Tue Mar 30 20:26:11 2021 +0800

    fix stackoverflow when parse plan failed
---
 .../db/qp/physical/crud/InsertMultiTabletPlan.java   |  3 +++
 .../iotdb/db/qp/physical/crud/InsertRowsPlan.java    |  3 +++
 .../iotdb/db/qp/physical/crud/InsertTabletPlan.java  |  2 +-
 .../qp/physical/sys/CreateMultiTimeSeriesPlan.java   | 20 ++++++++++++++++++++
 4 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertMultiTabletPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertMultiTabletPlan.java
index 6f73a74..6749354 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertMultiTabletPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertMultiTabletPlan.java
@@ -199,6 +199,9 @@ public class InsertMultiTabletPlan extends InsertPlan {
 
   @Override
   public void checkIntegrity() throws QueryProcessException {
+    if (insertTabletPlanList.isEmpty()) {
+      throw new QueryProcessException("sub tablet is empty.");
+    }
     for (InsertTabletPlan insertTabletPlan : insertTabletPlanList) {
       insertTabletPlan.checkIntegrity();
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowsPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowsPlan.java
index cdd35ab..28f4f3f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowsPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowsPlan.java
@@ -81,6 +81,9 @@ public class InsertRowsPlan extends InsertPlan {
 
   @Override
   public void checkIntegrity() throws QueryProcessException {
+    if (insertRowPlanList.isEmpty()) {
+      throw new QueryProcessException("sub plan are empty.");
+    }
     for (InsertRowPlan insertRowPlan : insertRowPlanList) {
       insertRowPlan.checkIntegrity();
     }
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 97b36cc..8ca7a40 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
@@ -604,7 +604,7 @@ public class InsertTabletPlan extends InsertPlan {
   @Override
   public void checkIntegrity() throws QueryProcessException {
     super.checkIntegrity();
-    if (columns == null) {
+    if (columns == null || columns.length == 0) {
       throw new QueryProcessException("Values are null");
     }
     if (measurements.length != columns.length) {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java
index 9ebc54b..4c0e854 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java
@@ -19,6 +19,7 @@
 package org.apache.iotdb.db.qp.physical.sys;
 
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
@@ -33,6 +34,7 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -323,4 +325,22 @@ public class CreateMultiTimeSeriesPlan extends PhysicalPlan {
   public int hashCode() {
     return Objects.hash(paths, dataTypes, encodings, compressors);
   }
+
+  @Override
+  public void checkIntegrity() throws QueryProcessException {
+    if (paths == null || paths.isEmpty()) {
+      throw new QueryProcessException("sub timeseries are empty");
+    }
+    if (paths.size() != dataTypes.size()) {
+      throw new QueryProcessException(
+          String.format(
+              "Measurements length [%d] does not match " + " datatype length [%d]",
+              paths.size(), dataTypes.size()));
+    }
+    for (PartialPath path : paths) {
+      if (path == null) {
+        throw new QueryProcessException("Paths contain null: " + Arrays.toString(paths.toArray()));
+      }
+    }
+  }
 }