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

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

                Author: ASF GitHub Bot
            Created on: 25/Jul/23 23:31
            Start Date: 25/Jul/23 23:31
    Worklog Time Spent: 10m 
      Work Description: umustafi commented on code in PR #3721:
URL: https://github.com/apache/gobblin/pull/3721#discussion_r1274213535


##########
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:
   Here I want to test cases of trying to acquire a lease after processing the 
result of the initial GET query where we find that either no such lease exists 
in the store, lease has expired, or lease was completed for a distinct event, 
where another participant has altered the table state before the current 
participant tries the insert. The public API tested here is `tryAcquireLease` 
called by multiple participants at once but I'm isolating the behavior I want 
to test by verifying the INSERTION SQL statements execute only if table state 
has not changed from the initial read. Does that make sense? 





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

    Worklog Id:     (was: 872943)
    Time Spent: 1.5h  (was: 1h 20m)

> 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: 1.5h
>  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