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

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

    Attachment: celery_worker_output.txt

Example worker output showing the task is failing.

> 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: celery_worker_output.txt, pid_aware_selector.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.
> [Forking bring child descriptors with 
> it|http://man7.org/linux/man-pages/man2/fork.2.html]  Because file 
> descriptors on the parent and the child are the same, I expect qpid.messaging 
> to have the parent and child process share the file descriptors and socket 
> and work without any modification.
> There is at least one place where I do understand how this can be avoided.  
> One of the issues is that the file descriptors registered by the Selector 
> object inside of qpid.messaging are stale after the fork.  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.  See the attached patch for an 
> example of this.
> This is not the only issue though, even with this patch in place, 
> communication flows, but queue creation, and deletion seem to fail.  Here is 
> the overall way to reproduce this issue:
> 1.  clone our fork of kombu:       `git clone g...@github.com:pulp/kombu.git`
> 2.  Change into the kombu folder     `cd kombu`
> 3.  Switch to the branch containing the qpid code:  `git checkout 
> pulp-dep-3.0.15-with-qpid`
> 4.  Install kombu onto your system or virtualenv (I do it systemwide using 
> sudo):   `sudo python setup.py develop`
> 5.  install celery version 3.1.11.  I do it using pip.    `sudo pip install 
> celery==3.1.11`
> 6.  Install qpid.messaging and qpidtoollibs.  One way I do it is systemwide 
> using pip.      `sudo pip install qpid-tools qpid-python`
> 7.  Start up qpidd (We've been testing with 0.24 and auth off).      `sudo -u 
> qpidd qpidd --auth=no`
> 8.  Put the attached file tasks.py into a directory
> 9.  Open two terminals and change their working directory to be the same as 
> step 8.
> 10.  In one one terminal start the celery worker        `celery worker -A 
> tasks --loglevel=INFO -c1`
> 11.  In the other terminal dispatch 10 tasks             `python tasks.py`
> You should see exceptions raised similar to those in the attached file 
> [celery_worker_output.txt]



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