You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Dmitry Konishchev (JIRA)" <ji...@apache.org> on 2010/12/03 22:26:12 UTC

[jira] Created: (QPID-2968) Blocking on dead sockets

Blocking on dead sockets
------------------------

                 Key: QPID-2968
                 URL: https://issues.apache.org/jira/browse/QPID-2968
             Project: Qpid
          Issue Type: Bug
          Components: Python Client
    Affects Versions: Future, 0.9, 0.8, 0.7
         Environment: Does not matter
            Reporter: Dmitry Konishchev
             Fix For: Future, 0.9, 0.8, 0.7


* If you open a few connections, and one of them breaks (for example, 
  due to a network error), another connections can be locked for time, which is 
  equal to network timeout of the broken connection. This happens due to 
  working with sockets in blocking mode and due to using one Selector for all 
  connections. 
* All connections could become locked forever due to races between 
  Driver and Selector objects. Driver object removes itself from the Selector 
  non-atomically and a situation when Driver is alredy closed, but the Selector 
  refers to it could happen. In this case select() call in the Selector raise 
  an exeption due to self._transport.fileno() call on Driver where 
  self._transport is None. The selector doesn't handle errors on select(), so 
  the selector's thread will be stopped due to unhandled Exception. 
* There is no checks on EINTR error on os.* calls. 

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


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Assigned: (QPID-2968) Blocking on dead sockets

Posted by "Rafael H. Schloming (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rafael H. Schloming reassigned QPID-2968:
-----------------------------------------

    Assignee: Rafael H. Schloming

> Blocking on dead sockets
> ------------------------
>
>                 Key: QPID-2968
>                 URL: https://issues.apache.org/jira/browse/QPID-2968
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: 0.7, 0.8, 0.9, Future
>         Environment: Does not matter
>            Reporter: Dmitry Konishchev
>            Assignee: Rafael H. Schloming
>             Fix For: 0.9, Future
>
>         Attachments: patch
>
>
> * If you open a few connections, and one of them breaks (for example, 
>   due to a network error), another connections can be locked for time, which is 
>   equal to network timeout of the broken connection. This happens due to 
>   working with sockets in blocking mode and due to using one Selector for all 
>   connections. 
> * All connections could become locked forever due to races between 
>   Driver and Selector objects. Driver object removes itself from the Selector 
>   non-atomically and a situation when Driver is alredy closed, but the Selector 
>   refers to it could happen. In this case select() call in the Selector raise 
>   an exeption due to self._transport.fileno() call on Driver where 
>   self._transport is None. The selector doesn't handle errors on select(), so 
>   the selector's thread will be stopped due to unhandled Exception. 
> * There is no checks on EINTR error on os.* calls. 

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

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Issue Comment Edited: (QPID-2968) Blocking on dead sockets

Posted by "Dmitry Konishchev (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/QPID-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12966678#action_12966678 ] 

Dmitry Konishchev edited comment on QPID-2968 at 12/3/10 4:43 PM:
------------------------------------------------------------------

This patch fixes following bugs:

* If you open a few connections, and one of them breaks (for example,
  due to a network error), another connections can be locked for a time,
  which is equal to network timeout of the broken connection.
* All connections could become locked forever due to races between
  Driver and Selector objects.
* Added EINTR error handling.
* Added broker connection timeout which is equal to the connection
  heartbeat interval.

      was (Author: konishchev):
    The following patch fixes the bugs.
  
> Blocking on dead sockets
> ------------------------
>
>                 Key: QPID-2968
>                 URL: https://issues.apache.org/jira/browse/QPID-2968
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: Future, 0.9, 0.8, 0.7
>         Environment: Does not matter
>            Reporter: Dmitry Konishchev
>             Fix For: Future, 0.9, 0.8, 0.7
>
>         Attachments: patch
>
>
> * If you open a few connections, and one of them breaks (for example, 
>   due to a network error), another connections can be locked for time, which is 
>   equal to network timeout of the broken connection. This happens due to 
>   working with sockets in blocking mode and due to using one Selector for all 
>   connections. 
> * All connections could become locked forever due to races between 
>   Driver and Selector objects. Driver object removes itself from the Selector 
>   non-atomically and a situation when Driver is alredy closed, but the Selector 
>   refers to it could happen. In this case select() call in the Selector raise 
>   an exeption due to self._transport.fileno() call on Driver where 
>   self._transport is None. The selector doesn't handle errors on select(), so 
>   the selector's thread will be stopped due to unhandled Exception. 
> * There is no checks on EINTR error on os.* calls. 

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


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] [Updated] (QPID-2968) Blocking on dead sockets

