Ref<DfsBlock> ref = new Ref<>(key, position, v.size(), v); ref.hot = true; for (;;) {
PackBitmapIndex idx = idxref.get(); if (idx != null) return idx; idxref = bitmapIndex; if (idxref != null) { PackBitmapIndex idx = idxref.get(); if (idx != null) return idx; idxref = cache.getRef(bitmapKey); if (idxref != null) { PackBitmapIndex idx = idxref.get(); if (idx != null) { bitmapIndex = idxref;
Ref<DfsBlock> ref = new Ref<>(key, position, v.size(), v); ref.hot = true; for (;;) {
PackBitmapIndex idx = idxref.get(); if (idx != null) return idx; idxref = bitmapIndex; if (idxref != null) { PackBitmapIndex idx = idxref.get(); if (idx != null) return idx; idxref = cache.getRef(bitmapKey); if (idxref != null) { PackBitmapIndex idx = idxref.get(); if (idx != null) { bitmapIndex = idxref;
private PackIndex idx(DfsReader ctx) throws IOException { DfsBlockCache.Ref<PackIndex> idxref = index; if (idxref != null) { PackIndex idx = idxref.get(); if (idx != null) return idx; idxref = index; if (idxref != null) { PackIndex idx = idxref.get(); if (idx != null) return idx; idxref = cache.getRef(idxKey); if (idxref != null) { PackIndex idx = idxref.get(); if (idx != null) { index = idxref;
Ref<DfsBlock> ref = new Ref<DfsBlock>(key, position, v.size(), v); ref.hot = true; for (;;) {
ref = new Ref<>(key, pos, size, v); ref.hot = true; for (;;) {
PackReverseIndex getReverseIdx(DfsReader ctx) throws IOException { DfsBlockCache.Ref<PackReverseIndex> revref = reverseIndex; if (revref != null) { PackReverseIndex revidx = revref.get(); if (revidx != null) return revidx; revref = reverseIndex; if (revref != null) { PackReverseIndex revidx = revref.get(); if (revidx != null) return revidx; revref = cache.getRef(revKey); if (revref != null) { PackReverseIndex idx = revref.get(); if (idx != null) { reverseIndex = revref;
ref = new Ref<T>(key, pos, size, v); ref.hot = true; for (;;) {
@SuppressWarnings("unchecked") private DfsBlockCache(DfsBlockCacheConfig cfg) { tableSize = tableSize(cfg); if (tableSize < 1) throw new IllegalArgumentException(JGitText.get().tSizeMustBeGreaterOrEqual1); table = new AtomicReferenceArray<>(tableSize); loadLocks = new ReentrantLock[cfg.getConcurrencyLevel()]; for (int i = 0; i < loadLocks.length; i++) loadLocks[i] = new ReentrantLock(true /* fair */); maxBytes = cfg.getBlockLimit(); maxStreamThroughCache = (long) (maxBytes * cfg.getStreamRatio()); blockSize = cfg.getBlockSize(); blockSizeShift = Integer.numberOfTrailingZeros(blockSize); clockLock = new ReentrantLock(true /* fair */); String none = ""; //$NON-NLS-1$ clockHand = new Ref<>( DfsStreamKey.of(new DfsRepositoryDescription(none), none, null), -1, 0, null); clockHand.next = clockHand; statHit = new AtomicReference<>(newCounters()); statMiss = new AtomicReference<>(newCounters()); statEvict = new AtomicReference<>(newCounters()); liveBytes = new AtomicReference<>(newCounters()); }
PackReverseIndex getReverseIdx(DfsReader ctx) throws IOException { DfsBlockCache.Ref<PackReverseIndex> revref = reverseIndex; if (revref != null) { PackReverseIndex revidx = revref.get(); if (revidx != null) return revidx; } synchronized (initLock) { revref = reverseIndex; if (revref != null) { PackReverseIndex revidx = revref.get(); if (revidx != null) return revidx; } PackIndex idx = idx(ctx); PackReverseIndex revidx = new PackReverseIndex(idx); int sz = (int) Math.min( idx.getObjectCount() * 8, Integer.MAX_VALUE); reverseIndex = cache.put(key, POS_REVERSE_INDEX, sz, revidx); return revidx; } }
private DfsBlockCache(final DfsBlockCacheConfig cfg) { tableSize = tableSize(cfg); if (tableSize < 1) throw new IllegalArgumentException(JGitText.get().tSizeMustBeGreaterOrEqual1); table = new AtomicReferenceArray<HashEntry>(tableSize); loadLocks = new ReentrantLock[32]; for (int i = 0; i < loadLocks.length; i++) loadLocks[i] = new ReentrantLock(true /* fair */); maxBytes = cfg.getBlockLimit(); maxStreamThroughCache = (long) (maxBytes * cfg.getStreamRatio()); blockSize = cfg.getBlockSize(); blockSizeShift = Integer.numberOfTrailingZeros(blockSize); clockLock = new ReentrantLock(true /* fair */); clockHand = new Ref<Object>(new DfsPackKey(), -1, 0, null); clockHand.next = clockHand; packCache = new ConcurrentHashMap<DfsPackDescription, DfsPackFile>( 16, 0.75f, 1); packFiles = Collections.unmodifiableCollection(packCache.values()); statHit = new AtomicLong(); statMiss = new AtomicLong(); }
private <T> T scan(HashEntry n, DfsStreamKey key, long position) { Ref<T> r = scanRef(n, key, position); return r != null ? r.get() : null; }
private <T> T scan(HashEntry n, DfsPackKey pack, long position) { Ref<T> r = scanRef(n, pack, position); return r != null ? r.get() : null; }
@SuppressWarnings("unchecked") private <T> Ref<T> scanRef(HashEntry n, DfsStreamKey key, long position) { for (; n != null; n = n.next) { Ref<T> r = n.ref; if (r.position == position && r.key.equals(key)) return r.get() != null ? r : null; } return null; }
/** * Whether the pack index file is loaded and cached in memory. * * @return whether the pack index file is loaded and cached in memory. */ public boolean isIndexLoaded() { DfsBlockCache.Ref<PackIndex> idxref = index; return idxref != null && idxref.has(); }
@SuppressWarnings("unchecked") private <T> Ref<T> scanRef(HashEntry n, DfsPackKey pack, long position) { for (; n != null; n = n.next) { Ref<T> r = n.ref; if (r.pack == pack && r.position == position) return r.get() != null ? r : null; } return null; }
/** * @return whether the pack index file is loaded and cached in memory. * @since 2.2 */ public boolean isIndexLoaded() { DfsBlockCache.Ref<PackIndex> idxref = index; return idxref != null && idxref.has(); }