You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Igor Kamyshnikov (Jira)" <ji...@apache.org> on 2019/10/29 10:16:00 UTC

[jira] [Created] (IGNITE-12335) IgniteDataStreamer flush cannot be really interrupted

Igor Kamyshnikov created IGNITE-12335:
-----------------------------------------

             Summary: IgniteDataStreamer flush cannot be really interrupted
                 Key: IGNITE-12335
                 URL: https://issues.apache.org/jira/browse/IGNITE-12335
             Project: Ignite
          Issue Type: Bug
          Components: cache
    Affects Versions: 2.7.6, 2.5
            Reporter: Igor Kamyshnikov
         Attachments: DataStreamerFlushInterruptionTest.java, image-2019-10-29-13-05-25-969.png

IgniteDataStreamer flush operation cannot be interrupted:
1) datastreamer.close(true) does not interrupt flushing (though it has cancellation mode)
2) flushingThread.interrupt does not interrupt flushing (though IgniteInterruptedException is declared in the flush's method throws clause)
3) dataStreamer timeout does not work at all if flushingThread is interrupted
4) dataStreamer timeout does not stop flushing (after catching IgniteDataStreamerTimeoutException)
5) Ignition.closeAll(true) can even result in JVM halt if there was dataStreamer flush running

Cases on the diagram:
 !image-2019-10-29-13-05-25-969.png|thumbnail! 

Reproducer:
 [^DataStreamerFlushInterruptionTest.java] 

RCA:
For the cases with Thread.interrrupt:
1) Probably,
org.apache.ignite.internal.processors.datastreamer.DataStreamerImpl.Buffer#flush method when it enters org.apache.ignite.internal.processors.datastreamer.DataStreamerImpl#acquireRemapSemaphore does not trigger InterruptedException because it avoid all the operations on semaphore.

2) org.apache.ignite.internal.processors.datastreamer.DataStreamerImpl#doFlush has a big while(true) loop that does not handle IgniteDataStreamerTimeoutException (treating it as just IgniteCheckedException leading to "Remaps needed - flush buffers.")

No RCA for dataStreamer.close(true).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)