This is an automated email from the ASF dual-hosted git repository.

mchades pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new e928b2ff42 [#10136] fix(test): Replace brittle version count 
assertions with semantic checks in TestFilesetMetaService and 
TestFunctionMetaService (#10137)
e928b2ff42 is described below

commit e928b2ff429af7d5fcc5636b60053aa027138ab1
Author: mchades <[email protected]>
AuthorDate: Tue Mar 3 12:44:22 2026 +0800

    [#10136] fix(test): Replace brittle version count assertions with semantic 
checks in TestFilesetMetaService and TestFunctionMetaService (#10137)
    
    ## What changes were proposed in this pull request?
    
    Replaced fragile `assertEquals(N, listXxxVersions(...).size())`
    assertions in `TestFilesetMetaService` and `TestFunctionMetaService`
    with semantic checks that verify the semantically important invariants
    instead of exact row counts.
    
    This is a follow-up to PR #10082 which applied the same fix to
    `TestPolicyMetaService`.
    
    ## Why are the changes needed?
    
    Same reason as #10082: after `hardDeleteLegacyData` (which iterates over
    all EntityTypes), these tests assert exact version row counts. In
    PostgreSQL, `deleteXxxVersionsByLegacyTimeline` deletes **all** version
    rows with `deleted_at > 0` that are older than the legacy timeline — it
    does **not** filter by entity ID. This makes exact count assertions
    fragile under CI conditions.
    
    For a recent CI failure, see:
    
https://github.com/apache/gravitino/actions/runs/22559519486/job/65343121418?pr=10087
    
    The semantically important invariant is that the **latest version (v3)
    remains active** (`deleted_at == 0`), not that all 3 rows still
    physically exist. Similarly after `deleteOldVersionData`, what matters
    is that v3 is active and exactly 1 row remains with `deleted_at == 0`.
    
    ## Does this PR introduce any user-facing changes?
    
    No. This is a test-only change.
    
    Fixes #10136
    
    Co-authored-by: Copilot <[email protected]>
---
 .../storage/relational/service/TestFilesetMetaService.java | 14 ++++++++++----
 .../relational/service/TestFunctionMetaService.java        | 14 ++++++++++----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFilesetMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFilesetMetaService.java
index 58b0eb7e6d..c292418c1e 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFilesetMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFilesetMetaService.java
@@ -199,20 +199,26 @@ public class TestFilesetMetaService extends 
TestJDBCBackend {
     }
     assertFalse(legacyRecordExistsInDB(fileset.id(), 
Entity.EntityType.FILESET));
     assertEquals(0, listFilesetVersions(fileset.id()).size());
-    assertEquals(3, listFilesetVersions(anotherFileset.id()).size());
+    Map<Integer, Long> anotherFilesetVersionsAfterHardDelete =
+        listFilesetVersions(anotherFileset.id());
+    assertTrue(anotherFilesetVersionsAfterHardDelete.containsKey(3));
+    assertEquals(0L, anotherFilesetVersionsAfterHardDelete.get(3));
 
     // soft delete for old version fileset
     for (Entity.EntityType entityType : Entity.EntityType.values()) {
       backend.deleteOldVersionData(entityType, 1);
     }
     Map<Integer, Long> versionDeletedMap = 
listFilesetVersions(anotherFileset.id());
-    assertEquals(3, versionDeletedMap.size());
+    assertTrue(versionDeletedMap.containsKey(3));
+    assertEquals(0L, versionDeletedMap.get(3));
     assertEquals(1, versionDeletedMap.values().stream().filter(value -> value 
== 0L).count());
-    assertEquals(2, versionDeletedMap.values().stream().filter(value -> value 
!= 0L).count());
 
     // hard delete for old version fileset
     backend.hardDeleteLegacyData(Entity.EntityType.FILESET, 
Instant.now().toEpochMilli() + 1000);
-    assertEquals(1, listFilesetVersions(anotherFileset.id()).size());
+    Map<Integer, Long> finalFilesetVersions = 
listFilesetVersions(anotherFileset.id());
+    assertTrue(finalFilesetVersions.containsKey(3));
+    assertEquals(0L, finalFilesetVersions.get(3));
+    assertEquals(1, finalFilesetVersions.values().stream().filter(value -> 
value == 0L).count());
   }
 
   @TestTemplate
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFunctionMetaService.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFunctionMetaService.java
index 99c6fd78af..a068b64550 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFunctionMetaService.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestFunctionMetaService.java
@@ -347,20 +347,26 @@ public class TestFunctionMetaService extends 
TestJDBCBackend {
     }
     assertFalse(legacyRecordExistsInDB(function.id(), 
Entity.EntityType.FUNCTION));
     assertEquals(0, listFunctionVersions(function.id()).size());
-    assertEquals(3, listFunctionVersions(anotherFunction.id()).size());
+    Map<Integer, Long> anotherFunctionVersionsAfterHardDelete =
+        listFunctionVersions(anotherFunction.id());
+    assertTrue(anotherFunctionVersionsAfterHardDelete.containsKey(3));
+    assertEquals(0L, anotherFunctionVersionsAfterHardDelete.get(3));
 
     // Soft delete old versions
     for (Entity.EntityType entityType : Entity.EntityType.values()) {
       backend.deleteOldVersionData(entityType, 1);
     }
     Map<Integer, Long> versionDeletedMap = 
listFunctionVersions(anotherFunction.id());
-    assertEquals(3, versionDeletedMap.size());
+    assertTrue(versionDeletedMap.containsKey(3));
+    assertEquals(0L, versionDeletedMap.get(3));
     assertEquals(1, versionDeletedMap.values().stream().filter(value -> value 
== 0L).count());
-    assertEquals(2, versionDeletedMap.values().stream().filter(value -> value 
!= 0L).count());
 
     // Hard delete old versions
     backend.hardDeleteLegacyData(Entity.EntityType.FUNCTION, 
Instant.now().toEpochMilli() + 1000);
-    assertEquals(1, listFunctionVersions(anotherFunction.id()).size());
+    Map<Integer, Long> finalFunctionVersions = 
listFunctionVersions(anotherFunction.id());
+    assertTrue(finalFunctionVersions.containsKey(3));
+    assertEquals(0L, finalFunctionVersions.get(3));
+    assertEquals(1, finalFunctionVersions.values().stream().filter(value -> 
value == 0L).count());
   }
 
   @TestTemplate

Reply via email to