You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2015/07/08 12:11:59 UTC
incubator-kylin git commit: minor,
fix concurrent NPE in InMemCubeBuilder
Repository: incubator-kylin
Updated Branches:
refs/heads/0.8 9b2848c99 -> ba9a8a143
minor, fix concurrent NPE in InMemCubeBuilder
Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/ba9a8a14
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/ba9a8a14
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/ba9a8a14
Branch: refs/heads/0.8
Commit: ba9a8a143946179375fd0be189a67314fdf63765
Parents: 9b2848c
Author: Li, Yang <ya...@ebay.com>
Authored: Wed Jul 8 18:11:51 2015 +0800
Committer: Li, Yang <ya...@ebay.com>
Committed: Wed Jul 8 18:11:51 2015 +0800
----------------------------------------------------------------------
.../kylin/job/inmemcubing/InMemCubeBuilder.java | 22 +++++++++++---------
1 file changed, 12 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/ba9a8a14/job/src/main/java/org/apache/kylin/job/inmemcubing/InMemCubeBuilder.java
----------------------------------------------------------------------
diff --git a/job/src/main/java/org/apache/kylin/job/inmemcubing/InMemCubeBuilder.java b/job/src/main/java/org/apache/kylin/job/inmemcubing/InMemCubeBuilder.java
index f2ecad1..761199c 100644
--- a/job/src/main/java/org/apache/kylin/job/inmemcubing/InMemCubeBuilder.java
+++ b/job/src/main/java/org/apache/kylin/job/inmemcubing/InMemCubeBuilder.java
@@ -142,23 +142,25 @@ public class InMemCubeBuilder extends AbstractInMemCubeBuilder {
cuboidResult.table.close();
}
}
-
+
TreeMap<Long, CuboidResult> build(BlockingQueue<List<String>> input) throws IOException {
final TreeMap<Long, CuboidResult> result = new TreeMap<Long, CuboidResult>();
ICuboidCollector collector = new ICuboidCollector() {
@Override
public void collect(CuboidResult cuboidResult) {
- result.put(cuboidResult.cuboidId, cuboidResult);
+ synchronized (result) {
+ result.put(cuboidResult.cuboidId, cuboidResult);
+ }
}
};
build(input, collector);
return result;
}
-
+
static interface ICuboidCollector {
public void collect(CuboidResult result);
}
-
+
static class CuboidResult {
public long cuboidId;
public GridTable table;
@@ -207,7 +209,7 @@ public class InMemCubeBuilder extends AbstractInMemCubeBuilder {
throwExceptionIfAny();
}
-
+
public void abort() {
interrupt(taskThreads);
}
@@ -216,7 +218,7 @@ public class InMemCubeBuilder extends AbstractInMemCubeBuilder {
for (Thread t : threads)
t.start();
}
-
+
private void interrupt(Thread... threads) {
for (Thread t : threads)
t.interrupt();
@@ -264,7 +266,7 @@ public class InMemCubeBuilder extends AbstractInMemCubeBuilder {
public boolean isAllCuboidDone() {
return taskCuboidCompleted.get() == totalCuboidCount;
}
-
+
private class CuboidTaskThread extends Thread {
private int id;
@@ -397,10 +399,10 @@ public class InMemCubeBuilder extends AbstractInMemCubeBuilder {
if (aggrCacheMB <= 0) {
aggrCacheMB = (int) Math.ceil(1.0 * nRows / baseResult.nRows * baseResult.aggrCacheMB);
}
-
+
CuboidResult result = new CuboidResult(cuboidId, table, nRows, timeSpent, aggrCacheMB);
taskCuboidCompleted.incrementAndGet();
-
+
resultCollector.collect(result);
return result;
}
@@ -651,6 +653,6 @@ public class InMemCubeBuilder extends AbstractInMemCubeBuilder {
private byte[] toBytes(String v) {
return v == null ? null : Bytes.toBytes(v);
}
-
+
}
}