kevinrr888 commented on code in PR #4524:
URL: https://github.com/apache/accumulo/pull/4524#discussion_r1700588116


##########
core/src/main/java/org/apache/accumulo/core/fate/user/UserFateStore.java:
##########
@@ -120,35 +127,161 @@ public FateId getFateId() {
   }
 
   @Override
-  protected void create(FateId fateId, FateKey fateKey) {
-    final int maxAttempts = 5;
-
+  public Optional<FateTxStore<T>> createAndReserve(FateKey fateKey) {
+    final var reservation = FateReservation.from(lockID, UUID.randomUUID());
+    final var fateId = fateIdGenerator.fromTypeAndKey(type(), fateKey);
+    Optional<FateTxStore<T>> txStore = Optional.empty();
+    int maxAttempts = 5;
+    FateMutator.Status status = null;
+
+    // We first need to write the initial/unreserved value for the reservation 
column
+    // Only need to retry if it is UNKNOWN
     for (int attempt = 0; attempt < maxAttempts; attempt++) {
-
-      if (attempt >= 1) {
-        log.debug("Failed to create transaction with fateId {} and fateKey {}, 
trying again",
-            fateId, fateKey);
-        UtilWaitThread.sleep(100);
+      status = newMutator(fateId).putInitReservationVal().tryMutate();
+      if (status != FateMutator.Status.UNKNOWN) {
+        break;
       }
+      UtilWaitThread.sleep(100);
+    }
+    for (int attempt = 0; attempt < maxAttempts; attempt++) {

Review Comment:
   I agree it shouldn't be doing two mutations. With the exisiting FateMutator 
methods, this was the only way for this to work (since putInitReservationVal() 
requires the column to be empty and putReservedTx() requires the column to be 
NOT_RESERVED so always fails when both conditions are used together), and I 
figured this will be changed anyways once reserving/unreserving is replaced 
with creating/deleting the column. Added new FateMutator method for this use 
case here to avoid two mutations.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to