You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ad...@apache.org on 2017/06/02 19:32:40 UTC
arrow git commit: ARROW-1084: Implementations of BufferAllocator
should handle Netty's OutOfDirectMemoryError
Repository: arrow
Updated Branches:
refs/heads/master 092afb6dc -> ba97f343f
ARROW-1084: Implementations of BufferAllocator should handle Netty's OutOfDirectMemoryError
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/ba97f343
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/ba97f343
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/ba97f343
Branch: refs/heads/master
Commit: ba97f343f631138a51a1c337eebba83e03add454
Parents: 092afb6
Author: adeneche <ad...@dremio.com>
Authored: Fri Jun 2 10:22:52 2017 -0700
Committer: adeneche <ad...@dremio.com>
Committed: Fri Jun 2 12:25:34 2017 -0700
----------------------------------------------------------------------
.../java/org/apache/arrow/memory/BaseAllocator.java | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/ba97f343/java/memory/src/main/java/org/apache/arrow/memory/BaseAllocator.java
----------------------------------------------------------------------
diff --git a/java/memory/src/main/java/org/apache/arrow/memory/BaseAllocator.java b/java/memory/src/main/java/org/apache/arrow/memory/BaseAllocator.java
index aaa7ce8..ddc78f0 100644
--- a/java/memory/src/main/java/org/apache/arrow/memory/BaseAllocator.java
+++ b/java/memory/src/main/java/org/apache/arrow/memory/BaseAllocator.java
@@ -22,6 +22,7 @@ import com.google.common.base.Preconditions;
import io.netty.buffer.ArrowBuf;
import io.netty.buffer.UnsafeDirectLittleEndian;
+import io.netty.util.internal.OutOfDirectMemoryError;
import org.apache.arrow.memory.AllocationManager.BufferLedger;
import org.apache.arrow.memory.util.AssertionUtil;
@@ -266,7 +267,18 @@ public abstract class BaseAllocator extends Accountant implements BufferAllocato
success = true;
listener.onAllocation(actualRequestSize);
return buffer;
- } finally {
+ } catch (OutOfMemoryError e) {
+ /*
+ * OutOfDirectMemoryError is thrown by Netty when we exceed the direct memory limit defined by -XX:MaxDirectMemorySize.
+ * OutOfMemoryError with "Direct buffer memory" message is thrown by java.nio.Bits when we exceed the direct memory limit.
+ * This should never be hit in practice as Netty is expected to throw an OutOfDirectMemoryError first.
+ */
+ if (e instanceof OutOfDirectMemoryError || "Direct buffer memory".equals(e.getMessage())) {
+ throw new OutOfMemoryException(e);
+ }
+ throw e;
+ }
+ finally {
if (!success) {
releaseBytes(actualRequestSize);
}