Murtadha Hubail has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/2423

Change subject: [NO ISSUE][API] Return Not Found on NC Cancellation Requests
......................................................................

[NO ISSUE][API] Return Not Found on NC Cancellation Requests

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Return not found on cancellation requests with already
  terminated/missing jobs.

Change-Id: I50b05168001b6999d4aab04ca1604ffe6b07de24
---
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryRequest.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryResponse.java
A 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/RequestStatus.java
5 files changed, 70 insertions(+), 7 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/23/2423/1

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java
index c3e02af..da621d2 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryCancellationServlet.java
@@ -20,13 +20,14 @@
 
 import static 
org.apache.asterix.app.message.ExecuteStatementRequestMessage.DEFAULT_NC_TIMEOUT_MILLIS;
 
-import java.io.IOException;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.asterix.app.message.CancelQueryRequest;
+import org.apache.asterix.app.message.CancelQueryResponse;
 import org.apache.asterix.common.messaging.api.INCMessageBroker;
 import org.apache.asterix.common.messaging.api.MessageFuture;
+import org.apache.asterix.common.utils.RequestStatus;
 import org.apache.hyracks.api.application.INCServiceContext;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.api.IServletResponse;
@@ -51,7 +52,7 @@
     }
 
     @Override
-    protected void delete(IServletRequest request, IServletResponse response) 
throws IOException {
+    protected void delete(IServletRequest request, IServletResponse response) {
         // gets the parameter client_context_id from the request.
         String clientContextId = request.getParameter(CLIENT_CONTEXT_ID);
         if (clientContextId == null) {
@@ -64,8 +65,18 @@
                     new CancelQueryRequest(serviceCtx.getNodeId(), 
cancelQueryFuture.getFutureId(), clientContextId);
             // TODO(mblow): multicc -- need to send cancellation to the 
correct cc
             messageBroker.sendMessageToPrimaryCC(cancelQueryMessage);
-            cancelQueryFuture.get(DEFAULT_NC_TIMEOUT_MILLIS, 
TimeUnit.MILLISECONDS);
-            response.setStatus(HttpResponseStatus.OK);
+            CancelQueryResponse cancelResponse =
+                    (CancelQueryResponse) 
cancelQueryFuture.get(DEFAULT_NC_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+            final RequestStatus status = cancelResponse.getStatus();
+            switch (status) {
+                case SUCCESS:
+                case FAILED:
+                case NOT_FOUND:
+                    response.setStatus(status.toHttpResponse());
+                    break;
+                default:
+                    throw new IllegalStateException("Unrecognized status: " + 
status);
+            }
         } catch (Exception e) {
             LOGGER.log(Level.ERROR, "Unexpected exception while canceling 
query", e);
             response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java
index 8fd40b3..f8655ad 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryCancellationServlet.java
@@ -46,7 +46,6 @@
 
     @Override
     protected void delete(IServletRequest request, IServletResponse response) 
throws IOException {
-        // gets the parameter client_context_id from the request.
         String clientContextId = request.getParameter(CLIENT_CONTEXT_ID);
         if (clientContextId == null) {
             response.setStatus(HttpResponseStatus.BAD_REQUEST);
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryRequest.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryRequest.java
index 7e76fc1..a1c87d8 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryRequest.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryRequest.java
@@ -20,6 +20,7 @@
 
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.messaging.api.ICcAddressedMessage;
+import org.apache.asterix.common.utils.RequestStatus;
 import org.apache.asterix.hyracks.bootstrap.CCApplication;
 import org.apache.asterix.messaging.CCMessageBroker;
 import org.apache.asterix.translator.IStatementExecutorContext;
@@ -51,19 +52,23 @@
         CCApplication application = (CCApplication) ccs.getApplication();
         IStatementExecutorContext executorsCtx = 
application.getStatementExecutorContext();
         JobId jobId = executorsCtx.getJobIdFromClientContextId(contextId);
+        RequestStatus status;
 
         if (jobId == null) {
             LOGGER.log(Level.WARN, "No job found for context id " + contextId);
+            status = RequestStatus.NOT_FOUND;
         } else {
             try {
                 IHyracksClientConnection hcc = application.getHcc();
                 hcc.cancelJob(jobId);
                 executorsCtx.removeJobIdFromClientContextId(contextId);
+                status = RequestStatus.SUCCESS;
             } catch (Exception e) {
                 LOGGER.log(Level.WARN, "unexpected exception thrown from 
cancel", e);
+                status = RequestStatus.FAILED;
             }
         }
-        CancelQueryResponse response = new CancelQueryResponse(reqId);
+        CancelQueryResponse response = new CancelQueryResponse(reqId, status);
         CCMessageBroker messageBroker = (CCMessageBroker) 
appCtx.getServiceContext().getMessageBroker();
         try {
             messageBroker.sendApplicationMessageToNC(response, nodeId);
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryResponse.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryResponse.java
index 4fbcf22..d65ae31 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryResponse.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/CancelQueryResponse.java
@@ -21,6 +21,7 @@
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.messaging.api.INcAddressedMessage;
 import org.apache.asterix.common.messaging.api.MessageFuture;
+import org.apache.asterix.common.utils.RequestStatus;
 import org.apache.asterix.messaging.NCMessageBroker;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
@@ -28,9 +29,11 @@
 
     private static final long serialVersionUID = 1L;
     private final long reqId;
+    private final RequestStatus status;
 
-    public CancelQueryResponse(long reqId) {
+    public CancelQueryResponse(long reqId, RequestStatus status) {
         this.reqId = reqId;
+        this.status = status;
     }
 
     @Override
@@ -41,4 +44,9 @@
             future.complete(this);
         }
     }
+
+    public RequestStatus getStatus() {
+        return status;
+    }
+
 }
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/RequestStatus.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/RequestStatus.java
new file mode 100644
index 0000000..52dfe90
--- /dev/null
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/utils/RequestStatus.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+package org.apache.asterix.common.utils;
+
+import io.netty.handler.codec.http.HttpResponseStatus;
+
+public enum RequestStatus {
+    SUCCESS,
+    FAILED,
+    NOT_FOUND;
+
+    public HttpResponseStatus toHttpResponse() {
+        switch (this) {
+            case SUCCESS:
+                return HttpResponseStatus.OK;
+            case FAILED:
+                return HttpResponseStatus.INTERNAL_SERVER_ERROR;
+            case NOT_FOUND:
+                return HttpResponseStatus.NOT_FOUND;
+            default:
+                throw new IllegalStateException("Unrecognized status: " + 
this);
+        }
+    }
+}
\ No newline at end of file

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/2423
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I50b05168001b6999d4aab04ca1604ffe6b07de24
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <mhub...@apache.org>

Reply via email to