Ali Alsuliman has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/3038
Change subject: [NO ISSUE][API][MTD] Refactor query service servlet - user
model changes: no - storage format changes: no - interface changes: no
......................................................................
[NO ISSUE][API][MTD] Refactor query service servlet
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Refactor query service servlet in addition to some code
clean-ups.
Change-Id: Idbc81219cbe2f337b3c4aaf4a242ef2ebeb165c5
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
M
asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
M
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicyFactory.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/NoMergePolicyFactory.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicyFactory.java
7 files changed, 106 insertions(+), 76 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/38/3038/1
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 765ba9c..7aa24e3 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
@@ -411,62 +411,72 @@
return result;
}
- private QueryServiceRequestParameters getRequestParameters(IServletRequest
request) throws IOException {
- final String contentType = HttpUtil.getContentTypeOnly(request);
+ private QueryServiceRequestParameters
createRequestParameters(IServletRequest request) throws IOException {
QueryServiceRequestParameters param = new
QueryServiceRequestParameters();
param.setHost(host(request));
param.setPath(servletPath(request));
+ setRequestParam(request, param);
+ return param;
+ }
+
+ protected void setRequestParam(IServletRequest request,
QueryServiceRequestParameters param) throws IOException {
+ String contentType = HttpUtil.getContentTypeOnly(request);
if (HttpUtil.ContentType.APPLICATION_JSON.equals(contentType)) {
try {
- JsonNode jsonRequest =
OBJECT_MAPPER.readTree(HttpUtil.getRequestBody(request));
- final String statementParam = Parameter.STATEMENT.str();
- if (jsonRequest.has(statementParam)) {
-
param.setStatement(jsonRequest.get(statementParam).asText());
- }
- param.setFormat(toLower(getOptText(jsonRequest,
Parameter.FORMAT.str())));
- param.setPretty(getOptBoolean(jsonRequest,
Parameter.PRETTY.str(), false));
- param.setMode(toLower(getOptText(jsonRequest,
Parameter.MODE.str())));
- param.setClientContextID(getOptText(jsonRequest,
Parameter.CLIENT_ID.str()));
- param.setTimeout(getOptText(jsonRequest,
Parameter.TIMEOUT.str()));
- param.setMaxResultReads(getOptText(jsonRequest,
Parameter.MAX_RESULT_READS.str()));
- param.setPlanFormat(getOptText(jsonRequest,
Parameter.PLAN_FORMAT.str()));
- param.setExpressionTree(getOptBoolean(jsonRequest,
Parameter.EXPRESSION_TREE.str(), false));
- param.setRewrittenExpressionTree(
- getOptBoolean(jsonRequest,
Parameter.REWRITTEN_EXPRESSION_TREE.str(), false));
- param.setLogicalPlan(getOptBoolean(jsonRequest,
Parameter.LOGICAL_PLAN.str(), false));
- param.setOptimizedLogicalPlan(
- getOptBoolean(jsonRequest,
Parameter.OPTIMIZED_LOGICAL_PLAN.str(), false));
- param.setJob(getOptBoolean(jsonRequest, Parameter.JOB.str(),
false));
- param.setSignature(getOptBoolean(jsonRequest,
Parameter.SIGNATURE.str(), true));
- param.setStatementParams(
- getOptStatementParameters(jsonRequest,
jsonRequest.fieldNames(), JsonNode::get, v -> v));
- param.setMultiStatement(getOptBoolean(jsonRequest,
Parameter.MULTI_STATEMENT.str(), true));
+ setFromJSON(request, param);
} catch (JsonParseException | JsonMappingException e) {
// if the JSON parsing fails, the statement is empty and we
get an empty statement error
GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, e.getMessage(),
e);
}
} else {
-
param.setStatement(request.getParameter(Parameter.STATEMENT.str()));
- if (param.getStatement() == null) {
- param.setStatement(HttpUtil.getRequestBody(request));
- }
-
param.setFormat(toLower(request.getParameter(Parameter.FORMAT.str())));
-
param.setPretty(Boolean.parseBoolean(request.getParameter(Parameter.PRETTY.str())));
- param.setMode(toLower(request.getParameter(Parameter.MODE.str())));
-
param.setClientContextID(request.getParameter(Parameter.CLIENT_ID.str()));
- param.setTimeout(request.getParameter(Parameter.TIMEOUT.str()));
-
param.setMaxResultReads(request.getParameter(Parameter.MAX_RESULT_READS.str()));
-
param.setPlanFormat(request.getParameter(Parameter.PLAN_FORMAT.str()));
- final String multiStatementParam =
request.getParameter(Parameter.MULTI_STATEMENT.str());
- param.setMultiStatement(multiStatementParam == null ||
Boolean.parseBoolean(multiStatementParam));
- try {
- param.setStatementParams(getOptStatementParameters(request,
request.getParameterNames().iterator(),
- IServletRequest::getParameter,
OBJECT_MAPPER::readTree));
- } catch (JsonParseException | JsonMappingException e) {
- GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, e.getMessage(),
e);
- }
+ setFromRequest(request, param);
}
- return param;
+ }
+
+ private void setFromJSON(IServletRequest request,
QueryServiceRequestParameters param) throws IOException {
+ JsonNode jsonRequest =
OBJECT_MAPPER.readTree(HttpUtil.getRequestBody(request));
+ param.setFormat(toLower(getOptText(jsonRequest,
Parameter.FORMAT.str())));
+ param.setPretty(getOptBoolean(jsonRequest, Parameter.PRETTY.str(),
false));
+ param.setMode(toLower(getOptText(jsonRequest, Parameter.MODE.str())));
+ param.setClientContextID(getOptText(jsonRequest,
Parameter.CLIENT_ID.str()));
+ param.setTimeout(getOptText(jsonRequest, Parameter.TIMEOUT.str()));
+ param.setMaxResultReads(getOptText(jsonRequest,
Parameter.MAX_RESULT_READS.str()));
+ param.setPlanFormat(getOptText(jsonRequest,
Parameter.PLAN_FORMAT.str()));
+ param.setExpressionTree(getOptBoolean(jsonRequest,
Parameter.EXPRESSION_TREE.str(), false));
+ param.setRewrittenExpressionTree(getOptBoolean(jsonRequest,
Parameter.REWRITTEN_EXPRESSION_TREE.str(), false));
+ param.setLogicalPlan(getOptBoolean(jsonRequest,
Parameter.LOGICAL_PLAN.str(), false));
+ param.setOptimizedLogicalPlan(getOptBoolean(jsonRequest,
Parameter.OPTIMIZED_LOGICAL_PLAN.str(), false));
+ param.setJob(getOptBoolean(jsonRequest, Parameter.JOB.str(), false));
+ param.setSignature(getOptBoolean(jsonRequest,
Parameter.SIGNATURE.str(), true));
+ param.setStatementParams(
+ getOptStatementParameters(jsonRequest,
jsonRequest.fieldNames(), JsonNode::get, v -> v));
+ param.setMultiStatement(getOptBoolean(jsonRequest,
Parameter.MULTI_STATEMENT.str(), true));
+ String statementParam = Parameter.STATEMENT.str();
+ if (jsonRequest.has(statementParam)) {
+ param.setStatement(jsonRequest.get(statementParam).asText());
+ }
+ }
+
+ private void setFromRequest(IServletRequest request,
QueryServiceRequestParameters param) throws IOException {
+ param.setStatement(request.getParameter(Parameter.STATEMENT.str()));
+ if (param.getStatement() == null) {
+ param.setStatement(HttpUtil.getRequestBody(request));
+ }
+ param.setFormat(toLower(request.getParameter(Parameter.FORMAT.str())));
+
param.setPretty(Boolean.parseBoolean(request.getParameter(Parameter.PRETTY.str())));
+ param.setMode(toLower(request.getParameter(Parameter.MODE.str())));
+
param.setClientContextID(request.getParameter(Parameter.CLIENT_ID.str()));
+ param.setTimeout(request.getParameter(Parameter.TIMEOUT.str()));
+
param.setMaxResultReads(request.getParameter(Parameter.MAX_RESULT_READS.str()));
+ param.setPlanFormat(request.getParameter(Parameter.PLAN_FORMAT.str()));
+ final String multiStatementParam =
request.getParameter(Parameter.MULTI_STATEMENT.str());
+ param.setMultiStatement(multiStatementParam == null ||
Boolean.parseBoolean(multiStatementParam));
+ try {
+ param.setStatementParams(getOptStatementParameters(request,
request.getParameterNames().iterator(),
+ IServletRequest::getParameter, OBJECT_MAPPER::readTree));
+ } catch (JsonParseException | JsonMappingException e) {
+ GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, e.getMessage(), e);
+ }
}
private static ResultDelivery parseResultDelivery(String mode) {
@@ -509,7 +519,7 @@
}
private void handleRequest(IServletRequest request, IServletResponse
response) throws IOException {
- QueryServiceRequestParameters param = getRequestParameters(request);
+ QueryServiceRequestParameters param = createRequestParameters(request);
LOGGER.info("handleRequest: {}", param);
long elapsedStart = System.nanoTime();
final PrintWriter httpWriter = response.writer();
@@ -530,6 +540,7 @@
// buffer the output until we are ready to set the status of the
response message correctly
sessionOutput.hold();
sessionOutput.out().print("{\n");
+ printPre(sessionOutput.out());
printRequestId(sessionOutput.out());
printClientContextID(sessionOutput.out(), param);
printSignature(sessionOutput.out(), param);
@@ -647,7 +658,11 @@
ResultUtil.printError(sessionOut, throwable);
}
- protected void printWarnings(PrintWriter pw, List<ExecutionWarning>
warnings) {
+ protected void printPre(PrintWriter sessionOut) {
+ // do nothing
+ }
+
+ private void printWarnings(PrintWriter pw, List<ExecutionWarning>
warnings) {
ResultUtil.printWarnings(pw, warnings);
}
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index 113fc67..355763a 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -1797,7 +1797,7 @@
if (json != null) {
String dvName = json.get("DataverseName").asText();
if (!dvName.equals("Metadata") &&
!dvName.equals("Default")) {
- toBeDropped.add(dvName);
+ toBeDropped.add("`" + dvName + "`");
}
}
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
index d2a4b1c..5377c9d 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
@@ -34,33 +34,33 @@
public static final MetadataIndexImmutableProperties PROPERTIES_METADATA =
new
MetadataIndexImmutableProperties(MetadataConstants.METADATA_DATAVERSE_NAME, 0,
0);
public static final MetadataIndexImmutableProperties PROPERTIES_DATAVERSE =
- new MetadataIndexImmutableProperties("Dataverse", 1, 1);
+ new
MetadataIndexImmutableProperties(MetadataConstants.DATAVERSE_DATASET_NAME, 1,
1);
public static final MetadataIndexImmutableProperties PROPERTIES_DATASET =
- new MetadataIndexImmutableProperties("Dataset", 2, 2);
+ new
MetadataIndexImmutableProperties(MetadataConstants.DATASET_DATASET_NAME, 2, 2);
public static final MetadataIndexImmutableProperties PROPERTIES_DATATYPE =
- new MetadataIndexImmutableProperties("Datatype", 3, 3);
+ new
MetadataIndexImmutableProperties(MetadataConstants.DATATYPE_DATASET_NAME, 3, 3);
public static final MetadataIndexImmutableProperties PROPERTIES_INDEX =
- new MetadataIndexImmutableProperties("Index", 4, 4);
+ new
MetadataIndexImmutableProperties(MetadataConstants.INDEX_DATASET_NAME, 4, 4);
public static final MetadataIndexImmutableProperties PROPERTIES_NODE =
- new MetadataIndexImmutableProperties("Node", 5, 5);
+ new
MetadataIndexImmutableProperties(MetadataConstants.NODE_DATASET_NAME, 5, 5);
public static final MetadataIndexImmutableProperties PROPERTIES_NODEGROUP =
- new MetadataIndexImmutableProperties("Nodegroup", 6, 6);
+ new
MetadataIndexImmutableProperties(MetadataConstants.NODEGROUP_DATASET_NAME, 6,
6);
public static final MetadataIndexImmutableProperties PROPERTIES_FUNCTION =
- new MetadataIndexImmutableProperties("Function", 7, 7);
+ new
MetadataIndexImmutableProperties(MetadataConstants.FUNCTION_DATASET_NAME, 7, 7);
public static final MetadataIndexImmutableProperties
PROPERTIES_DATASOURCE_ADAPTER =
- new MetadataIndexImmutableProperties("DatasourceAdapter", 8, 8);
+ new
MetadataIndexImmutableProperties(MetadataConstants.DATASOURCE_ADAPTER_DATASET_NAME,
8, 8);
public static final MetadataIndexImmutableProperties PROPERTIES_LIBRARY =
- new MetadataIndexImmutableProperties("Library", 9, 9);
+ new
MetadataIndexImmutableProperties(MetadataConstants.LIBRARY_DATASET_NAME, 9, 9);
public static final MetadataIndexImmutableProperties PROPERTIES_FEED =
- new MetadataIndexImmutableProperties("Feed", 10, 10);
+ new
MetadataIndexImmutableProperties(MetadataConstants.FEED_DATASET_NAME, 10, 10);
public static final MetadataIndexImmutableProperties
PROPERTIES_FEED_CONNECTION =
- new MetadataIndexImmutableProperties("FeedConnection", 11, 11);
+ new
MetadataIndexImmutableProperties(MetadataConstants.FEED_CONNECTION_DATASET_NAME,
11, 11);
public static final MetadataIndexImmutableProperties
PROPERTIES_FEED_POLICY =
- new MetadataIndexImmutableProperties("FeedPolicy", 12, 12);
+ new
MetadataIndexImmutableProperties(MetadataConstants.FEED_POLICY_DATASET_NAME,
12, 12);
public static final MetadataIndexImmutableProperties
PROPERTIES_COMPACTION_POLICY =
- new MetadataIndexImmutableProperties("CompactionPolicy", 13, 13);
+ new
MetadataIndexImmutableProperties(MetadataConstants.COMPACTION_POLICY_DATASET_NAME,
13, 13);
public static final MetadataIndexImmutableProperties
PROPERTIES_EXTERNAL_FILE =
- new MetadataIndexImmutableProperties("ExternalFile", 14, 14);
+ new
MetadataIndexImmutableProperties(MetadataConstants.EXTERNAL_FILE_DATASET_NAME,
14, 14);
public static final IMetadataIndex DATAVERSE_DATASET =
new MetadataIndex(PROPERTIES_DATAVERSE, 2, new IAType[] {
BuiltinType.ASTRING },
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
index 6769770..8446154 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/MetadataConstants.java
@@ -26,10 +26,24 @@
// Name of the dataverse the metadata lives in.
public static final String METADATA_DATAVERSE_NAME = "Metadata";
-
// Name of the node group where metadata is stored on.
public static final String METADATA_NODEGROUP_NAME = "MetadataGroup";
+ public static final String DATAVERSE_DATASET_NAME = "Dataverse";
+ public static final String DATASET_DATASET_NAME = "Dataset";
+ public static final String INDEX_DATASET_NAME = "Index";
+ public static final String DATATYPE_DATASET_NAME = "Datatype";
+ public static final String NODE_DATASET_NAME = "Node";
+ public static final String NODEGROUP_DATASET_NAME = "Nodegroup";
+ public static final String FUNCTION_DATASET_NAME = "Function";
+ public static final String DATASOURCE_ADAPTER_DATASET_NAME =
"DatasourceAdapter";
+ public static final String LIBRARY_DATASET_NAME = "Library";
+ public static final String FEED_DATASET_NAME = "Feed";
+ public static final String FEED_CONNECTION_DATASET_NAME = "FeedConnection";
+ public static final String FEED_POLICY_DATASET_NAME = "FeedPolicy";
+ public static final String COMPACTION_POLICY_DATASET_NAME =
"CompactionPolicy";
+ public static final String EXTERNAL_FILE_DATASET_NAME = "ExternalFile";
+
private MetadataConstants() {
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicyFactory.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicyFactory.java
index 75eaf83..906b89a 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicyFactory.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/ConstantMergePolicyFactory.java
@@ -18,8 +18,7 @@
*/
package org.apache.hyracks.storage.am.lsm.common.impls;
-import java.util.Arrays;
-import java.util.HashSet;
+import java.util.Collections;
import java.util.Map;
import java.util.Set;
@@ -35,12 +34,13 @@
public class ConstantMergePolicyFactory implements ILSMMergePolicyFactory {
private static final long serialVersionUID = 1L;
+ public static final String NAME = "constant";
public static final String NUM_COMPONENTS = "num-components";
- private static final Set<String> PROPERTIES_NAMES = new
HashSet<>(Arrays.asList(NUM_COMPONENTS));
+ public static final Set<String> PROPERTIES_NAMES =
Collections.singleton(NUM_COMPONENTS);
@Override
public String getName() {
- return "constant";
+ return NAME;
}
@Override
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/NoMergePolicyFactory.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/NoMergePolicyFactory.java
index 3d07a67..b6b343e 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/NoMergePolicyFactory.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/NoMergePolicyFactory.java
@@ -19,8 +19,7 @@
package org.apache.hyracks.storage.am.lsm.common.impls;
-import java.util.Arrays;
-import java.util.HashSet;
+import java.util.Collections;
import java.util.Map;
import java.util.Set;
@@ -36,8 +35,7 @@
public class NoMergePolicyFactory implements ILSMMergePolicyFactory {
private static final long serialVersionUID = 1L;
- private static final String[] SET_VALUES = new String[] {};
- private static final Set<String> PROPERTIES_NAMES = new
HashSet<>(Arrays.asList(SET_VALUES));
+ public static final Set<String> PROPERTIES_NAMES = Collections.emptySet();
public static final String NAME = "no-merge";
@Override
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicyFactory.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicyFactory.java
index 3480eaf..0ac16fb 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicyFactory.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/PrefixMergePolicyFactory.java
@@ -20,7 +20,9 @@
package org.apache.hyracks.storage.am.lsm.common.impls;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -36,14 +38,15 @@
public class PrefixMergePolicyFactory implements ILSMMergePolicyFactory {
private static final long serialVersionUID = 1L;
-
- private static final String[] SET_VALUES =
- new String[] { "max-mergable-component-size",
"max-tolerance-component-count" };
- private static final Set<String> PROPERTIES_NAMES = new
HashSet<>(Arrays.asList(SET_VALUES));
+ public static final String NAME = "prefix";
+ public static final String MAX_MERGABLE_SIZE =
"max-mergable-component-size";
+ public static final String MAX_TOLERANCE_COUNT =
"max-tolerance-component-count";
+ public static final Set<String> PROPERTIES_NAMES =
+ Collections.unmodifiableSet(new
HashSet<>(Arrays.asList(MAX_MERGABLE_SIZE, MAX_TOLERANCE_COUNT)));
@Override
public String getName() {
- return "prefix";
+ return NAME;
}
@Override
--
To view, visit https://asterix-gerrit.ics.uci.edu/3038
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Idbc81219cbe2f337b3c4aaf4a242ef2ebeb165c5
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ali Alsuliman <[email protected]>