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

roryqi pushed a commit to branch branch-1.1
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-1.1 by this push:
     new 42f1347eeb [Cherry-pick to branch-1.1] [#9809] fix(authz): Import the 
schema to avoid the setting owners failure (#9982) (#10043)
42f1347eeb is described below

commit 42f1347eeb31cd374d6cac8152397472674a3923
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Feb 26 16:55:42 2026 +0800

    [Cherry-pick to branch-1.1] [#9809] fix(authz): Import the schema to avoid 
the setting owners failure (#9982) (#10043)
    
    **Cherry-pick Information:**
    - Original commit: 397b7ed0522d92cb36b65abe2c4ae81917f47613
    - Target branch: `branch-1.1`
    - Status: ✅ Clean cherry-pick (no conflicts)
    
    Co-authored-by: roryqi <[email protected]>
---
 .../gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java | 2 +-
 .../catalog/postgresql/integration/test/CatalogPostgreSqlIT.java | 3 ++-
 .../lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java | 3 ++-
 .../integration/test/authorization/TableAuthorizationIT.java     | 5 +++++
 .../org/apache/gravitino/server/web/rest/TableOperations.java    | 9 +++++++++
 .../org/apache/gravitino/server/web/rest/TopicOperations.java    | 9 +++++++++
 .../apache/gravitino/server/web/rest/TestTableOperations.java    | 4 ++++
 .../apache/gravitino/server/web/rest/TestTopicOperations.java    | 4 ++++
 8 files changed, 36 insertions(+), 3 deletions(-)

diff --git 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
index 1e47f72496..868c0b9425 100644
--- 
a/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
+++ 
b/catalogs/catalog-jdbc-mysql/src/test/java/org/apache/gravitino/catalog/mysql/integration/test/CatalogMysqlIT.java
@@ -356,7 +356,7 @@ public class CatalogMysqlIT extends BaseIT {
     // create failed check.
     NameIdentifier table = NameIdentifier.of(testSchemaName, "test_table");
     Assertions.assertThrows(
-        NoSuchSchemaException.class,
+        NotFoundException.class,
         () ->
             tableCatalog.createTable(
                 table,
diff --git 
a/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
 
b/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
index 59f405102c..b637ca7a69 100644
--- 
a/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
+++ 
b/catalogs/catalog-jdbc-postgresql/src/test/java/org/apache/gravitino/catalog/postgresql/integration/test/CatalogPostgreSqlIT.java
@@ -50,6 +50,7 @@ import 
org.apache.gravitino.catalog.postgresql.integration.test.service.PostgreS
 import org.apache.gravitino.client.GravitinoMetalake;
 import org.apache.gravitino.exceptions.ConnectionFailedException;
 import org.apache.gravitino.exceptions.NoSuchSchemaException;
+import org.apache.gravitino.exceptions.NotFoundException;
 import org.apache.gravitino.exceptions.SchemaAlreadyExistsException;
 import org.apache.gravitino.integration.test.container.ContainerSuite;
 import org.apache.gravitino.integration.test.container.PGImageName;
@@ -423,7 +424,7 @@ public class CatalogPostgreSqlIT extends BaseIT {
     // create failed check.
     NameIdentifier table = NameIdentifier.of(testSchemaName, "test_table");
     Assertions.assertThrows(
-        NoSuchSchemaException.class,
+        NotFoundException.class,
         () ->
             tableCatalog.createTable(
                 table,
diff --git 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
index 82aedaff7d..61f7f03bbb 100644
--- 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
+++ 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
@@ -54,6 +54,7 @@ import 
org.apache.gravitino.catalog.lakehouse.iceberg.IcebergTable;
 import 
org.apache.gravitino.catalog.lakehouse.iceberg.ops.IcebergCatalogWrapperHelper;
 import org.apache.gravitino.client.GravitinoMetalake;
 import org.apache.gravitino.exceptions.NoSuchSchemaException;
+import org.apache.gravitino.exceptions.NotFoundException;
 import org.apache.gravitino.exceptions.SchemaAlreadyExistsException;
 import org.apache.gravitino.exceptions.TableAlreadyExistsException;
 import org.apache.gravitino.iceberg.common.IcebergConfig;
@@ -344,7 +345,7 @@ public abstract class CatalogIcebergBaseIT extends BaseIT {
     // create failed check.
     NameIdentifier table = NameIdentifier.of(testSchemaName, "test_table");
     Assertions.assertThrows(
-        NoSuchSchemaException.class,
+        NotFoundException.class,
         () ->
             tableCatalog.createTable(
                 table,
diff --git 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/TableAuthorizationIT.java
 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/TableAuthorizationIT.java
index 0df6a82dc4..bc7cb46d6b 100644
--- 
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/TableAuthorizationIT.java
+++ 
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/TableAuthorizationIT.java
@@ -131,6 +131,11 @@ public class TableAuthorizationIT extends 
BaseRestApiAuthorizationIT {
     TableCatalog tableCatalog = 
client.loadMetalake(METALAKE).loadCatalog(CATALOG).asTableCatalog();
     tableCatalog.createTable(
         NameIdentifier.of(SCHEMA, "table1"), createColumns(), "test", new 
HashMap<>());
+
+    // ISSUE-9982: Schema default isn't imported before
+    tableCatalog.createTable(
+        NameIdentifier.of("default", "table2"), createColumns(), "test", new 
HashMap<>());
+
     // normal user cannot create table
     TableCatalog tableCatalogNormalUser =
         
normalUserClient.loadMetalake(METALAKE).loadCatalog(CATALOG).asTableCatalog();
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
index 803d097e19..e8a12a4603 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TableOperations.java
@@ -23,6 +23,7 @@ import static 
org.apache.gravitino.dto.util.DTOConverters.fromDTOs;
 
 import com.codahale.metrics.annotation.ResponseMetered;
 import com.codahale.metrics.annotation.Timed;
+import com.google.common.collect.Lists;
 import javax.inject.Inject;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.DELETE;
@@ -38,6 +39,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Response;
 import org.apache.gravitino.Entity;
 import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.MetadataObjects;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.Namespace;
 import org.apache.gravitino.catalog.TableDispatcher;
@@ -56,6 +58,7 @@ import 
org.apache.gravitino.server.authorization.annotations.AuthorizationExpres
 import 
org.apache.gravitino.server.authorization.annotations.AuthorizationMetadata;
 import 
org.apache.gravitino.server.authorization.expression.AuthorizationExpressionConstants;
 import org.apache.gravitino.server.web.Utils;
+import org.apache.gravitino.utils.MetadataObjectUtil;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 import org.apache.gravitino.utils.NamespaceUtil;
 import org.slf4j.Logger;
@@ -137,6 +140,12 @@ public class TableOperations {
             NameIdentifier ident =
                 NameIdentifierUtil.ofTable(metalake, catalog, schema, 
request.getName());
 
+            // Make sure schema is imported, otherwise set owner for the table 
may fail.
+            MetadataObjectUtil.checkMetadataObject(
+                metalake,
+                MetadataObjects.of(
+                    Lists.newArrayList(catalog, schema), 
MetadataObject.Type.SCHEMA));
+
             Table table =
                 dispatcher.createTable(
                     ident,
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
index b4483042f1..4ec82d666b 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/TopicOperations.java
@@ -20,6 +20,7 @@ package org.apache.gravitino.server.web.rest;
 
 import com.codahale.metrics.annotation.ResponseMetered;
 import com.codahale.metrics.annotation.Timed;
+import com.google.common.collect.Lists;
 import javax.inject.Inject;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.DELETE;
@@ -33,6 +34,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Response;
 import org.apache.gravitino.Entity;
 import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.MetadataObjects;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.Namespace;
 import org.apache.gravitino.catalog.TopicDispatcher;
@@ -51,6 +53,7 @@ import 
org.apache.gravitino.server.authorization.annotations.AuthorizationExpres
 import 
org.apache.gravitino.server.authorization.annotations.AuthorizationMetadata;
 import 
org.apache.gravitino.server.authorization.expression.AuthorizationExpressionConstants;
 import org.apache.gravitino.server.web.Utils;
+import org.apache.gravitino.utils.MetadataObjectUtil;
 import org.apache.gravitino.utils.NameIdentifierUtil;
 import org.apache.gravitino.utils.NamespaceUtil;
 import org.slf4j.Logger;
@@ -139,6 +142,12 @@ public class TopicOperations {
             NameIdentifier ident =
                 NameIdentifierUtil.ofTopic(metalake, catalog, schema, 
request.getName());
 
+            // Make sure schema is imported, otherwise set owner for the topic 
may fail.
+            MetadataObjectUtil.checkMetadataObject(
+                metalake,
+                MetadataObjects.of(
+                    Lists.newArrayList(catalog, schema), 
MetadataObject.Type.SCHEMA));
+
             Topic topic =
                 dispatcher.createTopic(
                     ident,
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
index 6de2640068..e381d96a91 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestTableOperations.java
@@ -48,6 +48,7 @@ import org.apache.gravitino.Audit;
 import org.apache.gravitino.Config;
 import org.apache.gravitino.GravitinoEnv;
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.catalog.SchemaDispatcher;
 import org.apache.gravitino.catalog.TableDispatcher;
 import org.apache.gravitino.catalog.TableOperationDispatcher;
 import org.apache.gravitino.dto.rel.ColumnDTO;
@@ -107,6 +108,7 @@ public class TestTableOperations extends BaseOperationsTest 
{
     }
   }
 
+  private static SchemaDispatcher schemaDispatcher = 
mock(SchemaDispatcher.class);
   private TableOperationDispatcher dispatcher = 
mock(TableOperationDispatcher.class);
 
   private final String metalake = "metalake1";
@@ -125,6 +127,8 @@ public class TestTableOperations extends BaseOperationsTest 
{
     Mockito.doReturn(false).when(config).get(ENABLE_AUTHORIZATION);
     FieldUtils.writeField(GravitinoEnv.getInstance(), "config", config, true);
     FieldUtils.writeField(GravitinoEnv.getInstance(), "lockManager", new 
LockManager(config), true);
+    FieldUtils.writeField(GravitinoEnv.getInstance(), "schemaDispatcher", 
schemaDispatcher, true);
+    Mockito.doReturn(true).when(schemaDispatcher).schemaExists(any());
   }
 
   @Override
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestTopicOperations.java
 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestTopicOperations.java
index ab33fdaf2c..ab39638c56 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestTopicOperations.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestTopicOperations.java
@@ -43,6 +43,7 @@ import org.apache.gravitino.Audit;
 import org.apache.gravitino.Config;
 import org.apache.gravitino.GravitinoEnv;
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.catalog.SchemaDispatcher;
 import org.apache.gravitino.catalog.TopicDispatcher;
 import org.apache.gravitino.catalog.TopicOperationDispatcher;
 import org.apache.gravitino.dto.messaging.TopicDTO;
@@ -79,6 +80,7 @@ public class TestTopicOperations extends BaseOperationsTest {
     }
   }
 
+  private static SchemaDispatcher schemaDispatcher = 
mock(SchemaDispatcher.class);
   private TopicOperationDispatcher dispatcher = 
mock(TopicOperationDispatcher.class);
   private final String metalake = "metalake";
   private final String catalog = "catalog1";
@@ -94,6 +96,8 @@ public class TestTopicOperations extends BaseOperationsTest {
     Mockito.doReturn(false).when(config).get(ENABLE_AUTHORIZATION);
     FieldUtils.writeField(GravitinoEnv.getInstance(), "config", config, true);
     FieldUtils.writeField(GravitinoEnv.getInstance(), "lockManager", new 
LockManager(config), true);
+    FieldUtils.writeField(GravitinoEnv.getInstance(), "schemaDispatcher", 
schemaDispatcher, true);
+    Mockito.doReturn(true).when(schemaDispatcher).schemaExists(any());
   }
 
   @Override

Reply via email to