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

jshao pushed a commit to branch branch-0.7
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-0.7 by this push:
     new c5e7aa19f [#4817] fix(core): Fix unexpected tag delete issue (#5256)
c5e7aa19f is described below

commit c5e7aa19fefa1b84bbf4961a764e7bfdbc98026f
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Oct 25 14:12:33 2024 +0800

    [#4817] fix(core): Fix unexpected tag delete issue (#5256)
    
    ### 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.
    
    Co-authored-by: Jerry Shao <[email protected]>
---
 .../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