Search in sources :

Example 6 with LRUEntry

use of org.apache.geode.internal.cache.lru.LRUEntry in project geode by apache.

the class AbstractLRURegionMap method centralizedLruUpdateCallback.

public int centralizedLruUpdateCallback() {
    final boolean isDebugEnabled_LRU = logger.isTraceEnabled(LogMarker.LRU);
    int evictedBytes = 0;
    if (getCallbackDisabled()) {
        return evictedBytes;
    }
    getDelta();
    resetThreadLocals();
    if (isDebugEnabled_LRU) {
        logger.trace(LogMarker.LRU, "centralLruUpdateCallback: lru size is now {}, limit is: {}", getTotalEntrySize(), getLimit());
    }
    LRUStatistics stats = _getLruList().stats();
    try {
        while (mustEvict() && evictedBytes == 0) {
            LRUEntry removalEntry = (LRUEntry) _getLruList().getLRUEntry();
            if (removalEntry != null) {
                evictedBytes = evictEntry(removalEntry, stats);
                if (evictedBytes != 0) {
                    if (_getOwner() instanceof BucketRegion) {
                        ((BucketRegion) _getOwner()).incEvictions(1);
                    }
                    stats.incEvictions();
                    if (isDebugEnabled_LRU) {
                        logger.debug("evictions={}", stats.getEvictions());
                    }
                    _getCCHelper().afterEviction();
                }
            } else {
                if (getTotalEntrySize() != 0) {
                    if (isDebugEnabled_LRU) {
                        logger.trace(LogMarker.LRU, "leaving evict loop early");
                    }
                }
                break;
            }
        }
    } catch (RegionClearedException rce) {
        // Ignore
        if (isDebugEnabled_LRU) {
            logger.trace(LogMarker.LRU, "exception ={}", rce.getCause());
        }
    }
    if (isDebugEnabled_LRU) {
        logger.trace(LogMarker.LRU, "callback complete");
    }
    // reset the tx thread local
    return evictedBytes;
}
Also used : LRUEntry(org.apache.geode.internal.cache.lru.LRUEntry) LRUStatistics(org.apache.geode.internal.cache.lru.LRUStatistics)

Example 7 with LRUEntry

use of org.apache.geode.internal.cache.lru.LRUEntry in project geode by apache.

the class LocalRegion method createReadEntry.

TXEntryState createReadEntry(TXRegionState txRegionState, KeyInfo keyInfo, boolean createIfAbsent) {
    TXEntryState result = null;
    final RegionEntry regionEntry = this.basicGetTXEntry(keyInfo);
    if (regionEntry != null) {
        boolean needsLRUCleanup = false;
        try {
            synchronized (regionEntry) {
                if (!regionEntry.isRemoved()) {
                    if (regionEntry instanceof DiskEntry && regionEntry instanceof LRUEntry) {
                        LRUEntry le = (LRUEntry) regionEntry;
                        if (le.testEvicted()) {
                            // Handle the case where we fault in a disk entry
                            txLRUStart();
                            needsLRUCleanup = true;
                            // Fault in the value from disk
                            regionEntry.getValue(this);
                        }
                    }
                    Object value = regionEntry.getValueInVM(this);
                    /*
             * The tx will need the raw value for identity comparison. Please see
             * TXEntryState#checkForConflict(LocalRegion,Object)
             */
                    Object id = regionEntry.getTransformedValue();
                    result = txRegionState.createReadEntry(this, keyInfo.getKey(), regionEntry, id, value);
                }
            }
        } catch (DiskAccessException dae) {
            handleDiskAccessException(dae);
            needsLRUCleanup = false;
            throw dae;
        } finally {
            if (needsLRUCleanup) {
                // do this after releasing sync
                txLRUEnd();
            }
        }
    }
    if (result == null && createIfAbsent) {
        result = txRegionState.createReadEntry(this, keyInfo.getKey(), null, null, null);
    }
    return result;
}
Also used : LRUEntry(org.apache.geode.internal.cache.lru.LRUEntry) DiskAccessException(org.apache.geode.cache.DiskAccessException) StoredObject(org.apache.geode.internal.offheap.StoredObject)

Aggregations

LRUEntry (org.apache.geode.internal.cache.lru.LRUEntry)7 LRUStatistics (org.apache.geode.internal.cache.lru.LRUStatistics)2 NewLRUClockHand (org.apache.geode.internal.cache.lru.NewLRUClockHand)2 StoredObject (org.apache.geode.internal.offheap.StoredObject)2 Iterator (java.util.Iterator)1 List (java.util.List)1 InternalGemFireException (org.apache.geode.InternalGemFireException)1 DiskAccessException (org.apache.geode.cache.DiskAccessException)1 RegionDestroyedException (org.apache.geode.cache.RegionDestroyedException)1 PdxInstance (org.apache.geode.pdx.PdxInstance)1