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 =

Reply via email to