Skip to content

Commit 039b84c

Browse files
committed
reserve_exact clearly not working
Signed-off-by: Connor Tsui <[email protected]>
1 parent 8141387 commit 039b84c

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

vortex-array/src/builders/listview.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,16 @@ impl<O: IntegerPType, S: IntegerPType> ArrayBuilder for ListViewBuilder<O, S> {
255255
// Otherwise, after removing any leading and trailing elements, we can simply bulk append
256256
// the entire array.
257257
let listview = listview.rebuild(ListViewRebuildMode::TrimElements);
258+
let extend_length = listview.len();
258259

259260
self.nulls.append_validity_mask(array.validity_mask());
260-
self.elements_builder.extend_from_array(listview.elements());
261261

262+
self.elements_builder
263+
.reserve_exact(listview.elements().len());
264+
self.offsets_builder.reserve_exact(extend_length);
265+
self.sizes_builder.reserve_exact(extend_length);
266+
267+
self.elements_builder.extend_from_array(listview.elements());
262268
self.sizes_builder.extend_from_array(
263269
compute::cast(listview.sizes(), self.sizes_builder.dtype())
264270
.vortex_expect(
@@ -269,12 +275,10 @@ impl<O: IntegerPType, S: IntegerPType> ArrayBuilder for ListViewBuilder<O, S> {
269275

270276
// Adjust all of the offsets.
271277
let new_offsets = listview.offsets().to_primitive(); // This should be cheap.
272-
let num_new_offsets = new_offsets.len();
273278

274279
let curr_builder_len = self.len();
275-
self.offsets_builder.reserve_exact(num_new_offsets);
276280

277-
let uninit_range = self.offsets_builder.uninit_range(num_new_offsets);
281+
let uninit_range = self.offsets_builder.uninit_range(extend_length);
278282

279283
fn adjust_offsets<'a, O: IntegerPType, A: IntegerPType>(
280284
mut uninit_range: UninitRange<'a, O>,

vortex-buffer/src/buffer_mut.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ impl<T> BufferMut<T> {
193193
// Make sure we at least double in size each time we re-allocate to amortize the cost
194194
let new_capacity = new_capacity.max(self.bytes.capacity() * 2);
195195

196+
if new_capacity > 15000 {
197+
println!("{new_capacity}");
198+
}
199+
196200
let mut bytes = BytesMut::with_capacity(new_capacity);
197201
bytes.align_empty(self.alignment);
198202
bytes.extend_from_slice(&self.bytes);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// SPDX-FileCopyrightText: Copyright the Vortex contributors
3+
4+
use std::path::PathBuf;
5+
6+
use vortex::file::{VortexOpenOptions, VortexWriteOptions};
7+
8+
#[tokio::main]
9+
pub async fn main() -> anyhow::Result<()> {
10+
let args = std::env::args().collect::<Vec<_>>();
11+
let file_name = args[1].clone();
12+
let path = PathBuf::from(file_name);
13+
14+
let array_stream = VortexOpenOptions::new()
15+
.open(path)
16+
.await?
17+
.scan()?
18+
.into_array_stream()?;
19+
20+
// Pre-allocate a 1GB buffer for the output file.
21+
let memory_writer = Vec::with_capacity(1024 * 1024 * 1024);
22+
let writer = VortexWriteOptions::default()
23+
.write(memory_writer, array_stream)
24+
.await?;
25+
26+
println!("Wrote {} bytes to new file", writer.size());
27+
28+
Ok(())
29+
}

0 commit comments

Comments
 (0)