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:49 UTC

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

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";