Bug 1113675 - Forking python qpid.messaging client crashes with qpid.messaging.exceptions.InternalError in driver.py:889 (KeyError: 'pop(): dictionary is empty')
Summary: Forking python qpid.messaging client crashes with qpid.messaging.exceptions.I...
Keywords:
Status: NEW
Alias: None
Product: Red Hat Enterprise MRG
Classification: Red Hat
Component: python-qpid
Version: Development
Hardware: Unspecified
OS: Unspecified
medium
high
Target Milestone: ---
: ---
Assignee: messaging-bugs
QA Contact: MRG Quality Engineering
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2014-06-26 15:24 UTC by Frantisek Reznicek
Modified: 2020-11-04 22:31 UTC (History)
1 user (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed:
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)
Forking client (3.99 KB, text/plain)
2014-06-26 15:29 UTC, Frantisek Reznicek
no flags Details

Description Frantisek Reznicek 2014-06-26 15:24:39 UTC
Description of problem:

Forking python qpid.messaging client crashes with qpid.messaging.exceptions.InternalError in driver.py:889 (KeyError: 'pop(): dictionary is empty')

Forking client performs sending and receiving from both main process and forked process simultaneously. Client crashes with qpid.messaging.exceptions.InternalError while instantiating/creating sender object on session in the forked process.

See details in Additional info section.

The issue was seen on RHEL5.9 i686 and also x86_64.

Version-Release number of selected component (if applicable):
# rpm -qa | grep qpid | sort
python-qpid-0.18-12.el5_10
python-qpid-qmf-0.18-24.el5_10
qpid-cpp-client-0.18-25.el5_10
qpid-cpp-client-devel-0.18-25.el5_10
qpid-cpp-client-devel-docs-0.18-25.el5_10
qpid-cpp-client-rdma-0.18-25.el5_10
qpid-cpp-client-ssl-0.18-25.el5_10
qpid-cpp-mrg-debuginfo-0.18-25.el5_10
qpid-cpp-server-0.18-25.el5_10
qpid-cpp-server-cluster-0.18-25.el5_10
qpid-cpp-server-devel-0.18-25.el5_10
qpid-cpp-server-ha-0.18-25.el5_10
qpid-cpp-server-rdma-0.18-25.el5_10
qpid-cpp-server-ssl-0.18-25.el5_10
qpid-cpp-server-store-0.18-25.el5_10
qpid-cpp-server-xml-0.18-25.el5_10
qpid-java-client-0.18-8.el5_9
qpid-java-common-0.18-8.el5_9
qpid-java-example-0.18-8.el5_9
qpid-jca-0.18-8.el5
qpid-jca-xarecovery-0.18-8.el5
qpid-jca-zip-0.18-8.el5
qpid-qmf-0.18-24.el5_10
qpid-qmf-debuginfo-0.18-24.el5_10
qpid-qmf-devel-0.18-24.el5_10
qpid-tests-0.18-2.el5
qpid-tools-0.18-10.el5_9
rh-qpid-cpp-tests-0.18-25.el5_10
ruby-qpid-qmf-0.18-24.el5_10


How reproducible:
100%

Steps to Reproduce:
1. install qpidd
2. configure qpidd to auth=no
3. python /tmp/bz1098606.py

Actual results:
  Forking client crashing with qpid.messaging.exceptions.InternalError.

Expected results:
  Forking client should be functional and not be crashing.

Additional info:

[root@dhcp-x-y bz1098606]# service qpidd restart;python bz1098606.py ns
Stopping Qpid AMQP daemon:                                 [  OK  ]
Starting Qpid AMQP daemon:                                 [  OK  ]
Entered pre_fork_ns()
  connected(pre_fork_ns)
Message(properties={'x-amqp-0-10.routing-key': u'BZ1098606_pre_fork_ns'}, content='pre_fork_ns')
Fork
parent: 18533, child: 18535
Entered post_fork_main_ns()
Entered post_fork_child_ns()
  connected(post_fork_main_ns)
  connected(post_fork_child_ns)
Traceback (most recent call last):
  File "bz1098606.py", line 143, in ?
    main();
  File "bz1098606.py", line 133, in main
    globals()[method_postfc]();
  File "bz1098606.py", line 110, in post_fork_child_ns
    S = s.sender(a);
  File "<string>", line 6, in sender
  File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 597, in sender
    sender._ewait(lambda: sender.linked)
  File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 804, in _ewait
    result = self.session._ewait(lambda: self.error or predicate(), timeout)
  File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 571, in _ewait
    Message(properties={'x-amqp-0-10.routing-key': u'BZ1098606_post_fork_main_ns'}, content='post_fork_main_ns')
result = self.connection._ewait(lambda: self.error or predicate(), timeout)
  File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 214, in _ewait
    self.check_error()
  File "/usr/lib/python2.4/site-packages/qpid/messaging/endpoints.py", line 207, in check_error
    raise self.error
qpid.messaging.exceptions.InternalError: Traceback (most recent call last):
  File "/usr/lib/python2.4/site-packages/qpid/messaging/driver.py", line 671, in write
    op.dispatch(self)
  File "/usr/lib/python2.4/site-packages/qpid/ops.py", line 84, in dispatch
    getattr(target, handler)(self, *args)
  File "/usr/lib/python2.4/site-packages/qpid/messaging/driver.py", line 889, in do_session_detached
    sst = self._sessions.pop(dtc.channel)
KeyError: 'pop(): dictionary is empty'

Comment 1 Frantisek Reznicek 2014-06-26 15:29:24 UTC
Created attachment 912464 [details]
Forking client

Forking client usage:
 * two modes, main & forking process code shared

   service qpidd restart;sleep 2;python bz1098606.py s

 * two modes, main & forking process code non-shared

   service qpidd restart;sleep 2;python bz1098606.py ns

Both modes are about equivalent.

It is expected to see bz1098606.py passing and not hanging. (Current el6/7 behavior)


Note You need to log in before you can comment on or make changes to this bug.