OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Reverse-spec · Services

ovn-octavia-provider — Errors

Errors — ovn-octavia-provider — branch stable/2026.2

Branch stable/2026.2 @ c56940998594 (11.0.0-2-gc569409) — repository https://opendev.org/openstack/ovn-octavia-provider — analysed on 2026-10-28

The provider never builds an HTTP response itself. Errors reach the user in two ways:

  1. Synchronous: a driver method raises an octavia-lib exception while the Octavia API request is still open. Octavia's call_provider turns it into an HTTP status (§ 1).
  2. Asynchronous: the helper thread catches every exception, logs it and reports ERROR statuses through the driver-agent status socket (§ 3). The client only sees provisioning_status/operating_status when it polls Octavia.

References: octavia: is Octavia stable/2026.2 @ 2900ed67cac2, octavia-lib: is octavia-lib stable/2026.2 @ a46b0ff4fa95.

1. Exception → HTTP translation (Octavia side)

call_provider (octavia:octavia/api/drivers/utils.py:38-84) wraps every driver call:

Exception raised by the driverOctavia exceptionHTTPBody faultstringWhere
octavia_lib…exceptions.ConflictVIPAddressConflict409The VIP IP address is already in use: <user_fault_string>octavia:octavia/api/drivers/utils.py:54-57, octavia:octavia/common/exceptions.py:445-447
DriverErrorProviderDriverError500Provider 'ovn' reports error: <user_fault_string>octavia:octavia/api/drivers/utils.py:58-62, octavia:octavia/common/exceptions.py:382-384
NotImplementedError (octavia-lib or builtin)ProviderNotImplementedError501Provider 'ovn' does not support a requested action: …octavia:octavia/api/drivers/utils.py:63-75, octavia:octavia/common/exceptions.py:387-390
UnsupportedOptionError (and IPVersionsMixingNotSupportedError)ProviderUnsupportedOptionError501Provider 'ovn' does not support a requested option: <user_fault_string>octavia:octavia/api/drivers/utils.py:76-80, octavia:octavia/common/exceptions.py:393-396
any other exception (AttributeError, OVSDB errors…)ProviderDriverError500Provider 'ovn' reports error: <str(e)>octavia:octavia/api/drivers/utils.py:81-84

"Unsupported option" is a 501, not a 400: clients that treat 4xx as user errors and 5xx as retryable must special-case it.

2. Synchronous errors (driver methods)

All are UnsupportedOptionError with user_fault_string == operator_fault_string, unless stated otherwise.

