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;
}
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;
}
Aggregations