From 958f28f28e924999284845ecbb61daa78e6020e2 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Wed, 7 May 2025 19:57:15 -0700 Subject: [PATCH 1/2] test backward compatibility --- .../generic/GenericTableCatalogHandler.java | 22 ++++++++++--------- .../generic-tables-api.yaml | 4 ++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java index 7f6d48cc69..126023c2b2 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java @@ -75,11 +75,12 @@ public LoadGenericTableResponse createGenericTable( GenericTableEntity createdEntity = this.genericTableCatalog.createGenericTable(identifier, format, doc, properties); GenericTable createdTable = - new GenericTable( - createdEntity.getName(), - createdEntity.getFormat(), - createdEntity.getDoc(), - createdEntity.getPropertiesAsMap()); + GenericTable.builder() + .setName(createdEntity.getName()) + .setFormat(createdEntity.getFormat()) + .setDoc(createdEntity.getDoc()) + .setProperties(createdEntity.getPropertiesAsMap()) + .build(); return LoadGenericTableResponse.builder().setTable(createdTable).build(); } @@ -97,11 +98,12 @@ public LoadGenericTableResponse loadGenericTable(TableIdentifier identifier) { GenericTableEntity loadedEntity = this.genericTableCatalog.loadGenericTable(identifier); GenericTable loadedTable = - new GenericTable( - loadedEntity.getName(), - loadedEntity.getFormat(), - loadedEntity.getDoc(), - loadedEntity.getPropertiesAsMap()); + GenericTable.builder() + .setName(loadedEntity.getName()) + .setFormat(loadedEntity.getFormat()) + .setDoc(loadedEntity.getDoc()) + .setProperties(loadedEntity.getPropertiesAsMap()) + .build(); return LoadGenericTableResponse.builder().setTable(loadedTable).build(); } diff --git a/spec/polaris-catalog-apis/generic-tables-api.yaml b/spec/polaris-catalog-apis/generic-tables-api.yaml index 92ee7f9a59..d12c50ecca 100644 --- a/spec/polaris-catalog-apis/generic-tables-api.yaml +++ b/spec/polaris-catalog-apis/generic-tables-api.yaml @@ -199,6 +199,8 @@ components: type: object additionalProperties: type: string + location: + type: string GenericTable: type: object @@ -226,6 +228,8 @@ components: type: object additionalProperties: type: string + location: + type: string LoadGenericTableResponse: description: Result used when a table is successfully loaded. From 866255f77dd475ec71b8a58bc78f88884adbd903 Mon Sep 17 00:00:00 2001 From: Yun Zou Date: Fri, 9 May 2025 10:19:10 -0700 Subject: [PATCH 2/2] using generic table builder --- .../apache/polaris/service/it/env/GenericTableApi.java | 7 ++++++- .../org/apache/polaris/spark/PolarisRESTCatalog.java | 9 ++++++++- .../spark/rest/CreateGenericTableRESTRequest.java | 4 ++++ .../apache/polaris/spark/rest/DeserializationTest.java | 9 ++++++++- spec/polaris-catalog-apis/generic-tables-api.yaml | 4 ---- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/env/GenericTableApi.java b/integration-tests/src/main/java/org/apache/polaris/service/it/env/GenericTableApi.java index 52935a8dcd..a31fd0cd2b 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/env/GenericTableApi.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/env/GenericTableApi.java @@ -89,7 +89,12 @@ public GenericTable createGenericTable( "polaris/v1/{cat}/namespaces/{ns}/generic-tables/", Map.of("cat", catalog, "ns", ns)) .post( - Entity.json(new CreateGenericTableRequest(id.name(), format, "doc", properties)))) { + Entity.json( + CreateGenericTableRequest.builder() + .setName(id.name()) + .setFormat(format) + .setDoc("doc") + .setProperties(properties)))) { return res.readEntity(LoadGenericTableResponse.class).getTable(); } } diff --git a/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/PolarisRESTCatalog.java b/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/PolarisRESTCatalog.java index 72d258511b..05a95d8573 100644 --- a/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/PolarisRESTCatalog.java +++ b/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/PolarisRESTCatalog.java @@ -47,6 +47,7 @@ import org.apache.iceberg.util.PropertyUtil; import org.apache.polaris.core.rest.PolarisEndpoints; import org.apache.polaris.core.rest.PolarisResourcePaths; +import org.apache.polaris.service.types.CreateGenericTableRequest; import org.apache.polaris.service.types.GenericTable; import org.apache.polaris.spark.rest.CreateGenericTableRESTRequest; import org.apache.polaris.spark.rest.LoadGenericTableRESTResponse; @@ -202,7 +203,13 @@ public GenericTable createGenericTable( TableIdentifier identifier, String format, String doc, Map props) { Endpoint.check(endpoints, PolarisEndpoints.V1_CREATE_GENERIC_TABLE); CreateGenericTableRESTRequest request = - new CreateGenericTableRESTRequest(identifier.name(), format, doc, props); + new CreateGenericTableRESTRequest( + CreateGenericTableRequest.builder() + .setName(identifier.name()) + .setFormat(format) + .setDoc(doc) + .setProperties(props) + .build()); LoadGenericTableRESTResponse response = restClient diff --git a/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/rest/CreateGenericTableRESTRequest.java b/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/rest/CreateGenericTableRESTRequest.java index 4ec348a80a..6a9c89a5ff 100644 --- a/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/rest/CreateGenericTableRESTRequest.java +++ b/plugins/spark/v3.5/spark/src/main/java/org/apache/polaris/spark/rest/CreateGenericTableRESTRequest.java @@ -41,6 +41,10 @@ public CreateGenericTableRESTRequest( super(name, format, doc, properties); } + public CreateGenericTableRESTRequest(CreateGenericTableRequest request) { + this(request.getName(), request.getFormat(), request.getDoc(), request.getProperties()); + } + @Override public void validate() {} } diff --git a/plugins/spark/v3.5/spark/src/test/java/org/apache/polaris/spark/rest/DeserializationTest.java b/plugins/spark/v3.5/spark/src/test/java/org/apache/polaris/spark/rest/DeserializationTest.java index e6747e6531..3ec9ddbdf3 100644 --- a/plugins/spark/v3.5/spark/src/test/java/org/apache/polaris/spark/rest/DeserializationTest.java +++ b/plugins/spark/v3.5/spark/src/test/java/org/apache/polaris/spark/rest/DeserializationTest.java @@ -36,6 +36,7 @@ import org.apache.iceberg.catalog.Namespace; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.rest.RESTSerializers; +import org.apache.polaris.service.types.CreateGenericTableRequest; import org.apache.polaris.service.types.GenericTable; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -90,7 +91,13 @@ public void testLoadGenericTableRESTResponse(String doc, Map pro public void testCreateGenericTableRESTRequest(String doc, Map properties) throws JsonProcessingException { CreateGenericTableRESTRequest request = - new CreateGenericTableRESTRequest("test-table", "delta", doc, properties); + new CreateGenericTableRESTRequest( + CreateGenericTableRequest.builder() + .setName("test-table") + .setFormat("delta") + .setDoc(doc) + .setProperties(properties) + .build()); String json = mapper.writeValueAsString(request); CreateGenericTableRESTRequest deserializedRequest = mapper.readValue(json, CreateGenericTableRESTRequest.class); diff --git a/spec/polaris-catalog-apis/generic-tables-api.yaml b/spec/polaris-catalog-apis/generic-tables-api.yaml index d12c50ecca..92ee7f9a59 100644 --- a/spec/polaris-catalog-apis/generic-tables-api.yaml +++ b/spec/polaris-catalog-apis/generic-tables-api.yaml @@ -199,8 +199,6 @@ components: type: object additionalProperties: type: string - location: - type: string GenericTable: type: object @@ -228,8 +226,6 @@ components: type: object additionalProperties: type: string - location: - type: string LoadGenericTableResponse: description: Result used when a table is successfully loaded.