Murtadha Hubail has submitted this change and it was merged. Change subject: [NO ISSUE][OTH] Make Query Service Parameters Extensible ......................................................................
[NO ISSUE][OTH] Make Query Service Parameters Extensible - user model changes: no - storage format changes: no - interface changes: no Details: - Make query service parameters extensible to allow extensions to set additional parameters. Change-Id: Ice7b70279da899cce1fe89140bc158642fd13348 Reviewed-on: https://asterix-gerrit.ics.uci.edu/3283 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Till Westmann <[email protected]> --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java 2 files changed, 40 insertions(+), 29 deletions(-) Approvals: Till Westmann: Looks good to me, approved Jenkins: Verified; No violations found; ; Verified diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java index e0af3bd..df321bc 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java @@ -204,33 +204,37 @@ this.multiStatement = multiStatement; } + public ObjectNode asJson() { + ObjectNode object = OBJECT_MAPPER.createObjectNode(); + object.put("host", host); + object.put("path", path); + object.put("statement", statement != null ? JSONUtil.escape(new StringBuilder(), statement).toString() : null); + object.put("pretty", pretty); + object.put("mode", mode); + object.put("clientContextID", clientContextID); + object.put("format", format); + object.put("timeout", timeout); + object.put("maxResultReads", maxResultReads); + object.put("planFormat", planFormat); + object.put("expressionTree", expressionTree); + object.put("rewrittenExpressionTree", rewrittenExpressionTree); + object.put("logicalPlan", logicalPlan); + object.put("optimizedLogicalPlan", optimizedLogicalPlan); + object.put("job", job); + object.put("signature", signature); + object.put("multiStatement", multiStatement); + if (statementParams != null) { + for (Map.Entry<String, JsonNode> statementParam : statementParams.entrySet()) { + object.set('$' + statementParam.getKey(), statementParam.getValue()); + } + } + return object; + } + @Override public String toString() { try { - ObjectNode on = OBJECT_MAPPER.createObjectNode(); - on.put("host", host); - on.put("path", path); - on.put("statement", statement != null ? JSONUtil.escape(new StringBuilder(), statement).toString() : null); - on.put("pretty", pretty); - on.put("mode", mode); - on.put("clientContextID", clientContextID); - on.put("format", format); - on.put("timeout", timeout); - on.put("maxResultReads", maxResultReads); - on.put("planFormat", planFormat); - on.put("expressionTree", expressionTree); - on.put("rewrittenExpressionTree", rewrittenExpressionTree); - on.put("logicalPlan", logicalPlan); - on.put("optimizedLogicalPlan", optimizedLogicalPlan); - on.put("job", job); - on.put("signature", signature); - on.put("multiStatement", multiStatement); - if (statementParams != null) { - for (Map.Entry<String, JsonNode> statementParam : statementParams.entrySet()) { - on.set('$' + statementParam.getKey(), statementParam.getValue()); - } - } - return OBJECT_MAPPER.writeValueAsString(on); + return OBJECT_MAPPER.writeValueAsString(asJson()); } catch (JsonProcessingException e) { QueryServiceServlet.LOGGER.debug("unexpected exception marshalling {} instance to json", getClass(), e); return e.toString(); diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java index 6e93c9e..1c66ce8 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java @@ -87,6 +87,7 @@ import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; + import io.netty.handler.codec.http.HttpResponseStatus; public class QueryServiceServlet extends AbstractQueryApiServlet { @@ -449,10 +450,11 @@ param.setStatementParams( getOptStatementParameters(jsonRequest, jsonRequest.fieldNames(), JsonNode::get, v -> v)); param.setMultiStatement(getOptBoolean(jsonRequest, Parameter.MULTI_STATEMENT, true)); - setJsonOptionalParameters(jsonRequest, optionalParameters); + setJsonOptionalParameters(jsonRequest, param, optionalParameters); } - protected void setJsonOptionalParameters(JsonNode jsonRequest, Map<String, String> optionalParameters) { + protected void setJsonOptionalParameters(JsonNode jsonRequest, QueryServiceRequestParameters param, + Map<String, String> optionalParameters) { // allows extensions to set extra parameters } @@ -474,10 +476,11 @@ } catch (JsonParseException | JsonMappingException e) { GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, e.getMessage(), e); } - setOptionalParameters(request, optionalParameters); + setOptionalParameters(request, param, optionalParameters); } - protected void setOptionalParameters(IServletRequest request, Map<String, String> optionalParameters) { + protected void setOptionalParameters(IServletRequest request, QueryServiceRequestParameters param, + Map<String, String> optionalParameters) { // allows extensions to set extra parameters } @@ -538,7 +541,7 @@ Charset resultCharset = HttpUtil.setContentType(response, HttpUtil.ContentType.APPLICATION_JSON, request); PrintWriter httpWriter = response.writer(); SessionOutput sessionOutput = createSessionOutput(httpWriter); - QueryServiceRequestParameters param = new QueryServiceRequestParameters(); + QueryServiceRequestParameters param = newRequestParameters(); try { // buffer the output until we are ready to set the status of the response message correctly sessionOutput.hold(); @@ -748,6 +751,10 @@ pw.print(",\n"); } + protected QueryServiceRequestParameters newRequestParameters() { + return new QueryServiceRequestParameters(); + } + private static boolean isJsonFormat(String format) { return format.startsWith(HttpUtil.ContentType.APPLICATION_JSON) || format.equalsIgnoreCase(HttpUtil.ContentType.JSON); -- To view, visit https://asterix-gerrit.ics.uci.edu/3283 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ice7b70279da899cce1fe89140bc158642fd13348 Gerrit-PatchSet: 2 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]>
