Public bug reported:

Even though get_cmdline_from_pid() checks for the existence of the PID
before accessing the cmdline, the process may terminate just in between,
causing an IOError. So we need to catch that exception.

>From 
>https://zuul.opendev.org/t/openstack/build/3a93ef0d0bbd40dc84758682dbc7b049:
        
ft1.40: 
neutron.tests.functional.agent.test_firewall.FirewallTestCase.test_egress_udp_rule(OVS
 Firewall Driver)_StringException: Traceback (most recent call last):
  File "neutron/tests/base.py", line 180, in func
    return f(self, *args, **kwargs)
  File "neutron/tests/functional/agent/test_firewall.py", line 498, in 
test_egress_udp_rule
    self._test_rule(self.tester.EGRESS, self.tester.UDP)
  File "neutron/tests/functional/agent/test_firewall.py", line 464, in 
_test_rule
    direction=direction)
  File "neutron/tests/common/conn_testers.py", line 205, in assert_no_connection
    self.assert_connection(direction, protocol, src_port, dst_port)
  File "neutron/tests/common/conn_testers.py", line 49, in wrap
    return f(self, direction, *args, **kwargs)
  File "neutron/tests/common/conn_testers.py", line 200, in assert_connection
    testing_method(direction, protocol, src_port, dst_port)
  File "neutron/tests/common/conn_testers.py", line 161, in 
_test_transport_connectivity
    nc_tester.test_connectivity()
  File "neutron/tests/common/net_helpers.py", line 526, in test_connectivity
    self.client_process.writeline(testing_string)
  File "neutron/tests/common/net_helpers.py", line 476, in client_process
    self.establish_connection()
  File "neutron/tests/common/net_helpers.py", line 503, in establish_connection
    self._spawn_server_process()
  File "neutron/tests/common/net_helpers.py", line 489, in _spawn_server_process
    listen=True)
  File "neutron/tests/common/net_helpers.py", line 554, in 
_spawn_nc_in_namespace
    proc = RootHelperProcess(cmd, namespace=namespace)
  File "neutron/tests/common/net_helpers.py", line 300, in __init__
    self._wait_for_child_process()
  File "neutron/tests/common/net_helpers.py", line 333, in 
_wait_for_child_process
    "in %d seconds" % (self.cmd, timeout)))
  File "neutron/common/utils.py", line 701, in wait_until_true
    while not predicate():
  File "neutron/tests/common/net_helpers.py", line 325, in child_is_running
    self.pid, self.cmd, run_as_root=True)
  File "neutron/agent/linux/utils.py", line 296, in get_root_helper_child_pid
    if pid_invoked_with_cmdline(pid, expected_cmd):
  File "neutron/agent/linux/utils.py", line 356, in pid_invoked_with_cmdline
    cmd = get_cmdline_from_pid(pid)
  File "neutron/agent/linux/utils.py", line 326, in get_cmdline_from_pid
    with open('/proc/%s/cmdline' % pid, 'r') as f:
IOError: [Errno 2] No such file or directory: '/proc/2866/cmdline

** Affects: neutron
     Importance: Undecided
     Assignee: Dr. Jens Harbott (j-harbott)
         Status: In Progress

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1844500

Title:
  get_cmdline_from_pid may fail

Status in neutron:
  In Progress

Bug description:
  Even though get_cmdline_from_pid() checks for the existence of the PID
  before accessing the cmdline, the process may terminate just in
  between, causing an IOError. So we need to catch that exception.

  From 
https://zuul.opendev.org/t/openstack/build/3a93ef0d0bbd40dc84758682dbc7b049:
          
  ft1.40: 
neutron.tests.functional.agent.test_firewall.FirewallTestCase.test_egress_udp_rule(OVS
 Firewall Driver)_StringException: Traceback (most recent call last):
    File "neutron/tests/base.py", line 180, in func
      return f(self, *args, **kwargs)
    File "neutron/tests/functional/agent/test_firewall.py", line 498, in 
test_egress_udp_rule
      self._test_rule(self.tester.EGRESS, self.tester.UDP)
    File "neutron/tests/functional/agent/test_firewall.py", line 464, in 
_test_rule
      direction=direction)
    File "neutron/tests/common/conn_testers.py", line 205, in 
assert_no_connection
      self.assert_connection(direction, protocol, src_port, dst_port)
    File "neutron/tests/common/conn_testers.py", line 49, in wrap
      return f(self, direction, *args, **kwargs)
    File "neutron/tests/common/conn_testers.py", line 200, in assert_connection
      testing_method(direction, protocol, src_port, dst_port)
    File "neutron/tests/common/conn_testers.py", line 161, in 
_test_transport_connectivity
      nc_tester.test_connectivity()
    File "neutron/tests/common/net_helpers.py", line 526, in test_connectivity
      self.client_process.writeline(testing_string)
    File "neutron/tests/common/net_helpers.py", line 476, in client_process
      self.establish_connection()
    File "neutron/tests/common/net_helpers.py", line 503, in 
establish_connection
      self._spawn_server_process()
    File "neutron/tests/common/net_helpers.py", line 489, in 
_spawn_server_process
      listen=True)
    File "neutron/tests/common/net_helpers.py", line 554, in 
_spawn_nc_in_namespace
      proc = RootHelperProcess(cmd, namespace=namespace)
    File "neutron/tests/common/net_helpers.py", line 300, in __init__
      self._wait_for_child_process()
    File "neutron/tests/common/net_helpers.py", line 333, in 
_wait_for_child_process
      "in %d seconds" % (self.cmd, timeout)))
    File "neutron/common/utils.py", line 701, in wait_until_true
      while not predicate():
    File "neutron/tests/common/net_helpers.py", line 325, in child_is_running
      self.pid, self.cmd, run_as_root=True)
    File "neutron/agent/linux/utils.py", line 296, in get_root_helper_child_pid
      if pid_invoked_with_cmdline(pid, expected_cmd):
    File "neutron/agent/linux/utils.py", line 356, in pid_invoked_with_cmdline
      cmd = get_cmdline_from_pid(pid)
    File "neutron/agent/linux/utils.py", line 326, in get_cmdline_from_pid
      with open('/proc/%s/cmdline' % pid, 'r') as f:
  IOError: [Errno 2] No such file or directory: '/proc/2866/cmdline

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1844500/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to