You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/03/23 01:32:17 UTC

[incubator-iotdb] 01/01: fix sqlArgumentsList concurrent modification error

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

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

commit da1f872cd5cdb19397e42b83908571cf1fbd5793
Author: qiaojialin <64...@qq.com>
AuthorDate: Mon Mar 23 09:31:58 2020 +0800

    fix sqlArgumentsList concurrent modification error
---
 .../org/apache/iotdb/db/service/TSServiceImpl.java     | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

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 a8afa57..ec55f5d 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
@@ -133,7 +133,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   private static final int DELETE_SIZE = 50;
   private static final String ERROR_PARSING_SQL =
       "meet error while parsing SQL to physical plan: {}";
-  public static Vector<SqlArgument> sqlArgumentsList = new Vector<>();
+  public static final Vector<SqlArgument> sqlArgumentsList = new Vector<>();
 
   protected Planner processor;
   protected IPlanExecutor executor;
@@ -508,9 +508,11 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
                 sessionIdUsernameMap.get(req.getSessionId()));
         long endTime = System.currentTimeMillis();
         sqlArgument = new SqlArgument(resp, physicalPlan, statement, startTime, endTime);
-        sqlArgumentsList.add(sqlArgument);
-        if (sqlArgumentsList.size() > MAX_SIZE) {
-          sqlArgumentsList.subList(0, DELETE_SIZE).clear();
+        synchronized (sqlArgumentsList) {
+          sqlArgumentsList.add(sqlArgument);
+          if (sqlArgumentsList.size() > MAX_SIZE) {
+            sqlArgumentsList.subList(0, DELETE_SIZE).clear();
+          }
         }
         return resp;
       } else {
@@ -567,9 +569,11 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
           sessionIdUsernameMap.get(req.getSessionId()));
       long endTime = System.currentTimeMillis();
       sqlArgument = new SqlArgument(resp, physicalPlan, statement, startTime, endTime);
-      sqlArgumentsList.add(sqlArgument);
-      if (sqlArgumentsList.size() > MAX_SIZE) {
-        sqlArgumentsList.subList(0, DELETE_SIZE).clear();
+      synchronized (sqlArgumentsList) {
+        sqlArgumentsList.add(sqlArgument);
+        if (sqlArgumentsList.size() > MAX_SIZE) {
+          sqlArgumentsList.subList(0, DELETE_SIZE).clear();
+        }
       }
       return resp;
     } catch (ParseCancellationException e) {