Skip to content

Commit 5790b84

Browse files
authored
fix(iceberg): listnamespaces includes warehouse name as root (#12761)
1 parent 6c57057 commit 5790b84

File tree

5 files changed

+30
-6
lines changed

5 files changed

+30
-6
lines changed

metadata-service/iceberg-catalog/pyproject.toml

+6
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,9 @@ disallow_untyped_defs = false
4444

4545
[tool.pyright]
4646
extraPaths = ['tests']
47+
48+
[tool.pytest.ini_options]
49+
markers = [
50+
"quick: marks limited tests for a quick validation",
51+
"serial",
52+
]

metadata-service/iceberg-catalog/src/integrationTest/integration_test.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,9 @@ def test_iceberg_quick(spark_session, warehouse):
212212
_test_basic_view_ops(spark_session)
213213
_test_rename_ops(spark_session)
214214

215+
result = spark_session.sql("show namespaces")
216+
assert (result[result["namespace"] == "default"].count() == 1)
217+
215218

216219
def _create_table(spark_session, ns, table_name):
217220
spark_session.sql("create namespace if not exists default")
@@ -221,12 +224,19 @@ def _create_table(spark_session, ns, table_name):
221224

222225
spark_session.sql(f"insert into {ns}.{table_name} values (1, 'foo' ) ")
223226

227+
result = spark_session.sql("show namespaces")
228+
assert (result[result["namespace"] == "default"].count() == 1)
229+
230+
result = spark_session.sql("show namespaces in default")
231+
assert (result[result["namespace"] == f"{ns}"].count() == 1)
232+
233+
224234

225235
def test_load_tables(spark_session, warehouse):
226-
namespace_count = 3
227-
table_count = 4
236+
namespace_count = 2
237+
table_count = 2
228238
for ns_index in range(namespace_count):
229-
ns = f"default_ns{ns_index}"
239+
ns = f"default.ns{ns_index}"
230240
for table_index in range(table_count):
231241
table_name = f"table_{table_index}"
232242
_create_table(spark_session, ns, table_name)

metadata-service/iceberg-catalog/src/main/java/io/datahubproject/iceberg/catalog/Utils.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public static String parentDir(String fileLocation) {
7575
}
7676

7777
public static String namespaceNameFromContainerUrn(Urn urn) {
78-
return urn.toString().substring(NAMESPACE_CONTAINER_PREFIX.length());
78+
// Must do inverse of implementation of method containerUrn(String platformInstance, String[]
79+
// levels) in this file
80+
String namespaceWithPlatformInstance =
81+
urn.toString().substring(NAMESPACE_CONTAINER_PREFIX.length());
82+
return namespaceWithPlatformInstance.substring(namespaceWithPlatformInstance.indexOf('.') + 1);
7983
}
8084
}

metadata-service/iceberg-catalog/src/test/java/io/datahubproject/iceberg/catalog/DataHubRestCatalogTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,8 @@ public void testListNamespaces_NestedNamespace() throws Exception {
275275
SearchResult mockResult = mock(SearchResult.class);
276276
List<SearchEntity> entitiesList =
277277
Arrays.asList(
278-
createSearchEntity("urn:li:container:iceberg__parent.ns1"),
279-
createSearchEntity("urn:li:container:iceberg__parent.ns2"));
278+
createSearchEntity("urn:li:container:iceberg__platformInstance.parent.ns1"),
279+
createSearchEntity("urn:li:container:iceberg__platformInstance.parent.ns2"));
280280
SearchEntityArray entities = new SearchEntityArray();
281281
entities.addAll(entitiesList);
282282
when(mockResult.getEntities()).thenReturn(entities);

metadata-service/iceberg-catalog/src/test/java/io/datahubproject/iceberg/catalog/UtilsTest.java

+4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ public void testContainerUrn() {
4242

4343
assertNotNull(containerUrn);
4444
assertEquals(containerUrn.toString(), "urn:li:container:iceberg__testInstance.db.schema");
45+
46+
Namespace namespaceFromUrn =
47+
Namespace.of(Utils.namespaceNameFromContainerUrn(containerUrn).split("\\."));
48+
assertEquals(namespaceFromUrn, namespace);
4549
}
4650

4751
@Test

0 commit comments

Comments
 (0)