This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new f1395433f2 [#7646] feat(core): Support event for setowner/getowner
operation. (#7672)
f1395433f2 is described below
commit f1395433f228b45df465ddc7db71c48505a74816
Author: Mini Yu <[email protected]>
AuthorDate: Tue Jul 15 14:11:43 2025 +0800
[#7646] feat(core): Support event for setowner/getowner operation. (#7672)
### What changes were proposed in this pull request?
Support event for `setOwner` and `getOwner` operations.
### Why are the changes needed?
To refine event and listener system.
Fix: #7646
### Does this PR introduce _any_ user-facing change?
N/A.
### How was this patch tested?
UTs.
---
.../java/org/apache/gravitino/GravitinoEnv.java | 15 +-
.../authorization/FutureGrantManager.java | 8 +-
.../gravitino/authorization/OwnerDispatcher.java | 47 ++++
.../gravitino/authorization/OwnerEventManager.java | 90 ++++++++
.../gravitino/authorization/OwnerManager.java | 7 +-
.../hook/AccessControlHookDispatcher.java | 8 +-
.../gravitino/hook/CatalogHookDispatcher.java | 8 +-
.../gravitino/hook/FilesetHookDispatcher.java | 4 +-
.../gravitino/hook/MetalakeHookDispatcher.java | 8 +-
.../apache/gravitino/hook/ModelHookDispatcher.java | 6 +-
.../gravitino/hook/SchemaHookDispatcher.java | 4 +-
.../apache/gravitino/hook/TableHookDispatcher.java | 4 +-
.../apache/gravitino/hook/TopicHookDispatcher.java | 4 +-
.../listener/api/event/GetOwnerEvent.java | 43 ++++
.../listener/api/event/GetOwnerFailureEvent.java | 43 ++++
.../listener/api/event/GetOwnerPreEvent.java | 39 ++++
.../listener/api/event/OperationType.java | 4 +
.../gravitino/listener/api/event/OwnerEvent.java | 52 +++++
.../listener/api/event/OwnerFailureEvent.java | 51 +++++
.../listener/api/event/OwnerPreEvent.java | 47 ++++
.../listener/api/event/SetOwnerEvent.java | 42 ++++
.../listener/api/event/SetOwnerFailureEvent.java | 43 ++++
.../listener/api/event/SetOwnerPreEvent.java | 39 ++++
.../gravitino/listener/api/info/OwnerInfo.java | 61 +++++
.../apache/gravitino/utils/MetadataObjectUtil.java | 14 ++
.../gravitino/listener/DummyEventListener.java | 5 +
.../listener/api/event/TestOwnerEvent.java | 247 +++++++++++++++++++++
.../gravitino/utils/TestMetadataObjectUtil.java | 2 +-
docs/gravitino-server-config.md | 6 +-
.../gravitino/server/web/rest/OwnerOperations.java | 10 +-
.../server/web/rest/TestOwnerOperations.java | 2 +-
31 files changed, 919 insertions(+), 44 deletions(-)
diff --git a/core/src/main/java/org/apache/gravitino/GravitinoEnv.java
b/core/src/main/java/org/apache/gravitino/GravitinoEnv.java
index 91febb4220..e8b9f06ed3 100644
--- a/core/src/main/java/org/apache/gravitino/GravitinoEnv.java
+++ b/core/src/main/java/org/apache/gravitino/GravitinoEnv.java
@@ -23,6 +23,8 @@ import org.apache.gravitino.audit.AuditLogManager;
import org.apache.gravitino.authorization.AccessControlDispatcher;
import org.apache.gravitino.authorization.AccessControlManager;
import org.apache.gravitino.authorization.FutureGrantManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
+import org.apache.gravitino.authorization.OwnerEventManager;
import org.apache.gravitino.authorization.OwnerManager;
import org.apache.gravitino.auxiliary.AuxiliaryServiceManager;
import org.apache.gravitino.catalog.CatalogDispatcher;
@@ -132,7 +134,7 @@ public class GravitinoEnv {
private AuditLogManager auditLogManager;
private EventBus eventBus;
- private OwnerManager ownerManager;
+ private OwnerDispatcher ownerDispatcher;
private FutureGrantManager futureGrantManager;
protected GravitinoEnv() {}
@@ -338,12 +340,12 @@ public class GravitinoEnv {
}
/**
- * Get the OwnerManager associated with the Gravitino environment.
+ * Get the Owner dispatcher associated with the Gravitino environment.
*
* @return The OwnerManager instance.
*/
- public OwnerManager ownerManager() {
- return ownerManager;
+ public OwnerDispatcher ownerDispatcher() {
+ return ownerDispatcher;
}
/**
@@ -509,11 +511,12 @@ public class GravitinoEnv {
new AccessControlHookDispatcher(accessControlManager);
this.accessControlDispatcher =
new AccessControlEventDispatcher(eventBus,
accessControlHookDispatcher);
- this.ownerManager = new OwnerManager(entityStore);
+ OwnerDispatcher ownerManager = new OwnerManager(entityStore);
+ this.ownerDispatcher = new OwnerEventManager(eventBus, ownerManager);
this.futureGrantManager = new FutureGrantManager(entityStore,
ownerManager);
} else {
this.accessControlDispatcher = null;
- this.ownerManager = null;
+ this.ownerDispatcher = null;
this.futureGrantManager = null;
}
diff --git
a/core/src/main/java/org/apache/gravitino/authorization/FutureGrantManager.java
b/core/src/main/java/org/apache/gravitino/authorization/FutureGrantManager.java
index b838e19568..99fe336976 100644
---
a/core/src/main/java/org/apache/gravitino/authorization/FutureGrantManager.java
+++
b/core/src/main/java/org/apache/gravitino/authorization/FutureGrantManager.java
@@ -48,18 +48,18 @@ import org.apache.gravitino.meta.UserEntity;
*/
public class FutureGrantManager {
EntityStore entityStore;
- OwnerManager ownerManager;
+ OwnerDispatcher ownerDispatcher;
- public FutureGrantManager(EntityStore entityStore, OwnerManager
ownerManager) {
+ public FutureGrantManager(EntityStore entityStore, OwnerDispatcher
ownerDispatcher) {
this.entityStore = entityStore;
- this.ownerManager = ownerManager;
+ this.ownerDispatcher = ownerDispatcher;
}
public void grantNewlyCreatedCatalog(String metalake, BaseCatalog catalog) {
try {
MetadataObject metalakeObject =
MetadataObjects.of(null, metalake, MetadataObject.Type.METALAKE);
- Optional<Owner> ownerOptional = ownerManager.getOwner(metalake,
metalakeObject);
+ Optional<Owner> ownerOptional = ownerDispatcher.getOwner(metalake,
metalakeObject);
ownerOptional.ifPresent(
owner -> {
AuthorizationPlugin authorizationPlugin =
catalog.getAuthorizationPlugin();
diff --git
a/core/src/main/java/org/apache/gravitino/authorization/OwnerDispatcher.java
b/core/src/main/java/org/apache/gravitino/authorization/OwnerDispatcher.java
new file mode 100644
index 0000000000..b78c278783
--- /dev/null
+++ b/core/src/main/java/org/apache/gravitino/authorization/OwnerDispatcher.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.authorization;
+
+import java.util.Optional;
+import org.apache.gravitino.MetadataObject;
+
+/** Dispatcher interface for managing owners of metadata objects. */
+public interface OwnerDispatcher {
+
+ /**
+ * Sets the owner of a metadata object.
+ *
+ * @param metalake the name of the metalake
+ * @param metadataObject the metadata object for which the owner is being set
+ * @param ownerName the name of the owner
+ * @param ownerType the type of the owner (e.g., USER, GROUP)
+ */
+ void setOwner(
+ String metalake, MetadataObject metadataObject, String ownerName,
Owner.Type ownerType);
+
+ /**
+ * Retrieves the owner of a metadata object.
+ *
+ * @param metalake the name of the metalake
+ * @param metadataObject the metadata object for which the owner is being
retrieved
+ * @return an Optional containing the owner if it exists, otherwise an empty
Optional
+ */
+ Optional<Owner> getOwner(String metalake, MetadataObject metadataObject);
+}
diff --git
a/core/src/main/java/org/apache/gravitino/authorization/OwnerEventManager.java
b/core/src/main/java/org/apache/gravitino/authorization/OwnerEventManager.java
new file mode 100644
index 0000000000..71a1f611cc
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/authorization/OwnerEventManager.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.authorization;
+
+import com.google.common.annotations.VisibleForTesting;
+import java.util.Optional;
+import lombok.Getter;
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.listener.EventBus;
+import org.apache.gravitino.listener.api.event.GetOwnerEvent;
+import org.apache.gravitino.listener.api.event.GetOwnerFailureEvent;
+import org.apache.gravitino.listener.api.event.GetOwnerPreEvent;
+import org.apache.gravitino.listener.api.event.SetOwnerEvent;
+import org.apache.gravitino.listener.api.event.SetOwnerFailureEvent;
+import org.apache.gravitino.listener.api.event.SetOwnerPreEvent;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+import org.apache.gravitino.utils.MetadataObjectUtil;
+import org.apache.gravitino.utils.PrincipalUtils;
+
+public class OwnerEventManager implements OwnerDispatcher {
+ private final EventBus eventBus;
+
+ @Getter private OwnerDispatcher ownerDispatcher;
+
+ public OwnerEventManager(EventBus eventBus, OwnerDispatcher ownerDispatcher)
{
+ this.eventBus = eventBus;
+ this.ownerDispatcher = ownerDispatcher;
+ }
+
+ @VisibleForTesting
+ public void setOwnerManager(OwnerDispatcher ownerDispatcher) {
+ this.ownerDispatcher = ownerDispatcher;
+ }
+
+ @Override
+ public void setOwner(
+ String metalake, MetadataObject metadataObject, String ownerName,
Owner.Type ownerType) {
+ NameIdentifier identifier = MetadataObjectUtil.toEntityIdent(metalake,
metadataObject);
+ String user = PrincipalUtils.getCurrentUserName();
+ OwnerInfo ownerInfo = new OwnerInfo(ownerName, ownerType);
+ MetadataObject.Type type = metadataObject.type();
+ eventBus.dispatchEvent(new SetOwnerPreEvent(user, identifier, ownerInfo,
type));
+ try {
+ ownerDispatcher.setOwner(metalake, metadataObject, ownerName, ownerType);
+ eventBus.dispatchEvent(new SetOwnerEvent(user, identifier, ownerInfo,
type));
+ } catch (Exception e) {
+ eventBus.dispatchEvent(new SetOwnerFailureEvent(user, identifier, e,
ownerInfo, type));
+ throw e;
+ }
+ }
+
+ @Override
+ public Optional<Owner> getOwner(String metalake, MetadataObject
metadataObject) {
+ NameIdentifier identifier = MetadataObjectUtil.toEntityIdent(metalake,
metadataObject);
+ String user = PrincipalUtils.getCurrentUserName();
+ OwnerInfo ownerInfo = null;
+ MetadataObject.Type type = metadataObject.type();
+ eventBus.dispatchEvent(new GetOwnerPreEvent(user, identifier, ownerInfo,
type));
+ try {
+ Optional<Owner> owner = ownerDispatcher.getOwner(metalake,
metadataObject);
+ if (owner.isPresent()) {
+ ownerInfo = new OwnerInfo(owner.get().name(), owner.get().type());
+ }
+
+ eventBus.dispatchEvent(new GetOwnerEvent(user, identifier, ownerInfo,
type));
+ return owner;
+ } catch (Exception e) {
+ eventBus.dispatchEvent(new GetOwnerFailureEvent(user, identifier, e,
ownerInfo, type));
+ throw e;
+ }
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/authorization/OwnerManager.java
b/core/src/main/java/org/apache/gravitino/authorization/OwnerManager.java
index 2847bbabe3..d1fef81256 100644
--- a/core/src/main/java/org/apache/gravitino/authorization/OwnerManager.java
+++ b/core/src/main/java/org/apache/gravitino/authorization/OwnerManager.java
@@ -21,6 +21,7 @@ package org.apache.gravitino.authorization;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
+import lombok.Getter;
import org.apache.gravitino.Entity;
import org.apache.gravitino.EntityStore;
import org.apache.gravitino.MetadataObject;
@@ -42,9 +43,9 @@ import org.slf4j.LoggerFactory;
* owner. Because the post hook will call the methods. We shouldn't add the
lock of the metadata
* object. Otherwise, it will cause deadlock.
*/
-public class OwnerManager {
+public class OwnerManager implements OwnerDispatcher {
private static final Logger LOG =
LoggerFactory.getLogger(OwnerManager.class);
- private final EntityStore store;
+ @Getter private final EntityStore store;
public OwnerManager(EntityStore store) {
if (store instanceof SupportsRelationOperations) {
@@ -58,6 +59,7 @@ public class OwnerManager {
}
}
+ @Override
public void setOwner(
String metalake, MetadataObject metadataObject, String ownerName,
Owner.Type ownerType) {
@@ -128,6 +130,7 @@ public class OwnerManager {
}
}
+ @Override
public Optional<Owner> getOwner(String metalake, MetadataObject
metadataObject) {
NameIdentifier ident = MetadataObjectUtil.toEntityIdent(metalake,
metadataObject);
OwnerImpl owner = new OwnerImpl();
diff --git
a/core/src/main/java/org/apache/gravitino/hook/AccessControlHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/AccessControlHookDispatcher.java
index dba0177ca1..29ddc65c77 100644
---
a/core/src/main/java/org/apache/gravitino/hook/AccessControlHookDispatcher.java
+++
b/core/src/main/java/org/apache/gravitino/hook/AccessControlHookDispatcher.java
@@ -28,7 +28,7 @@ import
org.apache.gravitino.authorization.AccessControlDispatcher;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Group;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.authorization.Privilege;
import org.apache.gravitino.authorization.Role;
import org.apache.gravitino.authorization.SecurableObject;
@@ -153,9 +153,9 @@ public class AccessControlHookDispatcher implements
AccessControlDispatcher {
Role createdRole = dispatcher.createRole(metalake, role, properties,
securableObjects);
// Set the creator as the owner of role.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
- if (ownerManager != null) {
- ownerManager.setOwner(
+ OwnerDispatcher ownerDispatcher =
GravitinoEnv.getInstance().ownerDispatcher();
+ if (ownerDispatcher != null) {
+ ownerDispatcher.setOwner(
metalake,
NameIdentifierUtil.toMetadataObject(
AuthorizationUtils.ofRole(metalake, role),
Entity.EntityType.ROLE),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/CatalogHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/CatalogHookDispatcher.java
index ba28bbbbd4..1f325b7c5c 100644
--- a/core/src/main/java/org/apache/gravitino/hook/CatalogHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/CatalogHookDispatcher.java
@@ -29,7 +29,7 @@ import org.apache.gravitino.Namespace;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.FutureGrantManager;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.catalog.CatalogDispatcher;
import org.apache.gravitino.connector.BaseCatalog;
import org.apache.gravitino.exceptions.CatalogAlreadyExistsException;
@@ -87,9 +87,9 @@ public class CatalogHookDispatcher implements
CatalogDispatcher {
try {
// Set the creator as the owner of the catalog.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
- if (ownerManager != null) {
- ownerManager.setOwner(
+ OwnerDispatcher ownerDispatcher =
GravitinoEnv.getInstance().ownerDispatcher();
+ if (ownerDispatcher != null) {
+ ownerDispatcher.setOwner(
ident.namespace().level(0),
NameIdentifierUtil.toMetadataObject(ident,
Entity.EntityType.CATALOG),
PrincipalUtils.getCurrentUserName(),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/FilesetHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/FilesetHookDispatcher.java
index d1653f2772..0efb8a1198 100644
--- a/core/src/main/java/org/apache/gravitino/hook/FilesetHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/FilesetHookDispatcher.java
@@ -27,7 +27,7 @@ import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.catalog.FilesetDispatcher;
import org.apache.gravitino.exceptions.FilesetAlreadyExistsException;
import org.apache.gravitino.exceptions.NoSuchFilesetException;
@@ -84,7 +84,7 @@ public class FilesetHookDispatcher implements
FilesetDispatcher {
ident, comment, type, storageLocations, properties);
// Set the creator as the owner of the fileset.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
+ OwnerDispatcher ownerManager =
GravitinoEnv.getInstance().ownerDispatcher();
if (ownerManager != null) {
ownerManager.setOwner(
ident.namespace().level(0),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/MetalakeHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/MetalakeHookDispatcher.java
index aa53b8800f..407c8fe27b 100644
--- a/core/src/main/java/org/apache/gravitino/hook/MetalakeHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/MetalakeHookDispatcher.java
@@ -27,7 +27,7 @@ import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.authorization.AccessControlDispatcher;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.exceptions.MetalakeAlreadyExistsException;
import org.apache.gravitino.exceptions.MetalakeInUseException;
import org.apache.gravitino.exceptions.NoSuchMetalakeException;
@@ -72,9 +72,9 @@ public class MetalakeHookDispatcher implements
MetalakeDispatcher {
}
// Set the creator as owner of the metalake.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
- if (ownerManager != null) {
- ownerManager.setOwner(
+ OwnerDispatcher ownerDispatcher =
GravitinoEnv.getInstance().ownerDispatcher();
+ if (ownerDispatcher != null) {
+ ownerDispatcher.setOwner(
ident.name(),
NameIdentifierUtil.toMetadataObject(ident,
Entity.EntityType.METALAKE),
PrincipalUtils.getCurrentUserName(),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/ModelHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/ModelHookDispatcher.java
index e1eef06c59..560caa7522 100644
--- a/core/src/main/java/org/apache/gravitino/hook/ModelHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/ModelHookDispatcher.java
@@ -26,7 +26,7 @@ import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.catalog.ModelDispatcher;
import org.apache.gravitino.exceptions.ModelAlreadyExistsException;
import
org.apache.gravitino.exceptions.ModelVersionAliasesAlreadyExistException;
@@ -73,7 +73,7 @@ public class ModelHookDispatcher implements ModelDispatcher {
Model model = dispatcher.registerModel(ident, comment, properties);
// Set the creator as owner of the model.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
+ OwnerDispatcher ownerManager =
GravitinoEnv.getInstance().ownerDispatcher();
if (ownerManager != null) {
ownerManager.setOwner(
ident.namespace().level(0),
@@ -153,7 +153,7 @@ public class ModelHookDispatcher implements ModelDispatcher
{
Model model = dispatcher.registerModel(ident, uri, aliases, comment,
properties);
// Set the creator as owner of the model.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
+ OwnerDispatcher ownerManager =
GravitinoEnv.getInstance().ownerDispatcher();
if (ownerManager != null) {
ownerManager.setOwner(
ident.name(),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/SchemaHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/SchemaHookDispatcher.java
index df0925db2a..191c1e5859 100644
--- a/core/src/main/java/org/apache/gravitino/hook/SchemaHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/SchemaHookDispatcher.java
@@ -28,7 +28,7 @@ import org.apache.gravitino.Schema;
import org.apache.gravitino.SchemaChange;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.catalog.SchemaDispatcher;
import org.apache.gravitino.exceptions.NoSuchCatalogException;
import org.apache.gravitino.exceptions.NoSuchSchemaException;
@@ -64,7 +64,7 @@ public class SchemaHookDispatcher implements SchemaDispatcher
{
Schema schema = dispatcher.createSchema(ident, comment, properties);
// Set the creator as the owner of the schema.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
+ OwnerDispatcher ownerManager =
GravitinoEnv.getInstance().ownerDispatcher();
if (ownerManager != null) {
ownerManager.setOwner(
ident.namespace().level(0),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/TableHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/TableHookDispatcher.java
index ea3299d3bb..3bb6a8da26 100644
--- a/core/src/main/java/org/apache/gravitino/hook/TableHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/TableHookDispatcher.java
@@ -26,7 +26,7 @@ import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.catalog.TableDispatcher;
import org.apache.gravitino.exceptions.NoSuchSchemaException;
import org.apache.gravitino.exceptions.NoSuchTableException;
@@ -83,7 +83,7 @@ public class TableHookDispatcher implements TableDispatcher {
ident, columns, comment, properties, partitions, distribution,
sortOrders, indexes);
// Set the creator as the owner of the table.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
+ OwnerDispatcher ownerManager =
GravitinoEnv.getInstance().ownerDispatcher();
if (ownerManager != null) {
ownerManager.setOwner(
ident.namespace().level(0),
diff --git
a/core/src/main/java/org/apache/gravitino/hook/TopicHookDispatcher.java
b/core/src/main/java/org/apache/gravitino/hook/TopicHookDispatcher.java
index 546eede8b9..dfd042b520 100644
--- a/core/src/main/java/org/apache/gravitino/hook/TopicHookDispatcher.java
+++ b/core/src/main/java/org/apache/gravitino/hook/TopicHookDispatcher.java
@@ -26,7 +26,7 @@ import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
import org.apache.gravitino.authorization.AuthorizationUtils;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.catalog.TopicDispatcher;
import org.apache.gravitino.exceptions.NoSuchSchemaException;
import org.apache.gravitino.exceptions.NoSuchTopicException;
@@ -70,7 +70,7 @@ public class TopicHookDispatcher implements TopicDispatcher {
Topic topic = dispatcher.createTopic(ident, comment, dataLayout,
properties);
// Set the creator as the owner of the topic.
- OwnerManager ownerManager = GravitinoEnv.getInstance().ownerManager();
+ OwnerDispatcher ownerManager =
GravitinoEnv.getInstance().ownerDispatcher();
if (ownerManager != null) {
ownerManager.setOwner(
ident.namespace().level(0),
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerEvent.java
new file mode 100644
index 0000000000..a0c03cb097
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerEvent.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/**
+ * GetOwnerEvent is an event that is triggered when the owner of a metadata
object is retrieved
+ * successfully.
+ */
+@DeveloperApi
+public final class GetOwnerEvent extends OwnerEvent {
+
+ public GetOwnerEvent(
+ String user, NameIdentifier identifier, OwnerInfo ownerInfo,
MetadataObject.Type type) {
+ super(user, identifier, ownerInfo, type);
+ }
+
+ @Override
+ public OperationType operationType() {
+ return OperationType.GET_OWNER;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerFailureEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerFailureEvent.java
new file mode 100644
index 0000000000..5d758da126
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerFailureEvent.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Event triggered when getting the owner of a metadata object fails. */
+@DeveloperApi
+public final class GetOwnerFailureEvent extends OwnerFailureEvent {
+ public GetOwnerFailureEvent(
+ String user,
+ NameIdentifier identifier,
+ Exception exception,
+ OwnerInfo ownerInfo,
+ MetadataObject.Type type) {
+ super(user, identifier, exception, ownerInfo, type);
+ }
+
+ @Override
+ public OperationType operationType() {
+ return OperationType.GET_OWNER;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerPreEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerPreEvent.java
new file mode 100644
index 0000000000..10bde20ad9
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/GetOwnerPreEvent.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Event triggered before retrieving the owner information of a metadata
object. */
+@DeveloperApi
+public final class GetOwnerPreEvent extends OwnerPreEvent {
+ public GetOwnerPreEvent(
+ String user, NameIdentifier identifier, OwnerInfo ownerInfo,
MetadataObject.Type type) {
+ super(user, identifier, ownerInfo, type);
+ }
+
+ @Override
+ public OperationType operationType() {
+ return OperationType.GET_OWNER;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/OperationType.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/OperationType.java
index f6162c77ef..d217abeb37 100644
---
a/core/src/main/java/org/apache/gravitino/listener/api/event/OperationType.java
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/OperationType.java
@@ -141,5 +141,9 @@ public enum OperationType {
GRANT_PRIVILEGES,
REVOKE_PRIVILEGES,
+ // Owner operations
+ GET_OWNER,
+ SET_OWNER,
+
UNKNOWN,
}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerEvent.java
new file mode 100644
index 0000000000..9394287f20
--- /dev/null
+++ b/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerEvent.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Base class for owner-related events in the Gravitino listener API. */
+@DeveloperApi
+public abstract class OwnerEvent extends Event {
+ private final OwnerInfo ownerInfo;
+ private final MetadataObject.Type type;
+
+ public OwnerEvent(
+ String user, NameIdentifier identifier, OwnerInfo ownerInfo,
MetadataObject.Type type) {
+ super(user, identifier);
+ this.ownerInfo = ownerInfo;
+ this.type = type;
+ }
+
+ public OwnerInfo ownerInfo() {
+ return ownerInfo;
+ }
+
+ public MetadataObject.Type metadataObjectType() {
+ return type;
+ }
+
+ @Override
+ public OperationStatus operationStatus() {
+ return OperationStatus.SUCCESS;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerFailureEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerFailureEvent.java
new file mode 100644
index 0000000000..ff2fd2b149
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerFailureEvent.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Base class for owner-related failure events in the listener API. */
+@DeveloperApi
+public abstract class OwnerFailureEvent extends FailureEvent {
+ private final OwnerInfo ownerInfo;
+ private final MetadataObject.Type type;
+
+ public OwnerFailureEvent(
+ String user,
+ NameIdentifier identifier,
+ Exception exception,
+ OwnerInfo ownerInfo,
+ MetadataObject.Type type) {
+ super(user, identifier, exception);
+ this.ownerInfo = ownerInfo;
+ this.type = type;
+ }
+
+ public OwnerInfo ownerInfo() {
+ return ownerInfo;
+ }
+
+ public MetadataObject.Type metadataObjectType() {
+ return type;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerPreEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerPreEvent.java
new file mode 100644
index 0000000000..66b3c4a1d0
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/OwnerPreEvent.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Base class for owner-related pre-events in the Gravitino listener API. */
+@DeveloperApi
+public abstract class OwnerPreEvent extends PreEvent {
+ private final OwnerInfo ownerInfo;
+ private final MetadataObject.Type type;
+
+ public OwnerPreEvent(
+ String user, NameIdentifier identifier, OwnerInfo ownerInfo,
MetadataObject.Type type) {
+ super(user, identifier);
+ this.ownerInfo = ownerInfo;
+ this.type = type;
+ }
+
+ public OwnerInfo ownerInfo() {
+ return ownerInfo;
+ }
+
+ public MetadataObject.Type metadataObjectType() {
+ return type;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerEvent.java
new file mode 100644
index 0000000000..04d5bae07c
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerEvent.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/**
+ * Represents an event that occurs when an owner is set for a metadata object.
This event is
+ * triggered after the owner has been successfully set.
+ */
+@DeveloperApi
+public final class SetOwnerEvent extends OwnerEvent {
+ public SetOwnerEvent(
+ String user, NameIdentifier identifier, OwnerInfo ownerInfo,
MetadataObject.Type type) {
+ super(user, identifier, ownerInfo, type);
+ }
+
+ @Override
+ public OperationType operationType() {
+ return OperationType.SET_OWNER;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerFailureEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerFailureEvent.java
new file mode 100644
index 0000000000..f89f160c25
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerFailureEvent.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Event triggered when setting an owner fails. */
+@DeveloperApi
+public final class SetOwnerFailureEvent extends OwnerFailureEvent {
+ public SetOwnerFailureEvent(
+ String user,
+ NameIdentifier identifier,
+ Exception exception,
+ OwnerInfo ownerInfo,
+ MetadataObject.Type type) {
+ super(user, identifier, exception, ownerInfo, type);
+ }
+
+ @Override
+ public OperationType operationType() {
+ return OperationType.SET_OWNER;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerPreEvent.java
b/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerPreEvent.java
new file mode 100644
index 0000000000..a1c95639f8
--- /dev/null
+++
b/core/src/main/java/org/apache/gravitino/listener/api/event/SetOwnerPreEvent.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+
+/** Event triggered before setting the owner of a metadata object. */
+@DeveloperApi
+public final class SetOwnerPreEvent extends OwnerPreEvent {
+ public SetOwnerPreEvent(
+ String user, NameIdentifier identifier, OwnerInfo ownerInfo,
MetadataObject.Type type) {
+ super(user, identifier, ownerInfo, type);
+ }
+
+ @Override
+ public OperationType operationType() {
+ return OperationType.SET_OWNER;
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/listener/api/info/OwnerInfo.java
b/core/src/main/java/org/apache/gravitino/listener/api/info/OwnerInfo.java
new file mode 100644
index 0000000000..f92f6bf3a3
--- /dev/null
+++ b/core/src/main/java/org/apache/gravitino/listener/api/info/OwnerInfo.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.info;
+
+import com.google.common.base.Objects;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.authorization.Owner;
+
+/** Owner information that used in owner operation events. */
+@DeveloperApi
+public class OwnerInfo {
+ private final String name;
+ private final Owner.Type type;
+
+ public OwnerInfo(String name, Owner.Type type) {
+ this.name = name;
+ this.type = type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Owner.Type getType() {
+ return type;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof OwnerInfo)) {
+ return false;
+ }
+ OwnerInfo ownerInfo = (OwnerInfo) o;
+ return Objects.equal(name, ownerInfo.name) && type == ownerInfo.type;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(name, type);
+ }
+}
diff --git
a/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
b/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
index eb963182bf..d36591564e 100644
--- a/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
+++ b/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
@@ -72,6 +72,20 @@ public class MetadataObjectUtil {
"Unknown metadata object type: " + metadataObject.type()));
}
+ /**
+ * Map the given {@link MetadataObject}'s type to the corresponding {@link
Entity.EntityType}.
+ *
+ * @param type The metadata object type
+ * @return The entity type
+ * @throws IllegalArgumentException if the metadata object type is unknown
+ */
+ public static Entity.EntityType toEntityType(MetadataObject.Type type) {
+ Preconditions.checkArgument(type != null, "metadataObject type cannot be
null");
+
+ return Optional.ofNullable(TYPE_TO_TYPE_MAP.get(type))
+ .orElseThrow(() -> new IllegalArgumentException("Unknown metadata
object type: " + type));
+ }
+
/**
* Convert the given {@link MetadataObject} full name to the corresponding
{@link NameIdentifier}.
*
diff --git
a/core/src/test/java/org/apache/gravitino/listener/DummyEventListener.java
b/core/src/test/java/org/apache/gravitino/listener/DummyEventListener.java
index 44ffa7dd67..9ae774b781 100644
--- a/core/src/test/java/org/apache/gravitino/listener/DummyEventListener.java
+++ b/core/src/test/java/org/apache/gravitino/listener/DummyEventListener.java
@@ -53,6 +53,11 @@ public class DummyEventListener implements
EventListenerPlugin {
postEvents.add(event);
}
+ public void clear() {
+ postEvents.clear();
+ preEvents.clear();
+ }
+
@Override
public SupportsChangingPreEvent transformPreEvent(
SupportsChangingPreEvent supportsChangingPreEvent) {
diff --git
a/core/src/test/java/org/apache/gravitino/listener/api/event/TestOwnerEvent.java
b/core/src/test/java/org/apache/gravitino/listener/api/event/TestOwnerEvent.java
new file mode 100644
index 0000000000..231c08653c
--- /dev/null
+++
b/core/src/test/java/org/apache/gravitino/listener/api/event/TestOwnerEvent.java
@@ -0,0 +1,247 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.gravitino.listener.api.event;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+
+import java.util.Arrays;
+import java.util.List;
+import org.apache.gravitino.EntityStore;
+import org.apache.gravitino.MetadataObject;
+import org.apache.gravitino.MetadataObjects;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.SupportsRelationOperations;
+import org.apache.gravitino.authorization.Owner;
+import org.apache.gravitino.authorization.OwnerEventManager;
+import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.listener.DummyEventListener;
+import org.apache.gravitino.listener.EventBus;
+import org.apache.gravitino.listener.api.info.OwnerInfo;
+import org.apache.gravitino.storage.relational.RelationalBackend;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestInstance.Lifecycle;
+import org.mockito.Mockito;
+import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
+
+@TestInstance(Lifecycle.PER_CLASS)
+public class TestOwnerEvent {
+ private OwnerEventManager ownerManager;
+ private OwnerManager innerOwnerManager;
+ private DummyEventListener dummyEventListener;
+
+ interface TestEntityStore extends EntityStore, RelationalBackend,
SupportsRelationOperations {
+ // This interface is used to mock the EntityStore for testing purposes.
+ }
+
+ @BeforeAll
+ void init() {
+ TestEntityStore entityStore = Mockito.mock(TestEntityStore.class);
+ this.dummyEventListener = new DummyEventListener();
+ EventBus eventBus = new EventBus(Arrays.asList(dummyEventListener));
+ this.innerOwnerManager = new OwnerManager(entityStore);
+ this.ownerManager = new OwnerEventManager(eventBus, innerOwnerManager);
+ }
+
+ static class OwnerImpl implements Owner {
+ private final String name;
+ private final Type type;
+
+ OwnerImpl(String name, Type type) {
+ this.name = name;
+ this.type = type;
+ }
+
+ @Override
+ public String name() {
+ return name;
+ }
+
+ @Override
+ public Type type() {
+ return type;
+ }
+ }
+
+ @Test
+ void testSetOwner() {
+ String metalake = "test_metalake";
+ MetadataObject metadataObject =
+ MetadataObjects.of(
+ ImmutableList.of("test_catalog", "test_schema", "test_table"),
+ MetadataObject.Type.TABLE);
+ NameIdentifier identifier =
+ NameIdentifier.of(metalake, "test_catalog", "test_schema",
"test_table");
+ String ownerName = "test_owner";
+ Owner.Type ownerType = Owner.Type.USER;
+
+ OwnerManager spyOwnerManger = Mockito.spy(innerOwnerManager);
+ doNothing().when(spyOwnerManger).setOwner(metalake, metadataObject,
ownerName, ownerType);
+ ownerManager.setOwnerManager(spyOwnerManger);
+
+ try {
+ ownerManager.setOwner(metalake, metadataObject, ownerName, ownerType);
+ List<PreEvent> preEvents = dummyEventListener.getPreEvents();
+ List<Event> postEvents = dummyEventListener.getPostEvents();
+
+ Assertions.assertEquals(1, preEvents.size());
+ SetOwnerPreEvent setOwnerPreEvent = (SetOwnerPreEvent) preEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
setOwnerPreEvent.metadataObjectType());
+ Assertions.assertEquals(new OwnerInfo(ownerName, ownerType),
setOwnerPreEvent.ownerInfo());
+ Assertions.assertEquals(identifier, setOwnerPreEvent.identifier());
+ Assertions.assertEquals(OperationStatus.UNPROCESSED,
setOwnerPreEvent.operationStatus());
+ Assertions.assertEquals(OperationType.SET_OWNER,
setOwnerPreEvent.operationType());
+
+ Assertions.assertEquals(1, postEvents.size());
+ SetOwnerEvent setOwnerEvent = (SetOwnerEvent) postEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
setOwnerEvent.metadataObjectType());
+ Assertions.assertEquals(new OwnerInfo(ownerName, ownerType),
setOwnerEvent.ownerInfo());
+ Assertions.assertEquals(identifier, setOwnerEvent.identifier());
+ Assertions.assertEquals(OperationStatus.SUCCESS,
setOwnerEvent.operationStatus());
+ Assertions.assertEquals(OperationType.SET_OWNER,
setOwnerEvent.operationType());
+
+ } finally {
+ ownerManager.setOwnerManager(innerOwnerManager);
+ dummyEventListener.clear();
+ }
+
+ spyOwnerManger = Mockito.spy(innerOwnerManager);
+ doThrow(new RuntimeException("Test exception"))
+ .when(spyOwnerManger)
+ .setOwner(metalake, metadataObject, ownerName, ownerType);
+ ownerManager.setOwnerManager(spyOwnerManger);
+
+ try {
+ ownerManager.setOwner(metalake, metadataObject, ownerName, ownerType);
+ Assertions.fail("Expected RuntimeException to be thrown");
+ } catch (RuntimeException e) {
+ List<PreEvent> preEvents = dummyEventListener.getPreEvents();
+ List<Event> postEvents = dummyEventListener.getPostEvents();
+
+ Assertions.assertEquals(1, preEvents.size());
+ SetOwnerPreEvent setOwnerPreEvent = (SetOwnerPreEvent) preEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
setOwnerPreEvent.metadataObjectType());
+ Assertions.assertEquals(new OwnerInfo(ownerName, ownerType),
setOwnerPreEvent.ownerInfo());
+ Assertions.assertEquals(identifier, setOwnerPreEvent.identifier());
+ Assertions.assertEquals(OperationStatus.UNPROCESSED,
setOwnerPreEvent.operationStatus());
+ Assertions.assertEquals(OperationType.SET_OWNER,
setOwnerPreEvent.operationType());
+
+ Assertions.assertEquals(1, postEvents.size());
+ Assertions.assertTrue(postEvents.get(0) instanceof SetOwnerFailureEvent);
+ SetOwnerFailureEvent setOwnerFailureEvent = (SetOwnerFailureEvent)
postEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
setOwnerFailureEvent.metadataObjectType());
+ Assertions.assertEquals(
+ new OwnerInfo(ownerName, ownerType),
setOwnerFailureEvent.ownerInfo());
+ Assertions.assertEquals(identifier, setOwnerFailureEvent.identifier());
+ Assertions.assertEquals(OperationStatus.FAILURE,
setOwnerFailureEvent.operationStatus());
+ Assertions.assertEquals(OperationType.SET_OWNER,
setOwnerFailureEvent.operationType());
+ } finally {
+ ownerManager.setOwnerManager(innerOwnerManager);
+ dummyEventListener.clear();
+ }
+ }
+
+ @Test
+ void testGetOwner() {
+ String metalake = "test_metalake";
+ MetadataObject metadataObject =
+ MetadataObjects.of(
+ ImmutableList.of("test_catalog", "test_schema", "test_table"),
+ MetadataObject.Type.TABLE);
+ NameIdentifier identifier =
+ NameIdentifier.of(metalake, "test_catalog", "test_schema",
"test_table");
+ Owner expectedOwner = new OwnerImpl("test_owner", Owner.Type.USER);
+
+ OwnerManager spyOwnerManger = Mockito.spy(innerOwnerManager);
+ doReturn(java.util.Optional.of(expectedOwner))
+ .when(spyOwnerManger)
+ .getOwner(metalake, metadataObject);
+ ownerManager.setOwnerManager(spyOwnerManger);
+
+ try {
+ java.util.Optional<Owner> owner = ownerManager.getOwner(metalake,
metadataObject);
+ Assertions.assertTrue(owner.isPresent());
+ Assertions.assertEquals(expectedOwner.name(), owner.get().name());
+ Assertions.assertEquals(expectedOwner.type(), owner.get().type());
+
+ List<PreEvent> preEvents = dummyEventListener.getPreEvents();
+ List<Event> postEvents = dummyEventListener.getPostEvents();
+
+ Assertions.assertEquals(1, preEvents.size());
+ GetOwnerPreEvent getOwnerPreEvent = (GetOwnerPreEvent) preEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
getOwnerPreEvent.metadataObjectType());
+ Assertions.assertNull(getOwnerPreEvent.ownerInfo());
+ Assertions.assertEquals(identifier, getOwnerPreEvent.identifier());
+ Assertions.assertEquals(OperationStatus.UNPROCESSED,
getOwnerPreEvent.operationStatus());
+ Assertions.assertEquals(OperationType.GET_OWNER,
getOwnerPreEvent.operationType());
+
+ Assertions.assertEquals(1, postEvents.size());
+ GetOwnerEvent getOwnerEvent = (GetOwnerEvent) postEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
getOwnerEvent.metadataObjectType());
+ Assertions.assertEquals(
+ new OwnerInfo(expectedOwner.name(), expectedOwner.type()),
getOwnerEvent.ownerInfo());
+ Assertions.assertEquals(identifier, getOwnerEvent.identifier());
+ Assertions.assertEquals(OperationStatus.SUCCESS,
getOwnerEvent.operationStatus());
+ Assertions.assertEquals(OperationType.GET_OWNER,
getOwnerEvent.operationType());
+ } finally {
+ ownerManager.setOwnerManager(innerOwnerManager);
+ dummyEventListener.clear();
+ }
+
+ spyOwnerManger = Mockito.spy(innerOwnerManager);
+ doThrow(new RuntimeException("Test exception"))
+ .when(spyOwnerManger)
+ .getOwner(metalake, metadataObject);
+ ownerManager.setOwnerManager(spyOwnerManger);
+
+ try {
+ ownerManager.getOwner(metalake, metadataObject);
+ Assertions.fail("Expected RuntimeException to be thrown");
+ } catch (RuntimeException e) {
+ List<PreEvent> preEvents = dummyEventListener.getPreEvents();
+ List<Event> postEvents = dummyEventListener.getPostEvents();
+
+ Assertions.assertEquals(1, preEvents.size());
+ GetOwnerPreEvent getOwnerPreEvent = (GetOwnerPreEvent) preEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
getOwnerPreEvent.metadataObjectType());
+ Assertions.assertNull(getOwnerPreEvent.ownerInfo());
+ Assertions.assertEquals(identifier, getOwnerPreEvent.identifier());
+ Assertions.assertEquals(OperationStatus.UNPROCESSED,
getOwnerPreEvent.operationStatus());
+ Assertions.assertEquals(OperationType.GET_OWNER,
getOwnerPreEvent.operationType());
+
+ Assertions.assertEquals(1, postEvents.size());
+ Assertions.assertTrue(postEvents.get(0) instanceof GetOwnerFailureEvent);
+ GetOwnerFailureEvent getOwnerFailureEvent = (GetOwnerFailureEvent)
postEvents.get(0);
+ Assertions.assertEquals(MetadataObject.Type.TABLE,
getOwnerFailureEvent.metadataObjectType());
+ Assertions.assertNull(getOwnerFailureEvent.ownerInfo());
+ Assertions.assertEquals(identifier, getOwnerFailureEvent.identifier());
+ Assertions.assertEquals(OperationStatus.FAILURE,
getOwnerFailureEvent.operationStatus());
+ Assertions.assertEquals(OperationType.GET_OWNER,
getOwnerFailureEvent.operationType());
+
+ } finally {
+ ownerManager.setOwnerManager(innerOwnerManager);
+ dummyEventListener.clear();
+ }
+ }
+}
diff --git
a/core/src/test/java/org/apache/gravitino/utils/TestMetadataObjectUtil.java
b/core/src/test/java/org/apache/gravitino/utils/TestMetadataObjectUtil.java
index 9911ddbfa8..9e3ca43161 100644
--- a/core/src/test/java/org/apache/gravitino/utils/TestMetadataObjectUtil.java
+++ b/core/src/test/java/org/apache/gravitino/utils/TestMetadataObjectUtil.java
@@ -31,7 +31,7 @@ public class TestMetadataObjectUtil {
public void testToEntityType() {
Assertions.assertThrows(
IllegalArgumentException.class,
- () -> MetadataObjectUtil.toEntityType(null),
+ () -> MetadataObjectUtil.toEntityType((MetadataObject) null),
"metadataObject cannot be null");
Assertions.assertEquals(
diff --git a/docs/gravitino-server-config.md b/docs/gravitino-server-config.md
index e5599f6685..3d2a90bd6b 100644
--- a/docs/gravitino-server-config.md
+++ b/docs/gravitino-server-config.md
@@ -171,7 +171,7 @@ Gravitino triggers a pre-event before the operation, a
post-event after the comp
| Operation type | Post-event
[...]
|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[...]
| table operation | `CreateTableEvent`, `AlterTableEvent`,
`DropTableEvent`, `LoadTableEvent`, `ListTableEvent`, `PurgeTableFailureEvent`,
`CreateTableFailureEvent`, `AlterTableFailureEvent`, `DropTableFailureEvent`,
`LoadTableFailureEvent`, `ListTableFailureEvent`, `PurgeTableFailureEvent`
[...]
-| fileset operation | `CreateFileSetEvent`,
`AlterFileSetEvent`, `DropFileSetEvent`, `LoadFileSetEvent`,
`ListFileSetEvent`, `CreateFileSetFailureEvent`, `AlterFileSetFailureEvent`,
`DropFileSetFailureEvent`, `LoadFileSetFailureEvent`,
`ListFileSetFailureEvent`, `ListFilesFailureEvent`
[...]
+| fileset operation | `CreateFileSetEvent`,
`AlterFileSetEvent`, `DropFileSetEvent`, `LoadFileSetEvent`,
`ListFileSetEvent`, `CreateFileSetFailureEvent`, `AlterFileSetFailureEvent`,
`DropFileSetFailureEvent`, `LoadFileSetFailureEvent`,
`ListFileSetFailureEvent`, `ListFilesFailureEvent`
[...]
| topic operation | `CreateTopicEvent`, `AlterTopicEvent`,
`DropTopicEvent`, `LoadTopicEvent`, `ListTopicEvent`,
`CreateTopicFailureEvent`, `AlterTopicFailureEvent`, `DropTopicFailureEvent`,
`LoadTopicFailureEvent`, `ListTopicFailureEvent`
[...]
| schema operation | `CreateSchemaEvent`,
`AlterSchemaEvent`, `DropSchemaEvent`, `LoadSchemaEvent`, `ListSchemaEvent`,
`CreateSchemaFailureEvent`, `AlterSchemaFailureEvent`,
`DropSchemaFailureEvent`, `LoadSchemaFailureEvent`, `ListSchemaFailureEvent`
[...]
| catalog operation | `CreateCatalogEvent`,
`AlterCatalogEvent`, `DropCatalogEvent`, `LoadCatalogEvent`,
`ListCatalogEvent`, `CreateCatalogFailureEvent`, `AlterCatalogFailureEvent`,
`DropCatalogFailureEvent`, `LoadCatalogFailureEvent`, `ListCatalogFailureEvent`
[...]
@@ -182,6 +182,7 @@ Gravitino triggers a pre-event before the operation, a
post-event after the comp
| user operation | `AddUserEvent`, `GetUserEvent`,
`ListUserNamesEvent`, `ListUsersEvent`, `RemoveUserEvent`,
`GrantUserRolesEvent`, `RevokeUserRolesEvent`, `AddUserFailureEvent`,
`GetUserFailureEvent`, `GrantUserRolesFailureEvent`,
`ListUserNamesFailureEvent`, `ListUsersFailureEvent`, `RemoveUserFailureEvent`,
`RevokeUserRolesFailureEvent`
[...]
| group operation | `AddGroupEvent`, `GetGroupEvent`,
`ListGroupNamesEvent`, `ListGroupsEvent`, `RemoveGroupEvent`,
`GrantGroupRolesEvent`, `RevokeGroupRolesEvent`, `AddGroupFailureEvent`,
`GetGroupFailureEvent`, `GrantGroupRolesFailureEvent`,
`ListGroupNamesFailureEvent`, `ListGroupsFailureEvent`,
`RemoveGroupFailureEvent`, `RevokeGroupRolesFailureEvent`
[...]
| role operation | `CreateRoleEvent`, `DeleteRoleEvent`,
`GetRoleEvent`, `GrantPrivilegesEvent`, `ListRoleNamesEvent`,
`RevokePrivilegesEvent`, `CreateRoleFailureEvent`, `DeleteRoleFailureEvent`,
`GetRoleFailureEvent`, `GrantPrivilegesFailureEvent`,
`ListRoleNamesFailureEvent`, `RevokePrivilegesFailureEvent`
[...]
+| owner operation | `SetOwnerEvent`, `GetOwnerEvent`
[...]
@@ -195,12 +196,13 @@ Gravitino triggers a pre-event before the operation, a
post-event after the comp
| Gravitino server catalog operation | `CreateCatalogPreEvent`,
`AlterCatalogPreEvent`, `DropCatalogPreEvent`, `LoadCatalogPreEvent`,
`ListCatalogPreEvent`
| 0.8.0-incubating |
| Gravitino server metalake operation | `CreateMetalakePreEvent`,
`AlterMetalakePreEvent`,`DropMetalakePreEvent`,`LoadMetalakePreEvent`,`ListMetalakePreEvent`
| 0.8.0-incubating |
| Gravitino server partition operation | `AddPartitionPreEvent`,
`DropPartitionPreEvent`, `GetPartitionPreEvent`,
`PurgePartitionPreEvent`,`ListPartitionPreEvent`,`ListPartitionNamesPreEvent`
| 0.8.0-incubating |
-| Gravitino server fileset operation | `CreateFilesetPreEvent`,
`AlterFilesetPreEvent`, `DropFilesetPreEvent`,
`LoadFilesetPreEvent`,`ListFilesetPreEvent`,`GetFileLocationPreEvent`,
`ListFilesPreEvent`
| 0.8.0-incubating |
+| Gravitino server fileset operation | `CreateFilesetPreEvent`,
`AlterFilesetPreEvent`, `DropFilesetPreEvent`,
`LoadFilesetPreEvent`,`ListFilesetPreEvent`,`GetFileLocationPreEvent`,
`ListFilesPreEvent`
| 0.8.0-incubating |
| Gravitino server model operation | `DeleteModelPreEvent`,
`DeleteModelVersionPreEvent`,
`RegisterAndLinkModelPreEvent`,`GetModelPreEvent`,
`GetModelVersionPreEvent`,`LinkModelVersionPreEvent`,`ListModelPreEvent`,`RegisterModelPreEvent`,
`AlterModelPreEvent`, `AlterModelVersionPreEvent`, `AlterModelVersionPreEvent`
| 0.9.0-incubating |
| Gravitino server tag operation | `ListTagsPreEvent`,
`ListTagsInfoPreEvent`, `CreateTagPreEvent`, `GetTagPreEvent`,
`AlterTagPreEvent`, `DeleteTagPreEvent`, `ListMetadataObjectsForTagPreEvent`,
`ListTagsForMetadataObjectPreEvent`, `ListTagsInfoForMetadataObjectPreEvent`,
`AssociateTagsForMetadataObjectPreEvent`, `GetTagForMetadataObjectPreEvent` |
0.9.0-incubating |
| Gravitino server user operation | `AddUserPreEvent`, `GetUserPreEvent`,
`ListUserNamesPreEvent`, `ListUsersPreEvent`, `RemoveUserPreEvent`,
`GrantUserRolesPreEvent`, `RevokeUserRolesPreEvent`
| 0.9.0-incubating |
| Gravitino server group operation | `AddGroupPreEvent`,
`GetGroupPreEvent`, `ListGroupNamesPreEvent`, `ListGroupsPreEvent`,
`RemoveGroupPreEvent`, `GrantGroupRolesPreEvent`, `RevokeGroupRolesPreEvent`
|
0.9.0-incubating |
| Gravitino server role operation | `CreateRolePreEvent`,
`DeleteRolePreEvent`, `GetRolePreEvent`, `GrantPrivilegesPreEvent`,
`ListRoleNamesPreEvent`, `RevokePrivilegesPreEvent`
|
0.9.0-incubating |
+ | Gravitino server owner operation | `SetOwnerPreEvent`,
`GetOwnerPreEvent`
| 1.0.0 |
#### Event listener plugin
diff --git
a/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
b/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
index 001770f6a5..89d0d93a36 100644
---
a/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
+++
b/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
@@ -34,7 +34,7 @@ import org.apache.gravitino.GravitinoEnv;
import org.apache.gravitino.MetadataObject;
import org.apache.gravitino.MetadataObjects;
import org.apache.gravitino.authorization.Owner;
-import org.apache.gravitino.authorization.OwnerManager;
+import org.apache.gravitino.authorization.OwnerDispatcher;
import org.apache.gravitino.dto.requests.OwnerSetRequest;
import org.apache.gravitino.dto.responses.OwnerResponse;
import org.apache.gravitino.dto.responses.SetResponse;
@@ -48,7 +48,7 @@ import org.apache.gravitino.utils.MetadataObjectUtil;
@Path("/metalakes/{metalake}/owners")
public class OwnerOperations {
- private final OwnerManager ownerManager;
+ private final OwnerDispatcher ownerDispatcher;
@Context private HttpServletRequest httpRequest;
@@ -56,7 +56,7 @@ public class OwnerOperations {
// Because ownerManager may be null when Gravitino doesn't enable
authorization,
// and Jersey injection doesn't support null value. So OwnerOperations
chooses to retrieve
// ownerManager from GravitinoEnv instead of injection here.
- this.ownerManager = GravitinoEnv.getInstance().ownerManager();
+ this.ownerDispatcher = GravitinoEnv.getInstance().ownerDispatcher();
}
@GET
@@ -76,7 +76,7 @@ public class OwnerOperations {
httpRequest,
() -> {
MetadataObjectUtil.checkMetadataObject(metalake, object);
- Optional<Owner> owner = ownerManager.getOwner(metalake, object);
+ Optional<Owner> owner = ownerDispatcher.getOwner(metalake, object);
if (owner.isPresent()) {
return Utils.ok(new
OwnerResponse(DTOConverters.toDTO(owner.get())));
} else {
@@ -109,7 +109,7 @@ public class OwnerOperations {
() -> {
request.validate();
MetadataObjectUtil.checkMetadataObject(metalake, object);
- ownerManager.setOwner(metalake, object, request.getName(),
request.getType());
+ ownerDispatcher.setOwner(metalake, object, request.getName(),
request.getType());
return Utils.ok(new SetResponse(true));
});
} catch (Exception e) {
diff --git
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
index dc7451a538..28ab031468 100644
---
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
+++
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
@@ -86,7 +86,7 @@ class TestOwnerOperations extends JerseyTest {
Mockito.doReturn(1000L).when(config).get(TREE_LOCK_MIN_NODE_IN_MEMORY);
Mockito.doReturn(36000L).when(config).get(TREE_LOCK_CLEAN_INTERVAL);
FieldUtils.writeField(GravitinoEnv.getInstance(), "lockManager", new
LockManager(config), true);
- FieldUtils.writeField(GravitinoEnv.getInstance(), "ownerManager", manager,
true);
+ FieldUtils.writeField(GravitinoEnv.getInstance(), "ownerDispatcher",
manager, true);
FieldUtils.writeField(
GravitinoEnv.getInstance(), "metalakeDispatcher", metalakeDispatcher,
true);
FieldUtils.writeField(