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 filePatch | File delta | Description |
---|---|---|
Install missed files.patch | (download) |
MANIFEST.in |
11 11 + 0 - 0 ! |
install missed files |
remove svg converter from doc conf.py.patch | (download) |
doc/source/conf.py |
1 0 + 1 - 0 ! |
remove sphinxcontrib.rsvgconverter from doc conf.py |
Add a healtcheck url.patch | (download) |
etc/nova/api-paste.ini |
15 10 + 5 - 0 ! |
[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 ! |
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 ! |
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 ! |
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 |
1