From 5f9ac51fb3f189cfa7714697948ccf7cee95d17a Mon Sep 17 00:00:00 2001 From: Kamesh Sampath Date: Tue, 18 Feb 2025 18:02:47 +0530 Subject: [PATCH 1/2] (fix): Handle lowercase storage types in JSON payload for create catalogs --- .../apache/polaris/service/config/Serializers.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java b/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java index a2a84eef6..b755f3886 100644 --- a/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java +++ b/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java @@ -73,8 +73,18 @@ public CreateCatalogRequest deserialize(JsonParser p, DeserializationContext ctx throws IOException, JacksonException { TreeNode treeNode = p.readValueAsTree(); if (treeNode.isObject() && ((ObjectNode) treeNode).has("catalog")) { + ObjectNode catalogTreeNode = (ObjectNode) treeNode; + JsonNode catalogNode = catalogTreeNode.get("catalog"); + if (catalogNode.has("storageConfigInfo")) { + ObjectNode storageConfigNode = (ObjectNode) catalogNode.get("storageConfigInfo"); + if (storageConfigNode.has("storageType")) { + String storageType = storageConfigNode.get("storageType").asText(); + //ensure the storage type is always serialized as upper case text + storageConfigNode.put("storageType", storageType.toUpperCase()); + } + } return CreateCatalogRequest.builder() - .setCatalog(ctxt.readTreeAsValue((JsonNode) treeNode.get("catalog"), Catalog.class)) + .setCatalog(ctxt.readTreeAsValue(catalogNode, Catalog.class)) .build(); } else { return CreateCatalogRequest.builder() From 51b665362839b1dfe4cc75d256df43bc5c918e0b Mon Sep 17 00:00:00 2001 From: Kamesh Sampath Date: Wed, 19 Feb 2025 12:54:05 +0530 Subject: [PATCH 2/2] (fix): cover `type` field and locale --- .../polaris/service/config/Serializers.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java b/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java index b755f3886..386b417cd 100644 --- a/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java +++ b/service/common/src/main/java/org/apache/polaris/service/config/Serializers.java @@ -28,6 +28,9 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.IOException; +import java.util.List; +import java.util.Locale; + import org.apache.polaris.core.admin.model.AddGrantRequest; import org.apache.polaris.core.admin.model.Catalog; import org.apache.polaris.core.admin.model.CatalogRole; @@ -77,11 +80,13 @@ public CreateCatalogRequest deserialize(JsonParser p, DeserializationContext ctx JsonNode catalogNode = catalogTreeNode.get("catalog"); if (catalogNode.has("storageConfigInfo")) { ObjectNode storageConfigNode = (ObjectNode) catalogNode.get("storageConfigInfo"); - if (storageConfigNode.has("storageType")) { - String storageType = storageConfigNode.get("storageType").asText(); - //ensure the storage type is always serialized as upper case text - storageConfigNode.put("storageType", storageType.toUpperCase()); - } + List.of("type","storageType").forEach( fieldName -> { + if (storageConfigNode.has(fieldName)) { + String type = storageConfigNode.get(fieldName).asText(); + // ensure the field value is always serialized as upper case text + storageConfigNode.put(fieldName, type.toUpperCase(Locale.ROOT)); + } + }); } return CreateCatalogRequest.builder() .setCatalog(ctxt.readTreeAsValue(catalogNode, Catalog.class))