This is an automated email from the ASF dual-hosted git repository.
sanpwc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 038a8e0153 IGNITE-23259 Fix
PlacementDriverManagerTest.testRedirectionAcceptance (#4441)
038a8e0153 is described below
commit 038a8e0153173c240b9839f2ee4c65e1ad235160
Author: Alexander Lapin <[email protected]>
AuthorDate: Tue Oct 1 07:25:14 2024 +0300
IGNITE-23259 Fix PlacementDriverManagerTest.testRedirectionAcceptance
(#4441)
---
.../PlacementDriverManagerTest.java | 27 +++++++++++++---------
.../internal/placementdriver/LeaseUpdater.java | 4 ++--
.../negotiation/LeaseAgreement.java | 9 ++++++++
3 files changed, 27 insertions(+), 13 deletions(-)
diff --git
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
index 1db950706d..4e12cfc6da 100644
---
a/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
+++
b/modules/placement-driver/src/integrationTest/java/org/apache/ignite/internal/placementdriver/PlacementDriverManagerTest.java
@@ -36,6 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -592,27 +593,31 @@ public class PlacementDriverManagerTest extends
BasePlacementDriverTest {
@Test
public void testRedirectionAcceptance() throws Exception {
AtomicReference<String> redirect = new AtomicReference<>();
+ AtomicBoolean forceDetected = new AtomicBoolean(false);
leaseGrantHandler = (req, handler) -> {
+ if (req.force()) {
+ forceDetected.set(true);
+ }
+
if (redirect.get() == null) {
redirect.set(handler.equals(nodeName) ? anotherNodeName :
nodeName);
-
- return PLACEMENT_DRIVER_MESSAGES_FACTORY
- .leaseGrantedMessageResponse()
- .accepted(false)
- .redirectProposal(redirect.get())
- .build();
- } else {
- return PLACEMENT_DRIVER_MESSAGES_FACTORY
- .leaseGrantedMessageResponse()
- .accepted(redirect.get().equals(handler))
- .build();
}
+
+ return PLACEMENT_DRIVER_MESSAGES_FACTORY
+ .leaseGrantedMessageResponse()
+ .accepted(redirect.get().equals(handler))
+ .redirectProposal(redirect.get().equals(handler) ? null :
redirect.get())
+ .build();
};
TablePartitionId grpPart0 = createTableAssignment();
checkLeaseCreated(grpPart0, true);
+
+ if (forceDetected.get()) {
+ fail("Unexpected force leaseGrantedMessage detected");
+ }
}
@Test
diff --git
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
index ef26725948..f10f2a4873 100644
---
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
+++
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
@@ -536,8 +536,8 @@ public class LeaseUpdater {
// New lease is granted.
writeNewLease(grpId, candidate, renewedLeases);
- boolean force = Objects.equals(lease.getLeaseholder(),
candidate.name());
-
+ // TODO https://issues.apache.org/jira/browse/IGNITE-23213
Depending on the solution we may refactor this.
+ boolean force = Objects.equals(lease.getLeaseholder(),
candidate.name()) && !agreement.isCancelled();
toBeNegotiated.put(grpId, force);
}
diff --git
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/negotiation/LeaseAgreement.java
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/negotiation/LeaseAgreement.java
index eee8fafade..ab6ead3d87 100644
---
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/negotiation/LeaseAgreement.java
+++
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/negotiation/LeaseAgreement.java
@@ -135,6 +135,15 @@ public class LeaseAgreement {
return responseFut.isDone();
}
+ /**
+ * Returns true if the agreement is cancelled, false otherwise.
+ *
+ * @return True if the agreement is cancelled, false otherwise.
+ */
+ public boolean isCancelled() {
+ return responseFut.isDone() && !responseFut.isCompletedExceptionally()
&& responseFut.join() == null;
+ }
+
/**
* Check the validity of the agreement in the current logical topology and
group assignments. If the suggested leaseholder
* has left topology or not included into the current assignments, the
agreement is broken.