You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/10/21 13:36:48 UTC

[incubator-iotdb] branch check_path_in_session created (now 6932147)

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

lta pushed a change to branch check_path_in_session
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at 6932147  add check path validity

This branch includes the following new commits:

     new 6932147  add check path validity

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.



[incubator-iotdb] 01/01: add check path validity

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

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

commit 6932147a9d7c1a1a60d61d64d73240dc02777585
Author: lta <li...@163.com>
AuthorDate: Mon Oct 21 21:36:17 2019 +0800

    add check path validity
---
 .../main/java/org/apache/iotdb/session/Config.java |  6 +++
 .../java/org/apache/iotdb/session/Session.java     | 19 ++++++++
 .../org/apache/iotdb/session/IoTDBSessionIT.java   | 55 ++++++++++++++++++++++
 .../tsfile/common/constant/TsFileConstant.java     |  1 +
 4 files changed, 81 insertions(+)

diff --git a/session/src/main/java/org/apache/iotdb/session/Config.java b/session/src/main/java/org/apache/iotdb/session/Config.java
index 3bc2344..147dea6 100644
--- a/session/src/main/java/org/apache/iotdb/session/Config.java
+++ b/session/src/main/java/org/apache/iotdb/session/Config.java
@@ -18,9 +18,15 @@
  */
 package org.apache.iotdb.session;
 
+import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_ROOT;
+import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
+
 public class Config {
 
   public static final String DEFAULT_USER = "user";
   public static final String DEFAULT_PASSWORD = "password";
 
+  public static final String PATH_MATCHER =
+      PATH_ROOT + "([" + PATH_SEPARATOR + "](([a-zA-Z_][a-zA-Z0-9_-]*)|([+-]?[0-9]+)))+";
+
 }
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index 4817c67..32d7fa0 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -18,11 +18,14 @@
  */
 package org.apache.iotdb.session;
 
+import static org.apache.iotdb.session.Config.PATH_MATCHER;
+
 import java.sql.SQLException;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.regex.Pattern;
 import org.apache.iotdb.rpc.IoTDBRPCException;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
@@ -257,6 +260,7 @@ public class Session {
   }
 
   public synchronized TSStatus setStorageGroup(String storageGroupId) throws IoTDBSessionException {
+    checkPathValidity(storageGroupId);
     try {
       return checkAndReturn(client.setStorageGroup(storageGroupId));
     } catch (TException e) {
@@ -283,6 +287,7 @@ public class Session {
 
   public synchronized TSStatus createTimeseries(String path, TSDataType dataType,
       TSEncoding encoding, CompressionType compressor) throws IoTDBSessionException {
+    checkPathValidity(path);
     TSCreateTimeseriesReq request = new TSCreateTimeseriesReq();
     request.setPath(path);
     request.setDataType(dataType.ordinal());
@@ -376,4 +381,18 @@ public class Session {
 
     RpcUtils.verifySuccess(execResp.getStatus());
   }
+
+  private void checkPathValidity(String path) throws IoTDBSessionException {
+    if (!Pattern.matches(PATH_MATCHER, path)) {
+      throw new IoTDBSessionException(String.format("Path %s is invalid", path));
+    }
+  }
+
+
+  public static void main(String[] args) {
+    System.out.println(
+        Pattern.matches("root([.](([a-zA-Z_][a-zA-Z0-9_-]*)|([+-]?[0-9]+)))+", "root.\tvehicle"));
+  }
+
+
 }
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 435ffa7..d460369 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
@@ -280,4 +280,59 @@ public class IoTDBSessionIT {
     session.executeNonQueryStatement(
         "insert into root.sg1.d1(timestamp,s1, s2, s3) values(100, 1,2,3)");
   }
+
+  @Test
+  public void checkPathTest()
+      throws ClassNotFoundException, SQLException, IoTDBSessionException, TException, IoTDBRPCException {
+    session = new Session("127.0.0.1", 6667, "root", "root");
+    session.open();
+
+    //test set sg
+    checkSetSG(session, "root.vehicle", true);
+    checkSetSG(session, "root.123456", true);
+    checkSetSG(session, "root._1234", true);
+    checkSetSG(session, "root._vehicle", true);
+    checkSetSG(session, "root.\tvehicle", false);
+    checkSetSG(session, "root.\nvehicle", false);
+    checkSetSG(session, "root..vehicle", false);
+    checkSetSG(session, "root.1234a4", false);
+    checkSetSG(session, "root.+12345", true);
+    checkSetSG(session, "root.-12345", true);
+    checkSetSG(session, "root.%12345", false);
+    checkSetSG(session, "root.a{12345}", false);
+
+    //test create timeseries
+    checkCreateTimeseries(session, "root.vehicle.d0.s0", true);
+    checkCreateTimeseries(session, "root.vehicle.1110.s0", true);
+    checkCreateTimeseries(session, "root.vehicle.d0.1220", true);
+    checkCreateTimeseries(session, "root.vehicle._1234.s0", true);
+    checkCreateTimeseries(session, "root.vehicle.+1245.-1256", true);
+    checkCreateTimeseries(session, "root.vehicle./d0.s0", false);
+    checkCreateTimeseries(session, "root.vehicle.d\t0.s0", false);
+    checkCreateTimeseries(session, "root.vehicle.!d\t0.s0", false);
+    checkCreateTimeseries(session, "root.vehicle.d{dfewrew0}.s0", false);
+
+    session.close();
+  }
+
+  private void checkSetSG(Session session, String sg, boolean correctStatus){
+    boolean status = true;
+    try {
+      session.setStorageGroup(sg);
+    } catch (IoTDBSessionException e) {
+      status = false;
+    }
+    assertEquals(status, correctStatus);
+  }
+
+  private void checkCreateTimeseries(Session session, String timeseris, boolean correctStatus){
+    boolean status = true;
+    try {
+      session.createTimeseries(timeseris, TSDataType.INT64, TSEncoding.RLE,
+          CompressionType.SNAPPY);
+    } catch (IoTDBSessionException e) {
+      status = false;
+    }
+    assertEquals(status, correctStatus);
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java
index 594a613..479bd8e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/constant/TsFileConstant.java
@@ -23,6 +23,7 @@ public class TsFileConstant {
   public static final String TSFILE_SUFFIX = ".tsfile";
   public static final String TSFILE_HOME = "TSFILE_HOME";
   public static final String TSFILE_CONF = "TSFILE_CONF";
+  public static final String PATH_ROOT = "root";
   public static final String PATH_SEPARATOR = ".";
   public static final String PATH_SEPARATER_NO_REGEX = "\\.";
   public static final String DEFAULT_DELTA_TYPE = "default_delta_type";