]> source.dussan.org Git - jgit.git/commitdiff
Expose the list of pack files in the DfsBlockCache 42/4542/3
authorDave Borowitz <dborowitz@google.com>
Thu, 3 Nov 2011 19:52:19 +0000 (12:52 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 4 Nov 2011 18:14:32 +0000 (11:14 -0700)
Callers may want to inspect the contents of the cache, which this allows
them to do in a read-only fashion without any locking.

Change-Id: Ifd78e8ce34e26e5cc33e9dd61d70c593ce479ee0

org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java

index 3ae9690d7388cf83ac88984e9b45015c753e88e2..871a2c503464942b19e87f95818ed0ae08bebf01 100644 (file)
@@ -46,9 +46,11 @@ package org.eclipse.jgit.storage.dfs;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReferenceArray;
@@ -156,6 +158,9 @@ public final class DfsBlockCache {
        /** Cache of pack files, indexed by description. */
        private final Map<DfsPackDescription, DfsPackFile> packCache;
 
+       /** View of pack files in the pack cache. */
+       private final Collection<DfsPackFile> packFiles;
+
        /** Number of times a block was found in the cache. */
        private final AtomicLong statHit;
 
@@ -203,7 +208,9 @@ public final class DfsBlockCache {
                readAheadLimit = cfg.getReadAheadLimit();
                readAheadService = cfg.getReadAheadService();
 
-               packCache = new HashMap<DfsPackDescription, DfsPackFile>();
+               packCache = new ConcurrentHashMap<DfsPackDescription, DfsPackFile>(
+                               16, 0.75f, 1);
+               packFiles = Collections.unmodifiableCollection(packCache.values());
 
                statHit = new AtomicLong();
                statMiss = new AtomicLong();
@@ -234,6 +241,16 @@ public final class DfsBlockCache {
                return statEvict;
        }
 
+       /**
+        * Get the pack files stored in this cache.
+        *
+        * @return a collection of pack files, some of which may not actually be
+        *             present; the caller should check the pack's cached size.
+        */
+       public Collection<DfsPackFile> getPackFiles() {
+               return packFiles;
+       }
+
        DfsPackFile getOrCreate(DfsPackDescription dsc, DfsPackKey key) {
                // TODO This table grows without bound. It needs to clean up
                // entries that aren't in cache anymore, and aren't being used