[ 
https://issues.apache.org/jira/browse/GOBBLIN-1859?focusedWorklogId=874714&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-874714
 ]

ASF GitHub Bot logged work on GOBBLIN-1859:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 04/Aug/23 18:27
            Start Date: 04/Aug/23 18:27
    Worklog Time Spent: 10m 
      Work Description: umustafi commented on code in PR #3721:
URL: https://github.com/apache/gobblin/pull/3721#discussion_r1284726496


##########
gobblin-runtime/src/test/java/org/apache/gobblin/runtime/api/MysqlMultiActiveLeaseArbiterTest.java:
##########
@@ -143,4 +159,128 @@ public void testAcquireLeaseSingleParticipant() throws 
Exception {
     Assert.assertTrue(sixthObtainedStatus.getEventTimestamp()
         <= sixthObtainedStatus.getLeaseAcquisitionTimestamp());
   }
+
+  /*
+     Tests CONDITIONALLY_ACQUIRE_LEASE_IF_NEW_ROW_STATEMENT to ensure an 
insertion is not attempted unless the table
+     state remains the same as the prior read, which expects no row matching 
the primary key in the table
+     Note: this isolates and tests CASE 1 in which another participant could 
have acquired the lease between the time
+     the read was done and subsequent write was carried out
+  */
+  @Test //(dependsOnMethods = "testAcquireLeaseSingleParticipant")
+  public void testConditionallyAcquireLeaseIfNewRow() throws IOException {
+    // Inserting the first time should update 1 row
+    int numRowsUpdated = 
this.mysqlMultiActiveLeaseArbiter.withPreparedStatement(formattedAcquireLeaseNewRowStatement,
+        insertStatement -> {
+          completeInsertPreparedStatement(insertStatement, resumeDagAction);
+          return insertStatement.executeUpdate();
+        }, true);
+    Assert.assertEquals(numRowsUpdated, 1);

Review Comment:
   Updated the PR to contain refactoring discussed above where I've created 
abstractions to simplify the `tryAcquireLease` function and make it easier to 
test each of the SQL statements in isolation. 





Issue Time Tracking
-------------------

    Worklog Id:     (was: 874714)
    Time Spent: 1h 50m  (was: 1h 40m)

> Multi-active Unit Test for Multiple Participant
> -----------------------------------------------
>
>                 Key: GOBBLIN-1859
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-1859
>             Project: Apache Gobblin
>          Issue Type: Bug
>          Components: gobblin-service
>            Reporter: Urmi Mustafi
>            Assignee: Abhishek Tiwari
>            Priority: Major
>          Time Spent: 1h 50m
>  Remaining Estimate: 0h
>
> In multi-active mode, multiple participants will be reading/writing to MySQL 
> table. We want to make sure each participant acts on the table in a manner 
> that takes into account that the state may have changed while the 
> MultiActiveLeaseArbiter is processing the result of a READ. This PR adds unit 
> tests that validate SQL Insertion statements are conditional upon the state 
> of the particular row corresponding to the flow action event being unchanged 
> from the read made by this participant. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to