diff options
author | George Gensure <ggensure@uberatc.com> | 2017-12-22 06:34:54 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-22 06:38:31 -0800 |
commit | b06dec0a32039d3b4eef82361e2b36dcf00b2717 (patch) | |
tree | 4ca6dc1b3b9656fda1f0354ceeeaf8cd52c826d5 /src/main/java | |
parent | aff29b956c45ff121ae33097824a71bb0fd4d1be (diff) |
Proxy archive interfaces through buffered input
Internal bazel use of compressed archives, exemplified through
repository inspection, is utilizing a single-byte read syscall over
all, possibly extremely large, archives, with substantial syscall
roundtrip penalties. Time spent fetching all archives for a workspace
was observed to be <50% of the time without the fix (performing single-
byte reads).
Fixes #3397
Closes #3870.
PiperOrigin-RevId: 179921752
Diffstat (limited to 'src/main/java')
3 files changed, 16 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java index 8566afd3b4..8d25d7d0d6 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java @@ -15,18 +15,18 @@ package com.google.devtools.build.lib.bazel.repository; import com.google.devtools.build.lib.bazel.repository.DecompressorValue.Decompressor; - -import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; - +import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; /** * Creates a repository by unarchiving a .tar.bz2 file. */ public class TarBz2Function extends CompressedTarFunction { public static final Decompressor INSTANCE = new TarBz2Function(); + private static final int BUFFER_SIZE = 32 * 1024; private TarBz2Function() { } @@ -35,6 +35,7 @@ public class TarBz2Function extends CompressedTarFunction { protected InputStream getDecompressorStream(DecompressorDescriptor descriptor) throws IOException { return new BZip2CompressorInputStream( - new FileInputStream(descriptor.archivePath().getPathFile())); + new BufferedInputStream( + new FileInputStream(descriptor.archivePath().getPathFile()), BUFFER_SIZE)); } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarGzFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarGzFunction.java index 4a52684efa..e1e1204d7d 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarGzFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarGzFunction.java @@ -15,7 +15,7 @@ package com.google.devtools.build.lib.bazel.repository; import com.google.devtools.build.lib.bazel.repository.DecompressorValue.Decompressor; - +import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -26,6 +26,7 @@ import java.util.zip.GZIPInputStream; */ public class TarGzFunction extends CompressedTarFunction { public static final Decompressor INSTANCE = new TarGzFunction(); + private static final int BUFFER_SIZE = 32 * 1024; private TarGzFunction() { } @@ -33,6 +34,8 @@ public class TarGzFunction extends CompressedTarFunction { @Override protected InputStream getDecompressorStream(DecompressorDescriptor descriptor) throws IOException { - return new GZIPInputStream(new FileInputStream(descriptor.archivePath().getPathFile())); + return new GZIPInputStream( + new BufferedInputStream( + new FileInputStream(descriptor.archivePath().getPathFile()), BUFFER_SIZE)); } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarXzFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarXzFunction.java index 7e0b014302..568f85864f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/TarXzFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/TarXzFunction.java @@ -15,18 +15,18 @@ package com.google.devtools.build.lib.bazel.repository; import com.google.devtools.build.lib.bazel.repository.DecompressorValue.Decompressor; - -import org.tukaani.xz.XZInputStream; - +import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import org.tukaani.xz.XZInputStream; /** * Creates a repository by unarchiving a .tar.xz file. */ class TarXzFunction extends CompressedTarFunction { public static final Decompressor INSTANCE = new TarXzFunction(); + private static final int BUFFER_SIZE = 32 * 1024; private TarXzFunction() { } @@ -34,6 +34,8 @@ class TarXzFunction extends CompressedTarFunction { @Override protected InputStream getDecompressorStream(DecompressorDescriptor descriptor) throws IOException { - return new XZInputStream(new FileInputStream(descriptor.archivePath().getPathFile())); + return new XZInputStream( + new BufferedInputStream( + new FileInputStream(descriptor.archivePath().getPathFile()), BUFFER_SIZE)); } } |