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

Brian Bouterse updated QPID-5637:
---------------------------------

    Attachment: 0001-Fix-for-QPID-5637.patch

This patch makes the Selector object pid aware, and implements Selector to 
provide the singleton pattern per pid instead of a singleton pattern for all 
parent/child.

> qpid.messaging Issues With Forking
> ----------------------------------
>
>                 Key: QPID-5637
>                 URL: https://issues.apache.org/jira/browse/QPID-5637
>             Project: Qpid
>          Issue Type: Bug
>          Components: Python Client
>    Affects Versions: 0.24
>            Reporter: Brian Bouterse
>             Fix For: 0.18, 0.22, 0.24, 0.26, 0.27
>
>         Attachments: 0001-Fix-for-QPID-5637.patch
>
>
> qpid.messaging has an issue with forking in the following situation.
> 1.  A parent Python process imports and uses qpid.messaging to connect to a a 
> Qpid broker
> 2.  The parent process forks a child process
> 3.  The child process imports qpid.messaging and tries to connect to a Qpid 
> broker.
> I expected to see the child process use qpid.messaging normally as it would 
> if it weren't forked in the way described above.  Instead, the server 
> receives the opening of a TCP socket, but the client never sends the AMQP 
> protocol announcement.
> The root cause of this issue is in the file descriptors registered by the 
> Selector object inside of qpid.messaging.  The Selector object uses a 
> singleton pattern to provide a reference to the same Selector object no 
> matter how many times you call it.  This selector object already has 
> registered file descriptors with the filesystem, which allow the selector to 
> read/write data in an I/O efficient manner.
> When forking occurs, the child process receives a copy of the Python running 
> space (ie: the Selector singleton), but the kernel is not registered with 
> file descriptors that are available in the child process' new file descriptor 
> table.  This breaks usage of qpid.messaging in the client process because 
> when qpid.messaging relies on the epoll functionality of Selector, Selector 
> does not fulfill that expectation.
> The solution is to have the class method that implements the singleton 
> pattern on the Selector object to be process aware, and implement the 
> singleton pattern per process.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to