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

jshao 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 9ecc87d0f [#4817] fix(core): Fix unexpected tag delete issue (#5235)
9ecc87d0f is described below

commit 9ecc87d0f01ec0f5b7a306d82431b5bed6673a51
Author: Jerry Shao <[email protected]>
AuthorDate: Fri Oct 25 13:21:31 2024 +0800

    [#4817] fix(core): Fix unexpected tag delete issue (#5235)
    
    ### What changes were proposed in this pull request?
    
    This PR fixes the tag relation unexpected deletion issue. Previously we
    deleted other unrelated tag relations under the metalake, which will
    make the associated tag list fail. So this PR will fix this issue.
    
    ### Why are the changes needed?
    
    To fix the tag unexpectedly deleted issue.
    
    Fix: #4817
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Add new IT to fix this issue.
---
 .../gravitino/client/integration/test/TagIT.java   | 39 ++++++++++++++++++++++
 .../base/TagMetadataObjectRelBaseSQLProvider.java  |  2 +-
 .../TagMetadataObjectRelPostgreSQLProvider.java    |  2 +-
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/TagIT.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/TagIT.java
index 847b6253f..bd95f2ae3 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/TagIT.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/TagIT.java
@@ -606,4 +606,43 @@ public class TagIT extends BaseIT {
     Assertions.assertEquals(1, tag4.associatedObjects().count());
     Assertions.assertEquals(column.name(), 
tag4.associatedObjects().objects()[0].name());
   }
+
+  @Test
+  public void testAssociateAndDeleteTags() {
+    Tag tag1 =
+        metalake.createTag(
+            GravitinoITUtils.genRandomName("tag_it_tag1"), "comment1", 
Collections.emptyMap());
+    Tag tag2 =
+        metalake.createTag(
+            GravitinoITUtils.genRandomName("tag_it_tag2"), "comment2", 
Collections.emptyMap());
+    Tag tag3 =
+        metalake.createTag(
+            GravitinoITUtils.genRandomName("tag_it_tag3"), "comment3", 
Collections.emptyMap());
+
+    String[] associatedTags =
+        relationalCatalog
+            .supportsTags()
+            .associateTags(new String[] {tag1.name(), tag2.name()}, new 
String[] {tag3.name()});
+
+    Assertions.assertEquals(2, associatedTags.length);
+    Set<String> tagNames = Sets.newHashSet(associatedTags);
+    Assertions.assertTrue(tagNames.contains(tag1.name()));
+    Assertions.assertTrue(tagNames.contains(tag2.name()));
+    Assertions.assertFalse(tagNames.contains(tag3.name()));
+
+    Tag retrivedTag = relationalCatalog.supportsTags().getTag(tag2.name());
+    Assertions.assertEquals(tag2.name(), retrivedTag.name());
+    Assertions.assertEquals(tag2.comment(), retrivedTag.comment());
+
+    boolean deleted = metalake.deleteTag("null");
+    Assertions.assertFalse(deleted);
+
+    deleted = metalake.deleteTag(tag1.name());
+    Assertions.assertTrue(deleted);
+    deleted = metalake.deleteTag(tag1.name());
+    Assertions.assertFalse(deleted);
+
+    String[] associatedTags1 = relationalCatalog.supportsTags().listTags();
+    Assertions.assertArrayEquals(new String[] {tag2.name()}, associatedTags1);
+  }
 }
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetadataObjectRelBaseSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetadataObjectRelBaseSQLProvider.java
index 2124dcbf9..5a9b066a0 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetadataObjectRelBaseSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetadataObjectRelBaseSQLProvider.java
@@ -133,7 +133,7 @@ public class TagMetadataObjectRelBaseSQLProvider {
         + " tm WHERE tm.metalake_id IN (SELECT mm.metalake_id FROM "
         + MetalakeMetaMapper.TABLE_NAME
         + " mm WHERE mm.metalake_name = #{metalakeName} AND mm.deleted_at = 0)"
-        + " AND tm.deleted_at = 0) AND te.deleted_at = 0";
+        + " AND tm.tag_name = #{tagName} AND tm.deleted_at = 0) AND 
te.deleted_at = 0";
   }
 
   public String 
softDeleteTagMetadataObjectRelsByMetalakeId(@Param("metalakeId") Long 
metalakeId) {
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetadataObjectRelPostgreSQLProvider.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetadataObjectRelPostgreSQLProvider.java
index a4feda630..ee45f465f 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetadataObjectRelPostgreSQLProvider.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetadataObjectRelPostgreSQLProvider.java
@@ -38,7 +38,7 @@ public class TagMetadataObjectRelPostgreSQLProvider extends 
TagMetadataObjectRel
         + " tm WHERE tm.metalake_id IN (SELECT mm.metalake_id FROM "
         + MetalakeMetaMapper.TABLE_NAME
         + " mm WHERE mm.metalake_name = #{metalakeName} AND mm.deleted_at = 0)"
-        + " AND tm.deleted_at = 0) AND te.deleted_at = 0";
+        + " AND tm.tag_name = #{tagName} AND tm.deleted_at = 0) AND 
te.deleted_at = 0";
   }
 
   @Override

Reply via email to