[Bug 2156932] Fix merged to nova (stable/2026.1)

OpenStack Infra 2156932 at bugs.launchpad.net
Tue Aug 18 17:43:18 UTC 2026


Reviewed:  https://review.opendev.org/c/openstack/nova/+/999667
Committed: https://opendev.org/openstack/nova/commit/d9b413f116588a2d799be73a2e0dbadc68910a68
Submitter: "Zuul (22348)"
Branch:    stable/2026.1

commit d9b413f116588a2d799be73a2e0dbadc68910a68
Author: Kamil Sambor <kamil.sambor at gmail.com>
Date:   Fri May 8 10:23:40 2026 +0200

    Restore 'fork' start method for daemon mode on Python 3.14
    
    Closes-Bug: #2156932
    Change-Id: I8a2dabf85a4d8bb1cf1f48f9bde891add394b73d
    Signed-off-by: Kamil Sambor <kamil.sambor at gmail.com>
    (cherry picked from commit 3356917d0ce88baf65c9ce332dc40c202240ea79)

-- 
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to nova in Ubuntu.
https://bugs.launchpad.net/bugs/2156932

Title:
  Spice console empty page due to PicklingError

Status in OpenStack Compute (nova):
  Fix Committed
Status in nova package in Ubuntu:
  In Progress
Status in nova source package in Resolute:
  In Progress
Status in nova source package in Stonking:
  In Progress

Bug description:
  [Impact]

  Since Python 3.14 changed Linux’s default multiprocessing start method
  from fork to forkserver, websockify must pickle the proxy target and
  its arguments when handling Nova’s noVNC, SPICE HTML5, and serial
  console connections.

  The proxy state contains objects that cannot be pickled, so the child
  process fails before handling the connection; the patch restores the
  previous fork method.

  [Test Plan]

  Before the patch:

  python3.14 /usr/bin/nova-novncproxy --nodaemon --web /tmp --vnc-
  novncproxy_host 127.0.0.1 --vnc-novncproxy_port 18080

  # curl to above proxy
  curl -i --max-time 5 http://127.0.0.1:18080/

  # result
  handler exception: Can't pickle <enum 'AddressFamily'>: it's not the same object as socket.AddressFamily
      curl: (56) Recv failure: Connection reset by peer

  After the patch:

  python3.14 /usr/bin/nova-novncproxy --nodaemon --web /tmp --vnc-
  novncproxy_host 127.0.0.1 --vnc-novncproxy_port 18080

  curl -i --max-time 5 http://127.0.0.1:18080/

  # result
  HTTP/1.1 404 Not Found

  
  [Where problems could occur]

  The modified code runs when Nova starts a noVNC, SPICE, or serial
  console proxy and forces Python 3.14 to use fork; a problem could
  prevent the proxy from starting or handling console connections.

  [Original Description]

  [ Impact ]

  Ubuntu 26.04 / OpenStack Gazpacho; Spice console shows nothing
  (Firefox gets an empty page from the server).

  
  [ Other Information ]

  Reproducer:

  Deploy horizon on Ubuntu 26.04 via regress-stack [1] and attempt to
  use the spice console.

  In `/var/log/nova/nova-spiceproxy.log`:

  ```
  2026-06-16 15:21:17.063 96989 DEBUG nova.console.websocketproxy [-] 10.0.0.103: new handler Process vmsg /usr/lib/python3/dist-packages/websockify/websockifyserver.py:632
  2026-06-16 15:21:17.065 96989 INFO nova.console.websocketproxy [-] handler exception: Can't pickle <enum 'AddressFamily'>: it's not the same object as socket.AddressFamily
  2026-06-16 15:21:17.065 96989 DEBUG nova.console.websocketproxy [-] exception vmsg /usr/lib/python3/dist-packages/websockify/websockifyserver.py:632
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy Traceback (most recent call last):
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3/dist-packages/websockify/websockifyserver.py", line 839, in start_server
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     p.start()
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     ~~~~~~~^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/process.py", line 121, in start
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     self._popen = self._Popen(self)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy                   ~~~~~~~~~~~^^^^^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/context.py", line 230, in _Popen
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     return _default_context.get_context().Process._Popen(process_obj)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/context.py", line 294, in _Popen
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     return Popen(process_obj)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/popen_spawn_posix.py", line 32, in __init__
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     super().__init__(process_obj)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     self._launch(process_obj)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     ~~~~~~~~~~~~^^^^^^^^^^^^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/popen_spawn_posix.py", line 47, in _launch
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     reduction.dump(process_obj, fp)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy   File "/usr/lib/python3.14/multiprocessing/reduction.py", line 60, in dump
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     ForkingPickler(file, protocol).dump(obj)
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy _pickle.PicklingError: Can't pickle <enum 'AddressFamily'>: it's not the same object as socket.AddressFamily
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing socket.AddressFamily reconstructor
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing socket.AddressFamily object
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing tuple item 1
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing eventlet.greenio.base.GreenSocket reconstructor arguments
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing eventlet.greenio.base.GreenSocket object
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing tuple item 0
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing dict item '_args'
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing multiprocessing.context.Process state
  2026-06-16 15:21:17.065 96989 ERROR nova.console.websocketproxy when serializing multiprocessing.context.Process object
  ```

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




More information about the Ubuntu-openstack-bugs mailing list