This is an automated email from the ASF dual-hosted git repository. klund pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
commit ca73e12f4f5a741dfd4d9ad586f943567cd244ee Author: Kirk Lund <[email protected]> AuthorDate: Fri Mar 23 13:39:00 2018 -0700 GEODE-1279: Rename Bug42055DUnitTest as BucketRegionSizeWithOverflowRegressionTest The test was apparently unfinished, so I implemented the rest of it. It looks like the bug still exists (my assertions fail), so I filed GEODE-4929 and marked the test with Ignore("GEODE-4929"). We need to do some more work to determine if the bug is really a bug and then fix this up. --- ...BucketRegionSizeWithOverflowRegressionTest.java | 147 +++++++++++++++++++++ .../geode/internal/cache/Bug42055DUnitTest.java | 95 ------------- 2 files changed, 147 insertions(+), 95 deletions(-) diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionSizeWithOverflowRegressionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionSizeWithOverflowRegressionTest.java new file mode 100644 index 0000000..807966c --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/BucketRegionSizeWithOverflowRegressionTest.java @@ -0,0 +1,147 @@ +/* + * 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 java.util.concurrent.TimeUnit.MINUTES; +import static org.apache.geode.cache.EvictionAction.OVERFLOW_TO_DISK; +import static org.apache.geode.cache.EvictionAttributes.createLRUEntryAttributes; +import static org.apache.geode.test.dunit.Host.getHost; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +import java.io.File; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import org.apache.geode.cache.AttributesFactory; +import org.apache.geode.cache.DataPolicy; +import org.apache.geode.cache.DiskStoreFactory; +import org.apache.geode.cache.PartitionAttributesFactory; +import org.apache.geode.cache.Region; +import org.apache.geode.test.dunit.VM; +import org.apache.geode.test.dunit.cache.CacheTestCase; +import org.apache.geode.test.junit.categories.DistributedTest; +import org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder; +import org.apache.geode.test.junit.rules.serializable.SerializableTestName; + +/** + * PR accessor configured for OverflowToDisk should not create a diskstore. + * + * <p> + * TRAC #42055: a pr accessor configured for OverflowToDisk fails during creation because of disk + * + * <p> + * TRAC #42055 also mentions delta so we should add test(s) for delta as well. <br> + * TODO: Test that the bucket size does not go negative when we fault out and in a delta object. + */ +@Category(DistributedTest.class) +public class BucketRegionSizeWithOverflowRegressionTest extends CacheTestCase { + + private static final int ENTRIES_COUNT = 1; + + private String uniqueName; + private File datastoreDiskDir; + private File accessorDiskDir; + + private VM datastore; + private VM accessor; + + @Rule + public SerializableTemporaryFolder temporaryFolder = new SerializableTemporaryFolder(); + + @Rule + public SerializableTestName testName = new SerializableTestName(); + + @Before + public void setUp() throws Exception { + datastore = getHost(0).getVM(0); + accessor = getHost(0).getVM(1); + + uniqueName = getClass().getSimpleName() + "_" + testName.getMethodName(); + datastoreDiskDir = temporaryFolder.newFolder(uniqueName + "_datastore_disk"); + accessorDiskDir = temporaryFolder.newFolder(uniqueName + "_accessor_disk"); + + datastore.invoke(() -> createDataStore()); + accessor.invoke(() -> createAccessor()); + } + + @After + public void tearDown() throws Exception { + disconnectAllFromDS(); + } + + @Ignore("GEODE-4929") + @Test + public void testPROverflow() throws Exception { + accessor.invoke(() -> { + Region<String, String> region = getCache().getRegion(uniqueName); + for (int i = 1; i <= ENTRIES_COUNT + 1; i++) { + region.put("key-" + i, "value-" + i); + } + + PartitionedRegion partitionedRegion = (PartitionedRegion) region; + assertThat(partitionedRegion.getDataStore()).isNull(); + assertThat(partitionedRegion.size()).isGreaterThanOrEqualTo(0); + }); + + datastore.invoke(() -> { + PartitionedRegion partitionedRegion = (PartitionedRegion) getCache().getRegion(uniqueName); + assertThat(getCache().getRegion(uniqueName).size()).isEqualTo(2); + assertThat(getCache().getRegion(uniqueName).size()).isGreaterThanOrEqualTo(0); + assertThat(partitionedRegion.getDataStore().getAllLocalBucketIds()).hasSize(2); + }); + + // datastore should create diskstore + await().atMost(1, MINUTES) + .until(() -> assertThat(datastoreDiskDir.listFiles().length).isGreaterThan(0)); + + // accessor should not create a diskstore + assertThat(accessorDiskDir.listFiles()).hasSize(0); + } + + private void createDataStore() { + DiskStoreFactory dsf = getCache().createDiskStoreFactory(); + dsf.setDiskDirs(new File[] {datastoreDiskDir}); + + AttributesFactory af = new AttributesFactory(); + af.setDataPolicy(DataPolicy.PARTITION); + af.setDiskStoreName(dsf.create(uniqueName).getName()); + af.setEvictionAttributes(createLRUEntryAttributes(ENTRIES_COUNT, OVERFLOW_TO_DISK)); + af.setPartitionAttributes(new PartitionAttributesFactory().create()); + + getCache().createRegion(uniqueName, af.create()); + } + + private void createAccessor() { + DiskStoreFactory dsf = getCache().createDiskStoreFactory(); + dsf.setDiskDirs(new File[] {accessorDiskDir}); + + PartitionAttributesFactory<Integer, TestDelta> paf = new PartitionAttributesFactory<>(); + paf.setLocalMaxMemory(0); + + AttributesFactory<Integer, TestDelta> af = new AttributesFactory<>(); + af.setDataPolicy(DataPolicy.PARTITION); + af.setDiskStoreName(dsf.create(uniqueName).getName()); + af.setEvictionAttributes(createLRUEntryAttributes(ENTRIES_COUNT, OVERFLOW_TO_DISK)); + af.setPartitionAttributes(paf.create()); + + getCache().createRegion(uniqueName, af.create()); + } +} diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/Bug42055DUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/Bug42055DUnitTest.java deleted file mode 100644 index fcdf327..0000000 --- a/geode-core/src/test/java/org/apache/geode/internal/cache/Bug42055DUnitTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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 org.junit.Test; -import org.junit.experimental.categories.Category; - -import org.apache.geode.cache.AttributesFactory; -import org.apache.geode.cache.Cache; -import org.apache.geode.cache.DataPolicy; -import org.apache.geode.cache.EvictionAction; -import org.apache.geode.cache.EvictionAttributes; -import org.apache.geode.cache.PartitionAttributes; -import org.apache.geode.cache.PartitionAttributesFactory; -import org.apache.geode.cache.Region; -import org.apache.geode.cache30.CacheTestCase; -import org.apache.geode.test.dunit.Host; -import org.apache.geode.test.dunit.SerializableCallable; -import org.apache.geode.test.dunit.SerializableRunnable; -import org.apache.geode.test.dunit.VM; -import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase; -import org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase; -import org.apache.geode.test.junit.categories.DistributedTest; - -/** - * Test that the bucket size does not go negative when we fault out and in a delta object. - * - */ -@Category(DistributedTest.class) -public class Bug42055DUnitTest extends JUnit4CacheTestCase { - - - /** - * @param name - */ - public Bug42055DUnitTest() { - super(); - } - - @Test - public void testPROverflow() throws Exception { - final Host host = Host.getHost(0); - VM vm0 = host.getVM(0); - VM vm1 = host.getVM(1); - - SerializableCallable createDataRegion = new SerializableCallable("createDataRegion") { - public Object call() throws Exception { - Cache cache = getCache(); - AttributesFactory attr = new AttributesFactory(); - PartitionAttributesFactory paf = new PartitionAttributesFactory(); - PartitionAttributes prAttr = paf.create(); - attr.setPartitionAttributes(prAttr); - attr.setEvictionAttributes( - EvictionAttributes.createLRUEntryAttributes(1, EvictionAction.OVERFLOW_TO_DISK)); - Region region = cache.createRegion("region1", attr.create()); - - return null; - } - }; - - vm0.invoke(createDataRegion); - - SerializableRunnable createEmptyRegion = new SerializableRunnable("createEmptyRegion") { - public void run() { - Cache cache = getCache(); - AttributesFactory<Integer, TestDelta> attr = new AttributesFactory<Integer, TestDelta>(); - PartitionAttributesFactory<Integer, TestDelta> paf = - new PartitionAttributesFactory<Integer, TestDelta>(); - paf.setLocalMaxMemory(0); - PartitionAttributes<Integer, TestDelta> prAttr = paf.create(); - attr.setPartitionAttributes(prAttr); - attr.setDataPolicy(DataPolicy.PARTITION); - attr.setEvictionAttributes( - EvictionAttributes.createLRUEntryAttributes(1, EvictionAction.OVERFLOW_TO_DISK)); - Region<Integer, TestDelta> region = cache.createRegion("region1", attr.create()); - } - }; - - vm1.invoke(createEmptyRegion); - } -} -- To stop receiving notification emails like this one, please contact [email protected].
