From d51b37cfd51e2777d5b698d6b4eebfec28c5d305 Mon Sep 17 00:00:00 2001 From: Charles Allen Date: Wed, 4 Feb 2015 19:55:19 -0800 Subject: [PATCH] Remove QueryResource's ObjectMapper::copy() in favor of using the injected ObjectMapper directly * Workaround for https://github.com/FasterXML/jackson-databind/issues/696 --- .../java/io/druid/server/QueryResource.java | 14 +++----- .../io/druid/server/QueryResourceTest.java | 32 +++++++++++++++---- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/server/src/main/java/io/druid/server/QueryResource.java b/server/src/main/java/io/druid/server/QueryResource.java index 4df41d378280..c6007abff025 100644 --- a/server/src/main/java/io/druid/server/QueryResource.java +++ b/server/src/main/java/io/druid/server/QueryResource.java @@ -17,7 +17,6 @@ package io.druid.server; -import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.jaxrs.smile.SmileMediaTypes; @@ -89,12 +88,8 @@ public QueryResource( ) { this.config = config; - this.jsonMapper = jsonMapper.copy(); - this.jsonMapper.getFactory().configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false); - - this.smileMapper = smileMapper.copy(); - this.smileMapper.getFactory().configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false); - + this.jsonMapper = jsonMapper; + this.smileMapper = smileMapper; this.texasRanger = texasRanger; this.emitter = emitter; this.requestLogger = requestLogger; @@ -125,7 +120,8 @@ public Response doPost( String queryId = null; final String reqContentType = req.getContentType(); - final boolean isSmile = SmileMediaTypes.APPLICATION_JACKSON_SMILE.equals(reqContentType) || APPLICATION_SMILE.equals(reqContentType); + final boolean isSmile = SmileMediaTypes.APPLICATION_JACKSON_SMILE.equals(reqContentType) + || APPLICATION_SMILE.equals(reqContentType); final String contentType = isSmile ? SmileMediaTypes.APPLICATION_JACKSON_SMILE : MediaType.APPLICATION_JSON; ObjectMapper objectMapper = isSmile ? smileMapper : jsonMapper; @@ -210,7 +206,7 @@ public void write(OutputStream outputStream) throws IOException, WebApplicationE } }, contentType - ) + ) .header("X-Druid-Query-Id", queryId) .header("X-Druid-Response-Context", jsonMapper.writeValueAsString(responseContext)) .build(); diff --git a/server/src/test/java/io/druid/server/QueryResourceTest.java b/server/src/test/java/io/druid/server/QueryResourceTest.java index dd5471c22d29..16ad638ea82c 100644 --- a/server/src/test/java/io/druid/server/QueryResourceTest.java +++ b/server/src/test/java/io/druid/server/QueryResourceTest.java @@ -50,13 +50,17 @@ public class QueryResourceTest { private static final ObjectMapper jsonMapper = new DefaultObjectMapper(); - public static final ServerConfig serverConfig = new ServerConfig(){ + public static final ServerConfig serverConfig = new ServerConfig() + { @Override - public int getNumThreads(){ + public int getNumThreads() + { return 1; } + @Override - public Period getMaxIdleTime(){ + public Period getMaxIdleTime() + { return Period.seconds(1); } }; @@ -90,10 +94,13 @@ public QueryRunner getQueryRunnerForSegments( }; private static final ServiceEmitter noopServiceEmitter = new NoopServiceEmitter(); + @BeforeClass - public static void staticSetup(){ + public static void staticSetup() + { com.metamx.emitter.EmittingLogger.registerEmitter(noopServiceEmitter); } + @Before public void setup() { @@ -101,6 +108,7 @@ public void setup() EasyMock.expect(testServletRequest.getRemoteAddr()).andReturn("localhost").anyTimes(); EasyMock.replay(testServletRequest); } + private static final String simpleTimeSeriesQuery = "{\n" + " \"queryType\": \"timeseries\",\n" + " \"dataSource\": \"mmx_metrics\",\n" @@ -115,6 +123,7 @@ public void setup() + " }\n" + " ]\n" + "}"; + @Test public void testGoodQuery() throws IOException { @@ -126,10 +135,15 @@ public void testGoodQuery() throws IOException new NoopServiceEmitter(), new NoopRequestLogger(), new QueryManager() - ); - Response respone = queryResource.doPost(new ByteArrayInputStream(simpleTimeSeriesQuery.getBytes("UTF-8")), null /*pretty*/, testServletRequest); + ); + Response respone = queryResource.doPost( + new ByteArrayInputStream(simpleTimeSeriesQuery.getBytes("UTF-8")), + null /*pretty*/, + testServletRequest + ); Assert.assertNotNull(respone); } + @Test public void testBadQuery() throws IOException { @@ -143,7 +157,11 @@ public void testBadQuery() throws IOException new NoopRequestLogger(), new QueryManager() ); - Response respone = queryResource.doPost(new ByteArrayInputStream("Meka Leka Hi Meka Hiney Ho".getBytes("UTF-8")), null /*pretty*/, testServletRequest); + Response respone = queryResource.doPost( + new ByteArrayInputStream("Meka Leka Hi Meka Hiney Ho".getBytes("UTF-8")), + null /*pretty*/, + testServletRequest + ); Assert.assertNotNull(respone); Assert.assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), respone.getStatus()); }