[geode] branch develop updated: GEODE-10410: Fix bucket lost during rebalance (#7857)

2022-09-20 Thread alberto
This is an automated email from the ASF dual-hosted git repository.

alberto 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 67ebd727be GEODE-10410: Fix bucket lost during rebalance (#7857)
67ebd727be is described below

commit 67ebd727bef5c613bfe2aaf4258a5472ac433978
Author: WeijieEST <108109958+weijie...@users.noreply.github.com>
AuthorDate: Wed Sep 21 01:37:57 2022 +0800

GEODE-10410: Fix bucket lost during rebalance (#7857)

* GEODE-10410: Fix bucket lost during rebalance

* improve test case name

* improve test case comments and test case names
---
 .../partitioned/rebalance/model/MemberRollup.java  | 31 
 .../PartitionedRegionLoadModelJUnitTest.java   | 82 +-
 2 files changed, 79 insertions(+), 34 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/MemberRollup.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/MemberRollup.java
index be9c4df2ed..6078cf028d 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/MemberRollup.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/MemberRollup.java
@@ -131,26 +131,23 @@ class MemberRollup extends Member {
 
   @Override
   public RefusalReason willAcceptBucket(Bucket bucket, Member source, boolean 
checkIPAddress) {
-RefusalReason reason = super.willAcceptBucket(bucket, source, 
checkIPAddress);
-if (reason.willAccept()) {
-  BucketRollup bucketRollup = (BucketRollup) bucket;
-  MemberRollup sourceRollup = (MemberRollup) source;
-  for (Map.Entry entry : getColocatedMembers().entrySet()) 
{
-String region = entry.getKey();
-Member member = entry.getValue();
-Bucket colocatedBucket = 
bucketRollup.getColocatedBuckets().get(region);
-Member colocatedSource =
-sourceRollup == null ? null : 
sourceRollup.getColocatedMembers().get(region);
-if (colocatedBucket != null) {
-  reason = member.willAcceptBucket(colocatedBucket, colocatedSource, 
checkIPAddress);
-  if (!reason.willAccept()) {
-return reason;
-  }
+RefusalReason reason;
+BucketRollup bucketRollup = (BucketRollup) bucket;
+MemberRollup sourceRollup = (MemberRollup) source;
+for (Map.Entry entry : getColocatedMembers().entrySet()) {
+  String region = entry.getKey();
+  Member member = entry.getValue();
+  Bucket colocatedBucket = bucketRollup.getColocatedBuckets().get(region);
+  Member colocatedSource =
+  sourceRollup == null ? null : 
sourceRollup.getColocatedMembers().get(region);
+  if (colocatedBucket != null) {
+reason = member.willAcceptBucket(colocatedBucket, colocatedSource, 
checkIPAddress);
+if (!reason.willAccept()) {
+  return reason;
 }
   }
-  return RefusalReason.NONE;
 }
-return reason;
+return RefusalReason.NONE;
   }
 
   Map getColocatedMembers() {
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/rebalance/PartitionedRegionLoadModelJUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/rebalance/PartitionedRegionLoadModelJUnitTest.java
index 26b2b98b8e..5423b08a28 100644
--- 
a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/rebalance/PartitionedRegionLoadModelJUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/rebalance/PartitionedRegionLoadModelJUnitTest.java
@@ -66,7 +66,7 @@ public class PartitionedRegionLoadModelJUnitTest {
 
   private static final int MAX_MOVES = 5000;
   private static final boolean DEBUG = true;
-
+  private static final long MB = 1024 * 1024;
   private MyBucketOperator bucketOperator;
   private final PartitionedRegion partitionedRegion = 
mock(PartitionedRegion.class);
   final ClusterDistributionManager clusterDistributionManager =
@@ -443,7 +443,8 @@ public class PartitionedRegionLoadModelJUnitTest {
* lmm, it will prevent a bucket move
*/
   @Test
-  public void testColocationEnforceLocalMaxMemory() throws 
UnknownHostException {
+  public void testColocationTwoNonEvictionRegionsEnforceLocalMaxMemory()
+  throws UnknownHostException {
 PartitionedRegionLoadModel model = new 
PartitionedRegionLoadModel(bucketOperator, 1, 4,
 getAddressComparor(false), Collections.emptySet(), partitionedRegion);
 
@@ -452,25 +453,27 @@ public class PartitionedRegionLoadModelJUnitTest {
 InternalDistributedMember member2 =
 new InternalDistributedMember(InetAddress.getByName("127.0.0.1"), 2);
 
-// Create some buckets with low redundancy on member 1
+// Create some buckets with low redundancy on member 1 and enough lmm for 
re

[geode] branch develop updated: GEODE-10395 remove locks from List if dlock.acquireTryLocks return false (#7846)

2022-09-20 Thread mkevo
This is an automated email from the ASF dual-hosted git repository.

mkevo 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 4cb75ae484 GEODE-10395 remove locks from List if dlock.acquireTryLocks 
return false (#7846)
4cb75ae484 is described below

commit 4cb75ae4848250606db2f4b14300601755586192
Author: Mario Kevo <48509719+mk...@users.noreply.github.com>
AuthorDate: Tue Sep 20 19:04:08 2022 +0200

GEODE-10395 remove locks from List if dlock.acquireTryLocks return false 
(#7846)
---
 .../internal/cache/locks/TXLockServiceImpl.java| 26 ++--
 .../internal/StartupMessageJUnitTest.java  |  4 +-
 .../cache/locks/TXLockServiceImplTest.java | 71 ++
 3 files changed, 95 insertions(+), 6 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockServiceImpl.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockServiceImpl.java
index f7e7aebe0f..44b9c9f440 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockServiceImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockServiceImpl.java
@@ -22,6 +22,7 @@ import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
 
+import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CommitConflictException;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
@@ -53,7 +54,7 @@ public class TXLockServiceImpl extends TXLockService {
   /**
* List of active txLockIds
*/
-  protected List txLockIdList = new ArrayList();
+  protected final List txLockIdList = new ArrayList<>();
 
   /**
* True if grantor recovery is in progress; used to keep 
release from waiting for
@@ -70,6 +71,14 @@ public class TXLockServiceImpl extends TXLockService {
   /** The distributed system for cancellation checks. */
   private final InternalDistributedSystem system;
 
+  @VisibleForTesting
+  TXLockServiceImpl(InternalDistributedSystem sys, 
StoppableReentrantReadWriteLock recoveryLock,
+  DLockService dlock) {
+system = sys;
+this.recoveryLock = recoveryLock;
+this.dlock = dlock;
+  }
+
   TXLockServiceImpl(String name, InternalDistributedSystem sys) {
 if (sys == null) {
   throw new IllegalStateException(
@@ -129,10 +138,16 @@ public class TXLockServiceImpl extends TXLockService {
   if (gotLocks) { // ...otherwise race can occur between tryLocks and 
readLock
 acquireRecoveryReadLock();
   } else if (keyIfFail[0] != null) {
+synchronized (txLockIdList) {
+  txLockIdList.remove(txLockId);
+}
 throw new CommitConflictException(
 String.format("Concurrent transaction commit detected %s",
 keyIfFail[0]));
   } else {
+synchronized (txLockIdList) {
+  txLockIdList.remove(txLockId);
+}
 throw new CommitConflictException(
 String.format("Failed to request try locks from grantor: %s",
 dlock.getLockGrantorId()));
@@ -225,9 +240,7 @@ public class TXLockServiceImpl extends TXLockService {
 txLockId));
   }
 
-  dlock.releaseTryLocks(txLockId, () -> {
-return recovering;
-  });
+  dlock.releaseTryLocks(txLockId, () -> recovering);
 
   txLockIdList.remove(txLockId);
   releaseRecoveryReadLock();
@@ -277,4 +290,9 @@ public class TXLockServiceImpl extends TXLockService {
 dlock.destroyAndRemove();
   }
 
+  @VisibleForTesting
+  public int getTxLockIdList() {
+return this.txLockIdList.size();
+  }
+
 }
diff --git 
a/geode-core/src/test/java/org/apache/geode/distributed/internal/StartupMessageJUnitTest.java
 
b/geode-core/src/test/java/org/apache/geode/distributed/internal/StartupMessageJUnitTest.java
index d017b96ad9..b51453a3a4 100644
--- 
a/geode-core/src/test/java/org/apache/geode/distributed/internal/StartupMessageJUnitTest.java
+++ 
b/geode-core/src/test/java/org/apache/geode/distributed/internal/StartupMessageJUnitTest.java
@@ -95,7 +95,7 @@ public class StartupMessageJUnitTest {
 startupMessage.process(distributionManager);
 
 assertThat(
-startupMessage.getProcessorType() == 
OperationExecutors.WAITING_POOL_EXECUTOR);
+
startupMessage.getProcessorType()).isEqualTo(OperationExecutors.WAITING_POOL_EXECUTOR);
   }
 
   @Test
@@ -111,6 +111,6 @@ public class StartupMessageJUnitTest {
 
 assertThat(
 startupResponseMessage
-.getProcessorType() == OperationExecutors.WAITING_POOL_EXECUTOR);
+
.getProcessorType()).isEqualTo(OperationExecutors.WAITING_POOL_EXECUTOR);
   }
 }
diff --git 
a/geode-core/src/test/java/org/apache/geode/internal/cache/locks/TXLockServiceImplTest.java
 
b/geode-core/src/test/java/org/apache/geode/internal/cache/locks/T