Преглед на файлове

DfsInserter: buffer up to streamFileThreshold from InputStream

Since 2badedcbe0 in-core merges can write up to 10 MiB
into a TemporaryBuffer.Heap strategy, where the data is stored
as a chain of byte[] blocks.

Support the inserter reading up to the streamFileThreshold (default 50
MiB) from the supplied input stream and hash the content to determine
if the merged result blob is already present in the repository.  This
allows the inserter to avoid creating duplicate objects in more cases,
reducing repository pack file churn.

Change-Id: I38967e2a0cff14c0a856cdb46a2c8fedbeb21ed5
tags/v3.5.0.201409071800-rc1
Shawn Pearce преди 9 години
родител
ревизия
63eb9042a4
променени са 1 файла, в които са добавени 15 реда и са изтрити 1 реда
  1. 15
    1
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsInserter.java

+ 15
- 1
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsInserter.java Целия файл

@@ -119,7 +119,7 @@ public class DfsInserter extends ObjectInserter {
@Override
public ObjectId insert(int type, long len, InputStream in)
throws IOException {
byte[] buf = buffer();
byte[] buf = insertBuffer(len);
if (len <= buf.length) {
IO.readFully(in, buf, 0, (int) len);
return insert(type, buf, 0, (int) len);
@@ -144,6 +144,20 @@ public class DfsInserter extends ObjectInserter {
return endObject(ObjectId.fromRaw(md.digest()), offset);
}

private byte[] insertBuffer(long len) {
byte[] buf = buffer();
if (len <= buf.length)
return buf;
if (len < db.getReaderOptions().getStreamFileThreshold()) {
try {
return new byte[(int) len];
} catch (OutOfMemoryError noMem) {
return buf;
}
}
return buf;
}

@Override
public void flush() throws IOException {
if (packDsc == null)

Loading…
Отказ
Запис