[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-06 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Attachment: Test.java

Here's a little test program I wrote to show the weird semantics of 
Object.wait() not letting another thread lock the object if current thread has 
interrupt flag set.

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-06 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Attachment: hdfs-1529.txt

Here's a potential fix for this. close() and hflush() now may throw 
InterruptedIOException if the thread has interrupt status. It's a bit tricky 
because they won't *always* throw it - if they weren't going to block, they 
will return immediately (with interrupt status preserved)

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-06 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Status: Patch Available  (was: Open)

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-06 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Attachment: hdfs-1529.txt

Fixed test cases which were missing a finally { cluster.shutdown() } 

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: hdfs-1529.txt, hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-22 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Attachment: hdfs-1529.txt

Thanks for reviewing. I clarified the comment about the specific condition 
we're working around, and put close() back the way it was.

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: hdfs-1529.txt, hdfs-1529.txt, hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-22 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Status: Patch Available  (was: Open)

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: hdfs-1529.txt, hdfs-1529.txt, hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2010-12-22 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

Status: Open  (was: Patch Available)

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Attachments: hdfs-1529.txt, hdfs-1529.txt, hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2011-01-10 Thread Nigel Daley (JIRA)

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

Nigel Daley updated HDFS-1529:
--

Fix Version/s: 0.22.0

Blocker for 0.22

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Fix For: 0.22.0
>
> Attachments: hdfs-1529.txt, hdfs-1529.txt, hdfs-1529.txt, Test.java
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Updated: (HDFS-1529) Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock

2011-02-04 Thread Todd Lipcon (JIRA)

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

Todd Lipcon updated HDFS-1529:
--

  Resolution: Fixed
Hadoop Flags: [Reviewed]
  Status: Resolved  (was: Patch Available)

Committed to branch and trunk

> Incorrect handling of interrupts in waitForAckedSeqno can cause deadlock
> 
>
> Key: HDFS-1529
> URL: https://issues.apache.org/jira/browse/HDFS-1529
> Project: Hadoop HDFS
>  Issue Type: Bug
>  Components: hdfs client
>Affects Versions: 0.22.0
>Reporter: Todd Lipcon
>Assignee: Todd Lipcon
>Priority: Blocker
> Fix For: 0.22.0
>
> Attachments: Test.java, hdfs-1529.txt, hdfs-1529.txt, hdfs-1529.txt
>
>
> In HDFS-895 the handling of interrupts during hflush/close was changed to 
> preserve interrupt status. This ends up creating an infinite loop in 
> waitForAckedSeqno if the waiting thread gets interrupted, since Object.wait() 
> has a strange semantic that it doesn't give up the lock even momentarily if 
> the thread is already in interrupted state at the beginning of the call.
> We should decide what the correct behavior is here - if a thread is 
> interrupted while it's calling hflush() or close() should we (a) throw an 
> exception, perhaps InterruptedIOException (b) ignore, or (c) wait for the 
> flush to finish but preserve interrupt status on exit?

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira