You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by we...@apache.org on 2017/05/25 20:49:43 UTC

[04/31] hive git commit: HIVE-16675: Fix ConcurrentModificationException in SparkClientImpl#startDriver (Zhang Liyun, reviewed by Ferdinand Xu)

HIVE-16675: Fix ConcurrentModificationException in SparkClientImpl#startDriver (Zhang Liyun, reviewed by Ferdinand Xu)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/cc78d037
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/cc78d037
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/cc78d037

Branch: refs/heads/hive-14535
Commit: cc78d037987b5683ff731c4e733bfc0d3380566f
Parents: 8a093a7
Author: Ferdinand Xu <ch...@intel.com>
Authored: Thu May 25 13:56:41 2017 +0800
Committer: Ferdinand Xu <ch...@intel.com>
Committed: Thu May 25 13:56:41 2017 +0800

----------------------------------------------------------------------
 .../org/apache/hive/spark/client/SparkClientImpl.java   | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/cc78d037/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java
----------------------------------------------------------------------
diff --git a/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java b/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java
index d4b63f0..c4495a9 100644
--- a/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java
+++ b/spark-client/src/main/java/org/apache/hive/spark/client/SparkClientImpl.java
@@ -46,6 +46,7 @@ import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -481,7 +482,7 @@ class SparkClientImpl implements SparkClient {
 
       final Process child = pb.start();
       int childId = childIdGenerator.incrementAndGet();
-      final List<String> childErrorLog = new ArrayList<String>();
+      final List<String> childErrorLog = Collections.synchronizedList(new ArrayList<String>());
       redirect("stdout-redir-" + childId, new Redirector(child.getInputStream()));
       redirect("stderr-redir-" + childId, new Redirector(child.getErrorStream(), childErrorLog));
 
@@ -492,9 +493,12 @@ class SparkClientImpl implements SparkClient {
             int exitCode = child.waitFor();
             if (exitCode != 0) {
               StringBuilder errStr = new StringBuilder();
-              for (String s : childErrorLog) {
-                errStr.append(s);
-                errStr.append('\n');
+              synchronized(childErrorLog) {
+                Iterator iter = childErrorLog.iterator();
+                while(iter.hasNext()){
+                  errStr.append(iter.next());
+                  errStr.append('\n');
+                }
               }
 
               rpcServer.cancelClient(clientId,