From 8d738190916cb6fdaf504eace4d001b51790c2f7 Mon Sep 17 00:00:00 2001 From: pancx Date: Sun, 16 Feb 2025 12:53:27 +0800 Subject: [PATCH] [#6067] improvement(core): Support model pre event to Gravitino server Remove Model Event. --- .../listener/ModelEventDispatcher.java | 57 +----- .../listener/api/event/DeleteModelEvent.java | 71 ------- .../api/event/DeleteModelVersionEvent.java | 70 ------- .../listener/api/event/GetModelEvent.java | 60 ------ .../api/event/GetModelVersionEvent.java | 60 ------ .../api/event/LinkModelVersionEvent.java | 62 ------ .../listener/api/event/ListModelEvent.java | 58 ------ .../api/event/ListModelVersionsEvent.java | 62 ------ .../listener/api/event/ModelEvent.java | 50 ----- .../api/event/RegisterModelEvent.java | 62 ------ .../listener/api/event/TestModelEvent.java | 188 +----------------- 11 files changed, 18 insertions(+), 782 deletions(-) delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/DeleteModelEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/DeleteModelVersionEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/GetModelEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/GetModelVersionEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/LinkModelVersionEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/ListModelEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/ListModelVersionsEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/ModelEvent.java delete mode 100644 core/src/main/java/org/apache/gravitino/listener/api/event/RegisterModelEvent.java diff --git a/core/src/main/java/org/apache/gravitino/listener/ModelEventDispatcher.java b/core/src/main/java/org/apache/gravitino/listener/ModelEventDispatcher.java index 2b7f396d46f..69f3231dc6b 100644 --- a/core/src/main/java/org/apache/gravitino/listener/ModelEventDispatcher.java +++ b/core/src/main/java/org/apache/gravitino/listener/ModelEventDispatcher.java @@ -28,21 +28,13 @@ import org.apache.gravitino.exceptions.NoSuchModelException; import org.apache.gravitino.exceptions.NoSuchModelVersionException; import org.apache.gravitino.exceptions.NoSuchSchemaException; -import org.apache.gravitino.listener.api.event.DeleteModelEvent; import org.apache.gravitino.listener.api.event.DeleteModelPreEvent; -import org.apache.gravitino.listener.api.event.DeleteModelVersionEvent; import org.apache.gravitino.listener.api.event.DeleteModelVersionPreEvent; -import org.apache.gravitino.listener.api.event.GetModelEvent; import org.apache.gravitino.listener.api.event.GetModelPreEvent; -import org.apache.gravitino.listener.api.event.GetModelVersionEvent; import org.apache.gravitino.listener.api.event.GetModelVersionPreEvent; -import org.apache.gravitino.listener.api.event.LinkModelVersionEvent; import org.apache.gravitino.listener.api.event.LinkModelVersionPreEvent; -import org.apache.gravitino.listener.api.event.ListModelEvent; import org.apache.gravitino.listener.api.event.ListModelPreEvent; -import org.apache.gravitino.listener.api.event.ListModelVersionsEvent; import org.apache.gravitino.listener.api.event.ListModelVersionsPreEvent; -import org.apache.gravitino.listener.api.event.RegisterModelEvent; import org.apache.gravitino.listener.api.event.RegisterModelPreEvent; import org.apache.gravitino.listener.api.info.ModelInfo; import org.apache.gravitino.listener.api.info.ModelVersionInfo; @@ -96,9 +88,7 @@ public Model registerModel(NameIdentifier ident, String comment, MapConcrete implementations of this class should provide additional details pertinent to the - * specific type of model operation being represented. - */ -public abstract class ModelEvent extends Event { - - /** - * Constructs a new ModelEvent with the specified user and model identifier. - * - * @param user The user responsible for triggering the model operation. - * @param identifier The identifier of the Model involved in the operation. This encapsulates - * details such as the metalake, catalog, schema, and Model name. - */ - protected ModelEvent(String user, NameIdentifier identifier) { - super(user, identifier); - } - - @Override - public OperationStatus operationStatus() { - return OperationStatus.SUCCESS; - } -} diff --git a/core/src/main/java/org/apache/gravitino/listener/api/event/RegisterModelEvent.java b/core/src/main/java/org/apache/gravitino/listener/api/event/RegisterModelEvent.java deleted file mode 100644 index 376c79e4267..00000000000 --- a/core/src/main/java/org/apache/gravitino/listener/api/event/RegisterModelEvent.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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.NameIdentifier; -import org.apache.gravitino.listener.api.info.ModelInfo; - -/** Represents an event triggered upon the successful registration of a model. */ -public class RegisterModelEvent extends ModelEvent { - private final ModelInfo registeredTopicInfo; - - /** - * Constructs an instance of RegisterModelEvent, capturing essential details about the successful - * registration of a model. - * - * @param user The user responsible for triggering the model operation. - * @param identifier The identifier of the Model involved in the operation. This encapsulates - * details such as the metalake, catalog, schema, and Model name. - * @param registeredTopicInfo The final state of the model post-creation. - */ - public RegisterModelEvent(String user, NameIdentifier identifier, ModelInfo registeredTopicInfo) { - super(user, identifier); - this.registeredTopicInfo = registeredTopicInfo; - } - - /** - * Retrieves the final state of the model as it was returned to the user after successful - * registration. - * - * @return the model information. - */ - public ModelInfo registeredModelInfo() { - return registeredTopicInfo; - } - - /** - * Returns the type of operation. - * - * @return the operation type. - */ - @Override - public OperationType operationType() { - return OperationType.REGISTER_MODEL; - } -} diff --git a/core/src/test/java/org/apache/gravitino/listener/api/event/TestModelEvent.java b/core/src/test/java/org/apache/gravitino/listener/api/event/TestModelEvent.java index 1587a426061..79acd346c9c 100644 --- a/core/src/test/java/org/apache/gravitino/listener/api/event/TestModelEvent.java +++ b/core/src/test/java/org/apache/gravitino/listener/api/event/TestModelEvent.java @@ -80,19 +80,6 @@ void init() { @Test void testRegisterModelEvent() { dispatcher.registerModel(existingIdentA, "commentA", ImmutableMap.of("color", "#FFFFFF")); - // validate event - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(RegisterModelEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.REGISTER_MODEL, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - - // validate model info - RegisterModelEvent registerModelEvent = (RegisterModelEvent) event; - ModelInfo modelInfo = registerModelEvent.registeredModelInfo(); - Assertions.assertEquals("modelA", modelInfo.getName()); - Assertions.assertEquals("commentA", modelInfo.getComment()); - Assertions.assertEquals(ImmutableMap.of("color", "#FFFFFF"), modelInfo.getProperties()); - Assertions.assertNull(modelInfo.modelVersions()); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -111,20 +98,7 @@ void testRegisterModelEvent() { @Test void testGetModelEvent() { - Model model = dispatcher.getModel(existingIdentA); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(GetModelEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.GET_MODEL, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - Assertions.assertNotNull(model); - - // validate model info - GetModelEvent getModelEvent = (GetModelEvent) event; - ModelInfo modelInfo = getModelEvent.getModelInfo(); - Assertions.assertEquals("modelA", modelInfo.getName()); - Assertions.assertEquals("commentA", modelInfo.getComment()); - Assertions.assertEquals(ImmutableMap.of("color", "#FFFFFF"), modelInfo.getProperties()); - Assertions.assertNull(modelInfo.modelVersions()); + dispatcher.getModel(existingIdentA); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -140,20 +114,7 @@ void testGetModelEvent() { @Test void testDeleteExistsModelEvent() { - // validate event - boolean isExists = dispatcher.deleteModel(existingIdentA); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(DeleteModelEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - Assertions.assertTrue(isExists); - - // validate model info - DeleteModelEvent deleteModelEvent = (DeleteModelEvent) event; - Assertions.assertEquals(existingIdentA, deleteModelEvent.identifier()); - Assertions.assertEquals(DeleteModelEvent.class, deleteModelEvent.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL, deleteModelEvent.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, deleteModelEvent.operationStatus()); + dispatcher.deleteModel(existingIdentA); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -170,19 +131,7 @@ void testDeleteExistsModelEvent() { @Test void testDeleteNotExistsModelEvent() { - // validate event - boolean isExists = dispatcher.deleteModel(notExistingIdent); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(DeleteModelEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL, event.operationType()); - Assertions.assertEquals(OperationStatus.UNPROCESSED, event.operationStatus()); - Assertions.assertFalse(isExists); - - // validate model info - DeleteModelEvent deleteModelEvent = (DeleteModelEvent) event; - Assertions.assertEquals(DeleteModelEvent.class, deleteModelEvent.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL, deleteModelEvent.operationType()); - Assertions.assertEquals(OperationStatus.UNPROCESSED, deleteModelEvent.operationStatus()); + dispatcher.deleteModel(notExistingIdent); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -198,18 +147,7 @@ void testDeleteNotExistsModelEvent() { @Test void testListModelEvent() { - // validate event - NameIdentifier[] nameIdentifiers = dispatcher.listModels(namespace); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(ListModelEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.LIST_MODEL, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - - ListModelEvent listModelEvent = (ListModelEvent) event; - Assertions.assertEquals(namespace, listModelEvent.namespace()); - Assertions.assertEquals(2, nameIdentifiers.length); - Assertions.assertEquals(existingIdentA, nameIdentifiers[0]); - Assertions.assertEquals(existingIdentB, nameIdentifiers[1]); + dispatcher.listModels(namespace); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -229,25 +167,6 @@ void testLinkModelVersionEvent() { new String[] {"aliasProduction"}, "versionInfoA", ImmutableMap.of("color", "#FFFFFF")); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(LinkModelVersionEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.LINK_MODEL_VERSION, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - - // validate model info - LinkModelVersionEvent linkModelVersionEvent = (LinkModelVersionEvent) event; - ModelInfo modelInfo = linkModelVersionEvent.linkModelVersionInfo(); - Assertions.assertEquals("modelA", modelInfo.getName()); - Assertions.assertEquals("commentA", modelInfo.getComment()); - Assertions.assertEquals(ImmutableMap.of("color", "#FFFFFF"), modelInfo.getProperties()); - - // validate model version info - ModelVersionInfo[] modelVersionInfos = modelInfo.modelVersions(); - Assertions.assertNotNull(modelVersionInfos); - Assertions.assertEquals(1, modelVersionInfos.length); - Assertions.assertEquals("versionInfoA", modelVersionInfos[0].getComment()); - Assertions.assertEquals("uriA", modelVersionInfos[0].getUri()); - Assertions.assertEquals("aliasProduction", modelVersionInfos[0].getAliases()[0]); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -274,25 +193,6 @@ void testLinkModelVersionEvent() { @Test void testGetModelVersionEventViaVersion() { dispatcher.getModelVersion(existingIdentA, 1); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(GetModelVersionEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.GET_MODEL_VERSION, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - - // validate model info - GetModelVersionEvent getModelVersionEvent = (GetModelVersionEvent) event; - ModelInfo modelInfo = getModelVersionEvent.getModelVersionInfo(); - Assertions.assertEquals("modelA", modelInfo.getName()); - Assertions.assertEquals("commentA", modelInfo.getComment()); - Assertions.assertEquals(ImmutableMap.of("color", "#FFFFFF"), modelInfo.getProperties()); - - // validate model version info - ModelVersionInfo[] modelVersionInfos = modelInfo.modelVersions(); - Assertions.assertNotNull(modelVersionInfos); - Assertions.assertEquals(1, modelVersionInfos.length); - Assertions.assertEquals("model version versionInfoA", modelVersionInfos[0].getComment()); - Assertions.assertEquals("uriA", modelVersionInfos[0].getUri()); - Assertions.assertEquals("aliasProduction", modelVersionInfos[0].getAliases()[0]); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -304,25 +204,6 @@ void testGetModelVersionEventViaVersion() { @Test void testGetModelVersionEventViaAlias() { dispatcher.getModelVersion(existingIdentB, "aliasTest"); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(GetModelVersionEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.GET_MODEL_VERSION, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - - // validate model info - GetModelVersionEvent getModelVersionEvent = (GetModelVersionEvent) event; - ModelInfo modelInfo = getModelVersionEvent.getModelVersionInfo(); - Assertions.assertEquals("modelB", modelInfo.getName()); - Assertions.assertEquals("commentB", modelInfo.getComment()); - Assertions.assertEquals(ImmutableMap.of("color", "#FFFFFF"), modelInfo.getProperties()); - - // validate model version info - ModelVersionInfo[] modelVersionInfos = modelInfo.modelVersions(); - Assertions.assertNotNull(modelVersionInfos); - Assertions.assertEquals(1, modelVersionInfos.length); - Assertions.assertEquals("model version versionInfoB", modelVersionInfos[0].getComment()); - Assertions.assertEquals("uriB", modelVersionInfos[0].getUri()); - Assertions.assertEquals("aliasTest", modelVersionInfos[0].getAliases()[0]); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -333,20 +214,7 @@ void testGetModelVersionEventViaAlias() { @Test void testDeleteModelVersionEventViaVersion() { - boolean isExists = dispatcher.deleteModelVersion(existingIdentA, 1); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(DeleteModelVersionEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL_VERSION, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - Assertions.assertTrue(isExists); - - // validate model info - DeleteModelVersionEvent deleteModelVersionEvent = (DeleteModelVersionEvent) event; - Assertions.assertEquals(existingIdentA, deleteModelVersionEvent.identifier()); - Assertions.assertEquals(DeleteModelVersionEvent.class, deleteModelVersionEvent.getClass()); - Assertions.assertEquals( - OperationType.DELETE_MODEL_VERSION, deleteModelVersionEvent.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, deleteModelVersionEvent.operationStatus()); + dispatcher.deleteModelVersion(existingIdentA, 1); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -357,20 +225,7 @@ void testDeleteModelVersionEventViaVersion() { @Test void testDeleteModelVersionEventViaAlias() { - boolean isExists = dispatcher.deleteModelVersion(existingIdentB, "aliasTest"); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(DeleteModelVersionEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL_VERSION, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - Assertions.assertTrue(isExists); - - // validate model info - DeleteModelVersionEvent deleteModelVersionEvent = (DeleteModelVersionEvent) event; - Assertions.assertEquals(existingIdentB, deleteModelVersionEvent.identifier()); - Assertions.assertEquals(DeleteModelVersionEvent.class, deleteModelVersionEvent.getClass()); - Assertions.assertEquals( - OperationType.DELETE_MODEL_VERSION, deleteModelVersionEvent.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, deleteModelVersionEvent.operationStatus()); + dispatcher.deleteModelVersion(existingIdentB, "aliasTest"); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -381,19 +236,7 @@ void testDeleteModelVersionEventViaAlias() { @Test void testDeleteModelVersionEventViaVersionNotExists() { - boolean isExists = dispatcher.deleteModelVersion(existingIdentA, 3); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(DeleteModelVersionEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.DELETE_MODEL_VERSION, event.operationType()); - Assertions.assertEquals(OperationStatus.UNPROCESSED, event.operationStatus()); - Assertions.assertFalse(isExists); - - // validate model info - DeleteModelVersionEvent deleteModelVersionEvent = (DeleteModelVersionEvent) event; - Assertions.assertEquals(DeleteModelVersionEvent.class, deleteModelVersionEvent.getClass()); - Assertions.assertEquals( - OperationType.DELETE_MODEL_VERSION, deleteModelVersionEvent.operationType()); - Assertions.assertEquals(OperationStatus.UNPROCESSED, deleteModelVersionEvent.operationStatus()); + dispatcher.deleteModelVersion(existingIdentA, 3); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent(); @@ -404,22 +247,7 @@ void testDeleteModelVersionEventViaVersionNotExists() { @Test void testListModelVersionsEvent() { - int[] versions = dispatcher.listModelVersions(existingIdentA); - Event event = dummyEventListener.popPostEvent(); - Assertions.assertEquals(ListModelVersionsEvent.class, event.getClass()); - Assertions.assertEquals(OperationType.LIST_MODEL_VERSIONS, event.operationType()); - Assertions.assertEquals(OperationStatus.SUCCESS, event.operationStatus()); - Assertions.assertEquals(2, versions.length); - Assertions.assertEquals(1, versions[0]); - Assertions.assertEquals(2, versions[1]); - - // validate model info - ListModelVersionsEvent listModelVersionsEvent = (ListModelVersionsEvent) event; - ModelInfo modelInfo = listModelVersionsEvent.listModelVersionInfo(); - Assertions.assertEquals("modelA", modelInfo.getName()); - Assertions.assertEquals("commentA", modelInfo.getComment()); - Assertions.assertEquals(ImmutableMap.of("color", "#FFFFFF"), modelInfo.getProperties()); - Assertions.assertNull(modelInfo.modelVersions()); + dispatcher.listModelVersions(existingIdentA); // validate pre-event PreEvent preEvent = dummyEventListener.popPreEvent();