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

Reply via email to