MessageSituationRaised atClient sees
OVN provider does not support %s protocollistener or pool protocol not TCP/UDP/SCTP (HTTP, HTTPS, TERMINATED_HTTPS, PROXY…)ovn_octavia_provider/driver.py:61-66501
OVN provider does not support %s algorithmpool algorithm not SOURCE_IP_PORT/SOURCE_IP (e.g. ROUND_ROBIN, LEAST_CONNECTIONS) on create or updateovn_octavia_provider/driver.py:68-73501
OVN provider does not support %s session persistence. Only SOURCE_IP type is supported.intended for HTTP_COOKIE/APP_COOKIE persistence; **in practice the message formatting reads session.type on a dict and raises AttributeError**ovn_octavia_provider/driver.py:75-83500 Provider 'ovn' reports error: 'dict' object has no attribute 'type' **[inferred: the check uses session.get(), so session is a dict]**
OVN provider does not support allowed_cidrs optionlistener create/update with a non-empty allowed_cidrsovn_octavia_provider/driver.py:85-93501
OVN provider does not support loadbalancer failoverPUT /v2/lbaas/loadbalancers/{id}/failoverovn_octavia_provider/driver.py:223-227501
OVN Load Balancer does not support different member monitor address or port.member create/update with monitor_address or monitor_portovn_octavia_provider/driver.py:351-357501
OVN provider does not support monitor optionssame, in a member batch update; the whole batch is refusedovn_octavia_provider/driver.py:518-522501
OVN provider does not support mixing IPv4/IPv6 configuration within the same Load Balancer. (IPVersionsMixingNotSupportedError)member IP family differs from the VIP's, and the LB VIPs are not themselves mixedovn_octavia_provider/common/exceptions.py:28-32; raised at ovn_octavia_provider/driver.py:150, ovn_octavia_provider/driver.py:390, ovn_octavia_provider/driver.py:489, ovn_octavia_provider/driver.py:524501
Subnet is required, or Loadbalancer associated with Pool must have a subnet, for Member creation with OVN Provider Driver if it is not the same as LB VIP subnetmember without subnet_id whose address is not in the LB VIP subnet, or VIP subnet unreadableovn_octavia_provider/driver.py:401-407 (also ovn_octavia_provider/driver.py:159-165 for the sync path)501
… for Member deletion if it is with OVN Provider Driver …same situation on member delete (the derived subnet was never stored in Octavia)ovn_octavia_provider/driver.py:454-460501: the member cannot be deleted until its address fits the VIP subnet
… for Member batch update …same in a batch updateovn_octavia_provider/driver.py:539-545501
OVN Load Balancer supports Health Check provider from version 2.12. Upgrade OVN in order to use it.the NB schema has no Load_Balancer.health_check columnovn_octavia_provider/driver.py:667-672501
OVN provider health monitor type not specified.HM create without typeovn_octavia_provider/driver.py:675-680501
OVN provider does not support %s health monitor type. Supported types: TCP, UDP-CONNECTHM type HTTP, HTTPS, PING, SCTPovn_octavia_provider/driver.py:681-688501 (the join order follows SUPPORTED_HEALTH_MONITOR_TYPES, ovn_octavia_provider/common/constants.py:115-116)
Conflict(<Neutron message>)Neutron 409 while creating the VIP port, and no same-name port to reuseovn_octavia_provider/driver.py:648-653, ovn_octavia_provider/helper.py:3090-3100409 The VIP IP address is already in use: …
DriverError(<Neutron message>)any other Neutron error while creating or reading the VIP portsovn_octavia_provider/driver.py:654-663500
DriverError('Cannot initialize OpenStackSDK. Exception: %s. Please verify Neutron service configuration in Octavia API configuration.') (operator string only)[neutron]/[service_auth] credentials invalid or missingovn_octavia_provider/common/clients.py:141-149500 with the default user string An unknown driver error occurred. (octavia-lib:octavia_lib/api/drivers/exceptions.py:33)
same for Octavia (… service_auth configuration …)do_sync onlyovn_octavia_provider/common/clients.py:175-183sync tool fails
NotImplementedError (base class)L7 policies and rules, flavors, availability zones, loadbalancer_failover_with_flavoroctavia-lib:octavia_lib/api/drivers/provider_base.py:388501
AttributeErrormember_batch_update on a pool that has no OVN row (ovn_lb is None)ovn_octavia_provider/driver.py:503-505500 [inferred]
DriverAgentNotFoundthe octavia driver-agent sockets (/var/run/octavia/{status,stats,get}.sock) do not exist when the driver is instantiatedoctavia-lib:octavia_lib/api/drivers/driver_lib.py:40-55, called from ovn_octavia_provider/helper.py:59Octavia API error before call_provider [inferred: 500]
RowNotFound → RuntimeError after 10 s of retriesNB schema helper cannot be fetched at start-upovn_octavia_provider/ovsdb/impl_idl_ovn.py:227-229, ovn_octavia_provider/common/utils.py:76-83the OvnProviderHelper constructor blocks with exponential retries up to [ovn]/ovsdb_retry_max_interval between attempts, with no stop condition **[inferred: tenacity without stop]**

3. Asynchronous errors (helper thread)

The helper thread catches every exception of a handler (ovn_octavia_provider/helper.py:429-437): nothing is re-raised, the loop continues. Most handlers catch their own exceptions first and return an ERROR status (pattern LOG.exception(EXCEPTION_MSG, …), with EXCEPTION_MSG = "Exception occurred during %s", ovn_octavia_provider/common/constants.py:118-119).

