You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ka...@apache.org on 2021/05/13 04:14:35 UTC

[iotdb] 01/02: fix format

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

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

commit 629ae1342e9d63a0ddf83aa2968fbc0649eaa12d
Author: kr11 <3095717866.com>
AuthorDate: Thu May 13 11:32:21 2021 +0800

    fix format
---
 .../iotdb/db/index/algorithm/elb/ELBIndex.java     |   4 +-
 .../iotdb/db/index/algorithm/mmhh/MMHHIndex.java   |   4 +-
 .../iotdb/db/index/algorithm/rtree/RTree.java      |   2 +-
 .../iotdb/db/index/stats/IndexStatManager.java     |   2 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java |   6 +-
 .../org/apache/iotdb/db/index/IndexTestUtils.java  |   9 +
 .../org/apache/iotdb/db/index/it/ELBWindIT.java    | 303 +++++++++++++++++++++
 .../apache/iotdb/db/index/it/MMHHIndexReadIT.java  |   1 -
 .../apache/zeppelin/iotdb/IoTDBInterpreter.java    |   8 +-
 .../zeppelin/iotdb/IoTDBInterpreterTest.java       |   6 +-
 10 files changed, 326 insertions(+), 19 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
index 44c8b9c..552fcd8 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
@@ -314,7 +314,7 @@ public class ELBIndex extends IoTDBIndex {
               TVList.append(tvList, p.tvList, p.offset, p.length);
               PartialPath showPath = indexSeries.concatNode(String.valueOf(tvList.getMinTime()));
               res.add(new DistSeries(0, tvList, showPath));
-              if(IndexStatManager.alreadyTimeout()){
+              if (IndexStatManager.alreadyTimeout()) {
                 logger.warn("ELB query on {}: already timeout", indexSeries);
                 alreadyTimeout = true;
                 break;
@@ -330,7 +330,7 @@ public class ELBIndex extends IoTDBIndex {
           }
           featureExtractor.clearProcessedSrcData();
           featureTotal += System.nanoTime() - featureStart;
-          if(alreadyTimeout){
+          if (alreadyTimeout) {
             break;
           }
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java b/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java
index eaeab75..101cf2a 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/mmhh/MMHHIndex.java
@@ -367,7 +367,7 @@ public class MMHHIndex extends IoTDBIndex {
       if (full) {
         break;
       }
-      if(IndexStatManager.alreadyTimeout()){
+      if (IndexStatManager.alreadyTimeout()) {
         logger.warn("MMHH query on {}: already timeout", indexSeries);
         break;
       }
@@ -404,7 +404,7 @@ public class MMHHIndex extends IoTDBIndex {
         if (full) {
           return true;
         }
-        if(IndexStatManager.alreadyTimeout()){
+        if (IndexStatManager.alreadyTimeout()) {
           logger.warn("MMHH query on {}: already timeout, MMHHIndex:406", indexSeries);
           return true;
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/index/algorithm/rtree/RTree.java b/server/src/main/java/org/apache/iotdb/db/index/algorithm/rtree/RTree.java
index 1fc07e5..ecf4fc5 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/rtree/RTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/rtree/RTree.java
@@ -741,7 +741,7 @@ public class RTree<T> {
                 patternFeatures);
         bsfAnswer.dist =
             minTopKDistOfNode(pairs.right, pairs.left, queryTs, topKPQ, calcRealDistFunc, topK);
-        if(IndexStatManager.alreadyTimeout()){
+        if (IndexStatManager.alreadyTimeout()) {
           logger.warn("RTree query already timeout, no more visiting leaf node, RTree:745");
           break;
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/index/stats/IndexStatManager.java b/server/src/main/java/org/apache/iotdb/db/index/stats/IndexStatManager.java
index 84e7f44..d26d21c 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/stats/IndexStatManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/stats/IndexStatManager.java
@@ -31,7 +31,7 @@ public class IndexStatManager {
   public static long totalQueryCost = 0;
   public static long loadRawDataCost = 0;
   public static long latestTimestamp = 0;
-  
+
   public static String provideReport() {
     // total:%.3fms-feature:%.3fms-load:%.3fms
     String ret =
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 b6f9b6c..3ace443 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
@@ -636,15 +636,13 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
           // it's a hyper-parameter, we can add it into .properties.
           // although we cannot trust that index always return result before time out, but index
           // will early-stop the query
-//          long indexQueryExtraTimeInMs = 3_000;
+          //          long indexQueryExtraTimeInMs = 3_000;
           long indexQueryExtraTimeInMs = 3_000;
           long indexFinalTimeout = actualTimeout + indexQueryExtraTimeInMs;
           queryTimeManager.registerQuery(queryId, startTime, statement, indexFinalTimeout);
-        }
-        else{
+        } else {
           queryTimeManager.registerQuery(queryId, startTime, statement, timeout);
         }
-
       }
       if (plan instanceof QueryPlan && config.isEnablePerformanceTracing()) {
         TracingManager tracingManager = TracingManager.getInstance();
diff --git a/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java b/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java
index e9b235f..0f37b63 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java
@@ -67,6 +67,15 @@ public class IndexTestUtils {
     return array.toString();
   }
 
+  public static String getStringFromList(List<Float> list, int start, int end) {
+    StringBuilder array = new StringBuilder();
+    for (int i = start; i < end; i++) {
+      array.append(list.get(i)).append(',');
+    }
+    array.deleteCharAt(array.length() - 1);
+    return array.toString();
+  }
+
   public static String tvListToString(TVList tvList) {
     StringBuilder sb = new StringBuilder();
     sb.append("{");
diff --git a/server/src/test/java/org/apache/iotdb/db/index/it/ELBWindIT.java b/server/src/test/java/org/apache/iotdb/db/index/it/ELBWindIT.java
new file mode 100644
index 0000000..1387c42
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/index/it/ELBWindIT.java
@@ -0,0 +1,303 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.index.it;
+
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.index.IndexManager;
+import org.apache.iotdb.db.index.common.IndexUtils;
+import org.apache.iotdb.db.rescon.TVListAllocator;
+import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.db.utils.datastructure.TVList;
+import org.apache.iotdb.jdbc.Config;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.Statement;
+
+import static org.apache.iotdb.db.index.IndexTestUtils.getArrayRange;
+import static org.apache.iotdb.db.index.common.IndexType.ELB_INDEX;
+import static org.junit.Assert.fail;
+
+public class ELBIndexReadIT {
+
+  private static final String insertPattern = "INSERT INTO %s(timestamp, %s) VALUES (%d, %.3f)";
+
+  private static final String storageGroupSub = "root.wind1";
+  private static final String storageGroupWhole = "root.wind2";
+
+  private static final String speed1 = "root.wind1.azq01.speed";
+  private static final String speed1Device = "root.wind1.azq01";
+  private static final String speed1Sensor = "speed";
+
+  private static final String directionDevicePattern = "root.wind2.%d";
+  private static final String directionPattern = "root.wind2.%d.direction";
+  private static final String directionSensor = "direction";
+
+  private static final String indexSub = speed1;
+  private static final String indexWhole = "root.wind2.*.direction";
+  private static final int wholeSize = 5;
+  private static final int wholeDim = 100;
+  private static final int subLength = 50;
+
+  @Before
+  public void setUp() throws Exception {
+    IoTDBDescriptor.getInstance().getConfig().setEnableIndex(true);
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.envSetUp();
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    EnvironmentUtils.cleanEnv();
+    IoTDBDescriptor.getInstance().getConfig().setEnableIndex(false);
+  }
+
+  private static void insertSQL(boolean createTS) throws ClassNotFoundException {
+    for (int i = 0; i < 10000; i++) {
+      System.out.println(
+          String.format(insertPattern, speed1Device, speed1Sensor, i, (float) (i * 10 + 9)));
+    }
+    IndexUtils.breakDown("asd");
+    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.execute(String.format("SET STORAGE GROUP TO %s", storageGroupSub));
+      statement.execute(String.format("SET STORAGE GROUP TO %s", storageGroupWhole));
+      System.out.println(String.format("SET STORAGE GROUP TO %s", storageGroupSub));
+      System.out.println(String.format("SET STORAGE GROUP TO %s", storageGroupWhole));
+      if (createTS) {
+        statement.execute(
+            String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", speed1));
+        System.out.println(
+            String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", speed1));
+        for (int i = 0; i < wholeSize; i++) {
+          String wholePath = String.format(directionPattern, i);
+          statement.execute(
+              String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", wholePath));
+          System.out.println(
+              String.format("CREATE TIMESERIES %s WITH DATATYPE=FLOAT,ENCODING=PLAIN", wholePath));
+        }
+      }
+      statement.execute(
+          String.format("CREATE INDEX ON %s WITH INDEX=%s, BLOCK_SIZE=%d", indexSub, ELB_INDEX, 5));
+      System.out.println(
+          String.format("CREATE INDEX ON %s WITH INDEX=%s, BLOCK_SIZE=%d", indexSub, ELB_INDEX, 5));
+
+      TVList subInput = TVListAllocator.getInstance().allocate(TSDataType.DOUBLE);
+      for (int i = 0; i < subLength; i++) {
+        subInput.putDouble(i, i * 10);
+      }
+      for (int i = 0; i < 20; i++) {
+        statement.execute(
+            String.format(
+                insertPattern,
+                speed1Device,
+                speed1Sensor,
+                subInput.getTime(i),
+                subInput.getDouble(i)));
+        System.out.println(
+            String.format(
+                insertPattern,
+                speed1Device,
+                speed1Sensor,
+                subInput.getTime(i),
+                subInput.getDouble(i)));
+      }
+      statement.execute("flush");
+      //      System.out.println("==========================");
+      //      System.out.println(IndexManager.getInstance().getRouter());
+
+      for (int i = 25; i < 30; i++) {
+        statement.execute(
+            String.format(
+                insertPattern,
+                speed1Device,
+                speed1Sensor,
+                subInput.getTime(i),
+                subInput.getDouble(i)));
+        System.out.println(
+            String.format(
+                insertPattern,
+                speed1Device,
+                speed1Sensor,
+                subInput.getTime(i),
+                subInput.getDouble(i)));
+      }
+      statement.execute("flush");
+
+      IndexManager.getInstance().stop();
+      IndexManager.getInstance().start();
+
+      for (int i = 40; i < subLength; i++) {
+        statement.execute(
+            String.format(
+                insertPattern,
+                speed1Device,
+                speed1Sensor,
+                subInput.getTime(i),
+                subInput.getDouble(i)));
+        System.out.println(
+            String.format(
+                insertPattern,
+                speed1Device,
+                speed1Sensor,
+                subInput.getTime(i),
+                subInput.getDouble(i)));
+      }
+      statement.execute("flush");
+      //      System.out.println("==========================");
+      //      System.out.println(IndexManager.getInstance().getRouter());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void checkMultiSeriesTimeAlignedWithCreateTS() throws ClassNotFoundException {
+    checkMultiSeriesTimeAligned(true);
+  }
+
+  @Test
+  public void checkMultiSeriesTimeAlignedWithoutCreateTS() throws ClassNotFoundException {
+    checkMultiSeriesTimeAligned(false);
+  }
+
+  private void checkMultiSeriesTimeAligned(boolean createTS) throws ClassNotFoundException {
+    insertSQL(createTS);
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+
+      String querySQL =
+          "SELECT speed.* FROM root.wind1.azq01 WHERE Speed "
+              + String.format("CONTAIN (%s) WITH TOLERANCE 100000 ", getArrayRange(170, 200, 10))
+              + String.format("CONCAT (%s) WITH TOLERANCE 200 ", getArrayRange(250, 300, 10))
+              + String.format("CONCAT (%s) WITH TOLERANCE 100000 ", getArrayRange(400, 430, 10));
+      System.out.println(querySQL);
+      boolean hasIndex = statement.execute(querySQL);
+      String gt =
+          "Time,root.wind1.azq01.speed.17,\n"
+              + "17,170.0,\n"
+              + "18,180.0,\n"
+              + "19,190.0,\n"
+              + "25,250.0,\n"
+              + "26,260.0,\n"
+              + "27,270.0,\n"
+              + "28,280.0,\n"
+              + "29,290.0,\n"
+              + "40,400.0,\n"
+              + "41,410.0,\n"
+              + "42,420.0,";
+      Assert.assertTrue(hasIndex);
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          sb.append(resultSetMetaData.getColumnName(i)).append(",");
+        }
+        sb.append("\n");
+        while (resultSet.next()) {
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            sb.append(resultSet.getString(i)).append(",");
+          }
+          sb.append("\n");
+        }
+        System.out.println(sb);
+        //        Assert.assertEquals(gt, sb.toString());
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void checkReadWithCreateTS() throws ClassNotFoundException {
+    checkRead(true);
+  }
+
+  @Test
+  public void checkReadWithoutCreateTS() throws ClassNotFoundException {
+    checkRead(false);
+  }
+
+  private void checkRead(boolean createTS) throws ClassNotFoundException {
+    insertSQL(createTS);
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+
+      String querySQL =
+          "SELECT speed.* FROM root.wind1.azq01 WHERE Speed "
+              + String.format("CONTAIN (%s) WITH TOLERANCE 0 ", getArrayRange(170, 200, 10))
+              + String.format("CONCAT (%s) WITH TOLERANCE 0 ", getArrayRange(250, 300, 10))
+              + String.format("CONCAT (%s) WITH TOLERANCE 0 ", getArrayRange(400, 430, 10));
+      System.out.println(querySQL);
+      statement.setQueryTimeout(20);
+      boolean hasIndex = statement.execute(querySQL);
+      String gt =
+          "Time,root.wind1.azq01.speed.17,\n"
+              + "17,170.0,\n"
+              + "18,180.0,\n"
+              + "19,190.0,\n"
+              + "25,250.0,\n"
+              + "26,260.0,\n"
+              + "27,270.0,\n"
+              + "28,280.0,\n"
+              + "29,290.0,\n"
+              + "40,400.0,\n"
+              + "41,410.0,\n"
+              + "42,420.0,\n";
+      Assert.assertTrue(hasIndex);
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          sb.append(resultSetMetaData.getColumnName(i)).append(",");
+        }
+        sb.append("\n");
+        while (resultSet.next()) {
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            sb.append(resultSet.getString(i)).append(",");
+          }
+          sb.append("\n");
+        }
+        System.out.println(sb);
+        Assert.assertEquals(gt, sb.toString());
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java b/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java
index 38974f3..950db1f 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/it/MMHHIndexReadIT.java
@@ -122,7 +122,6 @@ public class MMHHIndexReadIT {
       statement.execute("flush");
       System.out.println(IndexManager.getInstance().getRouter());
 
-
     } catch (Exception e) {
       e.printStackTrace();
       fail(e.getMessage());
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/iotdb/IoTDBInterpreter.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/iotdb/IoTDBInterpreter.java
index f4d0102..0665db0 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/iotdb/IoTDBInterpreter.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/iotdb/IoTDBInterpreter.java
@@ -222,8 +222,7 @@ public class IoTDBInterpreter extends AbstractInterpreter {
       String timeDisplayType = values[1].trim();
       this.timeFormat = setTimeFormat(values[1]);
       return new InterpreterResult(Code.SUCCESS, "Time display type has set to " + timeDisplayType);
-    }
-    else if (specialCmd.startsWith(SET_QUERY_TIMEOUT)) {
+    } else if (specialCmd.startsWith(SET_QUERY_TIMEOUT)) {
       String[] values = cmd.split(EQUAL_SIGN);
       if (values.length != 2) {
         throw new StatementExecutionException(
@@ -231,7 +230,8 @@ public class IoTDBInterpreter extends AbstractInterpreter {
                 "Query timeout format error, please input like %s=10", SET_QUERY_TIMEOUT));
       }
       this.queryTimeout = Integer.parseInt(values[1].trim());
-      return new InterpreterResult(Code.SUCCESS, "Query timeout has set to " + queryTimeout + " seconds");
+      return new InterpreterResult(
+          Code.SUCCESS, "Query timeout has set to " + queryTimeout + " seconds");
     }
     return executeQuery(connection, cmd);
   }
@@ -240,7 +240,7 @@ public class IoTDBInterpreter extends AbstractInterpreter {
     StringBuilder stringBuilder = new StringBuilder();
     try (Statement statement = connection.createStatement()) {
       statement.setFetchSize(fetchSize);
-      if(this.queryTimeout > 0){
+      if (this.queryTimeout > 0) {
         statement.setQueryTimeout(this.queryTimeout);
       }
       boolean hasResultSet = statement.execute(cmd.trim());
diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java
index d5dbbd8..0d775aa 100644
--- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java
+++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/iotdb/IoTDBInterpreterTest.java
@@ -138,12 +138,10 @@ public class IoTDBInterpreterTest {
   public void testSetQueryTimeout() {
     // default
     Assert.assertEquals(-1, interpreter.getQueryTimeout());
-    InterpreterResult actual =
-        interpreter.internalInterpret(SET_QUERY_TIMEOUT + "=" + 2, null);
+    InterpreterResult actual = interpreter.internalInterpret(SET_QUERY_TIMEOUT + "=" + 2, null);
     Assert.assertNotNull(actual);
     Assert.assertEquals(Code.SUCCESS, actual.code());
-    Assert.assertEquals(
-        "Query timeout has set to 2 seconds", actual.message().get(0).getData());
+    Assert.assertEquals("Query timeout has set to 2 seconds", actual.message().get(0).getData());
     Assert.assertEquals(2, interpreter.getQueryTimeout());
   }