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

Reply via email to