You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geode.apache.org by Anilkumar Gingade <ag...@pivotal.io> on 2016/10/29 00:12:42 UTC
Re: [97/98] [abbrv] incubator-geode git commit: GEODE-2043: change
makeTombstone to handle exception
I am seeing build failures with:
***
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':geode-core:spotlessJavaCheck'.
> Format violations were found. Run 'gradlew spotlessApply' to fix them.
geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionEntry.java
geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionEntryTest.java
***
Planning to commit changes after running "spotlessApply" to fix the issue...
-Anil.
On Fri, Oct 28, 2016 at 2:41 PM, <ds...@apache.org> wrote:
> GEODE-2043: change makeTombstone to handle exception
>
> Now if makeTombstone has an exception but had already changed
> the region entry value to a TOMBSTONE, it will now change
> the value to REMOVE_PHASE2 instead of leaving it as a 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/2ef50b24
> Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/2ef50b24
> Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/2ef50b24
>
> Branch: refs/heads/feature/GEM-983
> Commit: 2ef50b24de1457ab91729f22a3c2ff4a8a07557b
> Parents: 765a55a
> Author: Darrel Schneider <ds...@pivotal.io>
> Authored: Thu Oct 27 16:05:08 2016 -0700
> Committer: Darrel Schneider <ds...@pivotal.io>
> Committed: Fri Oct 28 14:12:59 2016 -0700
>
> ----------------------------------------------------------------------
> .../internal/cache/AbstractRegionEntry.java | 15 ++-
> .../internal/cache/AbstractRegionEntryTest.java | 112 +++++++++++++++++++
> 2 files changed, 125 insertions(+), 2 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-geode/
> blob/2ef50b24/geode-core/src/main/java/org/apache/geode/internal/cache/
> AbstractRegionEntry.java
> ----------------------------------------------------------------------
> diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionEntry.java
> b/geode-core/src/main/java/org/apache/geode/internal/
> cache/AbstractRegionEntry.java
> index 4e1f0aa..2138af9 100644
> --- a/geode-core/src/main/java/org/apache/geode/internal/
> cache/AbstractRegionEntry.java
> +++ b/geode-core/src/main/java/org/apache/geode/internal/
> cache/AbstractRegionEntry.java
> @@ -209,7 +209,7 @@ public abstract class AbstractRegionEntry implements
> RegionEntry, HashEntry<Obje
> version.getRegionVersion())) {
> // distributed gc with higher vector version preempts this operation
> if (!isTombstone()) {
> - setValue(r, Token.TOMBSTONE);
> + basicMakeTombstone(r);
> r.incTombstoneCount(1);
> }
> r.getRegionMap().removeTombstone(this, version, false, true);
> @@ -220,7 +220,7 @@ public abstract class AbstractRegionEntry implements
> RegionEntry, HashEntry<Obje
> }
> setRecentlyUsed();
> boolean newEntry = (getValueAsToken() == Token.REMOVED_PHASE1);
> - setValue(r, Token.TOMBSTONE);
> + basicMakeTombstone(r);
> r.scheduleTombstone(this, version);
> if (newEntry) {
> // bug #46631 - entry count is decremented by scheduleTombstone
> but this is a new entry
> @@ -228,6 +228,17 @@ public abstract class AbstractRegionEntry implements
> RegionEntry, HashEntry<Obje
> }
> }
> }
> + private void basicMakeTombstone(LocalRegion r) throws
> RegionClearedException {
> + boolean setValueCompleted = false;
> + try {
> + setValue(r, Token.TOMBSTONE);
> + setValueCompleted = true;
> + } finally {
> + if (!setValueCompleted && isTombstone()) {
> + removePhase2();
> + }
> + }
> + }
>
>
> @Override
>
> http://git-wip-us.apache.org/repos/asf/incubator-geode/
> blob/2ef50b24/geode-core/src/test/java/org/apache/geode/internal/cache/
> AbstractRegionEntryTest.java
> ----------------------------------------------------------------------
> diff --git a/geode-core/src/test/java/org/apache/geode/internal/
> cache/AbstractRegionEntryTest.java b/geode-core/src/test/java/
> org/apache/geode/internal/cache/AbstractRegionEntryTest.java
> new file mode 100644
> index 0000000..36e3e30
> --- /dev/null
> +++ b/geode-core/src/test/java/org/apache/geode/internal/
> cache/AbstractRegionEntryTest.java
> @@ -0,0 +1,112 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements. See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.geode.internal.cache;
> +
> +import static org.junit.Assert.*;
> +import static org.mockito.Mockito.*;
> +
> +import org.assertj.core.api.Assertions;
> +import org.junit.Test;
> +import org.junit.experimental.categories.Category;
> +
> +import org.apache.geode.internal.cache.versions.RegionVersionVector;
> +import org.apache.geode.internal.cache.versions.VersionTag;
> +import org.apache.geode.internal.offheap.annotations.Unretained;
> +import org.apache.geode.internal.util.concurrent.
> CustomEntryConcurrentHashMap.HashEntry;
> +import org.apache.geode.test.junit.categories.UnitTest;
> +
> +@Category(UnitTest.class)
> +public class AbstractRegionEntryTest {
> +
> + @Test
> + public void whenMakeTombstoneHasSetValueTh
> atThrowsExceptionDoesNotChangeValueToTombstone() throws
> RegionClearedException {
> + LocalRegion lr = mock(LocalRegion.class);
> + RegionVersionVector<?> rvv = mock(RegionVersionVector.class);
> + when(lr.getVersionVector()).thenReturn(rvv);
> + VersionTag<?> vt = mock(VersionTag.class);
> + Object value = "value";
> + AbstractRegionEntry re = new TestableRegionEntry(lr, value);
> + assertEquals(value, re.getValueField());
> + Assertions.assertThatThrownBy(() -> re.makeTombstone(lr, vt))
> + .isInstanceOf(RuntimeException.class)
> + .hasMessage("throw exception on setValue(TOMBSTONE)");
> + assertEquals(Token.REMOVED_PHASE2, re.getValueField());
> + }
> +
> +
> + public static class TestableRegionEntry extends AbstractRegionEntry {
> +
> + private Object value;
> +
> + protected TestableRegionEntry(RegionEntryContext context, Object
> value) {
> + super(context, value);
> + }
> +
> + @Override
> + protected Object getValueField() {
> + return this.value;
> + }
> +
> + @Override
> + protected void setValueField(Object v) {
> + this.value = v;
> + }
> +
> + @Override
> + public void setValue(RegionEntryContext context, @Unretained Object
> value)
> + throws RegionClearedException {
> + super.setValue(context, value);
> + if (value == Token.TOMBSTONE) {
> + throw new RuntimeException("throw exception on
> setValue(TOMBSTONE)");
> + }
> + }
> +
> + @Override
> + public int getEntryHash() {
> + return 0;
> + }
> +
> + @Override
> + public HashEntry<Object, Object> getNextEntry() {
> + return null;
> + }
> +
> + @Override
> + public void setNextEntry(HashEntry<Object, Object> n) {
> + }
> +
> + @Override
> + public Object getKey() {
> + return null;
> + }
> +
> + @Override
> + protected long getlastModifiedField() {
> + return 0;
> + }
> +
> + @Override
> + protected boolean compareAndSetLastModifiedField(long expectedValue,
> long newValue) {
> + return false;
> + }
> +
> + @Override
> + protected void setEntryHash(int v) {
> + }
> +
> + }
> +}
>
>