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