Till Westmann has submitted this change and it was merged. Change subject: Handle error conditions in the /query/status API ......................................................................
Handle error conditions in the /query/status API Change-Id: I30176c5c70dcc5f7f6605ad79dd0e41967373d9c Reviewed-on: https://asterix-gerrit.ics.uci.edu/1522 Tested-by: Jenkins <[email protected]> Reviewed-by: Yingyi Bu <[email protected]> Integration-Tests: Jenkins <[email protected]> --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java R asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/APIExecutionTest.java A asterixdb/asterix-app/src/test/resources/runtimets/api.xml A asterixdb/asterix-app/src/test/resources/runtimets/only_api.xml D asterixdb/asterix-app/src/test/resources/runtimets/queries/api/APIQueries.xml A asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_1/query_status_1.1.get.http A asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_2/query_status_2.1.get.http A asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_3/query_status_3.1.get.http A asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_4/query_status_4.1.get.http M asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java M hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties M hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java M hyracks-fullstack/hyracks/hyracks-ipc/src/main/java/org/apache/hyracks/ipc/impl/IPCSystem.java 15 files changed, 278 insertions(+), 94 deletions(-) Approvals: Yingyi Bu: Looks good to me, approved Jenkins: Verified; Verified Objections: Jenkins: Violations found; Violations found diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java index 5a62eaa..1c3f4c7 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java @@ -29,6 +29,7 @@ import org.apache.asterix.app.result.ResultReader; import org.apache.hyracks.api.client.IHyracksClientConnection; +import org.apache.hyracks.api.dataset.DatasetJobRecord; import org.apache.hyracks.api.dataset.IHyracksDataset; import org.apache.hyracks.api.dataset.ResultSetId; import org.apache.hyracks.api.job.JobId; @@ -38,11 +39,11 @@ import org.apache.hyracks.http.server.AbstractServlet; import org.apache.hyracks.http.server.utils.HttpUtil; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpResponseStatus; public class QueryStatusApiServlet extends AbstractServlet { @@ -56,7 +57,7 @@ protected void get(IServletRequest request, IServletResponse response) { response.setStatus(HttpResponseStatus.OK); try { - HttpUtil.setContentType(response, HttpUtil.ContentType.TEXT_HTML, HttpUtil.Encoding.UTF8); + HttpUtil.setContentType(response, HttpUtil.ContentType.TEXT_PLAIN, HttpUtil.Encoding.UTF8); } catch (IOException e) { LOGGER.log(Level.WARNING, "Failure setting content type", e); response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR); @@ -65,6 +66,15 @@ String strHandle = request.getParameter("handle"); PrintWriter out = response.writer(); try { + ObjectMapper om = new ObjectMapper(); + JsonNode handle = parseHandle(om, strHandle, LOGGER); + if (handle == null) { + response.setStatus(HttpResponseStatus.BAD_REQUEST); + return; + } + JobId jobId = new JobId(handle.get(0).asLong()); + ResultSetId rsId = new ResultSetId(handle.get(1).asLong()); + IHyracksDataset hds = (IHyracksDataset) ctx.get(HYRACKS_DATASET_ATTR); if (hds == null) { synchronized (ctx) { @@ -76,12 +86,6 @@ } } } - ObjectMapper om = new ObjectMapper(); - JsonNode handleObj = om.readTree(strHandle); - JsonNode handle = handleObj.get("handle"); - JobId jobId = new JobId(handle.get(0).asLong()); - ResultSetId rsId = new ResultSetId(handle.get(1).asLong()); - /* TODO(madhusudancs): We need to find a way to LOSSLESS_JSON serialize default format obtained from * metadataProvider in the AQLTranslator and store it as part of the result handle. */ @@ -89,14 +93,32 @@ resultReader.open(jobId, rsId); ObjectNode jsonResponse = om.createObjectNode(); - jsonResponse.put("status", resultReader.getStatus().name()); + final DatasetJobRecord.Status status = resultReader.getStatus(); + if (status == null) { + LOGGER.log(Level.INFO, "No results for: \"" + strHandle + "\""); + response.setStatus(HttpResponseStatus.NOT_FOUND); + return; + } + jsonResponse.put("status", status.name()); out.write(jsonResponse.toString()); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failure handling a request", e); out.println(e.getMessage()); - e.printStackTrace(out); } } + static JsonNode parseHandle(ObjectMapper om, String strHandle, Logger logger) throws IOException { + if (strHandle == null) { + logger.log(Level.WARNING, "No handle provided"); + } else { + try { + JsonNode handleObj = om.readTree(strHandle); + return handleObj.get("handle"); + } catch (JsonProcessingException e) { + logger.log(Level.WARNING, "Invalid handle: \"" + strHandle + "\""); + } + } + return null; + } } diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/ClusterStateExecutionTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/APIExecutionTest.java similarity index 87% rename from asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/ClusterStateExecutionTest.java rename to asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/APIExecutionTest.java index 4d19cbf..82f90ec 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/ClusterStateExecutionTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/APIExecutionTest.java @@ -33,7 +33,7 @@ * Runs the cluster state runtime tests with the storage parallelism. */ @RunWith(Parameterized.class) -public class ClusterStateExecutionTest { +public class APIExecutionTest { protected static final String TEST_CONFIG_FILE_NAME = "asterix-build-configuration.xml"; @BeforeClass @@ -46,14 +46,14 @@ LangExecutionUtil.tearDown(); } - @Parameters(name = "ClusterStateExecutionTest {index}: {0}") + @Parameters(name = "APIExecutionTest {index}: {0}") public static Collection<Object[]> tests() throws Exception { - return LangExecutionUtil.tests("only_cluster_state.xml", "cluster_state.xml"); + return LangExecutionUtil.tests("only_api.xml", "api.xml"); } protected TestCaseContext tcCtx; - public ClusterStateExecutionTest(TestCaseContext tcCtx) { + public APIExecutionTest(TestCaseContext tcCtx) { this.tcCtx = tcCtx; } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/api.xml b/asterixdb/asterix-app/src/test/resources/runtimets/api.xml new file mode 100644 index 0000000..6e97c0e --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/api.xml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + ! Licensed to the Apache Software Foundation (ASF) under one + ! or more contributor license agreements. See the NOTICE file + ! distributed with this work for additional information + ! regarding copyright ownership. The ASF licenses this file + ! to you under the Apache License, Version 2.0 (the + ! "License"); you may not use this file except in compliance + ! with the License. You may obtain a copy of the License at + ! + ! http://www.apache.org/licenses/LICENSE-2.0 + ! + ! Unless required by applicable law or agreed to in writing, + ! software distributed under the License is distributed on an + ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ! KIND, either express or implied. See the License for the + ! specific language governing permissions and limitations + ! under the License. + !--> +<test-suite xmlns="urn:xml.testframework.asterix.apache.org" ResultOffsetPath="results" QueryOffsetPath="queries"> + <test-group name="api"> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_1"> + <output-dir compare="Text">cluster_state_1</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_2"> + <output-dir compare="Text">cluster_state_2</output-dir> + <expected-error>HTTP/1.1 404 Not Found</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_3"> + <output-dir compare="Text">cluster_state_3</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_4"> + <output-dir compare="Text">cluster_state_4</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_cc_1"> + <output-dir compare="Text">cluster_state_cc_1</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_cc_stats_1"> + <output-dir compare="Text">cluster_state_cc_stats_1</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="cluster_state_nc_threaddump_1"> + <output-dir compare="Text">cluster_state_nc_threaddump_1</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="version_1"> + <output-dir compare="Text">version_1</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="diagnostics_1"> + <output-dir compare="Text">diagnostics_1</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="replication"> + <output-dir compare="Text">replication</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="query_status_1"> + <output-dir compare="Text">query_status_1</output-dir> + <expected-error>HTTP/1.1 404 Not Found</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="query_status_2"> + <output-dir compare="Text">query_status_2</output-dir> + <expected-error>HTTP/1.1 400 Bad Request</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="query_status_3"> + <output-dir compare="Text">query_status_3</output-dir> + <expected-error>HTTP/1.1 400 Bad Request</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="api"> + <compilation-unit name="query_status_4"> + <output-dir compare="Text">query_status_4</output-dir> + <expected-error>HTTP/1.1 400 Bad Request</expected-error> + </compilation-unit> + </test-case> + </test-group> +</test-suite> diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/only_api.xml b/asterixdb/asterix-app/src/test/resources/runtimets/only_api.xml new file mode 100644 index 0000000..eea32a7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/only_api.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!-- + ~ /* + ~ * Licensed to the Apache Software Foundation (ASF) under one + ~ * or more contributor license agreements. See the NOTICE file + ~ * distributed with this work for additional information + ~ * regarding copyright ownership. The ASF licenses this file + ~ * to you under the Apache License, Version 2.0 (the + ~ * "License"); you may not use this file except in compliance + ~ * with the License. You may obtain a copy of the License at + ~ * + ~ * http://www.apache.org/licenses/LICENSE-2.0 + ~ * + ~ * Unless required by applicable law or agreed to in writing, + ~ * software distributed under the License is distributed on an + ~ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ * KIND, either express or implied. See the License for the + ~ * specific language governing permissions and limitations + ~ * under the License. + ~ */ + --> +<test-suite xmlns="urn:xml.testframework.asterix.apache.org" ResultOffsetPath="results" QueryOffsetPath="queries"> + <test-group name="failed"> + </test-group> +</test-suite> diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/APIQueries.xml b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/APIQueries.xml deleted file mode 100644 index eb505f1..0000000 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/APIQueries.xml +++ /dev/null @@ -1,66 +0,0 @@ -<!-- - ! Licensed to the Apache Software Foundation (ASF) under one - ! or more contributor license agreements. See the NOTICE file - ! distributed with this work for additional information - ! regarding copyright ownership. The ASF licenses this file - ! to you under the Apache License, Version 2.0 (the - ! "License"); you may not use this file except in compliance - ! with the License. You may obtain a copy of the License at - ! - ! http://www.apache.org/licenses/LICENSE-2.0 - ! - ! Unless required by applicable law or agreed to in writing, - ! software distributed under the License is distributed on an - ! "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - ! KIND, either express or implied. See the License for the - ! specific language governing permissions and limitations - ! under the License. - !--> -<test-group name="api"> - <test-case FilePath="api"> - <compilation-unit name="cluster_state_2"> - <output-dir compare="Text">cluster_state_2</output-dir> - <expected-error>HTTP/1.1 404 Not Found</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="cluster_state_3"> - <output-dir compare="Text">cluster_state_3</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="cluster_state_4"> - <output-dir compare="Text">cluster_state_4</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="cluster_state_cc_1"> - <output-dir compare="Text">cluster_state_cc_1</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="cluster_state_cc_stats_1"> - <output-dir compare="Text">cluster_state_cc_stats_1</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="cluster_state_nc_threaddump_1"> - <output-dir compare="Text">cluster_state_nc_threaddump_1</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="version_1"> - <output-dir compare="Text">version_1</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="diagnostics_1"> - <output-dir compare="Text">diagnostics_1</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="api"> - <compilation-unit name="replication"> - <output-dir compare="Text">replication</output-dir> - </compilation-unit> - </test-case> -</test-group> \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_1/query_status_1.1.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_1/query_status_1.1.get.http new file mode 100644 index 0000000..c18a55b --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_1/query_status_1.1.get.http @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Test case Name : query_status_1 + * Description : test query status for non-existent result + * Expected Result : Negative + * Date : 7th September 2016 + */ +/query/status?handle={"handle":[18,0]} diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_2/query_status_2.1.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_2/query_status_2.1.get.http new file mode 100644 index 0000000..d7ece4c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_2/query_status_2.1.get.http @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Test case Name : query_status_2 + * Description : test query status for incorrect handle + * Expected Result : Negative + * Date : 7th September 2016 + */ +/query/status?handle={"handle":[18,0] diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_3/query_status_3.1.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_3/query_status_3.1.get.http new file mode 100644 index 0000000..a7ff551 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_3/query_status_3.1.get.http @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Test case Name : query_status_3 + * Description : test query status for empty handle + * Expected Result : Negative + * Date : 7th September 2016 + */ +/query/status?handle diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_4/query_status_4.1.get.http b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_4/query_status_4.1.get.http new file mode 100644 index 0000000..5831686 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/api/query_status_4/query_status_4.1.get.http @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* + * Test case Name : query_status_4 + * Description : test query status for non-existent handle + * Expected Result : Negative + * Date : 7th September 2016 + */ +/query/status?handl={"handle":[18,0]} diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml index f9242f6..a4bd36f 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml @@ -19,7 +19,6 @@ <!-- Keep test-suite list in Alphabetical order. --> <!DOCTYPE test-suite [ - <!ENTITY APIQueries SYSTEM "queries/api/APIQueries.xml"> <!ENTITY ComparisonQueries SYSTEM "queries/comparison/ComparisonQueries.xml"> <!ENTITY DeepEqualQueries SYSTEM "queries/comparison/deep_equal/DeepEqualQueries.xml"> <!ENTITY RecordsQueries SYSTEM "queries/objects/ObjectsQueries.xml"> @@ -32,7 +31,6 @@ ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql"> - &APIQueries; <test-group name="external-library"> <test-case FilePath="external-library"> <compilation-unit name="typed_adapter"> diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java index b5bd1a9..1b97a60 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java @@ -58,6 +58,7 @@ public static final int ERROR_FINDING_DISTRIBUTED_JOB = 21; public static final int DUPLICATE_DISTRIBUTED_JOB = 22; public static final int DISTRIBUTED_JOB_FAILURE = 23; + public static final int NO_RESULTSET = 24; // Compilation error codes. public static final int RULECOLLECTION_NOT_INSTANCE_OF_LIST = 10001; diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties index f536d3e..3711e48 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties @@ -42,5 +42,6 @@ 21 = The distributed job %1$s was not found 22 = The distributed job %1$s already exists 23 = The distributed work failed for %1$s at %2$s +24 = No result set %1$s for job %2$s 10000 = The given rule collection %1$s is not an instance of the List class. diff --git a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java index f6f05d2..e47d822 100644 --- a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java +++ b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java @@ -25,6 +25,7 @@ import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; import java.util.logging.Logger; import org.apache.hyracks.api.channels.IInputChannel; @@ -37,6 +38,7 @@ import org.apache.hyracks.api.dataset.IHyracksDatasetDirectoryServiceConnection; import org.apache.hyracks.api.dataset.IHyracksDatasetReader; import org.apache.hyracks.api.dataset.ResultSetId; +import org.apache.hyracks.api.exceptions.ErrorCode; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.api.exceptions.HyracksException; import org.apache.hyracks.api.job.JobId; @@ -87,13 +89,16 @@ @Override public Status getResultStatus() { - Status status = null; try { - status = datasetDirectoryServiceConnection.getDatasetResultStatus(jobId, resultSetId); + return datasetDirectoryServiceConnection.getDatasetResultStatus(jobId, resultSetId); + } catch (HyracksDataException e) { + if (e.getErrorCode() != ErrorCode.NO_RESULTSET) { + LOGGER.log(Level.WARNING, "Exception retrieving result set for job " + jobId, e); + } } catch (Exception e) { - // TODO(madhusudancs): Decide what to do in case of error + LOGGER.log(Level.WARNING, "Exception retrieving result set for job " + jobId, e); } - return status; + return null; } private DatasetDirectoryRecord getRecord(int partition) throws Exception { diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java index c4cf38d..ceeb9fa 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java @@ -162,13 +162,9 @@ @Override public synchronized Status getResultStatus(JobId jobId, ResultSetId rsId) throws HyracksDataException { - DatasetJobRecord djr; - while ((djr = getDatasetJobRecord(jobId)) == null) { - try { - wait(); - } catch (InterruptedException e) { - throw new HyracksDataException(e); - } + DatasetJobRecord djr = getDatasetJobRecord(jobId); + if (djr == null) { + throw HyracksDataException.create(ErrorCode.NO_RESULTSET, rsId, jobId); } return djr.getStatus(); } diff --git a/hyracks-fullstack/hyracks/hyracks-ipc/src/main/java/org/apache/hyracks/ipc/impl/IPCSystem.java b/hyracks-fullstack/hyracks/hyracks-ipc/src/main/java/org/apache/hyracks/ipc/impl/IPCSystem.java index 62be1b0..0997e57 100644 --- a/hyracks-fullstack/hyracks/hyracks-ipc/src/main/java/org/apache/hyracks/ipc/impl/IPCSystem.java +++ b/hyracks-fullstack/hyracks/hyracks-ipc/src/main/java/org/apache/hyracks/ipc/impl/IPCSystem.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.util.concurrent.atomic.AtomicLong; +import java.util.logging.Level; +import java.util.logging.Logger; import org.apache.hyracks.ipc.api.IIPCHandle; import org.apache.hyracks.ipc.api.IIPCI; @@ -29,6 +31,8 @@ import org.apache.hyracks.ipc.exceptions.IPCException; public class IPCSystem { + private static final Logger LOGGER = Logger.getLogger(IPCSystem.class.getName()); + private final IPCConnectionManager cMgr; private final IIPCI ipci; @@ -88,7 +92,7 @@ Exception exception = null; if (message.getFlag() == Message.ERROR) { exception = (Exception) message.getPayload(); - exception.printStackTrace(); + LOGGER.log(Level.INFO, "Exception in message " + message.toString()); } else { payload = message.getPayload(); } -- To view, visit https://asterix-gerrit.ics.uci.edu/1522 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I30176c5c70dcc5f7f6605ad79dd0e41967373d9c Gerrit-PatchSet: 6 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Till Westmann <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]> Gerrit-Reviewer: Yingyi Bu <[email protected]>
