Browse Source

PackWriter: Report more stats during partial writes

It can be useful for a server operator to know how long a pack
writer spent writing out objects, even if the request aborts and
never finishes.

Record more of the stats data inside of a finally block, to
ensure these can be included into the server's monitoring.

Change-Id: I00858aa393a948f8e742e64ae4c00953eadaef95
stable-3.6
Shawn Pearce 10 years ago
parent
commit
bc90ce7788
  1. 57
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java

57
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java

@ -1029,43 +1029,44 @@ public class PackWriter {
stats.totalObjects = objCnt; stats.totalObjects = objCnt;
beginPhase(PackingPhase.WRITING, writeMonitor, objCnt); beginPhase(PackingPhase.WRITING, writeMonitor, objCnt);
long writeStart = System.currentTimeMillis(); long writeStart = System.currentTimeMillis();
try {
out.writeFileHeader(PACK_VERSION_GENERATED, objCnt);
out.flush();
out.writeFileHeader(PACK_VERSION_GENERATED, objCnt); writeObjects(out);
out.flush(); if (!edgeObjects.isEmpty() || !cachedPacks.isEmpty()) {
for (Statistics.ObjectType typeStat : stats.objectTypes) {
if (typeStat == null)
continue;
stats.thinPackBytes += typeStat.bytes;
}
}
stats.reusedPacks = Collections.unmodifiableList(cachedPacks);
for (CachedPack pack : cachedPacks) {
long deltaCnt = pack.getDeltaCount();
stats.reusedObjects += pack.getObjectCount();
stats.reusedDeltas += deltaCnt;
stats.totalDeltas += deltaCnt;
reuseSupport.copyPackAsIs(out, pack, reuseValidate);
}
writeChecksum(out);
out.flush();
} finally {
stats.timeWriting = System.currentTimeMillis() - writeStart;
stats.depth = depth;
writeObjects(out);
if (!edgeObjects.isEmpty() || !cachedPacks.isEmpty()) {
for (Statistics.ObjectType typeStat : stats.objectTypes) { for (Statistics.ObjectType typeStat : stats.objectTypes) {
if (typeStat == null) if (typeStat == null)
continue; continue;
stats.thinPackBytes += typeStat.bytes; typeStat.cntDeltas += typeStat.reusedDeltas;
stats.reusedObjects += typeStat.reusedObjects;
stats.reusedDeltas += typeStat.reusedDeltas;
stats.totalDeltas += typeStat.cntDeltas;
} }
} }
for (CachedPack pack : cachedPacks) {
long deltaCnt = pack.getDeltaCount();
stats.reusedObjects += pack.getObjectCount();
stats.reusedDeltas += deltaCnt;
stats.totalDeltas += deltaCnt;
reuseSupport.copyPackAsIs(out, pack, reuseValidate);
}
writeChecksum(out);
out.flush();
stats.timeWriting = System.currentTimeMillis() - writeStart;
stats.totalBytes = out.length(); stats.totalBytes = out.length();
stats.reusedPacks = Collections.unmodifiableList(cachedPacks);
stats.depth = depth;
for (Statistics.ObjectType typeStat : stats.objectTypes) {
if (typeStat == null)
continue;
typeStat.cntDeltas += typeStat.reusedDeltas;
stats.reusedObjects += typeStat.reusedObjects;
stats.reusedDeltas += typeStat.reusedDeltas;
stats.totalDeltas += typeStat.cntDeltas;
}
reader.release(); reader.release();
endPhase(writeMonitor); endPhase(writeMonitor);
} }

Loading…
Cancel
Save