You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/07/01 05:23:59 UTC

[iotdb] branch master updated: [IOTDB-1460] Failed to load configurations on startup (NPE) (#3479)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new b44915d  [IOTDB-1460] Failed to load configurations on startup (NPE) (#3479)
b44915d is described below

commit b44915da9caf6473b0edb6b753c5d38feedab951
Author: Steve Yurong Su (宇荣) <ro...@apache.org>
AuthorDate: Thu Jul 1 00:23:35 2021 -0500

    [IOTDB-1460] Failed to load configurations on startup (NPE) (#3479)
---
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  | 52 ++++++------
 .../apache/iotdb/db/qp/utils/DatetimeUtils.java    | 18 ++++-
 .../db/qp/utils/DatetimeQueryDataSetUtilsTest.java | 93 ++++++++++++----------
 3 files changed, 96 insertions(+), 67 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 025d604..0ba95d4 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -489,30 +489,6 @@ public class IoTDBDescriptor {
               properties.getProperty(
                   "compaction_thread_num", Integer.toString(conf.getCompactionThreadNum()))));
 
-      conf.setContinuousQueryThreadNum(
-          Integer.parseInt(
-              properties.getProperty(
-                  "continuous_query_thread_num",
-                  Integer.toString(conf.getContinuousQueryThreadNum()))));
-
-      if (conf.getContinuousQueryThreadNum() <= 0) {
-        conf.setContinuousQueryThreadNum(Runtime.getRuntime().availableProcessors() / 2);
-      }
-
-      conf.setMaxPendingContinuousQueryTasks(
-          Integer.parseInt(
-              properties.getProperty(
-                  "max_pending_continuous_query_tasks",
-                  Integer.toString(conf.getMaxPendingContinuousQueryTasks()))));
-
-      if (conf.getMaxPendingContinuousQueryTasks() <= 0) {
-        conf.setMaxPendingContinuousQueryTasks(64);
-      }
-
-      conf.setContinuousQueryMinimumEveryInterval(
-          DatetimeUtils.convertDurationStrToLong(
-              properties.getProperty("continuous_query_minimum_every_interval", "1s")));
-
       conf.setMergeWriteThroughputMbPerSec(
           Integer.parseInt(
               properties.getProperty(
@@ -795,6 +771,9 @@ public class IoTDBDescriptor {
       // trigger
       loadTriggerProps(properties);
 
+      // CQ
+      loadCQProps(properties);
+
     } catch (FileNotFoundException e) {
       logger.warn("Fail to find config file {}", url, e);
     } catch (IOException e) {
@@ -1200,6 +1179,31 @@ public class IoTDBDescriptor {
     }
   }
 
+  private void loadCQProps(Properties properties) {
+    conf.setContinuousQueryThreadNum(
+        Integer.parseInt(
+            properties.getProperty(
+                "continuous_query_thread_num",
+                Integer.toString(conf.getContinuousQueryThreadNum()))));
+    if (conf.getContinuousQueryThreadNum() <= 0) {
+      conf.setContinuousQueryThreadNum(Runtime.getRuntime().availableProcessors() / 2);
+    }
+
+    conf.setMaxPendingContinuousQueryTasks(
+        Integer.parseInt(
+            properties.getProperty(
+                "max_pending_continuous_query_tasks",
+                Integer.toString(conf.getMaxPendingContinuousQueryTasks()))));
+    if (conf.getMaxPendingContinuousQueryTasks() <= 0) {
+      conf.setMaxPendingContinuousQueryTasks(64);
+    }
+
+    conf.setContinuousQueryMinimumEveryInterval(
+        DatetimeUtils.convertDurationStrToLong(
+            properties.getProperty("continuous_query_minimum_every_interval", "1s"),
+            conf.getTimestampPrecision()));
+  }
+
   /** Get default encode algorithm by data type */
   public TSEncoding getDefaultEncodingByType(TSDataType dataType) {
     switch (dataType) {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java b/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java
index e0b1c26..2ca9939 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/utils/DatetimeUtils.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.qp.utils;
 
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.query.LogicalOperatorException;
+import org.apache.iotdb.db.utils.TestOnly;
 
 import java.time.DateTimeException;
 import java.time.Instant;
@@ -519,14 +520,23 @@ public class DatetimeUtils {
     return convertDurationStrToLong(-1, duration);
   }
 
+  public static long convertDurationStrToLong(String duration, String timestampPrecision) {
+    return convertDurationStrToLong(-1, duration, timestampPrecision);
+  }
+
+  public static long convertDurationStrToLong(long currentTime, String duration) {
+    return convertDurationStrToLong(
+        currentTime, duration, IoTDBDescriptor.getInstance().getConfig().getTimestampPrecision());
+  }
+
   /**
    * convert duration string to time value.
    *
    * @param duration represent duration string like: 12d8m9ns, 1y1mo, etc.
    * @return time in milliseconds, microseconds, or nanoseconds depending on the profile
    */
-  public static long convertDurationStrToLong(long currentTime, String duration) {
-    String timestampPrecision = IoTDBDescriptor.getInstance().getConfig().getTimestampPrecision();
+  public static long convertDurationStrToLong(
+      long currentTime, String duration, String timestampPrecision) {
     long total = 0;
     long temp = 0;
     for (int i = 0; i < duration.length(); i++) {
@@ -553,7 +563,9 @@ public class DatetimeUtils {
     return total;
   }
 
-  public static long convertDurationStrToLong(long value, String unit, String timestampPrecision) {
+  @TestOnly
+  public static long convertDurationStrToLongForTest(
+      long value, String unit, String timestampPrecision) {
     return convertDurationStrToLong(-1, value, unit, timestampPrecision);
   }
 
diff --git a/server/src/test/java/org/apache/iotdb/db/qp/utils/DatetimeQueryDataSetUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/qp/utils/DatetimeQueryDataSetUtilsTest.java
index 999a590..469bad0 100644
--- a/server/src/test/java/org/apache/iotdb/db/qp/utils/DatetimeQueryDataSetUtilsTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/utils/DatetimeQueryDataSetUtilsTest.java
@@ -74,60 +74,73 @@ public class DatetimeQueryDataSetUtilsTest {
   /** Test time precision is ms. */
   @Test
   public void convertDurationStrToLongTest1() {
-    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLong(7, "s", "ms"));
-    Assert.assertEquals(420000L, DatetimeUtils.convertDurationStrToLong(7, "m", "ms"));
-    Assert.assertEquals(25200000L, DatetimeUtils.convertDurationStrToLong(7, "h", "ms"));
-    Assert.assertEquals(604800000L, DatetimeUtils.convertDurationStrToLong(7, "d", "ms"));
-    Assert.assertEquals(4233600000L, DatetimeUtils.convertDurationStrToLong(7, "w", "ms"));
-    Assert.assertEquals(18144000000L, DatetimeUtils.convertDurationStrToLong(7, "mo", "ms"));
-    Assert.assertEquals(220752000000L, DatetimeUtils.convertDurationStrToLong(7, "y", "ms"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7, "ms", "ms"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7000, "us", "ms"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7000000, "ns", "ms"));
+    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLongForTest(7, "s", "ms"));
+    Assert.assertEquals(420000L, DatetimeUtils.convertDurationStrToLongForTest(7, "m", "ms"));
+    Assert.assertEquals(25200000L, DatetimeUtils.convertDurationStrToLongForTest(7, "h", "ms"));
+    Assert.assertEquals(604800000L, DatetimeUtils.convertDurationStrToLongForTest(7, "d", "ms"));
+    Assert.assertEquals(4233600000L, DatetimeUtils.convertDurationStrToLongForTest(7, "w", "ms"));
+    Assert.assertEquals(18144000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "mo", "ms"));
+    Assert.assertEquals(220752000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "y", "ms"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7, "ms", "ms"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7000, "us", "ms"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7000000, "ns", "ms"));
   }
 
   /** Test time precision is us. */
   @Test
   public void convertDurationStrToLongTest2() {
-    Assert.assertEquals(7000000L, DatetimeUtils.convertDurationStrToLong(7, "s", "us"));
-    Assert.assertEquals(420000000L, DatetimeUtils.convertDurationStrToLong(7, "m", "us"));
-    Assert.assertEquals(25200000000L, DatetimeUtils.convertDurationStrToLong(7, "h", "us"));
-    Assert.assertEquals(604800000000L, DatetimeUtils.convertDurationStrToLong(7, "d", "us"));
-    Assert.assertEquals(4233600000000L, DatetimeUtils.convertDurationStrToLong(7, "w", "us"));
-    Assert.assertEquals(18144000000000L, DatetimeUtils.convertDurationStrToLong(7, "mo", "us"));
-    Assert.assertEquals(220752000000000L, DatetimeUtils.convertDurationStrToLong(7, "y", "us"));
-    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLong(7, "ms", "us"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7, "us", "us"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7000, "ns", "us"));
+    Assert.assertEquals(7000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "s", "us"));
+    Assert.assertEquals(420000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "m", "us"));
+    Assert.assertEquals(25200000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "h", "us"));
+    Assert.assertEquals(604800000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "d", "us"));
+    Assert.assertEquals(
+        4233600000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "w", "us"));
+    Assert.assertEquals(
+        18144000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "mo", "us"));
+    Assert.assertEquals(
+        220752000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "y", "us"));
+    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLongForTest(7, "ms", "us"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7, "us", "us"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7000, "ns", "us"));
   }
 
   /** Test time precision is ns. */
   @Test
   public void convertDurationStrToLongTest3() {
-    Assert.assertEquals(7000000000L, DatetimeUtils.convertDurationStrToLong(7, "s", "ns"));
-    Assert.assertEquals(420000000000L, DatetimeUtils.convertDurationStrToLong(7, "m", "ns"));
-    Assert.assertEquals(25200000000000L, DatetimeUtils.convertDurationStrToLong(7, "h", "ns"));
-    Assert.assertEquals(604800000000000L, DatetimeUtils.convertDurationStrToLong(7, "d", "ns"));
-    Assert.assertEquals(4233600000000000L, DatetimeUtils.convertDurationStrToLong(7, "w", "ns"));
-    Assert.assertEquals(18144000000000000L, DatetimeUtils.convertDurationStrToLong(7, "mo", "ns"));
-    Assert.assertEquals(220752000000000000L, DatetimeUtils.convertDurationStrToLong(7, "y", "ns"));
-    Assert.assertEquals(7000000L, DatetimeUtils.convertDurationStrToLong(7, "ms", "ns"));
-    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLong(7, "us", "ns"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7, "ns", "ns"));
+    Assert.assertEquals(7000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "s", "ns"));
+    Assert.assertEquals(420000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "m", "ns"));
+    Assert.assertEquals(
+        25200000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "h", "ns"));
+    Assert.assertEquals(
+        604800000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "d", "ns"));
+    Assert.assertEquals(
+        4233600000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "w", "ns"));
+    Assert.assertEquals(
+        18144000000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "mo", "ns"));
+    Assert.assertEquals(
+        220752000000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "y", "ns"));
+    Assert.assertEquals(7000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "ms", "ns"));
+    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLongForTest(7, "us", "ns"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7, "ns", "ns"));
   }
 
   @Test
   public void getInstantWithPrecisionTest() {
-    Assert.assertEquals(7000000000L, DatetimeUtils.convertDurationStrToLong(7, "s", "ns"));
-    Assert.assertEquals(420000000000L, DatetimeUtils.convertDurationStrToLong(7, "m", "ns"));
-    Assert.assertEquals(25200000000000L, DatetimeUtils.convertDurationStrToLong(7, "h", "ns"));
-    Assert.assertEquals(604800000000000L, DatetimeUtils.convertDurationStrToLong(7, "d", "ns"));
-    Assert.assertEquals(4233600000000000L, DatetimeUtils.convertDurationStrToLong(7, "w", "ns"));
-    Assert.assertEquals(18144000000000000L, DatetimeUtils.convertDurationStrToLong(7, "mo", "ns"));
-    Assert.assertEquals(220752000000000000L, DatetimeUtils.convertDurationStrToLong(7, "y", "ns"));
-    Assert.assertEquals(7000000L, DatetimeUtils.convertDurationStrToLong(7, "ms", "ns"));
-    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLong(7, "us", "ns"));
-    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLong(7, "ns", "ns"));
+    Assert.assertEquals(7000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "s", "ns"));
+    Assert.assertEquals(420000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "m", "ns"));
+    Assert.assertEquals(
+        25200000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "h", "ns"));
+    Assert.assertEquals(
+        604800000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "d", "ns"));
+    Assert.assertEquals(
+        4233600000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "w", "ns"));
+    Assert.assertEquals(
+        18144000000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "mo", "ns"));
+    Assert.assertEquals(
+        220752000000000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "y", "ns"));
+    Assert.assertEquals(7000000L, DatetimeUtils.convertDurationStrToLongForTest(7, "ms", "ns"));
+    Assert.assertEquals(7000L, DatetimeUtils.convertDurationStrToLongForTest(7, "us", "ns"));
+    Assert.assertEquals(7L, DatetimeUtils.convertDurationStrToLongForTest(7, "ns", "ns"));
   }
 
   /** Test convert duration including natural month unit. Time includes: 1970-01-01 ~ 1970-12-01 */