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:18:00 UTC

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

     [ https://issues.apache.org/jira/browse/IGNITE-12335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Kamyshnikov updated IGNITE-12335:
--------------------------------------
    Description: 
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! 

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).

  was:
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).


> 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.5, 2.7.6
>            Reporter: Igor Kamyshnikov
>            Priority: Major
>         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! 
> 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)