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.

Reply via email to