aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar George Gensure <ggensure@uberatc.com>2017-12-22 06:34:54 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-22 06:38:31 -0800
commitb06dec0a32039d3b4eef82361e2b36dcf00b2717 (patch)
tree4ca6dc1b3b9656fda1f0354ceeeaf8cd52c826d5 /src
parentaff29b956c45ff121ae33097824a71bb0fd4d1be (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/TarBz2Function.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/TarGzFunction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/TarXzFunction.java10
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));
}
}