You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ju...@apache.org on 2017/04/25 18:36:35 UTC
arrow git commit: ARROW-888: Transfer ownership of buffer in
BitVector transferTo()
Repository: arrow
Updated Branches:
refs/heads/master 1a73c352d -> 0bee8040e
ARROW-888: Transfer ownership of buffer in BitVector transferTo()
Author: Steven Phillips <st...@dremio.com>
Closes #594 from StevenMPhillips/bitVectorOwnership and squashes the following commits:
117f6b2 [Steven Phillips] ARROW-888: Transfer ownership of buffer in BitVector transferTo()
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/0bee8040
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/0bee8040
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/0bee8040
Branch: refs/heads/master
Commit: 0bee8040e29ebbb4542bc267804f56dcf7feaf4e
Parents: 1a73c35
Author: Steven Phillips <st...@dremio.com>
Authored: Tue Apr 25 11:36:32 2017 -0700
Committer: Julien Le Dem <ju...@apache.org>
Committed: Tue Apr 25 11:36:32 2017 -0700
----------------------------------------------------------------------
.../java/org/apache/arrow/vector/BitVector.java | 6 +-
.../vector/TestBufferOwnershipTransfer.java | 65 ++++++++++++++++++++
2 files changed, 66 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/0bee8040/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java
----------------------------------------------------------------------
diff --git a/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java b/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java
index ed57433..82cbd47 100644
--- a/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java
+++ b/java/vector/src/main/java/org/apache/arrow/vector/BitVector.java
@@ -251,11 +251,7 @@ public final class BitVector extends BaseDataValueVector implements FixedWidthVe
public void transferTo(BitVector target) {
target.clear();
- if (target.data != null) {
- target.data.release();
- }
- target.data = data;
- target.data.retain(1);
+ target.data = data.transferOwnership(target.allocator).buffer;
target.valueCount = valueCount;
clear();
}
http://git-wip-us.apache.org/repos/asf/arrow/blob/0bee8040/java/vector/src/test/java/org/apache/arrow/vector/TestBufferOwnershipTransfer.java
----------------------------------------------------------------------
diff --git a/java/vector/src/test/java/org/apache/arrow/vector/TestBufferOwnershipTransfer.java b/java/vector/src/test/java/org/apache/arrow/vector/TestBufferOwnershipTransfer.java
new file mode 100644
index 0000000..fa65787
--- /dev/null
+++ b/java/vector/src/test/java/org/apache/arrow/vector/TestBufferOwnershipTransfer.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.arrow.vector;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.arrow.memory.BufferAllocator;
+import org.apache.arrow.memory.RootAllocator;
+import org.junit.Test;
+
+public class TestBufferOwnershipTransfer {
+
+ @Test
+ public void testTransferFixedWidth() {
+ BufferAllocator allocator = new RootAllocator(Integer.MAX_VALUE);
+ BufferAllocator childAllocator1 = allocator.newChildAllocator("child1", 100000, 100000);
+ BufferAllocator childAllocator2 = allocator.newChildAllocator("child2", 100000, 100000);
+
+ NullableIntVector v1 = new NullableIntVector("v1", childAllocator1);
+ v1.allocateNew();
+ v1.getMutator().setValueCount(4095);
+
+ NullableIntVector v2 = new NullableIntVector("v2", childAllocator2);
+
+ v1.makeTransferPair(v2).transfer();
+
+ assertEquals(0, childAllocator1.getAllocatedMemory());
+ assertEquals(5 * 4096, childAllocator2.getAllocatedMemory());
+ }
+
+ @Test
+ public void testTransferVariableidth() {
+ BufferAllocator allocator = new RootAllocator(Integer.MAX_VALUE);
+ BufferAllocator childAllocator1 = allocator.newChildAllocator("child1", 100000, 100000);
+ BufferAllocator childAllocator2 = allocator.newChildAllocator("child2", 100000, 100000);
+
+ NullableVarCharVector v1 = new NullableVarCharVector("v1", childAllocator1);
+ v1.allocateNew();
+ v1.getMutator().setSafe(4094, "hello world".getBytes(), 0, 11);
+ v1.getMutator().setValueCount(4001);
+
+ NullableVarCharVector v2 = new NullableVarCharVector("v2", childAllocator2);
+
+ v1.makeTransferPair(v2).transfer();
+
+ assertEquals(0, childAllocator1.getAllocatedMemory());
+ int expected = 8*4096 + 4*4096 + 4096;
+ assertEquals(expected, childAllocator2.getAllocatedMemory());
+ }
+}