Return-Path: X-Original-To: apmail-geode-commits-archive@minotaur.apache.org Delivered-To: apmail-geode-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id AE8AC18EC3 for ; Fri, 8 Jan 2016 23:37:15 +0000 (UTC) Received: (qmail 85344 invoked by uid 500); 8 Jan 2016 23:37:15 -0000 Delivered-To: apmail-geode-commits-archive@geode.apache.org Received: (qmail 85299 invoked by uid 500); 8 Jan 2016 23:37:15 -0000 Mailing-List: contact commits-help@geode.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@geode.incubator.apache.org Delivered-To: mailing list commits@geode.incubator.apache.org Received: (qmail 85289 invoked by uid 99); 8 Jan 2016 23:37:15 -0000 Received: from Unknown (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Jan 2016 23:37:15 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 115791A0351 for ; Fri, 8 Jan 2016 23:37:15 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.227 X-Spam-Level: * X-Spam-Status: No, score=1.227 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.554, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id FPfNy7_QQOaJ for ; Fri, 8 Jan 2016 23:37:04 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with SMTP id 914C843A4D for ; Fri, 8 Jan 2016 23:37:03 +0000 (UTC) Received: (qmail 83006 invoked by uid 99); 8 Jan 2016 23:37:03 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Jan 2016 23:37:03 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 07BDDDFE5F; Fri, 8 Jan 2016 23:37:03 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: klund@apache.org To: commits@geode.incubator.apache.org Date: Fri, 08 Jan 2016 23:37:06 -0000 Message-Id: In-Reply-To: <28d9f2c3ae2c498882164a0dfa1c83c9@git.apache.org> References: <28d9f2c3ae2c498882164a0dfa1c83c9@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [05/45] incubator-geode git commit: merge of hot-fix from closed-source 8.2x maintenance branch merge of hot-fix from closed-source 8.2x maintenance branch The tombstone GC service ran into an NPE removing a tombstone and then the thread went hot because exception-handling was not advancing to the next GC candidate. This revision attempts to avoid the NPE (which was not reported with line numbers) and alters the exception-handling to advance to the next tombstone if there is an unexpected problem removing the current tombstone. Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/4bc1b28a Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/4bc1b28a Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/4bc1b28a Branch: refs/heads/feature/GEODE-715 Commit: 4bc1b28a13b952f6f043ee9f7f28a8d3a9220f1f Parents: d19bb41 Author: Bruce Schuchardt Authored: Mon Jan 4 15:26:05 2016 -0800 Committer: Bruce Schuchardt Committed: Mon Jan 4 15:28:43 2016 -0800 ---------------------------------------------------------------------- .../gemfire/internal/cache/AbstractRegionMap.java | 6 ++++-- .../gemstone/gemfire/internal/cache/TombstoneService.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4bc1b28a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java ---------------------------------------------------------------------- diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java index 6d49d74..f4fb044 100644 --- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java @@ -4269,7 +4269,6 @@ RETRY_LOOP: public final boolean removeTombstone(RegionEntry re, VersionHolder version, boolean isEviction, boolean isScheduledTombstone) { boolean result = false; int destroyedVersion = version.getEntryVersion(); - DiskRegion dr = this._getOwner().getDiskRegion(); synchronized(this._getOwner().getSizeGuard()) { // do this sync first; see bug 51985 synchronized (re) { @@ -4303,7 +4302,10 @@ RETRY_LOOP: if (isScheduledTombstone) { _getOwner().incTombstoneCount(-1); } - _getOwner().getVersionVector().recordGCVersion(version.getMemberID(), version.getRegionVersion()); + RegionVersionVector vector = _getOwner().getVersionVector(); + if (vector != null) { + vector.recordGCVersion(version.getMemberID(), version.getRegionVersion()); + } } } catch (RegionClearedException e) { // if the region has been cleared we don't need to remove the tombstone http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4bc1b28a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java ---------------------------------------------------------------------- diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java index 9fc5032..0814b34 100644 --- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java @@ -204,6 +204,10 @@ public class TombstoneService implements ResourceListener { * @param destroyedVersion the version that was destroyed */ public void scheduleTombstone(LocalRegion r, RegionEntry entry, VersionTag destroyedVersion) { + if (entry.getVersionStamp() == null) { + logger.warn("Detected an attempt to schedule a tombstone for an entry that is not versioned in region " + r.getFullPath(), new Exception("stack trace")); + return; + } boolean useReplicated = useReplicatedQueue(r); Tombstone ts = new Tombstone(entry, r, destroyedVersion); if (useReplicated) { @@ -871,6 +875,12 @@ public class TombstoneService implements ResourceListener { return; } catch (Exception e) { logger.warn(LocalizedMessage.create(LocalizedStrings.GemFireCacheImpl_TOMBSTONE_ERROR), e); + currentTombstoneLock.lock(); + try { + currentTombstone = null; + } finally { + currentTombstoneLock.unlock(); + } } } if (sleepTime > 0) {