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 (apache#5949)

Fix the issue of renaming catalogs or metalakes.

Fix: apache#5947

No.

Add UT.
  • Loading branch information
jerqi committed Dec 23, 2024
1 parent 601823f commit 88c5fd6
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,11 @@
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.gravitino.Catalog;
import org.apache.gravitino.CatalogChange;
import org.apache.gravitino.Configs;
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.auth.AuthenticatorType;
Expand Down Expand Up @@ -235,6 +237,20 @@ public void stop() {
RangerITEnv.cleanup();
}

// ISSUE-5947: can't rename a catalog or a metalake
@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 {
// First, fail to create the schema
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,9 +298,14 @@ public static void authorizationPluginRenamePrivileges(
NameIdentifierUtil.toMetadataObject(NameIdentifier.of(ident.namespace(), newName), type);
MetadataObjectChange renameObject =
MetadataObjectChange.rename(oldMetadataObject, newMetadataObject);

String metalake = type == Entity.EntityType.METALAKE ? newName : 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 88c5fd6

Please sign in to comment.