This is an automated email from the ASF dual-hosted git repository.
jshao 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 6a9a77b8f [#5204] feat(iceberg): support more table event for
Iceberg REST server (#5156)
6a9a77b8f is described below
commit 6a9a77b8f3c44cbf2f1e4962a58232805f5c94f2
Author: FANNG <[email protected]>
AuthorDate: Tue Oct 22 20:52:15 2024 +0800
[#5204] feat(iceberg): support more table event for Iceberg REST server
(#5156)
### What changes were proposed in this pull request?
support more table event for Iceberg REST server
### Why are the changes needed?
Fix: #5204
### Does this PR introduce _any_ user-facing change?
no
### How was this patch tested?
existing tests
---
.../service/IcebergCatalogWrapperManager.java | 3 +-
.../iceberg/service/IcebergRestUtils.java | 8 ++
.../dispatcher/IcebergTableEventDispatcher.java | 156 ++++++++++++++++++++-
.../IcebergTableOperationDispatcher.java | 60 ++++++++
.../dispatcher/IcebergTableOperationExecutor.java | 42 ++++++
.../service/rest/IcebergTableOperations.java | 77 +++++-----
.../service/rest/IcebergTableRenameOperations.java | 19 ++-
.../api/event/IcebergCreateTableFailureEvent.java | 16 ++-
...ailureEvent.java => IcebergDropTableEvent.java} | 16 ++-
...vent.java => IcebergDropTableFailureEvent.java} | 14 +-
...ureEvent.java => IcebergDropTablePreEvent.java} | 16 ++-
...ailureEvent.java => IcebergListTableEvent.java} | 14 +-
...vent.java => IcebergListTableFailureEvent.java} | 6 +-
...ureEvent.java => IcebergListTablePreEvent.java} | 8 +-
...ailureEvent.java => IcebergLoadTableEvent.java} | 19 ++-
...vent.java => IcebergLoadTableFailureEvent.java} | 6 +-
...ureEvent.java => IcebergLoadTablePreEvent.java} | 8 +-
...lureEvent.java => IcebergRenameTableEvent.java} | 19 ++-
...nt.java => IcebergRenameTableFailureEvent.java} | 20 ++-
...eEvent.java => IcebergRenameTablePreEvent.java} | 17 ++-
...lureEvent.java => IcebergTableExistsEvent.java} | 15 +-
...nt.java => IcebergTableExistsFailureEvent.java} | 6 +-
...eEvent.java => IcebergTableExistsPreEvent.java} | 8 +-
.../api/event/IcebergUpdateTableEvent.java | 54 +++++++
...nt.java => IcebergUpdateTableFailureEvent.java} | 20 ++-
...eEvent.java => IcebergUpdateTablePreEvent.java} | 17 ++-
26 files changed, 560 insertions(+), 104 deletions(-)
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergCatalogWrapperManager.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergCatalogWrapperManager.java
index cefc62bc2..6e25ceec4 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergCatalogWrapperManager.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergCatalogWrapperManager.java
@@ -93,8 +93,7 @@ public class IcebergCatalogWrapperManager implements
AutoCloseable {
return catalogWrapper;
}
- public CredentialProvider getCredentialProvider(String prefix) {
- String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ public CredentialProvider getCredentialProvider(String catalogName) {
return credentialProviderManager.getCredentialProvider(catalogName);
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergRestUtils.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergRestUtils.java
index af017b2de..23ceb7790 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergRestUtils.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/IcebergRestUtils.java
@@ -32,6 +32,7 @@ import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang3.StringUtils;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.catalog.lakehouse.iceberg.IcebergConstants;
+import org.apache.iceberg.catalog.Namespace;
import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.rest.responses.ErrorResponse;
@@ -114,6 +115,13 @@ public class IcebergRestUtils {
}
}
+ public static NameIdentifier getGravitinoNameIdentifier(
+ String metalakeName, String catalogName, Namespace namespace) {
+ Stream<String> catalogNS =
+ Stream.concat(Stream.of(metalakeName, catalogName),
Arrays.stream(namespace.levels()));
+ return NameIdentifier.of(catalogNS.toArray(String[]::new));
+ }
+
// remove the last '/' from the prefix, for example transform
'iceberg_catalog/' to
// 'iceberg_catalog'
private static String normalizePrefix(String rawPrefix) {
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableEventDispatcher.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableEventDispatcher.java
index 315ba6203..bd49630de 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableEventDispatcher.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableEventDispatcher.java
@@ -25,10 +25,31 @@ import org.apache.gravitino.listener.EventBus;
import org.apache.gravitino.listener.api.event.IcebergCreateTableEvent;
import org.apache.gravitino.listener.api.event.IcebergCreateTableFailureEvent;
import org.apache.gravitino.listener.api.event.IcebergCreateTablePreEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropTableEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropTableFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergDropTablePreEvent;
+import org.apache.gravitino.listener.api.event.IcebergListTableEvent;
+import org.apache.gravitino.listener.api.event.IcebergListTableFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergListTablePreEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadTableEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadTableFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergLoadTablePreEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameTableEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameTableFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergRenameTablePreEvent;
+import org.apache.gravitino.listener.api.event.IcebergTableExistsEvent;
+import org.apache.gravitino.listener.api.event.IcebergTableExistsFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergTableExistsPreEvent;
+import org.apache.gravitino.listener.api.event.IcebergUpdateTableEvent;
+import org.apache.gravitino.listener.api.event.IcebergUpdateTableFailureEvent;
+import org.apache.gravitino.listener.api.event.IcebergUpdateTablePreEvent;
import org.apache.gravitino.utils.PrincipalUtils;
import org.apache.iceberg.catalog.Namespace;
import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.rest.requests.CreateTableRequest;
+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.LoadTableResponse;
/**
@@ -67,7 +88,7 @@ public class IcebergTableEventDispatcher implements
IcebergTableOperationDispatc
} catch (Exception e) {
eventBus.dispatchEvent(
new IcebergCreateTableFailureEvent(
- PrincipalUtils.getCurrentUserName(), nameIdentifier, e));
+ PrincipalUtils.getCurrentUserName(), nameIdentifier,
createTableRequest, e));
throw e;
}
eventBus.dispatchEvent(
@@ -78,4 +99,137 @@ public class IcebergTableEventDispatcher implements
IcebergTableOperationDispatc
loadTableResponse));
return loadTableResponse;
}
+
+ @Override
+ public LoadTableResponse updateTable(
+ String catalogName, TableIdentifier tableIdentifier, UpdateTableRequest
updateTableRequest) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName, catalogName,
tableIdentifier);
+ eventBus.dispatchEvent(
+ new IcebergUpdateTablePreEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
updateTableRequest));
+ LoadTableResponse loadTableResponse;
+ try {
+ loadTableResponse =
+ icebergTableOperationDispatcher.updateTable(
+ catalogName, tableIdentifier, updateTableRequest);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergUpdateTableFailureEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
updateTableRequest, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergUpdateTableEvent(
+ PrincipalUtils.getCurrentUserName(),
+ gravitinoNameIdentifier,
+ updateTableRequest,
+ loadTableResponse));
+ return loadTableResponse;
+ }
+
+ @Override
+ public void dropTable(
+ String catalogName, TableIdentifier tableIdentifier, boolean
purgeRequested) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName, catalogName,
tableIdentifier);
+ eventBus.dispatchEvent(
+ new IcebergDropTablePreEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
purgeRequested));
+ try {
+ icebergTableOperationDispatcher.dropTable(catalogName, tableIdentifier,
purgeRequested);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergDropTableFailureEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
purgeRequested, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergDropTableEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
purgeRequested));
+ }
+
+ @Override
+ public LoadTableResponse loadTable(String catalogName, TableIdentifier
tableIdentifier) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName, catalogName,
tableIdentifier);
+ eventBus.dispatchEvent(
+ new IcebergLoadTablePreEvent(PrincipalUtils.getCurrentUserName(),
gravitinoNameIdentifier));
+ LoadTableResponse loadTableResponse;
+ try {
+ loadTableResponse =
icebergTableOperationDispatcher.loadTable(catalogName, tableIdentifier);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergLoadTableFailureEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergLoadTableEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
loadTableResponse));
+ return loadTableResponse;
+ }
+
+ @Override
+ public ListTablesResponse listTable(String catalogName, Namespace namespace)
{
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName, catalogName,
namespace);
+ eventBus.dispatchEvent(
+ new IcebergListTablePreEvent(PrincipalUtils.getCurrentUserName(),
gravitinoNameIdentifier));
+ ListTablesResponse listTablesResponse;
+ try {
+ listTablesResponse =
icebergTableOperationDispatcher.listTable(catalogName, namespace);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergListTableFailureEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergListTableEvent(PrincipalUtils.getCurrentUserName(),
gravitinoNameIdentifier));
+ return listTablesResponse;
+ }
+
+ @Override
+ public boolean tableExists(String catalogName, TableIdentifier
tableIdentifier) {
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName, catalogName,
tableIdentifier);
+ eventBus.dispatchEvent(
+ new IcebergTableExistsPreEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier));
+ boolean isExists;
+ try {
+ isExists = icebergTableOperationDispatcher.tableExists(catalogName,
tableIdentifier);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergTableExistsFailureEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergTableExistsEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
isExists));
+ return isExists;
+ }
+
+ @Override
+ public void renameTable(String catalogName, RenameTableRequest
renameTableRequest) {
+ TableIdentifier sourceTable = renameTableRequest.source();
+ NameIdentifier gravitinoNameIdentifier =
+ IcebergRestUtils.getGravitinoNameIdentifier(metalakeName, catalogName,
sourceTable);
+ eventBus.dispatchEvent(
+ new IcebergRenameTablePreEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
renameTableRequest));
+ try {
+ icebergTableOperationDispatcher.renameTable(catalogName,
renameTableRequest);
+ } catch (Exception e) {
+ eventBus.dispatchEvent(
+ new IcebergRenameTableFailureEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
renameTableRequest, e));
+ throw e;
+ }
+ eventBus.dispatchEvent(
+ new IcebergRenameTableEvent(
+ PrincipalUtils.getCurrentUserName(), gravitinoNameIdentifier,
renameTableRequest));
+ }
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationDispatcher.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationDispatcher.java
index 948e48662..68a0db16f 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationDispatcher.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationDispatcher.java
@@ -20,7 +20,11 @@
package org.apache.gravitino.iceberg.service.dispatcher;
import org.apache.iceberg.catalog.Namespace;
+import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.rest.requests.CreateTableRequest;
+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.LoadTableResponse;
/**
@@ -28,6 +32,7 @@ import org.apache.iceberg.rest.responses.LoadTableResponse;
* tables.
*/
public interface IcebergTableOperationDispatcher {
+
/**
* Creates a new Iceberg table.
*
@@ -38,4 +43,59 @@ public interface IcebergTableOperationDispatcher {
*/
LoadTableResponse createTable(
String catalogName, Namespace namespace, CreateTableRequest
createTableRequest);
+
+ /**
+ * Updates an Iceberg table.
+ *
+ * @param catalogName The catalog name when updating the table.
+ * @param tableIdentifier The Iceberg table identifier.
+ * @param updateTableRequest The request object containing the details for
updating the table.
+ * @return A {@link LoadTableResponse} object containing the result of the
operation.
+ */
+ LoadTableResponse updateTable(
+ String catalogName, TableIdentifier tableIdentifier, UpdateTableRequest
updateTableRequest);
+
+ /**
+ * Drops an Iceberg table.
+ *
+ * @param catalogName The catalog name when dropping the table.
+ * @param tableIdentifier The Iceberg table identifier.
+ * @param purgeRequested Whether to purge the table.
+ */
+ void dropTable(String catalogName, TableIdentifier tableIdentifier, boolean
purgeRequested);
+
+ /**
+ * Loads an Iceberg table.
+ *
+ * @param catalogName The catalog name when dropping the table.
+ * @param tableIdentifier The Iceberg table identifier.
+ * @return A {@link LoadTableResponse} object containing the result of the
operation.
+ */
+ LoadTableResponse loadTable(String catalogName, TableIdentifier
tableIdentifier);
+
+ /**
+ * Lists Iceberg tables.
+ *
+ * @param catalogName The catalog name when dropping the table.
+ * @param namespace The Iceberg namespace.
+ * @return A {@link ListTablesResponse} object containing the list of table
identifiers.
+ */
+ ListTablesResponse listTable(String catalogName, Namespace namespace);
+
+ /**
+ * Check whether an Iceberg table exists.
+ *
+ * @param catalogName The catalog name when dropping the table.
+ * @param tableIdentifier The Iceberg table identifier.
+ * @return Whether table exists.
+ */
+ boolean tableExists(String catalogName, TableIdentifier tableIdentifier);
+
+ /**
+ * Rename an Iceberg table.
+ *
+ * @param catalogName The catalog name when dropping the table.
+ * @param renameTableRequest Rename table request information.
+ */
+ void renameTable(String catalogName, RenameTableRequest renameTableRequest);
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationExecutor.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationExecutor.java
index 9a51d7b7a..8016b5def 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationExecutor.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/dispatcher/IcebergTableOperationExecutor.java
@@ -21,7 +21,11 @@ package org.apache.gravitino.iceberg.service.dispatcher;
import org.apache.gravitino.iceberg.service.IcebergCatalogWrapperManager;
import org.apache.iceberg.catalog.Namespace;
+import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.iceberg.rest.requests.CreateTableRequest;
+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.LoadTableResponse;
public class IcebergTableOperationExecutor implements
IcebergTableOperationDispatcher {
@@ -39,4 +43,42 @@ public class IcebergTableOperationExecutor implements
IcebergTableOperationDispa
.getCatalogWrapper(catalogName)
.createTable(namespace, createTableRequest);
}
+
+ @Override
+ public LoadTableResponse updateTable(
+ String catalogName, TableIdentifier tableIdentifier, UpdateTableRequest
updateTableRequest) {
+ return icebergCatalogWrapperManager
+ .getCatalogWrapper(catalogName)
+ .updateTable(tableIdentifier, updateTableRequest);
+ }
+
+ @Override
+ public void dropTable(
+ String catalogName, TableIdentifier tableIdentifier, boolean
purgeRequested) {
+ if (purgeRequested) {
+
icebergCatalogWrapperManager.getCatalogWrapper(catalogName).purgeTable(tableIdentifier);
+ } else {
+
icebergCatalogWrapperManager.getCatalogWrapper(catalogName).dropTable(tableIdentifier);
+ }
+ }
+
+ @Override
+ public LoadTableResponse loadTable(String catalogName, TableIdentifier
tableIdentifier) {
+ return
icebergCatalogWrapperManager.getCatalogWrapper(catalogName).loadTable(tableIdentifier);
+ }
+
+ @Override
+ public ListTablesResponse listTable(String catalogName, Namespace namespace)
{
+ return
icebergCatalogWrapperManager.getCatalogWrapper(catalogName).listTable(namespace);
+ }
+
+ @Override
+ public boolean tableExists(String catalogName, TableIdentifier
tableIdentifier) {
+ return
icebergCatalogWrapperManager.getCatalogWrapper(catalogName).tableExists(tableIdentifier);
+ }
+
+ @Override
+ public void renameTable(String catalogName, RenameTableRequest
renameTableRequest) {
+
icebergCatalogWrapperManager.getCatalogWrapper(catalogName).renameTable(renameTableRequest);
+ }
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableOperations.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableOperations.java
index cebb74884..46546bbdc 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableOperations.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableOperations.java
@@ -60,6 +60,7 @@ import org.apache.iceberg.rest.RESTUtil;
import org.apache.iceberg.rest.requests.CreateTableRequest;
import org.apache.iceberg.rest.requests.ReportMetricsRequest;
import org.apache.iceberg.rest.requests.UpdateTableRequest;
+import org.apache.iceberg.rest.responses.ListTablesResponse;
import org.apache.iceberg.rest.responses.LoadTableResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -101,8 +102,12 @@ public class IcebergTableOperations {
@ResponseMetered(name = "list-table", absolute = true)
public Response listTable(
@PathParam("prefix") String prefix, @PathParam("namespace") String
namespace) {
- return IcebergRestUtils.ok(
-
icebergCatalogWrapperManager.getOps(prefix).listTable(RESTUtil.decodeNamespace(namespace)));
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info("List Iceberg tables, catalog: {}, namespace: {}", catalogName,
icebergNS);
+ ListTablesResponse listTablesResponse =
+ tableOperationDispatcher.listTable(catalogName, icebergNS);
+ return IcebergRestUtils.ok(listTablesResponse);
}
@POST
@@ -128,7 +133,7 @@ public class IcebergTableOperations {
LoadTableResponse loadTableResponse =
tableOperationDispatcher.createTable(catalogName, icebergNS,
createTableRequest);
if (isCredentialVending) {
- return IcebergRestUtils.ok(injectCredentialConfig(prefix,
loadTableResponse));
+ return IcebergRestUtils.ok(injectCredentialConfig(catalogName,
loadTableResponse));
} else {
return IcebergRestUtils.ok(loadTableResponse);
}
@@ -144,19 +149,20 @@ public class IcebergTableOperations {
@PathParam("namespace") String namespace,
@PathParam("table") String table,
UpdateTableRequest updateTableRequest) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
if (LOG.isInfoEnabled()) {
LOG.info(
- "Update Iceberg table, namespace: {}, table: {}, updateTableRequest:
{}",
- namespace,
+ "Update Iceberg table, catalog: {}, namespace: {}, table: {},
updateTableRequest: {}",
+ catalogName,
+ icebergNS,
table,
SerializeUpdateTableRequest(updateTableRequest));
}
- TableIdentifier tableIdentifier =
- TableIdentifier.of(RESTUtil.decodeNamespace(namespace), table);
- return IcebergRestUtils.ok(
- icebergCatalogWrapperManager
- .getOps(prefix)
- .updateTable(tableIdentifier, updateTableRequest));
+ TableIdentifier tableIdentifier = TableIdentifier.of(icebergNS, table);
+ LoadTableResponse loadTableResponse =
+ tableOperationDispatcher.updateTable(catalogName, tableIdentifier,
updateTableRequest);
+ return IcebergRestUtils.ok(loadTableResponse);
}
@DELETE
@@ -169,18 +175,16 @@ public class IcebergTableOperations {
@PathParam("namespace") String namespace,
@PathParam("table") String table,
@DefaultValue("false") @QueryParam("purgeRequested") boolean
purgeRequested) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
LOG.info(
- "Drop Iceberg table, namespace: {}, table: {}, purgeRequested: {}",
- namespace,
+ "Drop Iceberg table, catalog: {}, namespace: {}, table: {},
purgeRequested: {}",
+ catalogName,
+ icebergNS,
table,
purgeRequested);
- TableIdentifier tableIdentifier =
- TableIdentifier.of(RESTUtil.decodeNamespace(namespace), table);
- if (purgeRequested) {
- icebergCatalogWrapperManager.getOps(prefix).purgeTable(tableIdentifier);
- } else {
- icebergCatalogWrapperManager.getOps(prefix).dropTable(tableIdentifier);
- }
+ TableIdentifier tableIdentifier = TableIdentifier.of(namespace, table);
+ tableOperationDispatcher.dropTable(catalogName, tableIdentifier,
purgeRequested);
return IcebergRestUtils.noContent();
}
@@ -195,21 +199,23 @@ public class IcebergTableOperations {
@PathParam("table") String table,
@DefaultValue("all") @QueryParam("snapshots") String snapshots,
@HeaderParam(X_ICEBERG_ACCESS_DELEGATION) String accessDelegation) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
boolean isCredentialVending = isCredentialVending(accessDelegation);
LOG.info(
- "Load iceberg table, namespace: {}, table: {}, access delegation: {}, "
+ "Load Iceberg table, catalog: {}, namespace: {}, table: {}, access
delegation: {}, "
+ "credential vending: {}",
- namespace,
+ catalogName,
+ icebergNS,
table,
accessDelegation,
isCredentialVending);
// todo support snapshots
- TableIdentifier tableIdentifier =
- TableIdentifier.of(RESTUtil.decodeNamespace(namespace), table);
+ TableIdentifier tableIdentifier = TableIdentifier.of(icebergNS, table);
LoadTableResponse loadTableResponse =
- icebergCatalogWrapperManager.getOps(prefix).loadTable(tableIdentifier);
+ tableOperationDispatcher.loadTable(catalogName, tableIdentifier);
if (isCredentialVending) {
- return IcebergRestUtils.ok(injectCredentialConfig(prefix,
loadTableResponse));
+ return IcebergRestUtils.ok(injectCredentialConfig(catalogName,
loadTableResponse));
} else {
return IcebergRestUtils.ok(loadTableResponse);
}
@@ -224,9 +230,16 @@ public class IcebergTableOperations {
@PathParam("prefix") String prefix,
@PathParam("namespace") String namespace,
@PathParam("table") String table) {
- TableIdentifier tableIdentifier =
- TableIdentifier.of(RESTUtil.decodeNamespace(namespace), table);
- if
(icebergCatalogWrapperManager.getOps(prefix).tableExists(tableIdentifier)) {
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ Namespace icebergNS = RESTUtil.decodeNamespace(namespace);
+ LOG.info(
+ "Check Iceberg table exists, catalog: {}, namespace: {}, table: {}",
+ catalogName,
+ icebergNS,
+ table);
+ TableIdentifier tableIdentifier = TableIdentifier.of(icebergNS, table);
+ boolean exists = tableOperationDispatcher.tableExists(catalogName,
tableIdentifier);
+ if (exists) {
return IcebergRestUtils.okWithoutContent();
} else {
return IcebergRestUtils.notExists();
@@ -257,9 +270,9 @@ public class IcebergTableOperations {
}
private LoadTableResponse injectCredentialConfig(
- String prefix, LoadTableResponse loadTableResponse) {
+ String catalogName, LoadTableResponse loadTableResponse) {
CredentialProvider credentialProvider =
- icebergCatalogWrapperManager.getCredentialProvider(prefix);
+ icebergCatalogWrapperManager.getCredentialProvider(catalogName);
if (credentialProvider == null) {
throw new NotSupportedException(
"Doesn't support credential vending, please add "
@@ -296,7 +309,7 @@ public class IcebergTableOperations {
X_ICEBERG_ACCESS_DELEGATION
+ ": "
+ accessDelegation
- + " is illegal, Iceberg REST spec
supports:[vended-credentials,remote-signing], "
+ + " is illegal, Iceberg REST spec supports:
[vended-credentials,remote-signing], "
+ "Gravitino Iceberg REST server supports: vended-credentials");
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableRenameOperations.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableRenameOperations.java
index 553508c01..4d7ecef25 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableRenameOperations.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/rest/IcebergTableRenameOperations.java
@@ -30,25 +30,28 @@ 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.IcebergTableOperationDispatcher;
import org.apache.gravitino.metrics.MetricNames;
import org.apache.iceberg.rest.requests.RenameTableRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@Path("/v1/{prefix:([^/]*/)?}tables/rename")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class IcebergTableRenameOperations {
+ private static final Logger LOG =
LoggerFactory.getLogger(IcebergTableOperations.class);
@SuppressWarnings("UnusedVariable")
@Context
private HttpServletRequest httpRequest;
- private IcebergCatalogWrapperManager icebergCatalogWrapperManager;
+ private IcebergTableOperationDispatcher tableOperationDispatcher;
@Inject
- public IcebergTableRenameOperations(IcebergCatalogWrapperManager
icebergCatalogWrapperManager) {
- this.icebergCatalogWrapperManager = icebergCatalogWrapperManager;
+ public IcebergTableRenameOperations(IcebergTableOperationDispatcher
tableOperationDispatcher) {
+ this.tableOperationDispatcher = tableOperationDispatcher;
}
@POST
@@ -57,7 +60,13 @@ public class IcebergTableRenameOperations {
@ResponseMetered(name = "rename-table", absolute = true)
public Response renameTable(
@PathParam("prefix") String prefix, RenameTableRequest
renameTableRequest) {
-
icebergCatalogWrapperManager.getOps(prefix).renameTable(renameTableRequest);
+ String catalogName = IcebergRestUtils.getCatalogName(prefix);
+ LOG.info(
+ "Rename Iceberg tables, catalog: {}, source: {}, destination: {}.",
+ catalogName,
+ renameTableRequest.source(),
+ renameTableRequest.destination());
+ tableOperationDispatcher.renameTable(catalogName, renameTableRequest);
return IcebergRestUtils.okWithoutContent();
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
index 24f74da4f..bc67ef2d5 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
@@ -21,11 +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.CreateTableRequest;
/** Represent a failure event when creating Iceberg table failed. */
@DeveloperApi
public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
+ private CreateTableRequest createTableRequest;
+
+ public IcebergCreateTableFailureEvent(
+ String user,
+ NameIdentifier nameIdentifier,
+ CreateTableRequest createTableRequest,
+ Exception e) {
super(user, nameIdentifier, e);
+ this.createTableRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(createTableRequest,
CreateTableRequest.class);
+ }
+
+ public CreateTableRequest createTableRequest() {
+ return createTableRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTableEvent.java
similarity index 70%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTableEvent.java
index 24f74da4f..3b5c447bd 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTableEvent.java
@@ -22,10 +22,18 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when creating Iceberg table failed. */
+/** Represent an event after dropping Iceberg table successfully. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergDropTableEvent extends IcebergTableEvent {
+ private boolean purgeRequested;
+
+ public IcebergDropTableEvent(
+ String user, NameIdentifier resourceIdentifier, boolean purgeRequested) {
+ super(user, resourceIdentifier);
+ this.purgeRequested = purgeRequested;
+ }
+
+ public boolean purgeRequested() {
+ return purgeRequested;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTableFailureEvent.java
similarity index 71%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTableFailureEvent.java
index 24f74da4f..e57ed35c5 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTableFailureEvent.java
@@ -22,10 +22,18 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when creating Iceberg table failed. */
+/** Represent a failure event when dropping Iceberg table failed. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
+public class IcebergDropTableFailureEvent extends IcebergTableFailureEvent {
+ private boolean purgeRequested;
+
+ public IcebergDropTableFailureEvent(
+ String user, NameIdentifier nameIdentifier, Boolean purgeRequested,
Exception e) {
super(user, nameIdentifier, e);
+ this.purgeRequested = purgeRequested;
+ }
+
+ public boolean purgeRequested() {
+ return purgeRequested;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTablePreEvent.java
similarity index 70%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTablePreEvent.java
index 24f74da4f..5e90a88ba 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergDropTablePreEvent.java
@@ -22,10 +22,18 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when creating Iceberg table failed. */
+/** Represent a pre event before dropping Iceberg table. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergDropTablePreEvent extends IcebergTablePreEvent {
+ private boolean purgeRequested;
+
+ public IcebergDropTablePreEvent(
+ String user, NameIdentifier tableIdentifier, boolean purgeRequested) {
+ super(user, tableIdentifier);
+ this.purgeRequested = purgeRequested;
+ }
+
+ public boolean purgeRequested() {
+ return purgeRequested;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTableEvent.java
similarity index 67%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTableEvent.java
index 24f74da4f..22589d2cd 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTableEvent.java
@@ -22,10 +22,16 @@ package org.apache.gravitino.listener.api.event;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.annotation.DeveloperApi;
-/** Represent a failure event when creating Iceberg table failed. */
+/**
+ * Represent an event after listing Iceberg table successfully.
+ *
+ * <p>To optimize memory usage and avoid the potential overhead associated
with storing a large
+ * number of tables directly within the ListTableEvent, the actual tables
listed are not maintained
+ * in this event.
+ */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergListTableEvent extends IcebergTableEvent {
+ public IcebergListTableEvent(String user, NameIdentifier resourceIdentifier)
{
+ super(user, resourceIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTableFailureEvent.java
similarity index 80%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTableFailureEvent.java
index 24f74da4f..3cbda0f44 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTableFailureEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent a failure event when listing Iceberg table failed. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
+public class IcebergListTableFailureEvent extends IcebergTableFailureEvent {
+ public IcebergListTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
super(user, nameIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTablePreEvent.java
similarity index 77%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTablePreEvent.java
index 24f74da4f..7da059c7e 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergListTablePreEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent a pre event before listing Iceberg table. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergListTablePreEvent extends IcebergTablePreEvent {
+ public IcebergListTablePreEvent(String user, NameIdentifier tableIdentifier)
{
+ super(user, tableIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTableEvent.java
similarity index 59%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTableEvent.java
index 24f74da4f..7007fd706 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTableEvent.java
@@ -21,11 +21,22 @@ 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.LoadTableResponse;
-/** Represent a failure event when creating Iceberg table failed. */
+/** Represent an event after loading Iceberg table successfully. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergLoadTableEvent extends IcebergTableEvent {
+ private LoadTableResponse loadTableResponse;
+
+ public IcebergLoadTableEvent(
+ String user, NameIdentifier resourceIdentifier, LoadTableResponse
loadTableResponse) {
+ super(user, resourceIdentifier);
+ this.loadTableResponse =
+ IcebergRestUtils.cloneIcebergRESTObject(loadTableResponse,
LoadTableResponse.class);
+ }
+
+ public LoadTableResponse loadTableResponse() {
+ return loadTableResponse;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTableFailureEvent.java
similarity index 80%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTableFailureEvent.java
index 24f74da4f..03402583b 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTableFailureEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent a failure event when loading Iceberg table failed. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
+public class IcebergLoadTableFailureEvent extends IcebergTableFailureEvent {
+ public IcebergLoadTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
super(user, nameIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTablePreEvent.java
similarity index 77%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTablePreEvent.java
index 24f74da4f..9485b1b93 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergLoadTablePreEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent a pre event before loading Iceberg table. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergLoadTablePreEvent extends IcebergTablePreEvent {
+ public IcebergLoadTablePreEvent(String user, NameIdentifier tableIdentifier)
{
+ super(user, tableIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTableEvent.java
similarity index 59%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTableEvent.java
index 24f74da4f..70b7ef4e9 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTableEvent.java
@@ -21,11 +21,22 @@ 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 creating Iceberg table failed. */
+/** Represent an event after rename Iceberg table successfully. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergRenameTableEvent extends IcebergTableEvent {
+ private RenameTableRequest renameTableRequest;
+
+ public IcebergRenameTableEvent(
+ String user, NameIdentifier resourceIdentifier, RenameTableRequest
renameTableRequest) {
+ super(user, resourceIdentifier);
+ this.renameTableRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(renameTableRequest,
RenameTableRequest.class);
+ }
+
+ public RenameTableRequest renameTableRequest() {
+ return renameTableRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTableFailureEvent.java
similarity index 63%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTableFailureEvent.java
index 24f74da4f..936e56d10 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTableFailureEvent.java
@@ -21,11 +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 creating Iceberg table failed. */
+/** Represent an event when rename Iceberg table failed. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergRenameTableFailureEvent extends IcebergTableFailureEvent {
+ private RenameTableRequest renameTableRequest;
+
+ public IcebergRenameTableFailureEvent(
+ String user,
+ NameIdentifier resourceIdentifier,
+ RenameTableRequest renameTableRequest,
+ Exception e) {
+ super(user, resourceIdentifier, e);
+ this.renameTableRequest = renameTableRequest;
+ }
+
+ public RenameTableRequest renameTableRequest() {
+ return renameTableRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTablePreEvent.java
similarity index 64%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTablePreEvent.java
index 24f74da4f..8b654ab03 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergRenameTablePreEvent.java
@@ -21,11 +21,20 @@ 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 creating Iceberg table failed. */
+/** Represent an pre event before rename an Iceberg table. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergRenameTablePreEvent extends IcebergTablePreEvent {
+ private RenameTableRequest renameTableRequest;
+
+ public IcebergRenameTablePreEvent(
+ String user, NameIdentifier resourceIdentifier, RenameTableRequest
renameTableRequest) {
+ super(user, resourceIdentifier);
+ this.renameTableRequest = renameTableRequest;
+ }
+
+ public RenameTableRequest renameTableRequest() {
+ return renameTableRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsEvent.java
similarity index 71%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsEvent.java
index 24f74da4f..512deac06 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent an event after check Iceberg table exists successfully. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergTableExistsEvent extends IcebergTableEvent {
+ private boolean isExists;
+
+ public IcebergTableExistsEvent(String user, NameIdentifier
resourceIdentifier, boolean isExists) {
+ super(user, resourceIdentifier);
+ this.isExists = isExists;
+ }
+
+ public boolean isExists() {
+ return isExists;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsFailureEvent.java
similarity index 84%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsFailureEvent.java
index 24f74da4f..04cb0d7e5 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsFailureEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent a failure event when check Iceberg table exist failed. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
+public class IcebergTableExistsFailureEvent extends IcebergTableFailureEvent {
+ public IcebergTableExistsFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
super(user, nameIdentifier, e);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsPreEvent.java
similarity index 77%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsPreEvent.java
index 24f74da4f..bdd666776 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergTableExistsPreEvent.java
@@ -22,10 +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 creating Iceberg table failed. */
+/** Represent a pre event before checking Iceberg table exists. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergTableExistsPreEvent extends IcebergTablePreEvent {
+ public IcebergTableExistsPreEvent(String user, NameIdentifier
tableIdentifier) {
+ super(user, tableIdentifier);
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTableEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTableEvent.java
new file mode 100644
index 000000000..82ea7732f
--- /dev/null
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTableEvent.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.LoadTableResponse;
+
+/** Represent an event after updating Iceberg table successfully. */
+@DeveloperApi
+public class IcebergUpdateTableEvent extends IcebergTableEvent {
+
+ private UpdateTableRequest updateTableRequest;
+ private LoadTableResponse loadTableResponse;
+
+ public IcebergUpdateTableEvent(
+ String user,
+ NameIdentifier resourceIdentifier,
+ UpdateTableRequest updateTableRequest,
+ LoadTableResponse loadTableResponse) {
+ super(user, resourceIdentifier);
+ this.updateTableRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(updateTableRequest,
UpdateTableRequest.class);
+ this.loadTableResponse =
+ IcebergRestUtils.cloneIcebergRESTObject(loadTableResponse,
LoadTableResponse.class);
+ }
+
+ public UpdateTableRequest createTableRequest() {
+ return updateTableRequest;
+ }
+
+ public LoadTableResponse loadTableResponse() {
+ return loadTableResponse;
+ }
+}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTableFailureEvent.java
similarity index 60%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTableFailureEvent.java
index 24f74da4f..7f5b478ce 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTableFailureEvent.java
@@ -21,11 +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 creating Iceberg table failed. */
+/** Represent a failure event when updating Iceberg table failed. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
+public class IcebergUpdateTableFailureEvent extends IcebergTableFailureEvent {
+ private UpdateTableRequest updateTableRequest;
+
+ public IcebergUpdateTableFailureEvent(
+ String user,
+ NameIdentifier nameIdentifier,
+ UpdateTableRequest updateTableRequest,
+ Exception e) {
super(user, nameIdentifier, e);
+ this.updateTableRequest =
+ IcebergRestUtils.cloneIcebergRESTObject(updateTableRequest,
UpdateTableRequest.class);
+ }
+
+ public UpdateTableRequest updateTableRequest() {
+ return updateTableRequest;
}
}
diff --git
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTablePreEvent.java
similarity index 64%
copy from
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
copy to
iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTablePreEvent.java
index 24f74da4f..4681efbdb 100644
---
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergCreateTableFailureEvent.java
+++
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/listener/api/event/IcebergUpdateTablePreEvent.java
@@ -21,11 +21,20 @@ 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 creating Iceberg table failed. */
+/** Represent a pre event before updating Iceberg table. */
@DeveloperApi
-public class IcebergCreateTableFailureEvent extends IcebergTableFailureEvent {
- public IcebergCreateTableFailureEvent(String user, NameIdentifier
nameIdentifier, Exception e) {
- super(user, nameIdentifier, e);
+public class IcebergUpdateTablePreEvent extends IcebergTablePreEvent {
+ private UpdateTableRequest updateTableRequest;
+
+ public IcebergUpdateTablePreEvent(
+ String user, NameIdentifier resourceIdentifier, UpdateTableRequest
updateTableRequest) {
+ super(user, resourceIdentifier);
+ this.updateTableRequest = updateTableRequest;
+ }
+
+ public UpdateTableRequest updateTableRequest() {
+ return updateTableRequest;
}
}