HandlerTrigger of the errorReported statusWhere
lb_createNeutron unreachable, VIP port not foundLB ERROR/ERROR, provider VIP ports deletedovn_octavia_provider/helper.py:1582-1613
lb_createOVSDB failure while creating or associating the rowLB ERROR/ERROR, provider VIP ports deleted, OVN row may remainovn_octavia_provider/helper.py:1732-1760
lb_deleteVIP port deletion fails when the OVN row is already missingLB ERROR/ERRORovn_octavia_provider/helper.py:1810-1832
lb_deleteany exception during deletionLB ERROR/ERRORovn_octavia_provider/helper.py:1863-1866
lb_updateOVN rows not found or transaction failureLB ERROR/ERRORovn_octavia_provider/helper.py:2042-2045
listener_createtransaction failurelistener ERROR/ERROR, LB ACTIVEovn_octavia_provider/helper.py:2098-2108
listener_create_get_or_create_ovn_lb raises (RowNotFound when the LB has no OVN row)not caught in the handler → logged by request_handler, no status sent: the listener stays PENDING_CREATEovn_octavia_provider/helper.py:2067-2070, ovn_octavia_provider/helper.py:434-437
pool_createsame as abovesame: pool stays PENDING_CREATEovn_octavia_provider/helper.py:2324-2328
listener_updateOVN row for the protocol missinglistener ERROR, LB ERRORovn_octavia_provider/helper.py:2237-2242
listener_updatetransaction failurelistener ERROR, LB ACTIVEovn_octavia_provider/helper.py:2312-2320
listener_delete, pool_deleteOVN row missingtreated as success: DELETEDovn_octavia_provider/helper.py:2179-2181, ovn_octavia_provider/helper.py:2441-2443
listener_deletetransaction failurelistener ERROR/ERRORovn_octavia_provider/helper.py:2206-2215
pool_create, pool_delete, pool_updatetransaction failurepool ERROR, LB ACTIVEovn_octavia_provider/helper.py:2389-2402, ovn_octavia_provider/helper.py:2486-2494, ovn_octavia_provider/helper.py:2589-2597
pool_updateOVN row missingpool ERROR, LB ERRORovn_octavia_provider/helper.py:2520-2525
member_create / member_delete / member_updateOVN row of the pool not foundmember ERROR (NO_MONITOR for create/update)ovn_octavia_provider/helper.py:2811-2823, ovn_octavia_provider/helper.py:2912-2923, ovn_octavia_provider/helper.py:2962-2974
member_createHM enabled but member LSP or HM port missingmember ERROR operating status, pool DEGRADED/ERRORovn_octavia_provider/helper.py:2838-2847, ovn_octavia_provider/helper.py:3857-3878
member_*when ovn_lb is None, the final _update_external_ids_member_status(ovn_lb, …) and _get_current_operating_statuses(ovn_lb) raise AttributeErrorno status sent (logged by request_handler)ovn_octavia_provider/helper.py:2853-2858 [inferred]
hm_createno OVN row for the poolHM ERROR/NO_MONITORovn_octavia_provider/helper.py:3948-3952
hm_createpool key missing on the rowHM ERROR, pool OFFLINEovn_octavia_provider/helper.py:3957-3965
hm_createno VIP in external_ids (Could not find VIP for HM %s, LB external_ids: %s) or transaction failureHM ERROR/ERRORovn_octavia_provider/helper.py:3476-3479, ovn_octavia_provider/helper.py:3556-3558
hm_createa member's HM port cannot be found or createdHM ERROR/ERROR, ip_port_mappings of the pool cleanedovn_octavia_provider/helper.py:3996-4001
hm_updatehealth checks not foundHM ERROR/ERRORovn_octavia_provider/helper.py:4061-4071
hm_deletenothing in OVNtreated as success: DELETEDovn_octavia_provider/helper.py:4116-4122

3.1 Status socket failures

_update_status_to_octavia retries UpdateStatusError with exponential back-off (max 75 s) for 15 attempts (ovn_octavia_provider/helper.py:448-451), i.e. up to about 15 minutes during which the single helper thread processes nothing else. UpdateStatusError is raised by octavia-lib when the socket call fails or the driver agent answers status_code != 200 (octavia-lib:octavia_lib/api/drivers/driver_lib.py:110-134); the driver agent answers 500 when a status update hits an unknown object or a database error (octavia:octavia/api/drivers/driver_agent/driver_updater.py:122-127, octavia:octavia/api/drivers/driver_agent/driver_updater.py:180-188). After the last attempt the error is logged (Error while updating the load balancer status: %s, ovn_octavia_provider/helper.py:429-431) and the resource stays in its PENDING_* status in Octavia (a TODO admits there is no clean-up, ovn_octavia_provider/helper.py:432-433).

A driver agent that does not answer within 30 s raises DriverAgentTimeout inside _send (octavia-lib:octavia_lib/api/drivers/driver_lib.py:59-94); update_loadbalancer_status wraps every exception of _send into UpdateStatusError (octavia-lib:octavia_lib/api/drivers/driver_lib.py:123-126), so timeouts and refused connections are retried like the other failures. Each attempt can therefore last up to 30 s on top of the back-off.

3.2 OVSDB-level errors

ErrorSituationHandlingWhere
RowNotFound during LB ↔ LS/LR associationa switch or router disappeared between reading and committing (large topologies)retried 3 times, then executed command by command, missing switches skippedovn_octavia_provider/helper.py:967-978, ovn_octavia_provider/helper.py:1209-1235
RowNotFound in _find_ovn_lbs_with_retryNB not yet updated after an LB creationretried for 10 sovn_octavia_provider/helper.py:458-459
RevisionConflictdefined but never raised by this repository; only caught in the transaction wrapperlogged Transaction aborted. Reason: %sovn_octavia_provider/common/exceptions.py:22-25, ovn_octavia_provider/ovsdb/impl_idl_ovn.py:172-183
OvsdbConnectionUnavailabledefined, never raised (dead code)—ovn_octavia_provider/ovsdb/impl_idl_ovn.py:82-86
errors in ip_port_mappings commandslookup of the LB row failsswallowed and logged Error adding/deleting backend %s … for LB uuid %sovn_octavia_provider/ovsdb/impl_idl_ovn.py:122-153
transaction timeout[ovn]/ovsdb_connection_timeout (default 180 s)raised by ovsdbapp, caught by the handler → ERRORovn_octavia_provider/common/config.py:66-69

