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

danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 18ae8c349058 feat(flink): Extend RocksDBDAO with generic column-family 
lifecycle operations (#19744)
18ae8c349058 is described below

commit 18ae8c349058140f25a4f7247ff4a4bc8fc56dec
Author: Peter Huang <[email protected]>
AuthorDate: Wed Aug 26 20:01:04 2026 -0700

    feat(flink): Extend RocksDBDAO with generic column-family lifecycle 
operations (#19744)
    
    Add columnFamilyExists and listColumnFamilies alongside the existing
    addColumnFamily/dropColumnFamily so callers can check existence and list
    managed column families; partition-aware naming and completeness tracking
    belong in the Flink backend instead. Unit tests only; not wired into any
    operator yet.
---
 .../hudi/common/util/collection/RocksDBDAO.java    | 16 +++++++++++
 .../common/util/collection/TestRocksDBDAO.java     | 33 ++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/util/collection/RocksDBDAO.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/util/collection/RocksDBDAO.java
index a36f3dc711db..904f71abb64a 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/util/collection/RocksDBDAO.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/util/collection/RocksDBDAO.java
@@ -469,6 +469,22 @@ public class RocksDBDAO {
     });
   }
 
+  /**
+   * Returns whether a column family with the given name currently exists.
+   *
+   * @param columnFamilyName Column family name
+   */
+  public boolean columnFamilyExists(String columnFamilyName) {
+    return managedDescriptorMap.containsKey(columnFamilyName);
+  }
+
+  /**
+   * Lists the names of all currently managed column families.
+   */
+  public List<String> listColumnFamilies() {
+    return new ArrayList<>(managedDescriptorMap.keySet());
+  }
+
   /**
    * Retrieves a numeric property aggregated across all column families.
    */
diff --git 
a/hudi-common/src/test/java/org/apache/hudi/common/util/collection/TestRocksDBDAO.java
 
b/hudi-common/src/test/java/org/apache/hudi/common/util/collection/TestRocksDBDAO.java
index f8f3e96d4399..6c4a3f7cf56c 100644
--- 
a/hudi-common/src/test/java/org/apache/hudi/common/util/collection/TestRocksDBDAO.java
+++ 
b/hudi-common/src/test/java/org/apache/hudi/common/util/collection/TestRocksDBDAO.java
@@ -347,6 +347,39 @@ public class TestRocksDBDAO {
     assertEquals(disableWAL, walFileSize == 0, "WAL log total size should be 0 
when disableWAL=true");
   }
 
+  @Test
+  public void testColumnFamilyExistsAndListColumnFamilies() {
+    String family = "new_family";
+    assertFalse(dbManager.columnFamilyExists(family));
+    assertFalse(dbManager.listColumnFamilies().contains(family));
+
+    dbManager.addColumnFamily(family);
+    assertTrue(dbManager.columnFamilyExists(family));
+    assertTrue(dbManager.listColumnFamilies().contains(family));
+
+    // Adding again should be a no-op and not affect existence/listing.
+    dbManager.addColumnFamily(family);
+    assertTrue(dbManager.columnFamilyExists(family));
+    assertEquals(1, 
dbManager.listColumnFamilies().stream().filter(family::equals).count());
+
+    dbManager.dropColumnFamily(family);
+    assertFalse(dbManager.columnFamilyExists(family));
+    assertFalse(dbManager.listColumnFamilies().contains(family));
+  }
+
+  @Test
+  public void testListColumnFamiliesTracksMultipleFamilies() {
+    List<String> families = Arrays.asList("family_a", "family_b", "family_c");
+    families.forEach(family -> dbManager.addColumnFamily(family));
+
+    assertTrue(dbManager.listColumnFamilies().containsAll(families));
+
+    dbManager.dropColumnFamily(families.get(1));
+    assertTrue(dbManager.listColumnFamilies().contains(families.get(0)));
+    assertFalse(dbManager.listColumnFamilies().contains(families.get(1)));
+    assertTrue(dbManager.listColumnFamilies().contains(families.get(2)));
+  }
+
   /**
    * Payload key object.
    */

Reply via email to