From 1ee5002082fe940c8a35ee91012a31a624b23e3f Mon Sep 17 00:00:00 2001 From: paulius Date: Wed, 23 Feb 2022 10:06:56 +0200 Subject: [PATCH] Fix property with minus sign conversion problem --- .../configuration/AppConfiguration.java | 2 ++ .../PermanentSessionTypeConverter.java | 30 +++++++++++++++++++ .../configuration/AppConfigurationTest.groovy | 3 +- .../src/test/resources/application-test.yml | 1 + 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 server/src/main/java/com/exacaster/lighter/configuration/PermanentSessionTypeConverter.java diff --git a/server/src/main/java/com/exacaster/lighter/configuration/AppConfiguration.java b/server/src/main/java/com/exacaster/lighter/configuration/AppConfiguration.java index fb11a011..135b550c 100644 --- a/server/src/main/java/com/exacaster/lighter/configuration/AppConfiguration.java +++ b/server/src/main/java/com/exacaster/lighter/configuration/AppConfiguration.java @@ -1,6 +1,7 @@ package com.exacaster.lighter.configuration; import com.exacaster.lighter.spark.SubmitParams; +import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty.Access; import io.micronaut.context.annotation.ConfigurationInject; @@ -77,6 +78,7 @@ public String toString() { public static class PermanentSession { private final String id; + @JsonAlias("submit-params") private final SubmitParams submitParams; public PermanentSession(String id, SubmitParams submitParams) { diff --git a/server/src/main/java/com/exacaster/lighter/configuration/PermanentSessionTypeConverter.java b/server/src/main/java/com/exacaster/lighter/configuration/PermanentSessionTypeConverter.java new file mode 100644 index 00000000..29c0b572 --- /dev/null +++ b/server/src/main/java/com/exacaster/lighter/configuration/PermanentSessionTypeConverter.java @@ -0,0 +1,30 @@ +package com.exacaster.lighter.configuration; + +import com.exacaster.lighter.configuration.AppConfiguration.PermanentSession; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.micronaut.core.convert.ConversionContext; +import io.micronaut.core.convert.TypeConverter; +import jakarta.inject.Singleton; +import java.util.Map; +import java.util.Optional; + +@Singleton +public class PermanentSessionTypeConverter implements TypeConverter { + + private final ObjectMapper mapper; + + public PermanentSessionTypeConverter(ObjectMapper mapper) { + this.mapper = mapper; + } + + /** + * When deserializing configuration, Micronaut by default converts config properties with minus (-) sign + * to camel case values. In that case `spark.kubernetes.driver.secrets.spark-secret` key becomes + * `spark.kubernetes.driver.secrets.sparkSecret` that is unexpected behaviour. + * This converter is a workaround for this problem. + */ + @Override + public Optional convert(Map object, Class targetType, ConversionContext context) { + return Optional.of(mapper.convertValue(object, PermanentSession.class)); + } +} diff --git a/server/src/test/groovy/com/exacaster/lighter/configuration/AppConfigurationTest.groovy b/server/src/test/groovy/com/exacaster/lighter/configuration/AppConfigurationTest.groovy index 2eb477a6..090e3c76 100644 --- a/server/src/test/groovy/com/exacaster/lighter/configuration/AppConfigurationTest.groovy +++ b/server/src/test/groovy/com/exacaster/lighter/configuration/AppConfigurationTest.groovy @@ -18,7 +18,8 @@ class AppConfigurationTest extends Specification { appConfiguration.sessionConfiguration.permanentSessions.size() == 1 appConfiguration.sessionConfiguration.permanentSessions.get(0).id == "permanentId1" appConfiguration.sessionConfiguration.permanentSessions.get(0).submitParams.conf == [ - "spark.kubernetes.namespace": "spark" + "spark.kubernetes.namespace": "spark", + "spark.kubernetes.driver.secrets.spark-secret": "/etc/secret" ] } diff --git a/server/src/test/resources/application-test.yml b/server/src/test/resources/application-test.yml index 76c55a74..64cce25b 100644 --- a/server/src/test/resources/application-test.yml +++ b/server/src/test/resources/application-test.yml @@ -5,3 +5,4 @@ lighter: submit-params: conf: "spark.kubernetes.namespace": "spark" + "spark.kubernetes.driver.secrets.spark-secret": "/etc/secret"