3.3 Neutron errors in background work

CallRetryOn final failureWhere
ports() list, find_port()10 s exponential on HttpExceptionexception to the callerovn_octavia_provider/helper.py:467-477
delete_port()15 attempts, exponential max 75 s; 404 only loggedexception to the callerovn_octavia_provider/helper.py:3169-3176
create_port() for the HM portnonepartial port cleaned, None returned → HM ERRORovn_octavia_provider/helper.py:132-139
Octavia load_balancers() (sync)10 s exponentialsync abortedovn_octavia_provider/helper.py:485-486

4. Key log messages

LevelMessageMeaningWhere
ERRORError while updating the load balancer status: %s15 status-socket attempts failed; Octavia keeps PENDING_*ovn_octavia_provider/helper.py:430
ERROR (exception)Unexpected exception in request_handlera handler raised; no status sentovn_octavia_provider/helper.py:437
ERROR (exception)Exception occurred during creation of loadbalancer (and deletion of …, update of …, creation of listener, creation of pool, creation of member, set of health check…)a handler failed and reported ERRORovn_octavia_provider/common/constants.py:119
ERRORCannot get info from neutronVIP port lookup failed in lb_createovn_octavia_provider/helper.py:1583
WARNINGDeleting the VIP port %s since LB went into ERROR stateclean-up after a failed createovn_octavia_provider/helper.py:1589
WARNINGLoadbalancer %s not found in OVN Northbound DB. Setting the Loadbalancer status to DELETED in Octaviadelete of an LB already gone from OVNovn_octavia_provider/helper.py:1779
WARNINGThe association of loadbalancer %s to the logical router %s failed, trying step by stepconcurrent topology changeovn_octavia_provider/helper.py:1682
WARNINGCannot associate LB %(lb)s to LS %(ls)s because LS row not found in OVN NBDB. Exiting.member or VIP network missing in OVNovn_octavia_provider/helper.py:1017
ERRORMember %(member)s Logical_Switch_Port not found, when creating a Health Monitor for pool %(pool)s.HM cannot probe the memberovn_octavia_provider/helper.py:3861
ERRORNo port on network %(network)s available for health monitoring. …HM source port could not be createdovn_octavia_provider/helper.py:3874
WARNINGMember for event not found, info: %sService_Monitor event for an unknown backendovn_octavia_provider/helper.py:4436
WARNINGMaintenance task: VIP port %(port)s for LB %(lb)s has unexpected device_id %(did)s, not backfillingthe VIP port is attached to something else (possible misuse by Nova)ovn_octavia_provider/maintenance.py:207
WARNINGFloating IP not consistent between Logic Switch Port and Neutron. …sync tool asks to run neutron-ovn-db-sync-util firstovn_octavia_provider/driver.py:886
WARNINGOctavia OVN synchronizer does not support LOG mode. …Neutron sync plugin in log modeovn_octavia_provider/ovn/db_sync.py:168
ERRORCannot find private key file for %s (and cert, CA cert)SSL file configured but missing; the connection then failsovn_octavia_provider/ovsdb/ovsdb_monitor.py:100-116

5. Exception catalogue (classes defined in the repository)

ClassBasesHTTP (if it reached Octavia)MessageRaised
IPVersionsMixingNotSupportedErroroctavia_lib UnsupportedOptionError501OVN provider does not support mixing IPv4/IPv6 configuration within the same Load Balancer.§ 2
RevisionConflictneutron_lib NeutronException— (never raised)OVN revision number for %(resource_id)s (type: %(resource_type)s) is equal or higher than the given resource. Skipping updatenever
OvsdbConnectionUnavailableneutron_lib ServiceUnavailable— (never raised)OVS database connection to %(db_schema)s failed with error: '%(error)s'. …never

External exceptions used: octavia_lib.api.drivers.exceptions (UnsupportedOptionError, DriverError, Conflict, UpdateStatusError, NotImplementedError), openstack.exceptions (HttpException, ConflictException, ResourceNotFound), ovsdbapp…idlutils.RowNotFound, futurist.periodics.NeverAgain.

Source: reverse-spec-ovn-octavia-provider/02-errors_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.