Posted by "Rafael H. Schloming (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rafael H. Schloming updated QPID-2968:
--------------------------------------

    Fix Version/s:     (was: 0.9)

> Blocking on dead sockets
> ------------------------
>
>                 Key: QPID-2968
>                 URL: https://issues.apache.org/jira/browse/QPID-2968
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: 0.7, 0.8, 0.9, Future
>         Environment: Does not matter
>            Reporter: Dmitry Konishchev
>            Assignee: Rafael H. Schloming
>             Fix For: Future
>
>         Attachments: patch
>
>
> * If you open a few connections, and one of them breaks (for example, 
>   due to a network error), another connections can be locked for time, which is 
>   equal to network timeout of the broken connection. This happens due to 
>   working with sockets in blocking mode and due to using one Selector for all 
>   connections. 
> * All connections could become locked forever due to races between 
>   Driver and Selector objects. Driver object removes itself from the Selector 
>   non-atomically and a situation when Driver is alredy closed, but the Selector 
>   refers to it could happen. In this case select() call in the Selector raise 
>   an exeption due to self._transport.fileno() call on Driver where 
>   self._transport is None. The selector doesn't handle errors on select(), so 
>   the selector's thread will be stopped due to unhandled Exception. 
> * There is no checks on EINTR error on os.* calls. 

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

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Updated: (QPID-2968) Blocking on dead sockets

Posted by "Dmitry Konishchev (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dmitry Konishchev updated QPID-2968:
------------------------------------

    Attachment: patch

The following patch fixes the bugs.

> Blocking on dead sockets
> ------------------------
>
>                 Key: QPID-2968
>                 URL: https://issues.apache.org/jira/browse/QPID-2968
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: Future, 0.9, 0.8, 0.7
>         Environment: Does not matter
>            Reporter: Dmitry Konishchev
>             Fix For: Future, 0.9, 0.8, 0.7
>
>         Attachments: patch
>
>
> * If you open a few connections, and one of them breaks (for example, 
>   due to a network error), another connections can be locked for time, which is 
>   equal to network timeout of the broken connection. This happens due to 
>   working with sockets in blocking mode and due to using one Selector for all 
>   connections. 
> * All connections could become locked forever due to races between 
>   Driver and Selector objects. Driver object removes itself from the Selector 
>   non-atomically and a situation when Driver is alredy closed, but the Selector 
>   refers to it could happen. In this case select() call in the Selector raise 
>   an exeption due to self._transport.fileno() call on Driver where 
>   self._transport is None. The selector doesn't handle errors on select(), so 
>   the selector's thread will be stopped due to unhandled Exception. 
> * There is no checks on EINTR error on os.* calls. 

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


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


[jira] Updated: (QPID-2968) Blocking on dead sockets

Posted by "Robbie Gemmell (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-2968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Robbie Gemmell updated QPID-2968:
---------------------------------

    Fix Version/s:     (was: 0.8)
                       (was: 0.7)

Removed the Fix For versions 0.7 and 0.8, as the 0.8 release is now finalised.

> Blocking on dead sockets
> ------------------------
>
>                 Key: QPID-2968
>                 URL: https://issues.apache.org/jira/browse/QPID-2968
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: Future, 0.9, 0.8, 0.7
>         Environment: Does not matter
>            Reporter: Dmitry Konishchev
>             Fix For: Future, 0.9
>
>         Attachments: patch
>
>
> * If you open a few connections, and one of them breaks (for example, 
>   due to a network error), another connections can be locked for time, which is 
>   equal to network timeout of the broken connection. This happens due to 
>   working with sockets in blocking mode and due to using one Selector for all 
>   connections. 
> * All connections could become locked forever due to races between 
>   Driver and Selector objects. Driver object removes itself from the Selector 
>   non-atomically and a situation when Driver is alredy closed, but the Selector 
>   refers to it could happen. In this case select() call in the Selector raise 
>   an exeption due to self._transport.fileno() call on Driver where 
>   self._transport is None. The selector doesn't handle errors on select(), so 
>   the selector's thread will be stopped due to unhandled Exception. 
> * There is no checks on EINTR error on os.* calls. 

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


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org