ivandika3 commented on code in PR #9188:
URL: https://github.com/apache/ozone/pull/9188#discussion_r2453999100


##########
hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java:
##########
@@ -257,5 +258,105 @@ public void testGetActiveNonListenerOMNodeIdsFiltering() {
     assertEquals(expected.size(), result.size());
     assertTrue(result.containsAll(expected));
   }
-}
 
+  // Regression tests for OM epoch and txld calculation methods

Review Comment:
   Nit: Let's remove this comment.



##########
hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java:
##########
@@ -257,5 +258,105 @@ public void testGetActiveNonListenerOMNodeIdsFiltering() {
     assertEquals(expected.size(), result.size());
     assertTrue(result.containsAll(expected));
   }
-}
 
+  // Regression tests for OM epoch and txld calculation methods
+  @Test
+  void testGetOMEpoch() {
+    assertEquals(2, OmUtils.getOMEpoch());
+    assertEquals(OmUtils.EPOCH_WHEN_RATIS_ENABLED, OmUtils.getOMEpoch());
+  }
+
+  @Test
+  void testAddEpochToTxId() {
+    assertEquals(0L, OmUtils.addEpochToTxId(0, 0));
+    assertEquals(1L << 62, OmUtils.addEpochToTxId(1, 0));
+    assertEquals(2L << 62, OmUtils.addEpochToTxId(2, 0));
+    assertEquals(3L << 62, OmUtils.addEpochToTxId(3, 0));
+
+    long txId = 12345L;
+    long expected = (2L << 62) | (txId << 8);
+    assertEquals(expected, OmUtils.addEpochToTxId(2, txId));
+
+    long maxTxId = OmUtils.MAX_TRXN_ID;
+    long maxExpected = (2L << 62) | (maxTxId << 8);
+    assertEquals(maxExpected, OmUtils.addEpochToTxId(2, maxTxId));
+
+    // Verify bit structure
+    long result = OmUtils.addEpochToTxId(2, 0x123456789ABCDL);
+    assertEquals(2L, result >>> 62);
+    assertEquals(0x123456789ABCDL, (result & 0x3FFFFFFFFFFFFFL) >>> 8);
+  }
+
+  @Test
+  void testGetTxIdFromObjectId() {
+    long[] testTxIds = { 0L, 1L, 100L, 1000L, 0x123456789ABCDL, 
OmUtils.MAX_TRXN_ID };
+    long[] testEpochs = { 0L, 1L, 2L, 3L };
+
+    for (long epoch : testEpochs) {
+      for (long txId : testTxIds) {
+        long objectId = OmUtils.addEpochToTxId(epoch, txId);
+        long extractedTxId = OmUtils.getTxIdFromObjectId(objectId);
+        assertEquals(txId, extractedTxId,
+            String.format("Round-trip failed for epoch=%d, txId=%d", epoch, 
txId));
+      }
+    }
+
+    long objectId = (2L << 62) | (0x123456789ABCDL << 8);
+    long extractedTxId = OmUtils.getTxIdFromObjectId(objectId);
+    assertEquals(0x123456789ABCDL, extractedTxId);
+  }
+
+  @Test
+  void testGetObjectIdFromTxId() {
+    long txId = 12345L;
+    long epoch = 2L;
+    long expected = OmUtils.addEpochToTxId(epoch, txId);
+    assertEquals(expected, OmUtils.getObjectIdFromTxId(epoch, txId));
+
+    for (long e = 0; e <= 3; e++) {
+      long result = OmUtils.getObjectIdFromTxId(e, txId);
+      assertEquals(e, result >>> 62);
+      assertEquals(txId, (result & 0x3FFFFFFFFFFFFFL) >>> 8);
+    }
+
+    long maxTxId = OmUtils.MAX_TRXN_ID;
+    long maxResult = OmUtils.getObjectIdFromTxId(epoch, maxTxId);
+    assertEquals(epoch, maxResult >>> 62);
+    assertEquals(maxTxId, (maxResult & 0x3FFFFFFFFFFFFFL) >>> 8);
+  }
+
+  @Test
+  void testGetObjectIdFromTxIdValidation() {
+    long validTxId = OmUtils.MAX_TRXN_ID;
+    // Test valid case - should not throw exception
+    try {
+      OmUtils.getObjectIdFromTxId(2, validTxId);
+    } catch (Exception e) {
+      fail("Valid txId should not throw exception: " + e.getMessage());
+    }
+
+    long invalidTxId = OmUtils.MAX_TRXN_ID + 1;

Review Comment:
   Let's use the actual value instead of taking from `OmUtils.MAX_TRXN_ID`



-- 
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to