This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit f5cf736db8e43446ccc07d0afeab458a249be45d
Author: Murtadha Hubail <[email protected]>
AuthorDate: Mon Nov 18 06:14:25 2019 +0300

    [NO ISSUE][RT] Fail Fast When Interrupted on Frame Write Attempt
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    - Before writing a frame to the next operator, check the thread
      interrupted status and fail fast if the thread is interrupted.
      This ensures that queries that were aborted will fail as soon
      as they attempt to write a frame.
    
    Change-Id: If4f154f11305e2f8286e0707b5b3adec905633a4
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/4203
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
    Reviewed-by: Till Westmann <[email protected]>
---
 .../hyracks/dataflow/common/comm/io/AbstractFrameAppender.java     | 7 +++++++
 .../hyracks/dataflow/common/io/MessagingFrameTupleAppender.java    | 1 +
 2 files changed, 8 insertions(+)

diff --git 
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/AbstractFrameAppender.java
 
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/AbstractFrameAppender.java
index 18ddf3e..a9371e9 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/AbstractFrameAppender.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/AbstractFrameAppender.java
@@ -89,6 +89,7 @@ public class AbstractFrameAppender implements IFrameAppender {
 
     @Override
     public void write(IFrameWriter outWriter, boolean clearFrame) throws 
HyracksDataException {
+        failIfInterrupted();
         getBuffer().clear();
         outWriter.nextFrame(getBuffer());
         if (clearFrame) {
@@ -126,4 +127,10 @@ public class AbstractFrameAppender implements 
IFrameAppender {
             tracer.durationE(tid, traceCategory, args);
         }
     }
+
+    protected void failIfInterrupted() throws HyracksDataException {
+        if (Thread.currentThread().isInterrupted()) {
+            throw HyracksDataException.create(new InterruptedException());
+        }
+    }
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/MessagingFrameTupleAppender.java
 
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/MessagingFrameTupleAppender.java
index 77020f8..c27a7e6 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/MessagingFrameTupleAppender.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/MessagingFrameTupleAppender.java
@@ -110,6 +110,7 @@ public class MessagingFrameTupleAppender extends 
FrameTupleAppender {
 
     @Override
     public void write(IFrameWriter outWriter, boolean clearFrame) throws 
HyracksDataException {
+        failIfInterrupted();
         if (!initialized) {
             init();
         }

Reply via email to