This is an automated email from the ASF dual-hosted git repository. donalevans pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push: new e87ea66ac9 GEODE-10258: Assert at least 1 invocation (#7624) e87ea66ac9 is described below commit e87ea66ac99fd1fc4df4e42673c7c283471f4b00 Author: Donal Evans <doev...@vmware.com> AuthorDate: Wed Apr 27 11:19:23 2022 -0700 GEODE-10258: Assert at least 1 invocation (#7624) ClearDuringNetSearchOplogRegressionTest uses an await statement to allow the timing of a region clear to be correct. An invocation of CacheObserver.afterSettingDiskRef() is used as the trigger for the await to pass and allow the clear to begin. The test was failing due to CacheObserver.afterSettingDiskRef() being invoked more than once in the await statement, but this method is expected to be invoked multiple times during the test, so occasionally the await would check and find 0 invocations,then check again and find 2 or more, causing the test to fail. Replacing the times(1) in the assertion with atLeast(1) allows the test to pass while preserving the intended behaviour of the await. Some incidental code clean-up was also done in the test to remove compiler warnings. Authored-by: Donal Evans <doev...@vmware.com> --- .../ClearDuringNetSearchOplogRegressionTest.java | 40 +++++++++------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClearDuringNetSearchOplogRegressionTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClearDuringNetSearchOplogRegressionTest.java index 735263a396..e7b0f73d6b 100755 --- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClearDuringNetSearchOplogRegressionTest.java +++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/ClearDuringNetSearchOplogRegressionTest.java @@ -15,11 +15,12 @@ package org.apache.geode.internal.cache; import static org.apache.geode.cache.EvictionAttributes.createLRUEntryAttributes; +import static org.apache.geode.cache.Region.SEPARATOR; import static org.apache.geode.test.awaitility.GeodeAwaitility.await; import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.io.File; @@ -29,13 +30,13 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.apache.geode.cache.AttributesFactory; import org.apache.geode.cache.DataPolicy; import org.apache.geode.cache.DiskStore; import org.apache.geode.cache.DiskStoreFactory; import org.apache.geode.cache.EvictionAction; import org.apache.geode.cache.Operation; import org.apache.geode.cache.Region; +import org.apache.geode.cache.RegionFactory; import org.apache.geode.cache.Scope; import org.apache.geode.distributed.internal.ClusterDistributionManager; import org.apache.geode.internal.cache.SearchLoadAndWriteProcessor.NetSearchRequestMessage; @@ -50,14 +51,11 @@ import org.apache.geode.test.junit.rules.serializable.SerializableTestName; * * <p> * Test must be DistributedTest because it requires ClusterDistributionManager. - * - * <p> - * TRAC #40299: Suspect String - DiskAccessException : Data for DiskEntry could not be obtained - * from Disk. A clear operation may have deleted the oplogs (logged as error) */ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { + private static final long serialVersionUID = 7516996008283858222L; private String uniqueName; private String regionName; private File[] diskDirs; @@ -88,7 +86,7 @@ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { disconnectAllFromDS(); } - /** + /* * The Clear operation during a NetSearchMessage.doGet() in progress can cause DiskAccessException * by accessing cleared oplogs and eventually destroy region. The Test verifies that fix prevents * this. @@ -117,14 +115,14 @@ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { DiskStore diskStore = diskStoreFactory.create(uniqueName); - AttributesFactory factory = new AttributesFactory(); + RegionFactory<String, Integer> factory = getCache().createRegionFactory(); factory.setScope(Scope.DISTRIBUTED_ACK); factory.setDataPolicy(DataPolicy.PERSISTENT_REPLICATE); factory.setDiskSynchronous(false); factory.setDiskStoreName(diskStore.getName()); factory.setEvictionAttributes(createLRUEntryAttributes(2, EvictionAction.OVERFLOW_TO_DISK)); - getCache().createRegion(regionName, factory.create()); + factory.create(regionName); } private void putSevenEntries() { @@ -135,7 +133,7 @@ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { } private void concurrentNetSearchGetAndClear() throws InterruptedException { - InternalRegion region = (InternalRegion) getCache().getRegion(regionName); + InternalRegion region = getCache().getInternalRegionByPath(SEPARATOR + regionName); assertThat(region.size()).isEqualTo(7); Thread getter = new Thread(new Getter(region)); @@ -157,13 +155,11 @@ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { // start getThread getter.start(); - await() - .untilAsserted(() -> verify(observer, times(1)).afterSettingDiskRef()); + await().untilAsserted(() -> verify(observer, atLeast(1)).afterSettingDiskRef()); - // This test appears to be testing a problem with the non-RVV - // based clear. So we'll use that functionality here. - // Region.clear uses an RVV, and will deadlock if called while - // the write lock is held. + // This test appears to be testing a problem with the non-RVV based clear. So we'll use that + // functionality here. Region.clear uses an RVV, and will deadlock if called while the write + // lock is held. RegionEventImpl regionEvent = new RegionEventImpl(region, Operation.REGION_CLEAR, null, false, region.getMyId(), region.generateEventID()); @@ -172,7 +168,7 @@ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { } private void verifyRegionNotDestroyed() { - Region region = getCache().getRegion(regionName); + Region<String, Integer> region = getCache().getRegion(regionName); assertThat(region).isNotNull(); assertThat(region.isDestroyed()).isFalse(); } @@ -190,14 +186,10 @@ public class ClearDuringNetSearchOplogRegressionTest extends CacheTestCase { public void run() { SearchLoadAndWriteProcessor processor = SearchLoadAndWriteProcessor.getProcessor(); processor.initialize((LocalRegion) region, "key1", null); - sendNetSearchRequestMessage(processor, "key1", 1500, 1500, 1500); - } - - private void sendNetSearchRequestMessage(SearchLoadAndWriteProcessor processor, Object key, - int timeoutMillis, int ttlMillis, int idleMillis) { - NetSearchRequestMessage message = new SearchLoadAndWriteProcessor.NetSearchRequestMessage(); - message.initialize(processor, region.getName(), key, timeoutMillis, ttlMillis, idleMillis); + NetSearchRequestMessage message = new NetSearchRequestMessage(); + message.initialize(processor, region.getName(), "key1", 1500, 1500, 1500); message.doGet((ClusterDistributionManager) region.getDistributionManager()); } + } }