Skip to content

Commit ff33518

Browse files
Continue to read into memory on Windows
1 parent 8c79c2f commit ff33518

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

src/report/archives.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ use indexmap::IndexMap;
1313
use tar::{Builder as TarBuilder, Header as TarHeader};
1414
use tempfile::tempfile;
1515

16+
#[cfg(unix)]
1617
struct TempfileBackedBuffer {
1718
_file: File,
1819
mmap: NonNull<[u8]>,
1920
}
2021

22+
#[cfg(unix)]
2123
impl TempfileBackedBuffer {
2224
fn new(file: File) -> Fallible<TempfileBackedBuffer> {
2325
let len = file.metadata()?.len().try_into().unwrap();
@@ -45,6 +47,7 @@ impl TempfileBackedBuffer {
4547
}
4648
}
4749

50+
#[cfg(unix)]
4851
impl Drop for TempfileBackedBuffer {
4952
fn drop(&mut self) {
5053
unsafe {
@@ -139,6 +142,7 @@ fn iterate<'a, DB: ReadResults + 'a>(
139142
})
140143
}
141144

145+
#[allow(unused_mut)]
142146
fn write_all_archive<DB: ReadResults, W: ReportWriter>(
143147
db: &DB,
144148
ex: &Experiment,
@@ -159,11 +163,25 @@ fn write_all_archive<DB: ReadResults, W: ReportWriter>(
159163
all.append_data(&mut header, &entry.path, &entry.log_bytes[..])?;
160164
}
161165

162-
let data = all.into_inner()?.finish()?;
163-
let buffer = TempfileBackedBuffer::new(data)?;
166+
let mut data = all.into_inner()?.finish()?;
167+
let mut buffer;
168+
let view;
169+
#[cfg(unix)]
170+
{
171+
buffer = TempfileBackedBuffer::new(data)?;
172+
view = buffer.buffer();
173+
}
174+
#[cfg(not(unix))]
175+
{
176+
use std::io::{Read, Seek};
177+
data.rewind()?;
178+
buffer = Vec::new();
179+
data.read_to_end(&mut buffer)?;
180+
view = &buffer[..];
181+
}
164182
match dest.write_bytes(
165183
"logs-archives/all.tar.gz",
166-
buffer.buffer(),
184+
view,
167185
&"application/gzip".parse().unwrap(),
168186
EncodingType::Plain,
169187
) {
@@ -177,7 +195,7 @@ fn write_all_archive<DB: ReadResults, W: ReportWriter>(
177195
"retry ({}/{}) writing logs-archives/all.tar.gz ({} bytes) (error: {:?})",
178196
i,
179197
RETRIES,
180-
buffer.buffer().len(),
198+
view.len(),
181199
e,
182200
);
183201
continue;

0 commit comments

Comments
 (0)