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.
*/