** Description changed:
+ [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
```
** Changed in: nova (Ubuntu Stonking)
Assignee: (unassigned) => Seyeong Kim (seyeongkim)
** Changed in: nova (Ubuntu Resolute)
Assignee: (unassigned) => Seyeong Kim (seyeongkim)
** Changed in: nova (Ubuntu Stonking)
Status: New => In Progress
** Changed in: nova (Ubuntu Resolute)
Status: New => In Progress
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2156932
Title:
Spice console empty page due to PicklingError
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/2156932/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs