Repository: hive Updated Branches: refs/heads/master 8a093a7d2 -> cc78d0379
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/master Commit: cc78d037987b5683ff731c4e733bfc0d3380566f Parents: 8a093a7 Author: Ferdinand Xu <[email protected]> Authored: Thu May 25 13:56:41 2017 +0800 Committer: Ferdinand Xu <[email protected]> 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,
