From 0dd5726586ed22a408981444377f255d9dddd1eb Mon Sep 17 00:00:00 2001 From: patrick-schultz Date: Fri, 26 Jul 2024 09:30:44 -0400 Subject: [PATCH] fix jackson max string length in backend http handler --- .../main/scala/is/hail/backend/BackendServer.scala | 2 +- .../is/hail/backend/service/ServiceBackend.scala | 7 +------ hail/src/main/scala/is/hail/utils/package.scala | 12 ++++++++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/hail/src/main/scala/is/hail/backend/BackendServer.scala b/hail/src/main/scala/is/hail/backend/BackendServer.scala index 920772d9c4e..43caf6e45e6 100644 --- a/hail/src/main/scala/is/hail/backend/BackendServer.scala +++ b/hail/src/main/scala/is/hail/backend/BackendServer.scala @@ -82,7 +82,7 @@ class BackendHttpHandler(backend: Backend) extends HttpHandler { implicit val formats: Formats = DefaultFormats try { - val body = using(exchange.getRequestBody)(JsonMethods.parse(_)) + val body = using(exchange.getRequestBody)(parseJSON(_)) if (exchange.getRequestURI.getPath == "/execute") { val config = body.extract[ExecutePayload] backend.execute(config.ir, config.timed) { (ctx, res, timings) => diff --git a/hail/src/main/scala/is/hail/backend/service/ServiceBackend.scala b/hail/src/main/scala/is/hail/backend/service/ServiceBackend.scala index bae554c156d..5514a8cae34 100644 --- a/hail/src/main/scala/is/hail/backend/service/ServiceBackend.scala +++ b/hail/src/main/scala/is/hail/backend/service/ServiceBackend.scala @@ -31,11 +31,9 @@ import java.io._ import java.nio.charset.StandardCharsets import java.util.concurrent._ -import com.fasterxml.jackson.core.StreamReadConstraints import org.apache.log4j.Logger import org.json4s.{DefaultFormats, Formats} import org.json4s.JsonAST._ -import org.json4s.jackson.JsonMethods class ServiceBackendContext( val billingProject: String, @@ -465,10 +463,7 @@ object ServiceBackendAPI { implicit val formats: Formats = DefaultFormats - StreamReadConstraints.overrideDefaultStreamReadConstraints( - StreamReadConstraints.builder().maxStringLength(Integer.MAX_VALUE).build() - ); - val input = using(fs.openNoCompression(inputURL))(JsonMethods.parse(_)) + val input = using(fs.openNoCompression(inputURL))(parseJSON(_)) val rpcConfig = (input \ "config").extract[ServiceBackendRPCPayload] // FIXME: when can the classloader be shared? (optimizer benefits!) diff --git a/hail/src/main/scala/is/hail/utils/package.scala b/hail/src/main/scala/is/hail/utils/package.scala index 201cf59aa75..98e5ecba256 100644 --- a/hail/src/main/scala/is/hail/utils/package.scala +++ b/hail/src/main/scala/is/hail/utils/package.scala @@ -26,6 +26,7 @@ import java.util.concurrent.{ } import java.util.concurrent.atomic.AtomicBoolean +import com.fasterxml.jackson.core.StreamReadConstraints import com.google.common.util.concurrent.AbstractFuture import org.apache.commons.io.output.TeeOutputStream import org.apache.commons.lang3.StringUtils @@ -35,9 +36,9 @@ import org.apache.hadoop.mapreduce.lib.input.{FileSplit => NewFileSplit} import org.apache.log4j.Level import org.apache.spark.{Partition, TaskContext} import org.apache.spark.sql.Row -import org.json4s.{Extraction, Formats, JObject, NoTypeHints, Serializer} +import org.json4s.{Extraction, Formats, JObject, JValue, JsonInput, NoTypeHints, Serializer} import org.json4s.JsonAST.{JArray, JString} -import org.json4s.jackson.Serialization +import org.json4s.jackson.{JsonMethods, Serialization} import org.json4s.reflect.TypeInfo package utils { @@ -527,6 +528,13 @@ package object utils val defaultJSONFormats: Formats = Serialization.formats(NoTypeHints) + GenericIndexedSeqSerializer + def parseJSON(in: JsonInput): JValue = { + StreamReadConstraints.overrideDefaultStreamReadConstraints( + StreamReadConstraints.builder().maxStringLength(Integer.MAX_VALUE).build() + ) + JsonMethods.parse(in) + } + def box(i: Int): java.lang.Integer = i def box(l: Long): java.lang.Long = l