]> source.dussan.org Git - jgit.git/commitdiff
PackWriter: Report more stats during partial writes 83/32883/1
authorShawn Pearce <sop@google.com>
Thu, 4 Sep 2014 19:41:24 +0000 (12:41 -0700)
committerShawn Pearce <sop@google.com>
Thu, 4 Sep 2014 19:45:18 +0000 (12:45 -0700)
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

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

index f3791e66faebf822486430c0dc2d5cd39e6028e9..79dc11ead1ed7ff6e48636aaae83348b3c39d429 100644 (file)
@@ -1029,43 +1029,44 @@ public class PackWriter {
                stats.totalObjects = objCnt;
                beginPhase(PackingPhase.WRITING, writeMonitor, objCnt);
                long writeStart = System.currentTimeMillis();
+               try {
+                       out.writeFileHeader(PACK_VERSION_GENERATED, objCnt);
+                       out.flush();
 
-               out.writeFileHeader(PACK_VERSION_GENERATED, objCnt);
-               out.flush();
+                       writeObjects(out);
+                       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) {
                                if (typeStat == null)
                                        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.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();
                endPhase(writeMonitor);
        }