>From Murtadha Hubail <[email protected]>:

Murtadha Hubail has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20496?usp=email )


Change subject: [NO ISSUE][RT] Respond to NC in case of unexpected failures
......................................................................

[NO ISSUE][RT] Respond to NC in case of unexpected failures

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

Details:

- On unexpected failures while sending messages from CC to NC,
  send a failure response to the NC to avoid requests hanging
  on the NC until their timeout.

Ex-ref: MB-68985
Change-Id: I5ff53205d7cbb23c91a482b22165e1645247745f
---
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/AbstractInternalRequestMessage.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ExecuteStatementRequestMessage.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/messaging/CCMessageBroker.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/messaging/api/ICCMessageBroker.java
4 files changed, 30 insertions(+), 5 deletions(-)



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

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/AbstractInternalRequestMessage.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/AbstractInternalRequestMessage.java
index 7d58e4e..4f78780 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/AbstractInternalRequestMessage.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/AbstractInternalRequestMessage.java
@@ -113,6 +113,8 @@
             messageBroker.sendApplicationMessageToNC(responseMsg, 
nodeRequestId);
         } catch (Exception e) {
             LOGGER.log(Level.WARN, e.toString(), e);
+            responseMsg.setError(e);
+            messageBroker.sendMessageQuietly(responseMsg, nodeRequestId);
         }

     }
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ExecuteStatementRequestMessage.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ExecuteStatementRequestMessage.java
index 0cdbf95..bd8d883 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ExecuteStatementRequestMessage.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ExecuteStatementRequestMessage.java
@@ -195,11 +195,7 @@
             GlobalConfig.ASTERIX_LOGGER.log(Level.ERROR, "Unexpected 
exception", e);
             responseMsg.setError(e);
         }
-        try {
-            messageBroker.sendApplicationMessageToNC(responseMsg, 
requestNodeId);
-        } catch (Exception e) {
-            LOGGER.log(Level.WARN, e.toString(), e);
-        }
+        sendResponseToNc(messageBroker, responseMsg);
     }

     protected IRequestParameters 
createRequestParameters(IStatementExecutor.StatementProperties 
statementProperties,
@@ -243,6 +239,16 @@
         }
     }

+    private void sendResponseToNc(CCMessageBroker messageBroker, 
ExecuteStatementResponseMessage responseMsg) {
+        try {
+            messageBroker.sendApplicationMessageToNC(responseMsg, 
requestNodeId);
+        } catch (Exception e) {
+            LOGGER.error("unexpected exception sending message to node {}", 
requestNodeId, e);
+            responseMsg.setError(e);
+            messageBroker.sendMessageQuietly(responseMsg, requestNodeId);
+        }
+    }
+
     @Override
     public String toString() {
         if (statementsText != null && (statementsText.startsWith("UPSERT") || 
statementsText.startsWith("INSERT"))) {
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/messaging/CCMessageBroker.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/messaging/CCMessageBroker.java
index 0683207..eb538f0 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/messaging/CCMessageBroker.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/messaging/CCMessageBroker.java
@@ -70,6 +70,15 @@
     }

     @Override
+    public void sendMessageQuietly(INcAddressedMessage msg, String nodeId) {
+        try {
+            sendMessage(msg, nodeId, false);
+        } catch (Exception e) {
+            LOGGER.warn("failed to send message to node {}", nodeId, e);
+        }
+    }
+
+    @Override
     public boolean sendRealTimeApplicationMessageToNC(INcAddressedMessage msg, 
String nodeId) throws Exception {
         return sendMessage(msg, nodeId, true);
     }
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/messaging/api/ICCMessageBroker.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/messaging/api/ICCMessageBroker.java
index e628bc7..72b0040 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/messaging/api/ICCMessageBroker.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/messaging/api/ICCMessageBroker.java
@@ -39,6 +39,14 @@
     boolean sendApplicationMessageToNC(INcAddressedMessage msg, String nodeId) 
throws Exception;

     /**
+     * Attempts to send {@code msg} to the specified {@code nodeId} without 
throwing exceptions
+     *
+     * @param msg
+     * @param nodeId
+     */
+    void sendMessageQuietly(INcAddressedMessage msg, String nodeId);
+
+    /**
      * Sends the passed message to the specified {@code nodeId}
      *
      * @param msg

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20496?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: phoenix
Gerrit-Change-Id: I5ff53205d7cbb23c91a482b22165e1645247745f
Gerrit-Change-Number: 20496
Gerrit-PatchSet: 1
Gerrit-Owner: Murtadha Hubail <[email protected]>

Reply via email to