Asynchronous processing — nova — branch stable/2026.2
Branch
stable/2026.2@8df1922926dd(34.0.0+ 7 commits) — repository https://opendev.org/openstack/nova — analysed on 2026-10-28
Related files: REST API · errors · interactions · scenarios.
Almost everything Nova does after a 202 happens here: RPC consumers in nova-conductor, nova-scheduler and nova-compute, periodic tasks that poll the cell database through the conductor, and hypervisor events. The inventory found 175 triggers (_inventory/inventory_stable-2026.2.json, triggers): 130 RPC server methods, 44 periodic tasks (19 in the compute manager, the rest in virt drivers, the image cache and the console proxy) and 1 notification subscription.
1. Summary
| Process | Trigger | Type | Purpose | Reads | Writes / emits | Defined at |
|---|---|---|---|---|---|---|
| nova-conductor | object_action, object_class_action_versions | RPC call (topic conductor) | DB proxy for computes | cell DB | cell DB | nova/conductor/manager.py:147, nova/conductor/manager.py:172 |
| nova-conductor | schedule_and_build_instances | RPC cast (compute_task) | boot: schedule, create in cell, start build | API DB, scheduler | cell DB, instance mappings, RPC build_and_run_instance | nova/conductor/manager.py:1675 |
| nova-conductor | build_instances | RPC cast from compute | reschedule on an alternate host | request spec | Placement claim, RPC | nova/conductor/manager.py:671 |
| nova-conductor | migrate_server, live_migrate_instance | RPC call/cast | cold/live migration orchestration | scheduler, Placement | migrations, allocations, RPC prep_resize / live_migration | nova/conductor/manager.py:339, nova/conductor/manager.py:494 |
| nova-conductor | rebuild_instance, unshelve_instance | RPC cast | rebuild/evacuate, unshelve | scheduler | allocations, RPC to compute | nova/conductor/manager.py:1233, nova/conductor/manager.py:1033 |
| nova-scheduler | select_destinations | RPC call (topic scheduler) | choose hosts and claim resources | Placement, cell compute_nodes | Placement allocations | nova/scheduler/manager.py:188 |
| nova-scheduler | update_instance_info & co. | RPC fanout cast | keep host instance lists | — | in-memory host state | nova/scheduler/manager.py:819 |
| nova-scheduler | _discover_hosts_in_cells | periodic ([scheduler]/discover_hosts_in_cells_interval, off) | map new compute hosts | cell compute_nodes | API host_mappings | nova/scheduler/manager.py:111 |
| nova-compute | build_and_run_instance | RPC cast (topic compute, server = host) | create the guest | Placement, Glance, Neutron, Cinder | guest, ports, attachments, instance state | nova/compute/manager.py:2396 |
| nova-compute | 70 other RPC methods | RPC call/cast | every instance operation | — | — | § 4.2 |
| nova-compute | update_available_resource | periodic (every tick) | report capacity | driver | compute_nodes, Placement provider tree | nova/compute/manager.py:11138 |
| nova-compute | _sync_power_states | periodic (600 s) | detect guests that changed state on their own | driver, instances | power_state, stop API | nova/compute/manager.py:10778 |
| nova-compute | 16 other periodic tasks | periodic | timeouts, reclaim, cleanup, audit | instances, migrations | see § 4.3 | § 4.3 |
| nova-compute | lifecycle events | hypervisor event | react to guest power changes | driver | power_state | nova/compute/manager.py:1327 |
| all services | service heartbeat | timer ([DEFAULT]/report_interval, 10 s) | liveness | — | services.report_count, updated_at | nova/servicegroup/drivers/db.py |
| console proxies | WebSocket connection | event | validate console token and proxy | console_auth_tokens | — | nova/console/websocketproxy.py |
2. nova-conductor
nova-conductor (nova/cmd/conductor.py) runs two RPC endpoints on topic conductor (nova/conductor/rpcapi.py:30): ConductorManager (version 3.0, nova/conductor/manager.py:120) and ComputeTaskManager (namespace compute_task, version 1.26, nova/conductor/manager.py:269). It is the only service that talks to both the API database and the cell databases, and the only one that orchestrates scheduling. It has no periodic task.
2.1 Object proxy for nova-compute (object_class_action_versions, object_action, object_backport_versions)
- Trigger: RPC call from
nova-computewhenever it saves or loads a versioned object (Instance.save(),Migration.save(),BlockDeviceMapping.create()…), because computes run withindirection_apiset and have no database credentials (nova/conductor/rpcapi.py:237-255). - Purpose: give compute hosts database access without exposing the database to them.
- Flow: deserialise the object, call the named method on the conductor side against the cell database (
nova/conductor/manager.py:133_object_dispatch), return the updated object and the changed fields (nova/conductor/manager.py:172-190).object_backport_versionsdowngrades an object to the version a compute understands during rolling upgrades. - Concurrency: none beyond the DB layer;
Instance.save(expected_task_state=…)implements compare-and-swap ontask_state(UnexpectedTaskStateError). - Error behaviour: exceptions are serialised back to the compute (registered remote exceptions) and re-raised there.
- Cost: the bulk of conductor traffic: several calls per instance operation per host, plus every periodic task of every compute.
2.2 schedule_and_build_instances
- Trigger: RPC cast from nova-api after
POST /servers(nova/compute/api.py:1836,nova/conductor/rpcapi.py:395). - Purpose: pick hosts, create the instance in its cell and start the build.
- Flow (
nova/conductor/manager.py:1675-1868):select_destinationsRPC call to the scheduler withreturn_alternates=True(nova/conductor/manager.py:967); onNoValidHost/MaxRetriesExceededthe instances are buried in cell0: created in the cell0 database withvm_state=error, an instance fault and an instance action, instance mapping pointed at cell0, build request deleted,compute_task.build_instanceserror notification (nova/conductor/manager.py:1578-1673).- For each selected host: resolve the host's cell through
host_mappings(missing mapping → bury in cell0, log "No host-to-cell mapping found for selected host",nova/conductor/manager.py:1705-1718). - Create the
instancesrow (and itsinstance_extra,instance_system_metadata) in that cell (nova/conductor/manager.py:1758), then updateinstance_mappings.cell_id(nova/conductor/manager.py:1944_map_instance_to_cell). - Re-check quotas if
[quota]/recheck_quota(nova/conductor/manager.py:1762-1777); on failure the instance is set to ERROR and cleaned up. - Create BDMs and tags in the cell (
nova/conductor/manager.py:1528,nova/conductor/manager.py:1545); create Cyborg ARQs if the flavor requests accelerators (nova/conductor/manager.py:1870). - Delete the
build_requestsrow (nova/conductor/manager.py:2027); if it is already gone, the user deleted the server meanwhile: the new instance is destroyed and allocations removed. - RPC cast
build_and_run_instanceto the selected host with the alternates ashost_list(nova/conductor/manager.py:1857).
- Concurrency/idempotency: allocations are claimed by the scheduler, not the conductor; a replayed cast would hit
InstanceExists/ missing build request and clean up. - Error behaviour: any exception after scheduling triggers
_cleanup_build_artifacts(nova/conductor/manager.py:1974): instances set to ERROR in their cell, build requests and mappings cleaned.
2.3 build_instances (reschedule path)
- Trigger: RPC cast from
nova-computewhen a build fails withRescheduledException(nova/compute/manager.py:2573), carrying the remaining alternate hosts. - Flow (
nova/conductor/manager.py:671): take the next alternate fromhost_list, claim its allocation request in Placement (claim_resources), and castbuild_and_run_instanceto it; no new scheduler call while alternates remain. When none is left:MaxRetriesExceeded→ instance set to ERROR with a fault (nova/conductor/manager.py:644_cleanup_when_reschedule_fails). The total number of attempts is[scheduler]/max_attempts(nova/conf/scheduler.py:25).
2.4 migrate_server (cold migration / resize) and live_migrate_instance
- Trigger:
resize/migrateactions (RPC call with[DEFAULT]/long_rpc_timeoutwhen the API needs to know the scheduling result,nova/conductor/rpcapi.py:317-353);os-migrateLive(castlive_migrate_instance,nova/conductor/rpcapi.py:302). - Cold migration / resize (
nova/conductor/manager.py:408,nova/conductor/tasks/migrate.py:232):- create a
migrationsrecord and move the instance's allocations to the migration consumer in Placement (nova/conductor/tasks/migrate.py:29replace_allocation_with_migration), so that the source usage is held by the migration and the destination will be held by the instance; select_destinations(or use the requested host),claim_resourceson the chosen host (nova/conductor/tasks/migrate.py:342-372);- RPC cast
prep_resizeto the destination compute (nova/conductor/tasks/migrate.py:329); a cross-cell resize (allowed by the policycompute:servers:resize:cross_cell,nova/policies/servers.py:23) goes throughnova/conductor/tasks/cross_cell_migrate.pyinstead (snapshot-based, instance copied to the target cell); - on
NoValidHostthe instance keeps itsvm_statewithtask_state=Noneand acompute_task.migrate_servererror notification (nova/conductor/manager.py:417-431); the API sees 400 only when the call was synchronous.
- create a
- Live migration (
nova/conductor/tasks/live_migrate.py:81):- check the source is up (
nova/conductor/tasks/live_migrate.py:301) and move allocations to the migration (nova/conductor/tasks/live_migrate.py:91); - with a target host and
force=False: check the host, claim allocations on it (nova/conductor/tasks/live_migrate.py:128); without a target:select_destinationsin a loop over candidates (nova/conductor/tasks/live_migrate.py:533-575), each checked by_check_compatible_with_source_hypervisor(same hypervisor type, version not older) and bycheck_can_live_migrate_destination, an RPC call to the destination which itself callscheck_can_live_migrate_sourceon the source (nova/conductor/tasks/live_migrate.py:373-378); - RPC cast
live_migrationto the source compute (nova/conductor/tasks/live_migrate.py:154). - Failures before step 3 set the migration to
error/failed, revert allocations and leave the instanceACTIVEwithtask_state=None.
- check the source is up (
2.5 rebuild_instance (rebuild and evacuate), unshelve_instance
- rebuild_instance (
nova/conductor/manager.py:1233): for a plain rebuild with a new image, the scheduler is asked to validate the image against the current host (request_is_rebuild, no Placement query,nova/scheduler/manager.py:217); for an evacuate without a host,select_destinationspicks a new host and its allocations are claimed (nova/conductor/manager.py:1190_allocate_for_evacuate_dest_host); then castrebuild_instanceto the (new) host withrecreate=True. - unshelve_instance (
nova/conductor/manager.py:1033): aSHELVEDinstance is simply restarted on its host; aSHELVED_OFFLOADEDone is rescheduled (select_destinations, honouring the requested AZ/host from 2.77/2.91), its allocations claimed, andunshelve_instancecast to the new host.
2.6 Other compute-task methods
| Method | Trigger | What it does | Defined at |
|---|---|---|---|
cache_images | POST /os-aggregates/{id}/images | RPC call cache_images (long timeout) to every up compute of the aggregate, at most [image_cache]/precache_concurrency in parallel (nova/thread_pool_factory.py:138); per-host progress is emitted as an aggregate cache_images versioned notification (nova/conductor/manager.py:2144-2146) | nova/conductor/manager.py:2086 |
confirm_snapshot_based_resize / revert_snapshot_based_resize | confirm/revert of a cross-cell resize | runs the cross-cell confirm/revert task: deletes the source-cell copy, or switches the instance mapping back | nova/conductor/manager.py:2217, nova/conductor/manager.py:2236 |
attach_volume (1.26) | POST /servers/{id}/os-volume_attachments on a non-offloaded server (RPC call, long timeout, nova/compute/api.py:5263) | creates the volume BDM in the cell DB (nova/conductor/manager.py:2249), checks and reserves the volume in Cinder, then casts attach_volume to the host (nova/conductor/manager.py:2296-2301) | nova/conductor/manager.py:2267 |
3. nova-scheduler
nova-scheduler (nova/cmd/scheduler.py) serves topic scheduler, version 4.5 (nova/scheduler/manager.py:65), with several workers per host ([scheduler]/workers, nova/conf/scheduler.py:86). It reads both databases (host states come from the cell compute_nodes tables) and Placement.
3.1 select_destinations
- Trigger: RPC call from nova-conductor (
nova/scheduler/rpcapi.py:132), timeout[DEFAULT]/long_rpc_timeoutwith a heartbeat everyrpc_response_timeout. - Purpose: return, for each instance, the chosen host plus alternates, with resources already claimed in Placement.
- Flow (
nova/scheduler/manager.py:188-307):- Request filters (
nova/scheduler/request_filter.py:626process_reqspec) translate the request into Placement constraints: tenant/AZ aggregates (require_tenant_aggregate,map_az_to_placement_aggregate), image type support trait,COMPUTE_STATUS_DISABLEDforbidden trait, accelerators, routed networks, isolated aggregates, ephemeral encryption, virtio sound, TPM secret security, owner filter (nova/scheduler/request_filter.py:608ALL_REQUEST_FILTERS). A failing request filter →NoValidHost. GET /allocation_candidateson Placement built from the flavor, image and port resource requests (nova/scheduler/manager.py:232-237); if CPU pinning is requested a second query with VCPU instead of PCPU is merged unless[workarounds]/disable_fallback_pcpu_query(nova/scheduler/manager.py:243-262). No candidates → log "Got no allocation candidates from the Placement API…" andNoValidHost(nova/scheduler/manager.py:276-283). The number of candidates is capped by[scheduler]/max_placement_results(default 1000,nova/conf/scheduler.py:63).- Host states are built for the candidate providers only, from the cell
compute_nodestables and the in-memory instance tracking (nova/scheduler/manager.py:787). - For each instance: run the enabled filters (default
ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,nova/conf/scheduler.py:323-336) and weighers (all by default,nova/conf/scheduler.py:355), pick randomly among the best[filter_scheduler]/host_subset_sizehosts (nova/scheduler/manager.py:740-785), then claim the allocation request for that host in Placement (PUT /allocations/{instance_uuid},nova/scheduler/manager.py:489); a failed claim (concurrent consumer) moves on to the next host. - Not enough hosts for all instances → allocations already claimed in this request are deleted (
_cleanup_allocations) andNoValidHostis raised (nova/scheduler/manager.py:542-572). - Alternates: up to
max_attempts - 1further hosts per instance, filtered and weighed but not claimed (nova/scheduler/manager.py:649).
- Request filters (
- Concurrency: several schedulers run in parallel; correctness relies on Placement's consumer/provider generations, not on locks. Instance tracking in memory is eventually consistent.
- Error behaviour:
NoValidHostis an expected exception of the RPC endpoint (nova/scheduler/manager.py:187), so it is re-raised in the conductor as is. - Cost: 1–2 Placement GETs + one PUT per instance, plus host-state DB reads per cell.
3.2 Instance and aggregate tracking (fanout casts)
| Method | Emitter | Effect | Defined at |
|---|---|---|---|
update_aggregates, delete_aggregate | nova-api aggregate changes | refresh the host manager's aggregate cache | nova/scheduler/manager.py:800, nova/scheduler/manager.py:810 |
update_instance_info, delete_instance_info, sync_instance_info | nova-compute when [filter_scheduler]/track_instance_changes (default true, nova/conf/scheduler.py:275) | keep the per-host list of instances used by affinity filters without DB reads | nova/scheduler/manager.py:819-839 |
All are fanout casts to every scheduler worker (nova/scheduler/rpcapi.py:162-186).
3.3 _discover_hosts_in_cells (periodic)
- Trigger: oslo.service periodic task every
[scheduler]/discover_hosts_in_cells_intervalseconds (default -1 = disabled,nova/conf/scheduler.py:41), run at start (nova/scheduler/manager.py:108-110). - Purpose: map newly started compute hosts to their cell (
host_mappingsrows), instead of runningnova-manage cell_v2 discover_hosts. - Concurrency: only the scheduler whose host name sorts first among the up schedulers runs it (
nova/scheduler/manager.py:112-120);HostMappingExistsis logged once as a warning when both mechanisms are used. - Data read:
compute_nodes/servicesof every cell not yet mapped (nova/objects/host_mapping.pydiscover_hosts).
4. nova-compute
nova-compute (nova/cmd/compute.py) runs one per hypervisor host (or per Ironic conductor group). It consumes topics compute and compute-alt with server=<host> (03 § 1.1), owns the virt driver selected by [DEFAULT]/compute_driver, and has no database access: every object load/save goes through the conductor (§ 2.1). For OpenKeel the relevant contract is the driver interface (§ 4.5): KubeVirt replaces the libvirt driver, so libvirt internals are out of scope and only listed.
4.1 build_and_run_instance (boot on the host)
- Trigger: RPC cast from the conductor (
nova/conductor/manager.py:1857), handlernova/compute/manager.py:2396. The work runs in a background thread under a per-instance lock; the number of concurrent builds per host is bounded by[DEFAULT]/max_concurrent_builds(nova/conf/compute.py:657), a semaphore taken around_locked_do_build_and_run_instance(nova/compute/manager.py:2403-2408). - Purpose: create the guest on this host from the scheduled request.
- Flow (
nova/compute/manager.py:2644_build_and_run_instance):- read the instance's allocations from Placement (
GET /allocations/{uuid},nova/compute/manager.py:2682) and claim host resources in the local resource tracker (NUMA, PCI,ComputeResourcesUnavailable→ reschedule) (nova/compute/manager.py:2688,nova/compute/resource_tracker.py:162); - late server-group policy check: a hard (anti-)affinity violation raises
GroupAffinityViolation→ reschedule by policy (nova/compute/manager.py:2693); _build_resources(nova/compute/manager.py:2875): Cyborg accelerator requests; network allocation in Neutron started asynchronously (allocate_for_instance: create/update ports withbinding:host_id,nova/compute/manager.py:1993-2015);task_state=block_device_mappingand volume attachment in Cinder (_prep_block_device,nova/compute/manager.py:2940-2944); image-backed root disk metadata;task_state=spawning,driver.spawn(...)(nova/compute/manager.py:2714): the driver fetches the image from Glance, creates disks, defines and starts the guest, and **waits fornetwork-vif-plugged** events from Neutron for up to[DEFAULT]/vif_plugging_timeout(§ 02 § 4);- on success
vm_state=active,task_state=None,power_statefrom the driver,launched_at=now,instance.create.endnotification, scheduler instance info update (nova/compute/manager.py:2858).
- read the instance's allocations from Placement (
- Error behaviour (
nova/compute/manager.py:2722-2815):ComputeResourcesUnavailableand generic spawn failures →RescheduledException(allocations on this host deleted, networks cleaned,compute_task.build_instancescast to the conductor with the remaining alternates,nova/compute/manager.py:2536-2582); invalid image/flavor/network errors →BuildAbortException→ERRORwithout reschedule; instance deleted meanwhile → silent cleanup. - Cost: per boot, Placement 1 GET, Neutron ~2–4 calls per port, Cinder 2–3 calls per volume, Glance image download (cached per host by the image cache).
4.2 Other RPC endpoints
71 compute RPC methods are called by nova-api, nova-conductor or other computes. The table shows, for each: mode, the instance-action event recorded (compute_<method> via wrap_instance_event, nova/compute/utils.py:1457), the error decorators (wrap_instance_fault → instance_faults row, reverts_task_state → task_state=None on exception, errors_out_migration → migration error), and the virt driver / external calls found in the handler and its helpers up to two levels deep (calls made in threads or deeper helpers are not shown).
| RPC method (handler) | Mode | Instance event | Fault / revert / migration error | Virt driver calls | Calls to other services |
|---|---|---|---|---|---|
add_fixed_ip_to_instance (nova/compute/manager.py:6923) | cast | — | fault | inject_network_info | network_api.add_fixed_ip_to_instance |
allow_share (nova/compute/manager.py:4708) | cast | compute_allow_share | fault | — | — |
attach_interface (nova/compute/manager.py:8566) | call | compute_attach_interface | fault | attach_interface, network_binding_host_id | network_api.allocate_for_instance, network_api.create_resource_requests, network_api.deallocate_port_for_instance, reportclient.add_resources_to_instance_allocation, reportclient.get_allocation_candidates, reportclient.remove_resources_from_instance_allocation |
attach_volume (nova/compute/manager.py:7845) | cast | compute_attach_volume | fault | — | volume_api.attachment_delete, volume_api.unreserve_volume |
backup_instance (nova/compute/manager.py:4553) | cast | compute_backup_instance | fault, reverts task_state | snapshot | image_api.delete, image_api.get, image_api.get_all |
build_and_run_instance (nova/compute/manager.py:2396) | cast | — | fault, reverts task_state | get_available_nodes, spawn, unplug_vifs | compute_task_api.build_instances, network_api.get_instance_nw_info, reportclient.delete_allocation_for_instance, reportclient.get_allocations_for_consumer, volume_api.delete |
cache_images (nova/compute/manager.py:11722) | call | — | — | cache_image | — |
check_can_live_migrate_destination (nova/compute/manager.py:8810) | call | compute_check_can_live_migrate_destination | fault | check_can_live_migrate_destination, check_source_migrate_data_at_dest, cleanup_live_migration_destination_check, get_available_nodes, post_claim_migrate_data | compute_rpcapi.check_can_live_migrate_source, network_api.has_port_binding_extension, reportclient.get_allocations_for_consumer |
check_can_live_migrate_source (nova/compute/manager.py:9036) | call | compute_check_can_live_migrate_source | fault | check_can_live_migrate_source | compute_rpcapi.supports_numa_live_migration |
check_instance_shared_storage (nova/compute/manager.py:8785) | call | — | — | check_instance_shared_storage_remote | — |
confirm_snapshot_based_resize_at_source (nova/compute/manager.py:5152) | call | compute_confirm_snapshot_based_resize_at_source | fault, migration→error | cleanup | network_api.cleanup_instance_network_on_host, network_api.get_instance_nw_info, reportclient.delete_allocation_for_instance, volume_api.attachment_delete |
deny_share (nova/compute/manager.py:4715) | cast | compute_deny_share | fault | — | — |
detach_interface (nova/compute/manager.py:8707) | cast | compute_detach_interface | fault | detach_interface | network_api.deallocate_port_for_instance |
detach_volume (nova/compute/manager.py:8001) | cast | compute_detach_volume | fault | block_stats | — |
drop_move_claim_at_destination (nova/compute/manager.py:10276) | call | — | fault | get_available_nodes | — |
external_instance_event (nova/compute/manager.py:11657) | cast | — | — | detach_interface, extend_volume, power_update_event | network_api.get_instance_nw_info, volume_api.get |
finish_resize (nova/compute/manager.py:6646) | cast | compute_finish_resize | fault, reverts task_state, migration→error | finish_migration | network_api.get_instance_nw_info, network_api.migrate_instance_finish, network_api.setup_networks_on_host, query_client.update_instance_info, reportclient.delete_allocation_for_instance, reportclient.get_allocs_for_consumer |
finish_revert_resize (nova/compute/manager.py:5661) | cast | compute_finish_revert_resize | fault, reverts task_state, migration→error | finish_revert_migration, get_volume_connector | network_api.get_instance_nw_info, network_api.migrate_instance_finish, network_api.setup_networks_on_host, reportclient.get_allocations_for_consumer, reportclient.move_allocations, volume_api.attachment_complete … |
finish_revert_snapshot_based_resize_at_source (nova/compute/manager.py:5452) | call | compute_finish_revert_snapshot_based_resize_at_source | fault, reverts task_state, migration→error | finish_revert_migration, get_volume_connector | network_api.get_instance_nw_info, network_api.migrate_instance_finish, query_client.update_instance_info, reportclient.get_allocations_for_consumer, reportclient.move_allocations, volume_api.attachment_complete … |
finish_snapshot_based_resize_at_dest (nova/compute/manager.py:6730) | call | compute_finish_snapshot_based_resize_at_dest | fault, reverts task_state, migration→error | spawn | network_api.get_instance_nw_info, network_api.migrate_instance_finish, network_api.migrate_instance_start, query_client.update_instance_info, reportclient.get_allocations_for_consumer |
get_console_output (nova/compute/manager.py:7550) | call | — | fault | get_console_output | — |
get_diagnostics (nova/compute/manager.py:7098) | call | — | fault | get_diagnostics, get_info | — |
get_host_uptime (nova/compute/manager.py:7091) | call | — | — | get_host_uptime | — |
get_instance_diagnostics (nova/compute/manager.py:7114) | call | — | fault | get_info, get_instance_diagnostics | — |
get_mks_console (nova/compute/manager.py:7695) | call | — | fault | get_mks_console | — |
get_serial_console (nova/compute/manager.py:7741) | call | — | fault | get_serial_console | — |
get_spice_console (nova/compute/manager.py:7628) | call | — | fault | get_spice_console | — |
get_vnc_console (nova/compute/manager.py:7582) | call | — | fault | get_vnc_console | — |
host_maintenance_mode (nova/compute/manager.py:7015) | call | — | — | host_maintenance_mode | — |
host_power_action (nova/compute/manager.py:7010) | call | — | — | host_power_action | — |
inject_network_info (nova/compute/manager.py:7540) | cast | — | fault | inject_network_info | network_api.get_instance_nw_info |
live_migration (nova/compute/manager.py:9469) | cast | compute_live_migration | fault, migration→error | — | — |
live_migration_abort (nova/compute/manager.py:9539) | cast | compute_live_migration_abort | fault | live_migration_abort | network_api.setup_networks_on_host, reportclient.get_allocations_for_consumer, reportclient.move_allocations |
live_migration_force_complete (nova/compute/manager.py:9507) | cast | compute_live_migration_force_complete | fault | live_migration_force_complete | — |
pause_instance (nova/compute/manager.py:6969) | cast | compute_pause_instance | fault, reverts task_state | get_info, pause | — |
post_live_migration_at_destination (nova/compute/manager.py:9950) | call | compute_post_live_migration_at_destination | fault | get_info, post_live_migration_at_destination | network_api.get_instance_nw_info, network_api.migrate_instance_finish, network_api.setup_networks_on_host |
pre_live_migration (nova/compute/manager.py:9066) | call | compute_pre_live_migration | fault | get_volume_connector, pre_live_migration | network_api.get_instance_nw_info, network_api.setup_networks_on_host, volume_api.attachment_complete, volume_api.attachment_create, volume_api.attachment_delete |
prep_resize (nova/compute/manager.py:5955) | cast | compute_prep_resize | fault, reverts task_state | get_available_nodes | compute_rpcapi.resize_instance, compute_task_api.resize_instance, reportclient.get_allocations_for_consumer, reportclient.move_allocations |
prep_snapshot_based_resize_at_dest (nova/compute/manager.py:6124) | call | compute_prep_snapshot_based_resize_at_dest | fault | — | reportclient.get_allocs_for_consumer |
prep_snapshot_based_resize_at_source (nova/compute/manager.py:6197) | call | compute_prep_snapshot_based_resize_at_source | fault, reverts task_state, migration→error | destroy, get_info, get_volume_connector, power_off, snapshot | network_api.get_instance_nw_info, network_api.migrate_instance_start, volume_api.attachment_create, volume_api.attachment_delete, volume_api.terminate_connection |
quiesce_instance (nova/compute/manager.py:11861) | call | — | — | quiesce | — |
reboot_instance (nova/compute/manager.py:4407) | cast | compute_reboot_instance | fault, reverts task_state | get_info, reboot | network_api.get_instance_nw_info, volume_api.attachment_delete, volume_api.attachment_get, volume_api.attachment_get_all, volume_api.begin_detaching |
rebuild_instance (nova/compute/manager.py:3894) | cast | compute_rebuild_instance | fault, reverts task_state | instance_on_disk, rebuild | image_api.generate_image_url, network_api.get_instance_nw_info, network_api.setup_instance_network_on_host, network_api.setup_networks_on_host, reportclient.get_allocations_for_consumer, volume_api.attachment_create |
remove_fixed_ip_from_instance (nova/compute/manager.py:6945) | cast | — | fault | inject_network_info | network_api.remove_fixed_ip_from_instance |
remove_volume_connection (nova/compute/manager.py:8301) | call | — | — | get_volume_connector | volume_api.attachment_delete, volume_api.terminate_connection |
rescue_instance (nova/compute/manager.py:4864) | cast | compute_rescue_instance | fault, reverts task_state | get_info, power_off, rescue | network_api.get_instance_nw_info |
reserve_block_device_name (nova/compute/manager.py:7798) | call | — | fault, reverts task_state | get_device_name_for_instance | — |
resize_instance (nova/compute/manager.py:6331) | cast | compute_resize_instance | fault, reverts task_state | get_volume_connector, migrate_disk_and_power_off | compute_rpcapi.finish_resize, network_api.get_instance_nw_info, network_api.migrate_instance_start, reportclient.get_allocations_for_consumer, reportclient.move_allocations, volume_api.attachment_create … |
restore_instance (nova/compute/manager.py:3658) | cast | compute_restore_instance | fault, reverts task_state | get_info, power_on, restore | network_api.get_instance_nw_info |
resume_instance (nova/compute/manager.py:7157) | cast | compute_resume_instance | fault, reverts task_state | get_info, resume | network_api.get_instance_nw_info |
revert_resize (nova/compute/manager.py:5610) | cast | compute_revert_resize | fault, reverts task_state, migration→error | check_instance_shared_storage_cleanup, check_instance_shared_storage_local, destroy, get_volume_connector | compute_rpcapi.check_instance_shared_storage, compute_rpcapi.finish_revert_resize, network_api.get_instance_nw_info, network_api.migrate_instance_start, network_api.setup_networks_on_host, volume_api.attachment_create … |
revert_snapshot_based_resize_at_dest (nova/compute/manager.py:5339) | call | compute_revert_snapshot_based_resize_at_dest | fault, reverts task_state, migration→error | destroy | network_api.cleanup_instance_network_on_host, network_api.get_instance_nw_info, network_api.migrate_instance_start, query_client.delete_instance_info, volume_api.attachment_delete |
rollback_live_migration_at_destination (nova/compute/manager.py:10290) | cast | compute_rollback_live_migration_at_destination | fault | rollback_live_migration_at_destination | network_api.get_instance_nw_info, network_api.setup_networks_on_host |
set_admin_password (nova/compute/manager.py:4771) | call | compute_set_admin_password | fault, reverts task_state | get_info, set_admin_password | — |
set_host_enabled (nova/compute/manager.py:7067) | call | — | — | set_host_enabled | — |
shelve_instance (nova/compute/manager.py:7204) | cast | compute_shelve_instance | fault, reverts task_state | destroy, get_info, power_off, snapshot | network_api.get_instance_nw_info, network_api.unbind_ports |
shelve_offload_instance (nova/compute/manager.py:7289) | cast | compute_shelve_offload_instance | fault, reverts task_state | destroy, get_info, get_volume_connector, power_off | network_api.get_instance_nw_info, network_api.unbind_ports, query_client.delete_instance_info, volume_api.attachment_create, volume_api.attachment_delete, volume_api.terminate_connection |
snapshot_instance (nova/compute/manager.py:4569) | cast | compute_snapshot_instance | fault, reverts task_state | get_info, snapshot | image_api.delete, image_api.get |
soft_delete_instance (nova/compute/manager.py:3636) | cast | compute_soft_delete_instance | fault, reverts task_state | get_info, power_off, soft_delete | — |
start_instance (nova/compute/manager.py:3581) | cast | compute_start_instance | fault, reverts task_state | get_info, power_on | image_api.delete, network_api.get_instance_nw_info |
suspend_instance (nova/compute/manager.py:7131) | cast | compute_suspend_instance | fault, reverts task_state | get_info, suspend | — |
swap_volume (nova/compute/manager.py:8192) | cast | compute_swap_volume | fault | get_volume_connector, swap_volume | volume_api.attachment_complete, volume_api.attachment_delete, volume_api.get, volume_api.migrate_volume_completion, volume_api.roll_detaching, volume_api.terminate_connection … |
terminate_instance (nova/compute/manager.py:3446) | cast | compute_terminate_instance | fault, reverts task_state | destroy, get_volume_connector | network_api.get_instance_nw_info, reportclient.delete_allocation_for_instance, volume_api.attachment_delete, volume_api.delete, volume_api.detach, volume_api.terminate_connection |
trigger_crash_dump (nova/compute/manager.py:3613) | cast | compute_trigger_crash_dump | fault | trigger_crash_dump | — |
unpause_instance (nova/compute/manager.py:6991) | cast | compute_unpause_instance | fault, reverts task_state | get_info, unpause | — |
unquiesce_instance (nova/compute/manager.py:11885) | cast | — | — | unquiesce | volume_api.get_snapshot |
unrescue_instance (nova/compute/manager.py:4929) | cast | compute_unrescue_instance | fault, reverts task_state | get_info, unrescue | network_api.get_instance_nw_info |
unshelve_instance (nova/compute/manager.py:7384) | cast | compute_unshelve_instance | fault, reverts task_state | clean_networks_preparation, failed_spawn_cleanup, get_available_nodes, get_volume_connector, spawn | image_api.delete, network_api.get_instance_nw_info, network_api.setup_instance_network_on_host, query_client.update_instance_info, reportclient.delete_allocation_for_instance, reportclient.get_allocations_for_consumer … |
validate_console_port (nova/compute/manager.py:7780) | call | — | fault | get_mks_console, get_serial_console, get_spice_console, get_vnc_console | — |
volume_snapshot_create (nova/compute/manager.py:4682) | cast | — | — | volume_snapshot_create | — |
volume_snapshot_delete (nova/compute/manager.py:4694) | cast | — | — | volume_snapshot_delete | — |
4.3 Periodic tasks (SQL polling through the conductor)
oslo.service periodic tasks of ComputeManager; tasks without spacing run on every tick (60 s by default), the first tick is delayed by a random [DEFAULT]/periodic_fuzzy_delay (≤ 60 s, nova/conf/service.py:66). All instance queries are InstanceList.get_by_filters(host=<this host>, …) executed by the conductor on the cell DB (often with use_slave=True).
| Task | Interval (option, default) | Purpose | Data read | Effects | Defined at |
|---|---|---|---|---|---|
update_available_resource | [DEFAULT]/update_resources_interval, 0 → every tick | resource tracker: report the host's capacity and usage | driver get_available_resource, update_provider_tree; instances and migrations on the host | compute_nodes row updated; Placement provider tree, inventories, traits, aggregates synced (update_from_provider_tree, nova/compute/resource_tracker.py:1394); orphan compute nodes deleted with their providers | nova/compute/manager.py:11138, nova/compute/resource_tracker.py:922 |
_sync_power_states | [DEFAULT]/sync_power_state_interval, 600 s, run immediately | align DB power_state with the hypervisor | instances of the host + driver get_info per instance (pool of [DEFAULT]/sync_power_state_pool_size) | power_state saved; an active instance found off is stopped through the API ("Instance shutdown by itself. Calling the stop API.") | nova/compute/manager.py:10778, nova/compute/manager.py:10907 |
_check_instance_build_time | every tick if [DEFAULT]/instance_build_timeout > 0 (default 0 = off) | fail builds stuck in building | vm_state=building, created_at older than timeout | instance set to ERROR, log "Instance build timed out. Set to error state." (nova/compute/manager.py:1984-1985) | nova/compute/manager.py:1968 |
_poll_rebooting_instances | every tick if [DEFAULT]/reboot_timeout > 0 (0) | unblock stuck reboots | task_state in rebooting states, updated_at older than timeout | driver poll_rebooting_instances | nova/compute/manager.py:10514 |
_poll_rescued_instances | every tick if [DEFAULT]/rescue_timeout > 0 (0) | auto-unrescue | vm_state=rescued older than timeout | API unrescue | nova/compute/manager.py:10533 |
_poll_unconfirmed_resizes | every tick if [DEFAULT]/resize_confirm_window > 0 (0) | auto-confirm resizes | migrations finished older than the window whose destination is this host | compute_api.confirm_resize (nova/compute/manager.py:10629) | nova/compute/manager.py:10551 |
_poll_shelved_instances | [DEFAULT]/shelved_poll_interval, 3600 s; active if [DEFAULT]/shelved_offload_time > 0 (0) | offload shelved instances after a delay | vm_state=shelved, shelved_at system metadata | shelve_offload_instance locally (host resources and allocations freed) | nova/compute/manager.py:10635 |
_reclaim_queued_deletes | every tick if [DEFAULT]/reclaim_instance_interval > 0 (0) | hard-delete soft-deleted instances | vm_state=soft-delete, deleted_at older than the interval | _delete_instance (driver destroy, volumes, ports, allocations) | nova/compute/manager.py:11043 |
_cleanup_running_deleted_instances | [DEFAULT]/running_deleted_instance_poll_interval, 1800 s, run immediately | detect guests still running for deleted instances | driver list_instances vs deleted instances | action [DEFAULT]/running_deleted_instance_action (reap = destroy, log, shutdown, noop) | nova/compute/manager.py:11263 |
_run_pending_deletes | [DEFAULT]/instance_delete_interval, 300 s | retry file cleanup of deleted instances | instances with cleaned=0 on the host | driver delete_instance_files | nova/compute/manager.py:11760 |
_cleanup_incomplete_migrations | [DEFAULT]/instance_delete_interval, 300 s | remove leftover files of failed migrations | migrations error/failed involving the host | driver delete_instance_files | nova/compute/manager.py:11790 |
_cleanup_expired_console_auth_tokens | [DEFAULT]/instance_delete_interval, 300 s | purge expired console tokens | console_auth_tokens.expires | rows deleted | nova/compute/manager.py:11902 |
_heal_instance_info_cache | [DEFAULT]/heal_instance_info_cache_interval, -1 (disabled) in this release | refresh network info caches from Neutron, one instance per run | Neutron ports of one instance | instance_info_caches updated | nova/compute/manager.py:10407 |
_sync_scheduler_instance_info | [DEFAULT]/scheduler_instance_sync_interval, 120 s | resync the scheduler's view of this host | instance UUIDs of the host | fanout cast sync_instance_info | nova/compute/manager.py:2286 |
_instance_usage_audit | every tick if [DEFAULT]/instance_usage_audit (false) | hourly usage notifications | instances active during the last audit period | compute.instance.exists notifications, task_log row | nova/compute/manager.py:10673 |
_poll_volume_usage | [DEFAULT]/volume_usage_poll_interval, 0 = off | volume I/O usage | driver get_all_volume_usage | volume_usage_cache | nova/compute/manager.py:10759 |
_run_image_cache_manager_pass | [image_cache]/manager_interval, 2400 s | delete unused base images | instances of all hosts sharing the cache | image cache files removed | nova/compute/manager.py:11696 |
_reconcile_stale_share_access | [DEFAULT]/stale_share_access_reconcile_interval, 1800 s | reconcile Manila share access rules | share mappings in error | Manila access rules removed | nova/compute/manager.py:11845 |
Concurrency: periodic tasks run in the compute's own thread; each host only touches its own instances, so no cross-host lock is needed. Operations on one instance are serialised by utils.synchronized(instance.uuid) locks in the manager, and resource-tracker updates by the compute_resources semaphore (nova/compute/resource_tracker.py:58).
4.4 Driver events and the service heartbeat
- Lifecycle events: the driver emits
started/stopped/paused/resumed/suspendedevents (libvirt domain events);handle_lifecycle_event(nova/compute/manager.py:1327) runs_sync_instance_power_statefor the instance, with a delay (in the libvirt host event loop,nova/virt/libvirt/host.py:314-317) to ignore transient stops during reboots. - Heartbeat: every
[DEFAULT]/report_interval(10 s,nova/conf/service.py:25) each service updatesservices.report_count/updated_atthrough the conductor (nova/servicegroup/drivers/db.py). A service is down when its last report is older than[DEFAULT]/service_down_time(60 s,nova/conf/service.py:41). The API (check_instance_host(check_is_up=True), local delete, evacuate preconditions) and the scheduler'sComputeFilterrely on it. - Startup (
init_host,nova/compute/manager.py:1557): the compute reconciles instances left in transient states (e.g.deleting→ finish delete;rebooting→ reboot;migrating→ recover), destroys evacuated instances still on the host, and registers its compute node and Placement provider.
4.5 Virt driver interface (the contract a KubeVirt driver implements)
nova.virt.driver.ComputeDriver (nova/virt/driver.py) is the boundary between the compute manager and the hypervisor. A KubeVirt-backed compute (OpenKeel) replaces nova/virt/libvirt/ behind this interface. The table lists every public method of the interface, whether the base class raises NotImplementedError (mandatory for the operations a deployment wants), whether the compute manager calls it, and which in-tree drivers implement it. Capabilities (ComputeDriver.capabilities, 35 keys, e.g. supports_evacuate, supports_attach_interface, supports_device_tagging, supports_multiattach, supports_trusted_certs, supports_image_type_*, supports_vtpm, supports_socket_pci_numa_affinity…) are published as Placement traits on the compute node provider (COMPUTE_*, nova/virt/driver.py:219 CAPABILITY_TRAITS_MAP, nova/virt/driver.py:1339), so the scheduler only selects hosts whose driver supports what the request needs; the API also rejects some operations based on them.
| Driver method | Interface | Raises NotImplementedError by default | Called by compute manager | libvirt | ironic | vmwareapi | zvm | fake |
|---|---|---|---|---|---|---|---|---|
init_host | nova/virt/driver.py:361 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
process_instances_at_startup | nova/virt/driver.py:368 | no | yes | ✓ | ||||
cleanup_host | nova/virt/driver.py:381 | no | yes | ✓ | ✓ | |||
get_info | nova/virt/driver.py:393 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
get_instance_driver_metadata | nova/virt/driver.py:408 | no | no | |||||
get_num_instances | nova/virt/driver.py:460 | no | yes | ✓ | ||||
instance_exists | nova/virt/driver.py:475 | no | yes | ✓ | ✓ | ✓ | ✓ | |
list_instances | nova/virt/driver.py:495 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
list_instance_uuids | nova/virt/driver.py:502 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
rebuild | nova/virt/driver.py:508 | yes | yes | ✓ | ||||
prepare_for_spawn | nova/virt/driver.py:555 | no | yes | ✓ | ✓ | |||
failed_spawn_cleanup | nova/virt/driver.py:567 | no | yes | ✓ | ||||
spawn | nova/virt/driver.py:583 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
destroy | nova/virt/driver.py:631 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
cleanup | nova/virt/driver.py:649 | yes | yes | ✓ | ✓ | ✓ | ||
reboot | nova/virt/driver.py:669 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
get_console_output | nova/virt/driver.py:691 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
get_vnc_console | nova/virt/driver.py:699 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
get_spice_console | nova/virt/driver.py:709 | yes | yes | ✓ | ✓ | |||
get_serial_console | nova/virt/driver.py:719 | yes | yes | ✓ | ✓ | ✓ | ||
get_mks_console | nova/virt/driver.py:729 | yes | yes | ✓ | ✓ | |||
get_diagnostics | nova/virt/driver.py:739 | yes | yes | ✓ | ✓ | ✓ | ||
get_instance_diagnostics | nova/virt/driver.py:752 | yes | yes | ✓ | ✓ | ✓ | ||
get_all_volume_usage | nova/virt/driver.py:764 | yes | yes | ✓ | ✓ | |||
get_host_ip_addr | nova/virt/driver.py:770 | yes | no | ✓ | ✓ | ✓ | ||
attach_volume | nova/virt/driver.py:776 | yes | no | ✓ | ✓ | ✓ | ||
detach_volume | nova/virt/driver.py:785 | yes | yes | ✓ | ✓ | ✓ | ||
swap_volume | nova/virt/driver.py:790 | yes | yes | ✓ | ✓ | |||
extend_volume | nova/virt/driver.py:814 | yes | yes | ✓ | ✓ | |||
prepare_networks_before_block_device_mapping | nova/virt/driver.py:830 | no | yes | ✓ | ||||
clean_networks_preparation | nova/virt/driver.py:844 | no | yes | ✓ | ||||
attach_interface | nova/virt/driver.py:857 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
detach_interface | nova/virt/driver.py:876 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
migrate_disk_and_power_off | nova/virt/driver.py:893 | yes | yes | ✓ | ✓ | ✓ | ||
snapshot | nova/virt/driver.py:920 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
finish_migration | nova/virt/driver.py:936 | yes | yes | ✓ | ✓ | ✓ | ||
confirm_migration | nova/virt/driver.py:961 | yes | yes | ✓ | ✓ | ✓ | ||
finish_revert_migration | nova/virt/driver.py:968 | yes | yes | ✓ | ✓ | ✓ | ||
pause | nova/virt/driver.py:984 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
unpause | nova/virt/driver.py:1001 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
suspend | nova/virt/driver.py:1017 | yes | yes | ✓ | ✓ | ✓ | ||
resume | nova/virt/driver.py:1034 | yes | yes | ✓ | ✓ | ✓ | ||
resume_state_on_host_boot | nova/virt/driver.py:1064 | yes | yes | ✓ | ✓ | ✓ | ||
rescue | nova/virt/driver.py:1077 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
unrescue | nova/virt/driver.py:1097 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
power_off | nova/virt/driver.py:1109 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
power_on | nova/virt/driver.py:1119 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
mount_share | nova/virt/driver.py:1133 | yes | no | ✓ | ✓ | |||
umount_share | nova/virt/driver.py:1143 | yes | no | ✓ | ✓ | |||
is_share_mounted | nova/virt/driver.py:1154 | yes | no | ✓ | ✓ | |||
power_update_event | nova/virt/driver.py:1163 | yes | yes | ✓ | ✓ | |||
trigger_crash_dump | nova/virt/driver.py:1176 | yes | yes | ✓ | ✓ | ✓ | ||
soft_delete | nova/virt/driver.py:1189 | yes | yes | ✓ | ||||
restore | nova/virt/driver.py:1203 | yes | yes | ✓ | ||||
update_provider_tree | nova/virt/driver.py:1257 | yes | no | ✓ | ✓ | ✓ | ✓ | ✓ |
capabilities_as_traits | nova/virt/driver.py:1339 | no | no | |||||
get_available_resource | nova/virt/driver.py:1360 | yes | no | ✓ | ✓ | ✓ | ✓ | ✓ |
is_node_deleted | nova/virt/driver.py:1373 | no | yes | ✓ | ||||
pre_live_migration | nova/virt/driver.py:1393 | yes | yes | ✓ | ✓ | ✓ | ||
live_migration | nova/virt/driver.py:1409 | yes | yes | ✓ | ✓ | ✓ | ||
live_migration_force_complete | nova/virt/driver.py:1431 | yes | yes | ✓ | ✓ | |||
live_migration_abort | nova/virt/driver.py:1439 | yes | yes | ✓ | ✓ | |||
rollback_live_migration_at_source | nova/virt/driver.py:1447 | no | yes | ✓ | ||||
rollback_live_migration_at_destination | nova/virt/driver.py:1457 | yes | yes | ✓ | ✓ | ✓ | ||
post_live_migration | nova/virt/driver.py:1475 | no | yes | ✓ | ✓ | |||
post_live_migration_at_source | nova/virt/driver.py:1486 | yes | yes | ✓ | ✓ | |||
post_live_migration_at_destination | nova/virt/driver.py:1496 | yes | yes | ✓ | ✓ | ✓ | ||
check_instance_shared_storage_local | nova/virt/driver.py:1509 | yes | yes | ✓ | ||||
check_instance_shared_storage_remote | nova/virt/driver.py:1520 | yes | yes | ✓ | ||||
check_instance_shared_storage_cleanup | nova/virt/driver.py:1528 | no | yes | ✓ | ||||
check_can_live_migrate_destination | nova/virt/driver.py:1536 | yes | yes | ✓ | ✓ | ✓ | ||
check_source_migrate_data_at_dest | nova/virt/driver.py:1555 | no | yes | ✓ | ||||
post_claim_migrate_data | nova/virt/driver.py:1571 | no | yes | ✓ | ||||
cleanup_live_migration_destination_check | nova/virt/driver.py:1587 | yes | yes | ✓ | ✓ | ✓ | ||
check_can_live_migrate_source | nova/virt/driver.py:1596 | yes | yes | ✓ | ✓ | ✓ | ||
get_instance_disk_info | nova/virt/driver.py:1611 | yes | yes | ✓ | ✓ | ✓ | ||
set_admin_password | nova/virt/driver.py:1632 | yes | yes | ✓ | ✓ | |||
inject_network_info | nova/virt/driver.py:1640 | no | yes | ✓ | ✓ | |||
poll_rebooting_instances | nova/virt/driver.py:1645 | yes | yes | ✓ | ✓ | ✓ | ||
host_power_action | nova/virt/driver.py:1663 | yes | yes | ✓ | ✓ | |||
host_maintenance_mode | nova/virt/driver.py:1676 | yes | yes | ✓ | ✓ | |||
set_host_enabled | nova/virt/driver.py:1695 | yes | yes | ✓ | ✓ | |||
get_host_uptime | nova/virt/driver.py:1710 | yes | yes | ✓ | ✓ | ✓ | ||
plug_vifs | nova/virt/driver.py:1720 | yes | yes | ✓ | ✓ | ✓ | ||
unplug_vifs | nova/virt/driver.py:1736 | yes | yes | ✓ | ✓ | ✓ | ||
get_host_cpu_stats | nova/virt/driver.py:1750 | yes | no | ✓ | ✓ | |||
block_stats | nova/virt/driver.py:1772 | yes | yes | ✓ | ✓ | |||
manage_image_cache | nova/virt/driver.py:1797 | no | yes | ✓ | ✓ | |||
cache_image | nova/virt/driver.py:1809 | yes | yes | ✓ | ✓ | |||
get_volume_connector | nova/virt/driver.py:1825 | yes | yes | ✓ | ✓ | ✓ | ✓ | |
get_available_nodes | nova/virt/driver.py:1841 | yes | yes | ✓ | ✓ | ✓ | ✓ | ✓ |
get_nodenames_by_uuid | nova/virt/driver.py:1851 | no | yes | ✓ | ✓ | ✓ | ||
node_is_available | nova/virt/driver.py:1856 | no | no | ✓ | ||||
instance_on_disk | nova/virt/driver.py:1863 | no | yes | ✓ | ✓ | |||
register_event_listener | nova/virt/driver.py:1877 | no | yes | |||||
emit_event | nova/virt/driver.py:1888 | no | no | ✓ | ||||
delete_instance_files | nova/virt/driver.py:1911 | no | yes | ✓ | ||||
volume_snapshot_create | nova/virt/driver.py:1919 | yes | yes | ✓ | ||||
volume_snapshot_delete | nova/virt/driver.py:1941 | yes | yes | ✓ | ||||
default_root_device_name | nova/virt/driver.py:1965 | yes | yes | ✓ | ||||
default_device_names_for_instance | nova/virt/driver.py:1979 | yes | yes | ✓ | ||||
get_device_name_for_instance | nova/virt/driver.py:1988 | yes | yes | ✓ | ||||
is_supported_fs_format | nova/virt/driver.py:2007 | no | no | ✓ | ||||
quiesce | nova/virt/driver.py:2019 | yes | yes | ✓ | ✓ | |||
unquiesce | nova/virt/driver.py:2033 | yes | yes | ✓ | ✓ | |||
network_binding_host_id | nova/virt/driver.py:2047 | no | yes | ✓ | ||||
manages_network_binding_host_id | nova/virt/driver.py:2057 | no | yes | ✓ | ||||
cleanup_lingering_instance_resources | nova/virt/driver.py:2070 | no | yes | ✓ |
Source: reverse-spec-nova/05-async-processing_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.