Skip to content

Commit

Permalink
[apache#5947] fix(auth): It will throw error if we enable authorizati…
Browse files Browse the repository at this point in the history
…on and rename catalog
  • Loading branch information
jerqi committed Dec 23, 2024
1 parent 08f7d91 commit 389ef4a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.gravitino.Catalog;
import org.apache.gravitino.CatalogChange;
import org.apache.gravitino.MetadataObject;
import org.apache.gravitino.MetadataObjects;
import org.apache.gravitino.MetalakeChange;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.auth.AuthConstants;
import org.apache.gravitino.authorization.Owner;
Expand Down Expand Up @@ -197,6 +199,20 @@ protected static void waitForUpdatingPolicies() throws InterruptedException {

protected abstract void testAlterTable();

// ISSUE-5947: can't rename a catalog
@Test
void testRenameMetalakeOrCatalog() {
Assertions.assertDoesNotThrow(
() -> client.alterMetalake(metalakeName, MetalakeChange.rename("new_name")));
Assertions.assertDoesNotThrow(
() -> client.alterMetalake("new_name", MetalakeChange.rename(metalakeName)));

Assertions.assertDoesNotThrow(
() -> metalake.alterCatalog(catalogName, CatalogChange.rename("new_name")));
Assertions.assertDoesNotThrow(
() -> metalake.alterCatalog("new_name", CatalogChange.rename(catalogName)));
}

@Test
void testCreateSchema() throws InterruptedException {
// Choose a catalog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,9 +298,19 @@ public static void authorizationPluginRenamePrivileges(
NameIdentifierUtil.toMetadataObject(NameIdentifier.of(ident.namespace(), newName), type);
MetadataObjectChange renameObject =
MetadataObjectChange.rename(oldMetadataObject, newMetadataObject);

String metalake;
if (type == Entity.EntityType.METALAKE) {
metalake = newName;
} else {
metalake = ident.namespace().level(0);
}

// For a renamed catalog, we should pass the new name catalog, otherwise we can't find the
// catalog in the entity store
callAuthorizationPluginForMetadataObject(
ident.namespace().level(0),
oldMetadataObject,
metalake,
newMetadataObject,
authorizationPlugin -> {
authorizationPlugin.onMetadataUpdated(renameObject);
});
Expand Down

0 comments on commit 389ef4a

Please sign in to comment.