You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2016/06/28 01:05:21 UTC
incubator-geode git commit: run now uses foreachTombstone to do scan
Repository: incubator-geode
Updated Branches:
refs/heads/feature/GEODE-1420 b57d9244c -> 91fe4f83f
run now uses foreachTombstone to do scan
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/91fe4f83
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/91fe4f83
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/91fe4f83
Branch: refs/heads/feature/GEODE-1420
Commit: 91fe4f83ffa5f5bf4013c97d1df6633a0ce544bb
Parents: b57d924
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Mon Jun 27 18:04:42 2016 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Mon Jun 27 18:04:42 2016 -0700
----------------------------------------------------------------------
.../internal/cache/TombstoneService.java | 43 +++++++++-----------
1 file changed, 19 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/91fe4f83/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java
index 0c28b84..b417c78 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java
@@ -465,23 +465,30 @@ public class TombstoneService {
this.sweeperThread.setName(threadName);
}
- public void foreachTombstone(Predicate<Tombstone> predicate) {
+ /**
+ * @return true if predicate ever returned true
+ */
+ public boolean foreachTombstone(Predicate<Tombstone> predicate) {
+ boolean result = false;
Tombstone currentTombstone = lockAndGetCurrentTombstone();
try {
if (currentTombstone != null) {
if (predicate.test(currentTombstone)) {
clearCurrentTombstone();
+ result = true;
}
}
for (Iterator<Tombstone> it=getQueue().iterator(); it.hasNext(); ) {
Tombstone t = it.next();
if (predicate.test(t)) {
it.remove();
+ result = true;
}
}
} finally {
unlock();
}
+ return result;
}
synchronized void start() {
@@ -749,13 +756,11 @@ public class TombstoneService {
incQueueSize(-myTombstone.getSize());
myTombstone.region.getRegionMap().removeTombstone(myTombstone.entry, myTombstone, false, true);
}
- myTombstone = null;
clearCurrentTombstone();
} catch (CancelException e) {
return;
} catch (Exception e) {
logger.warn(LocalizedMessage.create(LocalizedStrings.GemFireCacheImpl_TOMBSTONE_ERROR), e);
- myTombstone = null;
clearCurrentTombstone();
}
}
@@ -767,33 +772,27 @@ public class TombstoneService {
lastScanTime = now;
long start = now;
// see if any have been superseded
- for (Iterator<Tombstone> it = getQueue().iterator(); it.hasNext(); ) {
- Tombstone test = it.next();
+ boolean scanHit = foreachTombstone(test -> {
if (test.region.getRegionMap().isTombstoneNotNeeded(test.entry, test.getEntryVersion())) {
if (logger.isTraceEnabled(LogMarker.TOMBSTONE)) {
logger.trace(LogMarker.TOMBSTONE, "removing obsolete tombstone: {}", test);
}
- it.remove();
incQueueSize(-test.getSize());
- if (test == myTombstone) {
- myTombstone = null;
- clearCurrentTombstone();
- sleepTime = 0;
- }
- } else if (batchMode && (test.getVersionTimeStamp()+expiryTime) <= now) {
- it.remove();
+ return true;
+ }
+ if (batchMode && (test.getVersionTimeStamp()+expiryTime) <= now) {
if (logger.isTraceEnabled(LogMarker.TOMBSTONE)) {
logger.trace(LogMarker.TOMBSTONE, "expiring tombstone {}", test);
}
expiredTombstones.add(test);
- sleepTime = 0;
- if (test == myTombstone) {
- myTombstone = null;
- clearCurrentTombstone();
- }
+ return true;
}
+ return false;
+ });
+ if (scanHit) {
+ sleepTime = 0;
}
- // now check the batch of timed-out tombstones, if there is one
+ // now scan the batch of timed-out tombstones
if (batchMode) {
for (Iterator<Tombstone> it = expiredTombstones.iterator(); it.hasNext(); ) {
Tombstone test = it.next();
@@ -803,11 +802,7 @@ public class TombstoneService {
}
it.remove();
incQueueSize(-test.getSize());
- if (test == myTombstone) {
- myTombstone = null;
- clearCurrentTombstone();
- sleepTime = 0;
- }
+ sleepTime = 0;
}
}
}