This is an automated email from the ASF dual-hosted git repository.
fanng 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 13c92f9b7 [#5438] feat(iceberg): add view event for Iceberg REST
server (#5584)
13c92f9b7 is described below
commit 13c92f9b7843a5f0aae08f57261dcf57711c6fa3
Author: JUN <[email protected]>
AuthorDate: Sat Nov 16 21:55:35 2024 +0800
[#5438] feat(iceberg): add view event for Iceberg REST server (#5584)
### What changes were proposed in this pull request?
Add view event for Iceberg REST server
### Why are the changes needed?
Close: #5438
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
unit test
---
.../org/apache/gravitino/iceberg/RESTService.java | 8 +
.../dispatcher/IcebergViewEventDispatcher.java | 210 +++++++++++++++++++++
.../dispatcher/IcebergViewOperationDispatcher.java | 103 ++++++++++
.../dispatcher/IcebergViewOperationExecutor.java | 90 +++++++++
.../service/rest/IcebergViewOperations.java | 121 +++++++++---
.../service/rest/IcebergViewRenameOperations.java | 35 +++-
.../listener/api/event/IcebergCreateViewEvent.java | 54 ++++++
...ent.java => IcebergCreateViewFailureEvent.java} | 23 ++-
...reEvent.java => IcebergCreateViewPreEvent.java} | 20 +-
...FailureEvent.java => IcebergDropViewEvent.java} | 11 +-
...Event.java => IcebergDropViewFailureEvent.java} | 11 +-
...lureEvent.java => IcebergDropViewPreEvent.java} | 11 +-
...FailureEvent.java => IcebergListViewEvent.java} | 16 +-
...Event.java => IcebergListViewFailureEvent.java} | 10 +-
...lureEvent.java => IcebergListViewPreEvent.java} | 10 +-
...FailureEvent.java => IcebergLoadViewEvent.java} | 22 ++-
...Event.java => IcebergLoadViewFailureEvent.java} | 10 +-
...lureEvent.java => IcebergLoadViewPreEvent.java} | 10 +-
...ilureEvent.java => IcebergRenameViewEvent.java} | 22 ++-
...ent.java => IcebergRenameViewFailureEvent.java} | 21 ++-
...reEvent.java => IcebergRenameViewPreEvent.java} | 20 +-
.../api/event/IcebergReplaceViewEvent.java | 54 ++++++
...nt.java => IcebergReplaceViewFailureEvent.java} | 23 ++-
...eEvent.java => IcebergReplaceViewPreEvent.java} | 20 +-
.../api/event/IcebergTableFailureEvent.java | 2 +-
...ableFailureEvent.java => IcebergViewEvent.java} | 12 +-
...ilureEvent.java => IcebergViewExistsEvent.java} | 19 +-
...ent.java => IcebergViewExistsFailureEvent.java} | 10 +-
...reEvent.java => IcebergViewExistsPreEvent.java} | 10 +-
...lureEvent.java => IcebergViewFailureEvent.java} | 10 +-
...eFailureEvent.java => IcebergViewPreEvent.java} | 9 +-
.../iceberg/service/rest/IcebergRestTestUtil.java | 9 +
.../service/rest/MockIcebergViewOperations.java} | 24 ++-
.../rest/MockIcebergViewRenameOperations.java} | 23 ++-
.../service/rest/TestIcebergViewOperations.java | 83 +++++++-
35 files changed, 975 insertions(+), 171 deletions(-)
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/RESTService.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/RESTService.java
index b301204bd..d8fdc26f3 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/RESTService.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/RESTService.java
@@ -31,6 +31,9 @@ import
org.apache.gravitino.iceberg.service.IcebergObjectMapperProvider;
import
org.apache.gravitino.iceberg.service.dispatcher.IcebergTableEventDispatcher;
import
org.apache.gravitino.iceberg.service.dispatcher.IcebergTableOperationDispatcher;
import
org.apache.gravitino.iceberg.service.dispatcher.IcebergTableOperationExecutor;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewEventDispatcher;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationDispatcher;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationExecutor;
import org.apache.gravitino.iceberg.service.metrics.IcebergMetricsManager;
import org.apache.gravitino.iceberg.service.provider.IcebergConfigProvider;
import
org.apache.gravitino.iceberg.service.provider.IcebergConfigProviderFactory;
@@ -90,6 +93,10 @@ public class RESTService implements
GravitinoAuxiliaryService {
new IcebergTableOperationExecutor(icebergCatalogWrapperManager);
IcebergTableEventDispatcher icebergTableEventDispatcher =
new IcebergTableEventDispatcher(icebergTableOperationExecutor,
eventBus, metalakeName);
+ IcebergViewOperationExecutor icebergViewOperationExecutor =
+ new IcebergViewOperationExecutor(icebergCatalogWrapperManager);
+ IcebergViewEventDispatcher icebergViewEventDispatcher =
+ new IcebergViewEventDispatcher(icebergViewOperationExecutor, eventBus,
metalakeName);
config.register(
new AbstractBinder() {
@@ -98,6 +105,7 @@ public class RESTService implements
GravitinoAuxiliaryService {
bind(icebergCatalogWrapperManager).to(IcebergCatalogWrapperManager.class).ranked(1);
bind(icebergMetricsManager).to(IcebergMetricsManager.class).ranked(1);
bind(icebergTableEventDispatcher).to(IcebergTableOperationDispatcher.class).ranked(1);
+
bind(icebergViewEventDispatcher).to(IcebergViewOperationDispatcher.class).ranked(1);
}
});
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewEventDispatcher.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewEventDispatcher.java
new file mode 100644
index 000000000..89137ea91
--- /dev/null
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewEventDispatcher.java
@@ -0,0 +1,210 @@
+/*
+ * 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.iceberg.service.dispatcher;
+
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.gravitino.listener.EventBus;
+import org.apache.gravitino.listener.api.event.IcebergCreateViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergCreateViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergCreateViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergListViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergListViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergListViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergReplaceViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergReplaceViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergReplaceViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergRequestContext;
+import org.apache.gravitino.listener.api.event.IcebergViewExistsEvent;
+import org.apache.gravitino.listener.api.event.IcebergViewExistsFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergViewExistsPreEvent;
+import org.apache.iceberg.catalog.Namespace;
+import org.apache.iceberg.catalog.TableIdentifier;
+import org.apache.iceberg.rest.requests.CreateViewRequest;
+import org.apache.iceberg.rest.requests.RenameTableRequest;
+import org.apache.iceberg.rest.requests.UpdateTableRequest;
+import org.apache.iceberg.rest.responses.ListTablesResponse;
+import org.apache.iceberg.rest.responses.LoadViewResponse;
+
+/**
+ * {@code IcebergViewEventDispatcher} is a decorator for {@link
IcebergViewOperationExecutor} that
+ * not only delegates view operations to the underlying dispatcher but also
dispatches corresponding
+ * events to an {@link EventBus}.
+ */
+public class IcebergViewEventDispatcher implements
IcebergViewOperationDispatcher {
+
+ private IcebergViewOperationDispatcher icebergViewOperationDispatcher;
+ private EventBus eventBus;
+ private String metalakeName;
+
+ public IcebergViewEventDispatcher(
+ IcebergViewOperationDispatcher icebergViewOperationDispatcher,
+ EventBus eventBus,
+ String metalakeName) {
+ this.icebergViewOperationDispatcher = icebergViewOperationDispatcher;
+ this.eventBus = eventBus;
+ this.metalakeName = metalakeName;
+ }
+
+ @Override
+ public LoadViewResponse createView(
+ IcebergRequestContext context, Namespace namespace, CreateViewRequest
createViewRequest) {
+ TableIdentifier viewIdentifier = TableIdentifier.of(namespace,
createViewRequest.name());
+ NameIdentifier nameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(
+ metalakeName, context.catalogName(), viewIdentifier);
+ eventBus.dispatchEvent(
+ new IcebergCreateViewPreEvent(context, nameIdentifier,
createViewRequest));
+ LoadViewResponse loadViewResponse;
+ try {
+ loadViewResponse =
+ icebergViewOperationDispatcher.createView(context, namespace,
createViewRequest);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergCreateViewFailureEvent(context, nameIdentifier,
createViewRequest, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergCreateViewEvent(context, nameIdentifier, createViewRequest,
loadViewResponse));
+ return loadViewResponse;
+ }
+
+ @Override
+ public LoadViewResponse replaceView(
+ IcebergRequestContext context,
+ TableIdentifier viewIdentifier,
+ UpdateTableRequest replaceViewRequest) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(
+ metalakeName, context.catalogName(), viewIdentifier);
+ eventBus.dispatchEvent(
+ new IcebergReplaceViewPreEvent(context, gravitinoNameIdentifier,
replaceViewRequest));
+ LoadViewResponse loadViewResponse;
+ try {
+ loadViewResponse =
+ icebergViewOperationDispatcher.replaceView(context, viewIdentifier,
replaceViewRequest);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergReplaceViewFailureEvent(
+ context, gravitinoNameIdentifier, replaceViewRequest, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergReplaceViewEvent(
+ context, gravitinoNameIdentifier, replaceViewRequest,
loadViewResponse));
+ return loadViewResponse;
+ }
+
+ @Override
+ public void dropView(IcebergRequestContext context, TableIdentifier
viewIdentifier) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(
+ metalakeName, context.catalogName(), viewIdentifier);
+ eventBus.dispatchEvent(new IcebergDropViewPreEvent(context,
gravitinoNameIdentifier));
+ try {
+ icebergViewOperationDispatcher.dropView(context, viewIdentifier);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(new IcebergDropViewFailureEvent(context,
gravitinoNameIdentifier, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(new IcebergDropViewEvent(context,
gravitinoNameIdentifier));
+ }
+
+ @Override
+ public LoadViewResponse loadView(IcebergRequestContext context,
TableIdentifier viewIdentifier) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(
+ metalakeName, context.catalogName(), viewIdentifier);
+ eventBus.dispatchEvent(new IcebergLoadViewPreEvent(context,
gravitinoNameIdentifier));
+ LoadViewResponse loadViewResponse;
+ try {
+ loadViewResponse = icebergViewOperationDispatcher.loadView(context,
viewIdentifier);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(new IcebergLoadViewFailureEvent(context,
gravitinoNameIdentifier, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergLoadViewEvent(context, gravitinoNameIdentifier,
loadViewResponse));
+ return loadViewResponse;
+ }
+
+ @Override
+ public ListTablesResponse listView(IcebergRequestContext context, Namespace
namespace) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName,
context.catalogName(), namespace);
+ eventBus.dispatchEvent(new IcebergListViewPreEvent(context,
gravitinoNameIdentifier));
+ ListTablesResponse listViewsResponse;
+ try {
+ listViewsResponse = icebergViewOperationDispatcher.listView(context,
namespace);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(new IcebergListViewFailureEvent(context,
gravitinoNameIdentifier, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(new IcebergListViewEvent(context,
gravitinoNameIdentifier));
+ return listViewsResponse;
+ }
+
+ @Override
+ public boolean viewExists(IcebergRequestContext context, TableIdentifier
viewIdentifier) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(
+ metalakeName, context.catalogName(), viewIdentifier);
+ eventBus.dispatchEvent(new IcebergViewExistsPreEvent(context,
gravitinoNameIdentifier));
+ boolean isExists;
+ try {
+ isExists = icebergViewOperationDispatcher.viewExists(context,
viewIdentifier);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergViewExistsFailureEvent(context, gravitinoNameIdentifier,
e));
+ throw e;
+ }
+ eventBus.dispatchEvent(new IcebergViewExistsEvent(context,
gravitinoNameIdentifier, isExists));
+ return isExists;
+ }
+
+ @Override
+ public void renameView(IcebergRequestContext context, RenameTableRequest
renameViewRequest) {
+ TableIdentifier sourceView = renameViewRequest.source();
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(
+ metalakeName, context.catalogName(), sourceView);
+ eventBus.dispatchEvent(
+ new IcebergRenameViewPreEvent(context, gravitinoNameIdentifier,
renameViewRequest));
+ try {
+ icebergViewOperationDispatcher.renameView(context, renameViewRequest);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergRenameViewFailureEvent(
+ context, gravitinoNameIdentifier, renameViewRequest, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergRenameViewEvent(context, gravitinoNameIdentifier,
renameViewRequest));
+ }
+}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewOperationDispatcher.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewOperationDispatcher.java
new file mode 100644
index 000000000..2f084a744
--- /dev/null
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewOperationDispatcher.java
@@ -0,0 +1,103 @@
+/*
+ * 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.iceberg.service.dispatcher;
+
+import org.apache.gravitino.listener.api.event.IcebergRequestContext;
+import org.apache.iceberg.catalog.Namespace;
+import org.apache.iceberg.catalog.TableIdentifier;
+import org.apache.iceberg.rest.requests.CreateViewRequest;
+import org.apache.iceberg.rest.requests.RenameTableRequest;
+import org.apache.iceberg.rest.requests.UpdateTableRequest;
+import org.apache.iceberg.rest.responses.ListTablesResponse;
+import org.apache.iceberg.rest.responses.LoadViewResponse;
+
+/**
+ * The {@code IcebergViewOperationDispatcher} interface defines the public API
for managing Iceberg
+ * views.
+ */
+public interface IcebergViewOperationDispatcher {
+
+ /**
+ * Creates a new Iceberg view.
+ *
+ * @param context Iceberg REST request context information.
+ * @param namespace The namespace within which the view should be created.
+ * @param createViewRequest The request object containing the details for
creating the view.
+ * @return A {@link LoadViewResponse} object containing the result of the
operation.
+ */
+ LoadViewResponse createView(
+ IcebergRequestContext context, Namespace namespace, CreateViewRequest
createViewRequest);
+
+ /**
+ * Updates an Iceberg view.
+ *
+ * @param context Iceberg REST request context information.
+ * @param viewIdentifier The Iceberg view identifier.
+ * @param replaceViewRequest The request object containing the details for
updating the view.
+ * @return A {@link LoadViewResponse} object containing the result of the
operation.
+ */
+ LoadViewResponse replaceView(
+ IcebergRequestContext context,
+ TableIdentifier viewIdentifier,
+ UpdateTableRequest replaceViewRequest);
+
+ /**
+ * Drops an Iceberg view.
+ *
+ * @param context Iceberg REST request context information.
+ * @param viewIdentifier The Iceberg view identifier.
+ */
+ void dropView(IcebergRequestContext context, TableIdentifier viewIdentifier);
+
+ /**
+ * Loads an Iceberg view.
+ *
+ * @param context Iceberg REST request context information.
+ * @param viewIdentifier The Iceberg view identifier.
+ * @return A {@link LoadViewResponse} object containing the result of the
operation.
+ */
+ LoadViewResponse loadView(IcebergRequestContext context, TableIdentifier
viewIdentifier);
+
+ /**
+ * Lists Iceberg views.
+ *
+ * @param context Iceberg REST request context information.
+ * @param namespace The Iceberg namespace.
+ * @return A {@link ListTablesResponse} object containing the list of view
identifiers.
+ */
+ ListTablesResponse listView(IcebergRequestContext context, Namespace
namespace);
+
+ /**
+ * Check whether an Iceberg view exists.
+ *
+ * @param context Iceberg REST request context information.
+ * @param viewIdentifier The Iceberg view identifier.
+ * @return Whether view exists.
+ */
+ boolean viewExists(IcebergRequestContext context, TableIdentifier
viewIdentifier);
+
+ /**
+ * Rename an Iceberg view.
+ *
+ * @param context Iceberg REST request context information.
+ * @param renameViewRequest Rename view request information.
+ */
+ void renameView(IcebergRequestContext context, RenameTableRequest
renameViewRequest);
+}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewOperationExecutor.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewOperationExecutor.java
new file mode 100644
index 000000000..308c20c43
--- /dev/null
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergViewOperationExecutor.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.iceberg.service.dispatcher;
+
+import org.apache.gravitino.iceberg.service.IcebergCatalogWrapperManager;
+import org.apache.gravitino.listener.api.event.IcebergRequestContext;
+import org.apache.iceberg.catalog.Namespace;
+import org.apache.iceberg.catalog.TableIdentifier;
+import org.apache.iceberg.rest.requests.CreateViewRequest;
+import org.apache.iceberg.rest.requests.RenameTableRequest;
+import org.apache.iceberg.rest.requests.UpdateTableRequest;
+import org.apache.iceberg.rest.responses.ListTablesResponse;
+import org.apache.iceberg.rest.responses.LoadViewResponse;
+
+public class IcebergViewOperationExecutor implements
IcebergViewOperationDispatcher {
+
+ private IcebergCatalogWrapperManager icebergCatalogWrapperManager;
+
+ public IcebergViewOperationExecutor(IcebergCatalogWrapperManager
icebergCatalogWrapperManager) {
+ this.icebergCatalogWrapperManager = icebergCatalogWrapperManager;
+ }
+
+ @Override
+ public LoadViewResponse createView(
+ IcebergRequestContext context, Namespace namespace, CreateViewRequest
createViewRequest) {
+ return icebergCatalogWrapperManager
+ .getCatalogWrapper(context.catalogName())
+ .createView(namespace, createViewRequest);
+ }
+
+ @Override
+ public LoadViewResponse replaceView(
+ IcebergRequestContext context,
+ TableIdentifier viewIdentifier,
+ UpdateTableRequest replaceViewRequest) {
+ return icebergCatalogWrapperManager
+ .getCatalogWrapper(context.catalogName())
+ .updateView(viewIdentifier, replaceViewRequest);
+ }
+
+ @Override
+ public void dropView(IcebergRequestContext context, TableIdentifier
viewIdentifier) {
+
icebergCatalogWrapperManager.getCatalogWrapper(context.catalogName()).dropView(viewIdentifier);
+ }
+
+ @Override
+ public LoadViewResponse loadView(IcebergRequestContext context,
TableIdentifier viewIdentifier) {
+ return icebergCatalogWrapperManager
+ .getCatalogWrapper(context.catalogName())
+ .loadView(viewIdentifier);
+ }
+
+ @Override
+ public ListTablesResponse listView(IcebergRequestContext context, Namespace
namespace) {
+ return icebergCatalogWrapperManager
+ .getCatalogWrapper(context.catalogName())
+ .listView(namespace);
+ }
+
+ @Override
+ public boolean viewExists(IcebergRequestContext context, TableIdentifier
viewIdentifier) {
+ return icebergCatalogWrapperManager
+ .getCatalogWrapper(context.catalogName())
+ .existView(viewIdentifier);
+ }
+
+ @Override
+ public void renameView(IcebergRequestContext context, RenameTableRequest
renameViewRequest) {
+ icebergCatalogWrapperManager
+ .getCatalogWrapper(context.catalogName())
+ .renameView(renameViewRequest);
+ }
+}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewOperations.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewOperations.java
index 3e46257e2..26c466504 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewOperations.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewOperations.java
@@ -20,6 +20,9 @@ package org.apache.gravitino.iceberg.service.rest;
import com.codahale.metrics.annotation.ResponseMetered;
import com.codahale.metrics.annotation.Timed;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.annotations.VisibleForTesting;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
@@ -33,30 +36,37 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.gravitino.iceberg.service.IcebergCatalogWrapperManager;
+import org.apache.gravitino.iceberg.service.IcebergObjectMapper;
import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationDispatcher;
+import org.apache.gravitino.listener.api.event.IcebergRequestContext;
import org.apache.gravitino.metrics.MetricNames;
+import org.apache.iceberg.catalog.Namespace;
import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.rest.RESTUtil;
import org.apache.iceberg.rest.requests.CreateViewRequest;
import org.apache.iceberg.rest.requests.UpdateTableRequest;
import org.apache.iceberg.rest.responses.ListTablesResponse;
import org.apache.iceberg.rest.responses.LoadViewResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Path("/v1/{prefix:([^/]*/)?}namespaces/{namespace}/views")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class IcebergViewOperations {
- private IcebergCatalogWrapperManager icebergCatalogWrapperManager;
+ private static final Logger LOG =
LoggerFactory.getLogger(IcebergViewOperations.class);
- @SuppressWarnings("UnusedVariable")
- @Context
- private HttpServletRequest httpRequest;
+ private ObjectMapper icebergObjectMapper;
+ private IcebergViewOperationDispatcher viewOperationDispatcher;
+
+ @Context private HttpServletRequest httpRequest;
@Inject
- public IcebergViewOperations(IcebergCatalogWrapperManager
icebergCatalogWrapperManager) {
- this.icebergCatalogWrapperManager = icebergCatalogWrapperManager;
+ public IcebergViewOperations(IcebergViewOperationDispatcher
viewOperationDispatcher) {
+ this.viewOperationDispatcher = viewOperationDispatcher;
+ this.icebergObjectMapper = IcebergObjectMapper.getInstance();
}
@GET
@@ -65,9 +75,12 @@ public class IcebergViewOperations {
@ResponseMetered(name = "list-view", absolute = true)
public Response listView(
@PathParam("prefix") String prefix, @PathParam("namespace") String
namespace) {
- ListTablesResponse response =
-
icebergCatalogWrapperManager.getOps(prefix).listView(RESTUtil.decodeNamespace(namespace));
- return IcebergRestUtils.ok(response);
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info("List Iceberg views, catalog: {}, namespace: {}", catalogName,
icebergNS);
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ ListTablesResponse listTablesResponse =
viewOperationDispatcher.listView(context, icebergNS);
+ return IcebergRestUtils.ok(listTablesResponse);
}
@POST
@@ -77,12 +90,19 @@ public class IcebergViewOperations {
public Response createView(
@PathParam("prefix") String prefix,
@PathParam("namespace") String namespace,
- CreateViewRequest request) {
- LoadViewResponse response =
- icebergCatalogWrapperManager
- .getOps(prefix)
- .createView(RESTUtil.decodeNamespace(namespace), request);
- return IcebergRestUtils.ok(response);
+ CreateViewRequest createViewRequest) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info(
+ "Create Iceberg view, catalog: {}, namespace: {}, createViewRequest:
{}",
+ catalogName,
+ icebergNS,
+ createViewRequest);
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ LoadViewResponse loadViewResponse =
+ viewOperationDispatcher.createView(context, icebergNS,
createViewRequest);
+
+ return IcebergRestUtils.ok(loadViewResponse);
}
@GET
@@ -94,10 +114,15 @@ public class IcebergViewOperations {
@PathParam("prefix") String prefix,
@PathParam("namespace") String namespace,
@PathParam("view") String view) {
- TableIdentifier viewIdentifier =
TableIdentifier.of(RESTUtil.decodeNamespace(namespace), view);
- LoadViewResponse response =
- icebergCatalogWrapperManager.getOps(prefix).loadView(viewIdentifier);
- return IcebergRestUtils.ok(response);
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info(
+ "Load Iceberg view, catalog: {}, namespace: {}, view: {}",
catalogName, icebergNS, view);
+
+ TableIdentifier viewIdentifier = TableIdentifier.of(icebergNS, view);
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ LoadViewResponse loadViewResponse =
viewOperationDispatcher.loadView(context, viewIdentifier);
+ return IcebergRestUtils.ok(loadViewResponse);
}
@POST
@@ -109,11 +134,20 @@ public class IcebergViewOperations {
@PathParam("prefix") String prefix,
@PathParam("namespace") String namespace,
@PathParam("view") String view,
- UpdateTableRequest request) {
- TableIdentifier viewIdentifier =
TableIdentifier.of(RESTUtil.decodeNamespace(namespace), view);
- LoadViewResponse response =
- icebergCatalogWrapperManager.getOps(prefix).updateView(viewIdentifier,
request);
- return IcebergRestUtils.ok(response);
+ UpdateTableRequest replaceViewRequest) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info(
+ "Replace Iceberg view, catalog: {}, namespace: {}, table: {},
replaceViewRequest: {}",
+ catalogName,
+ icebergNS,
+ view,
+ SerializeReplaceViewRequest(replaceViewRequest));
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ TableIdentifier viewIdentifier = TableIdentifier.of(icebergNS, view);
+ LoadViewResponse loadViewResponse =
+ viewOperationDispatcher.replaceView(context, viewIdentifier,
replaceViewRequest);
+ return IcebergRestUtils.ok(loadViewResponse);
}
@DELETE
@@ -125,8 +159,13 @@ public class IcebergViewOperations {
@PathParam("prefix") String prefix,
@PathParam("namespace") String namespace,
@PathParam("view") String view) {
- TableIdentifier viewIdentifier =
TableIdentifier.of(RESTUtil.decodeNamespace(namespace), view);
- icebergCatalogWrapperManager.getOps(prefix).dropView(viewIdentifier);
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info(
+ "Drop Iceberg view, catalog: {}, namespace: {}, table: {}",
catalogName, icebergNS, view);
+ TableIdentifier viewIdentifier = TableIdentifier.of(namespace, view);
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ viewOperationDispatcher.dropView(context, viewIdentifier);
return IcebergRestUtils.noContent();
}
@@ -139,11 +178,35 @@ public class IcebergViewOperations {
@PathParam("prefix") String prefix,
@PathParam("namespace") String namespace,
@PathParam("view") String view) {
- TableIdentifier tableIdentifier =
TableIdentifier.of(RESTUtil.decodeNamespace(namespace), view);
- if
(icebergCatalogWrapperManager.getOps(prefix).existView(tableIdentifier)) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info(
+ "Check Iceberg view exists, catalog: {}, namespace: {}, table: {}",
+ catalogName,
+ icebergNS,
+ view);
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ TableIdentifier viewIdentifier = TableIdentifier.of(icebergNS, view);
+ boolean exists = viewOperationDispatcher.viewExists(context,
viewIdentifier);
+ if (exists) {
return IcebergRestUtils.noContent();
} else {
return IcebergRestUtils.notExists();
}
}
+
+ // HTTP request is null in Jersey test, override with a mock request when
testing.
+ @VisibleForTesting
+ HttpServletRequest httpServletRequest() {
+ return httpRequest;
+ }
+
+ private String SerializeReplaceViewRequest(UpdateTableRequest
replaceViewRequest) {
+ try {
+ return icebergObjectMapper.writeValueAsString(replaceViewRequest);
+ } catch (JsonProcessingException e) {
+ LOG.warn("Serialize update view request failed", e);
+ return replaceViewRequest.toString();
+ }
+ }
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewRenameOperations.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewRenameOperations.java
index 128689d33..4c6f70608 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewRenameOperations.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergViewRenameOperations.java
@@ -20,6 +20,7 @@ package org.apache.gravitino.iceberg.service.rest;
import com.codahale.metrics.annotation.ResponseMetered;
import com.codahale.metrics.annotation.Timed;
+import com.google.common.annotations.VisibleForTesting;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
@@ -30,33 +31,49 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.gravitino.iceberg.service.IcebergCatalogWrapperManager;
import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationDispatcher;
+import org.apache.gravitino.listener.api.event.IcebergRequestContext;
import org.apache.gravitino.metrics.MetricNames;
import org.apache.iceberg.rest.requests.RenameTableRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Path("/v1/{prefix:([^/]*/)?}views/rename")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class IcebergViewRenameOperations {
+ private static final Logger LOG =
LoggerFactory.getLogger(IcebergViewRenameOperations.class);
- @SuppressWarnings("UnusedVariable")
- @Context
- private HttpServletRequest httpRequest;
+ @Context private HttpServletRequest httpRequest;
- private IcebergCatalogWrapperManager icebergCatalogWrapperManager;
+ private IcebergViewOperationDispatcher viewOperationDispatcher;
@Inject
- public IcebergViewRenameOperations(IcebergCatalogWrapperManager
icebergCatalogWrapperManager) {
- this.icebergCatalogWrapperManager = icebergCatalogWrapperManager;
+ public IcebergViewRenameOperations(IcebergViewOperationDispatcher
viewOperationDispatcher) {
+ this.viewOperationDispatcher = viewOperationDispatcher;
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Timed(name = "rename-view." + MetricNames.HTTP_PROCESS_DURATION, absolute =
true)
@ResponseMetered(name = "rename-view", absolute = true)
- public Response renameView(@PathParam("prefix") String prefix,
RenameTableRequest request) {
- icebergCatalogWrapperManager.getOps(prefix).renameView(request);
+ public Response renameView(
+ @PathParam("prefix") String prefix, RenameTableRequest
renameViewRequest) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ LOG.info(
+ "Rename Iceberg view, catalog: {}, source: {}, destination: {}.",
+ catalogName,
+ renameViewRequest.source(),
+ renameViewRequest.destination());
+ IcebergRequestContext context = new
IcebergRequestContext(httpServletRequest(), catalogName);
+ viewOperationDispatcher.renameView(context, renameViewRequest);
return IcebergRestUtils.noContent();
}
+
+ // HTTP request is null in Jersey test, override with a mock request when
testing.
+ @VisibleForTesting
+ HttpServletRequest httpServletRequest() {
+ return httpRequest;
+ }
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewEvent.java
new file mode 100644
index 000000000..ff9f306c2
--- /dev/null
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewEvent.java
@@ -0,0 +1,54 @@
+/*
+ * 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.annotation.DeveloperApi;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.iceberg.rest.requests.CreateViewRequest;
+import org.apache.iceberg.rest.responses.LoadViewResponse;
+
+/** Represent an event after creating Iceberg view successfully. */
+@DeveloperApi
+public class IcebergCreateViewEvent extends IcebergViewEvent {
+
+ private final CreateViewRequest createViewRequest;
+ private final LoadViewResponse loadViewResponse;
+
+ public IcebergCreateViewEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ CreateViewRequest createViewRequest,
+ LoadViewResponse loadViewResponse) {
+ super(icebergRequestContext, viewIdentifier);
+ this.createViewRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(createViewRequest,
CreateViewRequest.class);
+ this.loadViewResponse =
+ IcebergRestUtils.cloneIcebergRESTObject(loadViewResponse,
LoadViewResponse.class);
+ }
+
+ public CreateViewRequest createViewRequest() {
+ return createViewRequest;
+ }
+
+ public LoadViewResponse loadViewResponse() {
+ return loadViewResponse;
+ }
+}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewFailureEvent.java
similarity index 56%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewFailureEvent.java
index 4e2187f1a..4da73ed18 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewFailureEvent.java
@@ -21,12 +21,25 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.iceberg.rest.requests.CreateViewRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when creating Iceberg view failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergCreateViewFailureEvent extends IcebergViewFailureEvent {
+ private final CreateViewRequest createViewRequest;
+
+ public IcebergCreateViewFailureEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ CreateViewRequest createViewRequest,
+ Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
+ this.createViewRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(createViewRequest,
CreateViewRequest.class);
+ }
+
+ public CreateViewRequest createViewRequest() {
+ return createViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewPreEvent.java
similarity index 62%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewPreEvent.java
index 4e2187f1a..00eea5db7 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateViewPreEvent.java
@@ -21,12 +21,22 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.iceberg.rest.requests.CreateViewRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a pre event before creating Iceberg view. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergCreateViewPreEvent extends IcebergViewPreEvent {
+ private final CreateViewRequest createViewRequest;
+
+ public IcebergCreateViewPreEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ CreateViewRequest createViewRequest) {
+ super(icebergRequestContext, viewIdentifier);
+ this.createViewRequest = createViewRequest;
+ }
+
+ public CreateViewRequest createViewRequest() {
+ return createViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewEvent.java
index 4e2187f1a..7a17ca1f4 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewEvent.java
@@ -22,11 +22,12 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent an event after dropping Iceberg view successfully. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergDropViewEvent extends IcebergViewEvent {
+
+ public IcebergDropViewEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewFailureEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewFailureEvent.java
index 4e2187f1a..99502160b 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewFailureEvent.java
@@ -22,11 +22,12 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when dropping Iceberg view failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergDropViewFailureEvent extends IcebergViewFailureEvent {
+
+ public IcebergDropViewFailureEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier, Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewPreEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewPreEvent.java
index 4e2187f1a..163a51e9b 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropViewPreEvent.java
@@ -22,11 +22,12 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a pre event before dropping Iceberg view. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergDropViewPreEvent extends IcebergViewPreEvent {
+
+ public IcebergDropViewPreEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewEvent.java
similarity index 70%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewEvent.java
index 4e2187f1a..6bc7d83ac 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewEvent.java
@@ -22,11 +22,17 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/**
+ * Represent an event after listing Iceberg view successfully.
+ *
+ * <p>To optimize memory usage and avoid the potential overhead associated
with storing a large
+ * number of views directly within the ListViewEvent, the actual views listed
are not maintained in
+ * this event.
+ */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergListViewEvent extends IcebergViewEvent {
+ public IcebergListViewEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewFailureEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewFailureEvent.java
index 4e2187f1a..400e6b430 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewFailureEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when listing Iceberg view failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergListViewFailureEvent extends IcebergViewFailureEvent {
+ public IcebergListViewFailureEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier, Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewPreEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewPreEvent.java
index 4e2187f1a..f0bebca38 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListViewPreEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a pre event before listing Iceberg view. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergListViewPreEvent extends IcebergViewPreEvent {
+ public IcebergListViewPreEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewEvent.java
similarity index 58%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewEvent.java
index 4e2187f1a..5f22fe1b6 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewEvent.java
@@ -21,12 +21,24 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.iceberg.rest.responses.LoadViewResponse;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent an event after loading Iceberg view successfully. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergLoadViewEvent extends IcebergViewEvent {
+ private final LoadViewResponse loadViewResponse;
+
+ public IcebergLoadViewEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ LoadViewResponse loadViewResponse) {
+ super(icebergRequestContext, viewIdentifier);
+ this.loadViewResponse =
+ IcebergRestUtils.cloneIcebergRESTObject(loadViewResponse,
LoadViewResponse.class);
+ }
+
+ public LoadViewResponse loadViewResponse() {
+ return loadViewResponse;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewFailureEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewFailureEvent.java
index 4e2187f1a..493c9a3c1 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewFailureEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when loading Iceberg view failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergLoadViewFailureEvent extends IcebergViewFailureEvent {
+ public IcebergLoadViewFailureEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier, Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewPreEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewPreEvent.java
index 4e2187f1a..5970edc69 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadViewPreEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a pre event before loading Iceberg view. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergLoadViewPreEvent extends IcebergViewPreEvent {
+ public IcebergLoadViewPreEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewEvent.java
similarity index 57%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewEvent.java
index 4e2187f1a..985a35592 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewEvent.java
@@ -21,12 +21,24 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.iceberg.rest.requests.RenameTableRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent an event after rename Iceberg view successfully. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergRenameViewEvent extends IcebergViewEvent {
+ private final RenameTableRequest renameViewRequest;
+
+ public IcebergRenameViewEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ RenameTableRequest renameViewRequest) {
+ super(icebergRequestContext, viewIdentifier);
+ this.renameViewRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(renameViewRequest,
RenameTableRequest.class);
+ }
+
+ public RenameTableRequest renameViewRequest() {
+ return renameViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewFailureEvent.java
similarity index 61%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewFailureEvent.java
index 4e2187f1a..f5b943fab 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewFailureEvent.java
@@ -21,12 +21,23 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.iceberg.rest.requests.RenameTableRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent an event when rename Iceberg view failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergRenameViewFailureEvent extends IcebergViewFailureEvent {
+ private final RenameTableRequest renameViewRequest;
+
+ public IcebergRenameViewFailureEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ RenameTableRequest renameViewRequest,
+ Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
+ this.renameViewRequest = renameViewRequest;
+ }
+
+ public RenameTableRequest renameViewRequest() {
+ return renameViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewPreEvent.java
similarity index 62%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewPreEvent.java
index 4e2187f1a..7802b8534 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameViewPreEvent.java
@@ -21,12 +21,22 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.iceberg.rest.requests.RenameTableRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent an pre event before rename an Iceberg view. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergRenameViewPreEvent extends IcebergViewPreEvent {
+ private final RenameTableRequest renameViewRequest;
+
+ public IcebergRenameViewPreEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ RenameTableRequest renameViewRequest) {
+ super(icebergRequestContext, viewIdentifier);
+ this.renameViewRequest = renameViewRequest;
+ }
+
+ public RenameTableRequest renameViewRequest() {
+ return renameViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewEvent.java
new file mode 100644
index 000000000..9f3f1677e
--- /dev/null
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewEvent.java
@@ -0,0 +1,54 @@
+/*
+ * 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.annotation.DeveloperApi;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.iceberg.rest.requests.UpdateTableRequest;
+import org.apache.iceberg.rest.responses.LoadViewResponse;
+
+/** Represent an event after updating Iceberg view successfully. */
+@DeveloperApi
+public class IcebergReplaceViewEvent extends IcebergViewEvent {
+
+ private final UpdateTableRequest replaceViewRequest;
+ private final LoadViewResponse loadViewResponse;
+
+ public IcebergReplaceViewEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ UpdateTableRequest replaceViewRequest,
+ LoadViewResponse loadViewResponse) {
+ super(icebergRequestContext, viewIdentifier);
+ this.replaceViewRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(replaceViewRequest,
UpdateTableRequest.class);
+ this.loadViewResponse =
+ IcebergRestUtils.cloneIcebergRESTObject(loadViewResponse,
LoadViewResponse.class);
+ }
+
+ public UpdateTableRequest renameViewRequest() {
+ return replaceViewRequest;
+ }
+
+ public LoadViewResponse loadViewResponse() {
+ return loadViewResponse;
+ }
+}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewFailureEvent.java
similarity index 55%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewFailureEvent.java
index 4e2187f1a..b23e028aa 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewFailureEvent.java
@@ -21,12 +21,25 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.iceberg.service.IcebergRestUtils;
+import org.apache.iceberg.rest.requests.UpdateTableRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when updating Iceberg view failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergReplaceViewFailureEvent extends IcebergViewFailureEvent {
+ private final UpdateTableRequest replaceViewRequest;
+
+ public IcebergReplaceViewFailureEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ UpdateTableRequest replaceViewRequest,
+ Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
+ this.replaceViewRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(replaceViewRequest,
UpdateTableRequest.class);
+ }
+
+ public UpdateTableRequest replaceViewRequest() {
+ return replaceViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewPreEvent.java
similarity index 62%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewPreEvent.java
index 4e2187f1a..aa15593ab 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergReplaceViewPreEvent.java
@@ -21,12 +21,22 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.iceberg.rest.requests.UpdateTableRequest;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a pre event before updating Iceberg view. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergReplaceViewPreEvent extends IcebergViewPreEvent {
+ private final UpdateTableRequest replaceViewRequest;
+
+ public IcebergReplaceViewPreEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ UpdateTableRequest replaceViewRequest) {
+ super(icebergRequestContext, viewIdentifier);
+ this.replaceViewRequest = replaceViewRequest;
+ }
+
+ public UpdateTableRequest replaceViewRequest() {
+ return replaceViewRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
index 4e2187f1a..28c3fe088 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
@@ -24,7 +24,7 @@ import org.apache.gravitino.annotation.DeveloperApi;
/** Represent a failure event when do Iceberg table operation failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
+public abstract class IcebergTableFailureEvent extends IcebergFailureEvent {
protected IcebergTableFailureEvent(
IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
super(icebergRequestContext, nameIdentifier, e);
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewEvent.java
similarity index 74%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewEvent.java
index 4e2187f1a..2fd3c735d 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewEvent.java
@@ -20,13 +20,11 @@
package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
-import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
-@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+/** Represents an abstract view post event in Gravitino Iceberg REST server. */
+public abstract class IcebergViewEvent extends IcebergEvent {
+ protected IcebergViewEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsEvent.java
similarity index 68%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsEvent.java
index 4e2187f1a..ece852320 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsEvent.java
@@ -22,11 +22,20 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent an event after check Iceberg view exists successfully. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergViewExistsEvent extends IcebergViewEvent {
+ private final boolean isExists;
+
+ public IcebergViewExistsEvent(
+ IcebergRequestContext icebergRequestContext,
+ NameIdentifier viewIdentifier,
+ boolean isExists) {
+ super(icebergRequestContext, viewIdentifier);
+ this.isExists = isExists;
+ }
+
+ public boolean isExists() {
+ return isExists;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsFailureEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsFailureEvent.java
index 4e2187f1a..93aa839d4 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsFailureEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when check Iceberg view exist failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergViewExistsFailureEvent extends IcebergViewFailureEvent {
+ public IcebergViewExistsFailureEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier, Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsPreEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsPreEvent.java
index 4e2187f1a..938a7587e 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewExistsPreEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a pre event before checking Iceberg view exists. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class IcebergViewExistsPreEvent extends IcebergViewPreEvent {
+ public IcebergViewExistsPreEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier) {
+ super(icebergRequestContext, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewFailureEvent.java
similarity index 79%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewFailureEvent.java
index 4e2187f1a..4122bc323 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewFailureEvent.java
@@ -22,11 +22,11 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represent a failure event when do Iceberg view operation failed. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public abstract class IcebergViewFailureEvent extends IcebergFailureEvent {
+ protected IcebergViewFailureEvent(
+ IcebergRequestContext icebergRequestContext, NameIdentifier
viewIdentifier, Exception e) {
+ super(icebergRequestContext, viewIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewPreEvent.java
similarity index 75%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewPreEvent.java
index 4e2187f1a..2deaf49c3 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergViewPreEvent.java
@@ -22,11 +22,10 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when do Iceberg table operation failed. */
+/** Represents an abstract view pre event in Gravitino Iceberg REST server. */
@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public abstract class IcebergViewPreEvent extends IcebergPreEvent {
+ protected IcebergViewPreEvent(IcebergRequestContext context, NameIdentifier
viewIdentifier) {
+ super(context, viewIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/IcebergRestTestUtil.java
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/IcebergRestTestUtil.java
index a2ee3d888..56b7fa2b0 100644
---
a/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/IcebergRestTestUtil.java
+++
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/IcebergRestTestUtil.java
@@ -39,6 +39,9 @@ import
org.apache.gravitino.iceberg.service.IcebergObjectMapperProvider;
import
org.apache.gravitino.iceberg.service.dispatcher.IcebergTableEventDispatcher;
import
org.apache.gravitino.iceberg.service.dispatcher.IcebergTableOperationDispatcher;
import
org.apache.gravitino.iceberg.service.dispatcher.IcebergTableOperationExecutor;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewEventDispatcher;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationDispatcher;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationExecutor;
import org.apache.gravitino.iceberg.service.extension.DummyCredentialProvider;
import org.apache.gravitino.iceberg.service.metrics.IcebergMetricsManager;
import org.apache.gravitino.iceberg.service.provider.IcebergConfigProvider;
@@ -113,6 +116,11 @@ public class IcebergRestTestUtil {
IcebergTableEventDispatcher icebergTableEventDispatcher =
new IcebergTableEventDispatcher(
icebergTableOperationExecutor, eventBus,
configProvider.getMetalakeName());
+ IcebergViewOperationExecutor icebergViewOperationExecutor =
+ new IcebergViewOperationExecutor(icebergCatalogWrapperManager);
+ IcebergViewEventDispatcher icebergViewEventDispatcher =
+ new IcebergViewEventDispatcher(
+ icebergViewOperationExecutor, eventBus,
configProvider.getMetalakeName());
IcebergMetricsManager icebergMetricsManager = new
IcebergMetricsManager(new IcebergConfig());
resourceConfig.register(
@@ -122,6 +130,7 @@ public class IcebergRestTestUtil {
bind(icebergCatalogWrapperManager).to(IcebergCatalogWrapperManager.class).ranked(2);
bind(icebergMetricsManager).to(IcebergMetricsManager.class).ranked(2);
bind(icebergTableEventDispatcher).to(IcebergTableOperationDispatcher.class).ranked(2);
+
bind(icebergViewEventDispatcher).to(IcebergViewOperationDispatcher.class).ranked(2);
}
});
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/MockIcebergViewOperations.java
similarity index 57%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/MockIcebergViewOperations.java
index 4e2187f1a..ed229a042 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/MockIcebergViewOperations.java
@@ -17,16 +17,22 @@
* under the License.
*/
-package org.apache.gravitino.listener.api.event;
+package org.apache.gravitino.iceberg.service.rest;
-import org.apache.gravitino.NameIdentifier;
-import org.apache.gravitino.annotation.DeveloperApi;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationDispatcher;
-/** Represent a failure event when do Iceberg table operation failed. */
-@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class MockIcebergViewOperations extends IcebergViewOperations {
+
+ @Inject
+ public MockIcebergViewOperations(IcebergViewOperationDispatcher
viewOperationDispatcher) {
+ super(viewOperationDispatcher);
+ }
+
+ // HTTP request is null in Jersey test, create a mock request
+ @Override
+ HttpServletRequest httpServletRequest() {
+ return IcebergRestTestUtil.createMockHttpRequest();
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/MockIcebergViewRenameOperations.java
similarity index 57%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/MockIcebergViewRenameOperations.java
index 4e2187f1a..694db5e20 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/MockIcebergViewRenameOperations.java
@@ -17,16 +17,21 @@
* under the License.
*/
-package org.apache.gravitino.listener.api.event;
+package org.apache.gravitino.iceberg.service.rest;
-import org.apache.gravitino.NameIdentifier;
-import org.apache.gravitino.annotation.DeveloperApi;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import
org.apache.gravitino.iceberg.service.dispatcher.IcebergViewOperationDispatcher;
-/** Represent a failure event when do Iceberg table operation failed. */
-@DeveloperApi
-public class IcebergTableFailureEvent extends IcebergFailureEvent {
- protected IcebergTableFailureEvent(
- IcebergRequestContext icebergRequestContext, NameIdentifier
nameIdentifier, Exception e) {
- super(icebergRequestContext, nameIdentifier, e);
+public class MockIcebergViewRenameOperations extends
IcebergViewRenameOperations {
+ @Inject
+ public MockIcebergViewRenameOperations(IcebergViewOperationDispatcher
viewOperationDispatcher) {
+ super(viewOperationDispatcher);
+ }
+
+ // HTTP request is null in Jersey test, create a mock request
+ @Override
+ HttpServletRequest httpServletRequest() {
+ return IcebergRestTestUtil.createMockHttpRequest();
}
}
diff --git
a/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/TestIcebergViewOperations.java
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/TestIcebergViewOperations.java
index 9ec2dc66f..df896b152 100644
---
a/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/TestIcebergViewOperations.java
+++
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/rest/TestIcebergViewOperations.java
@@ -20,6 +20,7 @@
package org.apache.gravitino.iceberg.service.rest;
import com.google.common.collect.ImmutableSet;
+import java.util.Arrays;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -27,6 +28,27 @@ import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.gravitino.listener.api.event.Event;
+import org.apache.gravitino.listener.api.event.IcebergCreateViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergCreateViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergCreateViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergListViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergListViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergListViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergReplaceViewEvent;
+import org.apache.gravitino.listener.api.event.IcebergReplaceViewFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergReplaceViewPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergViewExistsEvent;
+import org.apache.gravitino.listener.api.event.IcebergViewExistsPreEvent;
import org.apache.iceberg.Schema;
import org.apache.iceberg.UpdateRequirements;
import org.apache.iceberg.catalog.Namespace;
@@ -56,13 +78,17 @@ public class TestIcebergViewOperations extends
TestIcebergNamespaceOperations {
private static final String VIEW_QUERY = "select 1";
+ private DummyEventListener dummyEventListener;
+
@Override
protected Application configure() {
+ this.dummyEventListener = new DummyEventListener();
ResourceConfig resourceConfig =
-
IcebergRestTestUtil.getIcebergResourceConfig(IcebergViewOperations.class);
+ IcebergRestTestUtil.getIcebergResourceConfig(
+ MockIcebergViewOperations.class, true,
Arrays.asList(dummyEventListener));
// create namespace before each view test
resourceConfig.register(IcebergNamespaceOperations.class);
- resourceConfig.register(IcebergViewRenameOperations.class);
+ resourceConfig.register(MockIcebergViewRenameOperations.class);
return resourceConfig;
}
@@ -72,20 +98,31 @@ public class TestIcebergViewOperations extends
TestIcebergNamespaceOperations {
void testListViews(String prefix) {
setUrlPathWithPrefix(prefix);
verifyListViewFail(404);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergListViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergListViewFailureEvent);
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyCreateViewSucc("list_foo1");
verifyCreateViewSucc("list_foo2");
+
+ dummyEventListener.clearEvent();
verifyLisViewSucc(ImmutableSet.of("list_foo1", "list_foo2"));
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergListViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergListViewEvent);
}
@Test
void testCreateView() {
verifyCreateViewFail("create_foo1", 404);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergCreateViewPreEvent);
+ Assertions.assertTrue(
+ dummyEventListener.popPostEvent() instanceof
IcebergCreateViewFailureEvent);
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyCreateViewSucc("create_foo1");
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergCreateViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergCreateViewEvent);
verifyCreateViewFail("create_foo1", 409);
verifyCreateViewFail("", 400);
@@ -94,10 +131,16 @@ public class TestIcebergViewOperations extends
TestIcebergNamespaceOperations {
@Test
void testLoadView() {
verifyLoadViewFail("load_foo1", 404);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergLoadViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergLoadViewFailureEvent);
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyCreateViewSucc("load_foo1");
+
+ dummyEventListener.clearEvent();
verifyLoadViewSucc("load_foo1");
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergLoadViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergLoadViewEvent);
verifyLoadViewFail("load_foo2", 404);
}
@@ -107,10 +150,19 @@ public class TestIcebergViewOperations extends
TestIcebergNamespaceOperations {
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyCreateViewSucc("replace_foo1");
ViewMetadata metadata = getViewMeta("replace_foo1");
+
+ dummyEventListener.clearEvent();
verifyReplaceSucc("replace_foo1", metadata);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergReplaceViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergReplaceViewEvent);
verifyDropViewSucc("replace_foo1");
+
+ dummyEventListener.clearEvent();
verifyUpdateViewFail("replace_foo1", 404, metadata);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergReplaceViewPreEvent);
+ Assertions.assertTrue(
+ dummyEventListener.popPostEvent() instanceof
IcebergReplaceViewFailureEvent);
verifyDropNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyUpdateViewFail("replace_foo1", 404, metadata);
@@ -119,22 +171,41 @@ public class TestIcebergViewOperations extends
TestIcebergNamespaceOperations {
@Test
void testDropView() {
verifyDropViewFail("drop_foo1", 404);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergDropViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergDropViewFailureEvent);
+
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyDropViewFail("drop_foo1", 404);
verifyCreateViewSucc("drop_foo1");
+
+ dummyEventListener.clearEvent();
verifyDropViewSucc("drop_foo1");
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergDropViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergDropViewEvent);
+
verifyLoadViewFail("drop_foo1", 404);
}
@Test
void testViewExits() {
verifyViewExistsStatusCode("exists_foo2", 404);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergViewExistsPreEvent);
+ Event postEvent = dummyEventListener.popPostEvent();
+ Assertions.assertTrue(postEvent instanceof IcebergViewExistsEvent);
+ Assertions.assertEquals(false, ((IcebergViewExistsEvent)
postEvent).isExists());
+
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyViewExistsStatusCode("exists_foo2", 404);
verifyCreateViewSucc("exists_foo1");
+ dummyEventListener.clearEvent();
verifyViewExistsStatusCode("exists_foo1", 204);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergViewExistsPreEvent);
+ postEvent = dummyEventListener.popPostEvent();
+ Assertions.assertTrue(postEvent instanceof IcebergViewExistsEvent);
+ Assertions.assertEquals(true, ((IcebergViewExistsEvent)
postEvent).isExists());
+
verifyLoadViewSucc("exists_foo1");
}
@@ -144,11 +215,19 @@ public class TestIcebergViewOperations extends
TestIcebergNamespaceOperations {
setUrlPathWithPrefix(prefix);
// namespace not exits
verifyRenameViewFail("rename_foo1", "rename_foo3", 404);
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergRenameViewPreEvent);
+ Assertions.assertTrue(
+ dummyEventListener.popPostEvent() instanceof
IcebergRenameViewFailureEvent);
verifyCreateNamespaceSucc(IcebergRestTestUtil.TEST_NAMESPACE_NAME);
verifyCreateViewSucc("rename_foo1");
+
+ dummyEventListener.clearEvent();
// rename
verifyRenameViewSucc("rename_foo1", "rename_foo2");
+ Assertions.assertTrue(dummyEventListener.popPreEvent() instanceof
IcebergRenameViewPreEvent);
+ Assertions.assertTrue(dummyEventListener.popPostEvent() instanceof
IcebergRenameViewEvent);
+
verifyLoadViewFail("rename_foo1", 404);
verifyLoadViewSucc("rename_foo2");