Package: nova / 2:31.0.0-6

Metadata

Package Version Patches format
nova 2:31.0.0-6 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
Install missed files.patch | (download)

MANIFEST.in | 11 11 + 0 - 0 !
1 file changed, 11 insertions(+)

 install missed files
remove svg converter from doc conf.py.patch | (download)

doc/source/conf.py | 1 0 + 1 - 0 !
1 file changed, 1 deletion(-)

 remove sphinxcontrib.rsvgconverter from doc conf.py
Add a healtcheck url.patch | (download)

etc/nova/api-paste.ini | 15 10 + 5 - 0 !
1 file changed, 10 insertions(+), 5 deletions(-)

 [patch] add a /healthcheck url

This is useful for operators to configure HAProxy and
for monitoring.

fix exception.NovaException.patch | (download)

nova/virt/disk/api.py | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 fix exception.novaexception
Add context switch chance to other thread during get_available_resources.patch | (download)

nova/virt/libvirt/driver.py | 24 15 + 9 - 0 !
1 file changed, 15 insertions(+), 9 deletions(-)

 add context switch chance to other thread during get_available_resources
 The get_available_resources method checks host's resource usage by
 connecting libvirt.  The libvirt connection uses libvirt python bindings
 and the connection handling is implemented in C lang. So the eventlet
 greenthread can't notice the network connection and doesn't trigger
 thread context switch while the nova-compute connects to the libvirt.
 If one hypervisor has over 50 or more instances and libvirt is slow
 any reason, the no context switch situation causes nova-compute's status
 down and some other failure since other tasks have no chance to work.
 .
 This commit adds greenthread.sleep(0) in the middle of for-loop section
 which is the long running no-context switch section. This sleep(0) gives
 other tasks to work even though the resource check task takes long time.
 The force context switch can prevent lack of any heartbeat operation.
Fix neutron client dict grabbing.patch | (download)

nova/network/neutron.py | 6 4 + 2 - 0 !
1 file changed, 4 insertions(+), 2 deletions(-)

 fix neutron client dict grabbing
 Due to a bug in python3.13 [1] the following code will leads to an
 emptied dict by the GC even though we hold a reference to the dict.
 .
 import gc
 .
 class A:
 .
    def __init__(self, client):
        self.__dict__ = client.__dict__
        self.client = client
 .
 class B:
    def __init__(self):
        self.test_attr = "foo"
 .
 a = A(B())
 print(a.__dict__)
 print(a.client.__dict__)
 gc.collect()
 print("##  After gc.collect()")
 print(a.__dict__)
 print(a.client.__dict__)
 .
  # Output with Python 13
 {'test_attr': 'foo', 'client': <__main__.B object at 0x73ea355a8590>}
 {'test_attr': 'foo', 'client': <__main__.B object at 0x73ea355a8590>}
  ##  After gc.collect()
 {'test_attr': 'foo', 'client': <__main__.B object at 0x73ea355a8590>}
 {}
 .
  # Output with Python 12
 {'test_attr': 'foo', 'client': <__main__.B object at 0x79c86f355400>}
 {'test_attr': 'foo', 'client': <__main__.B object at 0x79c86f355400>}
  ##  After gc.collect()
 {'test_attr': 'foo', 'client': <__main__.B object at 0x79c86f355400>}
 {'test_attr': 'foo', 'client': <__main__.B object at 0x79c86f355400>
 .
 Our neutron client has this kind of code and therefore failing in
 python3.13. This patch adds __getattr__ instead of trying to hold a
 direct reference to the __dict__. This seems to work around the
 problem.
 .
 [1] https://github.com/python/cpython/issues/130327