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

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

                Author: ASF GitHub Bot
            Created on: 12/Sep/23 04:04
            Start Date: 12/Sep/23 04:04
    Worklog Time Spent: 10m 
      Work Description: phet commented on code in PR #3765:
URL: https://github.com/apache/gobblin/pull/3765#discussion_r1322264497


##########
gobblin-runtime/src/main/java/org/apache/gobblin/runtime/api/MysqlMultiActiveLeaseArbiterTestingDecorator.java:
##########
@@ -0,0 +1,206 @@
+package org.apache.gobblin.runtime.api;
+
+import com.google.common.base.Optional;
+import com.typesafe.config.Config;
+import java.io.IOException;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import javax.inject.Inject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.gobblin.configuration.ConfigurationKeys;
+import org.apache.gobblin.util.ConfigUtils;
+import org.apache.gobblin.util.HostUtils;
+
+
+/**
+ * This class is a decorator for {@link MysqlMultiActiveLeaseArbiter} used to 
model scenarios where a lease owner fails
+ * to complete a lease intermittently (representing a variety of slowness or 
failure cases that can result on the
+ * participant side, network connectivity, or database).
+ *
+ * It will fail on calls to {@link 
MysqlMultiActiveLeaseArbiter.recordLeaseSuccess()} where a function of the lease
+ * obtained timestamp matches a bitmask of the host. Ideally, each participant 
should fail on different calls (with
+ * limited overlap if we want to test that). We use a deterministic method of 
failing some calls to complete a lease
+ * success with the following methodology. We take the binary representation 
of the lease obtained timestamp, scatter
+ * its bits through bit interleaving of the first and second halves of the 
binary representation to differentiate
+ * behavior of consecutive timestamps, and compare the last N digits 
(determined through config) to the bit mask of the
+ * host. If the bitwise AND comparison to the host bit mask equals the bitmask 
we fail the call.
+ */
+@Slf4j
+public class MysqlMultiActiveLeaseArbiterTestingDecorator extends 
MysqlMultiActiveLeaseArbiter {
+  private final int bitMaskLength;

Review Comment:
   I suggest reading the length and immediately converting it to the actual 
mask, since that's what we need to use; e.g.:
   ```
   int bitPositionsMask =
       (1 << (bitmaskLength + 1)) - 1
   // alt.: (~0) >>> (32 - bitmaskLength)
   ```





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

    Worklog Id:     (was: 879910)
    Time Spent: 1h 10m  (was: 1h)

> Define MultiActiveLeaseArbiter Decorator to Model Failed Lease Completion
> -------------------------------------------------------------------------
>
>                 Key: GOBBLIN-1901
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-1901
>             Project: Apache Gobblin
>          Issue Type: New Feature
>          Components: gobblin-service
>            Reporter: Urmi Mustafi
>            Assignee: Abhishek Tiwari
>            Priority: Major
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> Creates MysqlMultiActiveLeaseAribterTestingDecorator class used to model 
> scenarios where a lease owner fails to complete a lease successfully 
> intermittently (representing a variety of slowness or failure cases that can 
> result on the participant side, network connectivity, or database).
> It will fail on calls to \{@link 
> MysqlMultiActiveLeaseArbiter.recordLeaseSuccess()} where a deterministic 
> function of the lease obtained timestamp matches a bitmask of the host. 
> Ideally, each participant should fail on different calls (with limited 
> overlap if we want to test that). See java doc for more details. 



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

Reply via email to