This is an automated email from the ASF dual-hosted git repository.
jerryshao pushed a commit to branch branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/branch-1.3 by this push:
new c8c6f63c47 [Cherry-pick to branch-1.3] [#11352] fix(glue): improve
error logging for Iceberg metadata loading (#11359) (#11419)
c8c6f63c47 is described below
commit c8c6f63c47cce5e5e4fb8d36f1266b582c891a6f
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Jun 4 14:18:03 2026 +0800
[Cherry-pick to branch-1.3] [#11352] fix(glue): improve error logging for
Iceberg metadata loading (#11359) (#11419)
**Cherry-pick Information:**
- Original commit: 1637d27faed32e0851a7e2c087193bbcf2ef3bef
- Target branch: `branch-1.3`
- Status: ✅ Clean cherry-pick (no conflicts)
Co-authored-by: Xu Bai <[email protected]>
---
.../catalog/glue/GlueCatalogOperations.java | 7 +----
.../glue/TestGlueCatalogOperationsForIceberg.java | 32 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 6 deletions(-)
diff --git
a/catalogs/catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueCatalogOperations.java
b/catalogs/catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueCatalogOperations.java
index 8023895196..72f995ef9e 100644
---
a/catalogs/catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueCatalogOperations.java
+++
b/catalogs/catalog-glue/src/main/java/org/apache/gravitino/catalog/glue/GlueCatalogOperations.java
@@ -377,12 +377,7 @@ public class GlueCatalogOperations implements
CatalogOperations, SupportsSchemas
try {
GlueIcebergTableHelper.loadTable(icebergGlueCatalog, dbName,
ident.name(), table);
} catch (Exception e) {
- LOG.warn(
- "Failed to load Iceberg metadata for table {}.{}. "
- + "Partitioning and sort order information may be
incomplete.",
- dbName,
- ident.name(),
- e);
+ LOG.warn("Failed to load Iceberg metadata for table {}.{}", dbName,
ident.name(), e);
}
}
diff --git
a/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperationsForIceberg.java
b/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperationsForIceberg.java
index f901d38958..cfb5569ccc 100644
---
a/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperationsForIceberg.java
+++
b/catalogs/catalog-glue/src/test/java/org/apache/gravitino/catalog/glue/TestGlueCatalogOperationsForIceberg.java
@@ -20,6 +20,7 @@ package org.apache.gravitino.catalog.glue;
import static
org.apache.gravitino.catalog.glue.GlueConstants.ICEBERG_TABLE_TYPE_VALUE;
import static org.apache.gravitino.catalog.glue.GlueConstants.TABLE_TYPE_PARAM;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -31,6 +32,7 @@ import static org.mockito.Mockito.when;
import java.util.Map;
import java.util.Set;
import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.rel.SupportsPartitions;
import org.apache.gravitino.rel.TableChange;
import org.apache.gravitino.rel.expressions.distributions.Distributions;
import org.apache.gravitino.rel.expressions.transforms.Transform;
@@ -42,8 +44,11 @@ import org.apache.iceberg.catalog.Catalog;
import org.apache.iceberg.catalog.TableIdentifier;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import software.amazon.awssdk.services.glue.GlueClient;
+import software.amazon.awssdk.services.glue.model.GetPartitionsRequest;
+import software.amazon.awssdk.services.glue.model.GetPartitionsResponse;
import software.amazon.awssdk.services.glue.model.GetTableRequest;
import software.amazon.awssdk.services.glue.model.GetTableResponse;
import software.amazon.awssdk.services.glue.model.StorageDescriptor;
@@ -203,6 +208,33 @@ class TestGlueCatalogOperationsForIceberg {
Indexes.EMPTY_INDEXES));
}
+ @Test
+ void testLoadTableWithIcebergMetadataLoadFailure() {
+ software.amazon.awssdk.services.glue.model.Table rawTable =
+ software.amazon.awssdk.services.glue.model.Table.builder()
+ .name(TABLE)
+ .parameters(Map.of(TABLE_TYPE_PARAM, ICEBERG_TABLE_TYPE_VALUE))
+ .storageDescriptor(StorageDescriptor.builder().build())
+ .build();
+
+ when(mockClient.getTable(any(GetTableRequest.class)))
+ .thenReturn(GetTableResponse.builder().table(rawTable).build());
+ when(mockIcebergCatalog.loadTable(any(TableIdentifier.class)))
+ .thenThrow(new RuntimeException("metadata file is missing"));
+ when(mockClient.getPartitions(any(GetPartitionsRequest.class)))
+ .thenReturn(GetPartitionsResponse.builder().build());
+
+ GlueTable result = ops.loadTable(NameIdentifier.of("cat", "ns", DB,
TABLE));
+ SupportsPartitions partitions = result.supportPartitions();
+
+ assertEquals(0, partitions.listPartitionNames().length);
+ ArgumentCaptor<GetPartitionsRequest> captor =
+ ArgumentCaptor.forClass(GetPartitionsRequest.class);
+ verify(mockClient).getPartitions(captor.capture());
+ assertEquals(DB, captor.getValue().databaseName());
+ assertEquals(TABLE, captor.getValue().tableName());
+ }
+
@Test
void testAlterTable_icebergRenameThrows() {
software.amazon.awssdk.services.glue.model.Table rawTable =