aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorImran Rashid <irashid@cloudera.com>2015-07-30 10:46:26 -0700
committerShivaram Venkataraman <shivaram@cs.berkeley.edu>2015-07-30 10:46:26 -0700
commit06b6a074fb224b3fe23922bdc89fc5f7c2ffaaf6 (patch)
tree05d2404ae2a34b6a0350a9d1fe54fa199151a761
parent520ec0ff9db75267f627dc4615b2316a1a3d44d7 (diff)
downloadspark-06b6a074fb224b3fe23922bdc89fc5f7c2ffaaf6.tar.gz
spark-06b6a074fb224b3fe23922bdc89fc5f7c2ffaaf6.tar.bz2
spark-06b6a074fb224b3fe23922bdc89fc5f7c2ffaaf6.zip
[SPARK-9437] [CORE] avoid overflow in SizeEstimator
https://issues.apache.org/jira/browse/SPARK-9437 Author: Imran Rashid <irashid@cloudera.com> Closes #7750 from squito/SPARK-9437_size_estimator_overflow and squashes the following commits: 29493f1 [Imran Rashid] prevent another potential overflow bc1cb82 [Imran Rashid] avoid overflow
-rw-r--r--core/src/main/scala/org/apache/spark/util/SizeEstimator.scala6
1 files changed, 3 insertions, 3 deletions
diff --git a/core/src/main/scala/org/apache/spark/util/SizeEstimator.scala b/core/src/main/scala/org/apache/spark/util/SizeEstimator.scala
index 7d84468f62..14b1f2a17e 100644
--- a/core/src/main/scala/org/apache/spark/util/SizeEstimator.scala
+++ b/core/src/main/scala/org/apache/spark/util/SizeEstimator.scala
@@ -217,10 +217,10 @@ object SizeEstimator extends Logging {
var arrSize: Long = alignSize(objectSize + INT_SIZE)
if (elementClass.isPrimitive) {
- arrSize += alignSize(length * primitiveSize(elementClass))
+ arrSize += alignSize(length.toLong * primitiveSize(elementClass))
state.size += arrSize
} else {
- arrSize += alignSize(length * pointerSize)
+ arrSize += alignSize(length.toLong * pointerSize)
state.size += arrSize
if (length <= ARRAY_SIZE_FOR_SAMPLING) {
@@ -336,7 +336,7 @@ object SizeEstimator extends Logging {
// hg.openjdk.java.net/jdk8/jdk8/hotspot/file/tip/src/share/vm/classfile/classFileParser.cpp
var alignedSize = shellSize
for (size <- fieldSizes if sizeCount(size) > 0) {
- val count = sizeCount(size)
+ val count = sizeCount(size).toLong
// If there are internal gaps, smaller field can fit in.
alignedSize = math.max(alignedSize, alignSizeUp(shellSize, size) + size * count)
shellSize += size * count