ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Igor Kamyshnikov (Jira)" <j...@apache.org>
Subject [jira] [Updated] (IGNITE-12335) IgniteDataStreamer flush cannot be really interrupted
Date Tue, 29 Oct 2019 10:18:00 GMT

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

Mime
View raw message