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