[Bug 2167831] [NEW] ceilometer agents fail to start on Python 3.14: PicklingError on _ConfigFileOpt lambda

Guillaume Boutry 2167831 at bugs.launchpad.net
Mon Sep 21 09:39:02 UTC 2026


Public bug reported:

[Impact]
On Ubuntu 26.04 (Python 3.14) the cotyledon-based ceilometer agents
(ceilometer-agent-compute, ceilometer-agent-central, ceilometer-polling,
ceilometer-agent-notification) fail to start their workers:

  Exception in thread Thread-1 (_child_supervisor_thread):
  ...
  _pickle.PicklingError: Can't pickle local object
  <function _ConfigFileOpt.__init__.<locals>.<lambda> ...>

Python 3.14 changed the default multiprocessing start method on Linux from
'fork' to 'forkserver'. cotyledon's ServiceManager uses
multiprocessing.get_context(), so workers are now started by pickling their
arguments, including the parsed oslo_config.ConfigOpts object. With
oslo.config < 10.6.0 the --config-file option type is an unpicklable local
lambda, so spawning fails and the agent collects/publishes nothing.

[Test Plan]
1. Install ceilometer-agent-compute 2:26.0.0-0ubuntu1 on Ubuntu 26.04.
2. Run:
     sudo -u ceilometer /usr/bin/ceilometer-polling --polling-namespaces compute
   Observe the PicklingError and that no worker starts.
3. Install the fixed package and repeat; the worker starts and the agent
   stays up. journalctl -u ceilometer-agent-compute shows no PicklingError.

[Where problems could occur]
The patch explicitly spawns cotyledon workers with the fork start method,
matching pre-3.14 behaviour. A problem would prevent workers from starting.
The heartbeat multiprocessing.Queue in ceilometer-polling keeps the default
context and was verified to work with the fork-spawned workers.

[Other Info]
Root cause is fixed upstream in oslo.config >= 10.6.0 (picklable ConfigOpts
state snapshots for spawn workers); this patch restores pre-3.14 behaviour
for the released 26.04 package. Equivalent fixes: octavia (LP: #2156391),
nova (LP: #2156932).

** Affects: ceilometer (Ubuntu)
     Importance: Undecided
         Status: Invalid

** Affects: ceilometer (Ubuntu Resolute)
     Importance: Undecided
         Status: New

** Affects: ceilometer (Ubuntu Stonking)
     Importance: Undecided
         Status: Invalid

-- 
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to ceilometer in Ubuntu.
https://bugs.launchpad.net/bugs/2167831

Title:
  ceilometer agents fail to start on Python 3.14: PicklingError on
  _ConfigFileOpt lambda

Status in ceilometer package in Ubuntu:
  Invalid
Status in ceilometer source package in Resolute:
  New
Status in ceilometer source package in Stonking:
  Invalid

Bug description:
  [Impact]
  On Ubuntu 26.04 (Python 3.14) the cotyledon-based ceilometer agents
  (ceilometer-agent-compute, ceilometer-agent-central, ceilometer-polling,
  ceilometer-agent-notification) fail to start their workers:

    Exception in thread Thread-1 (_child_supervisor_thread):
    ...
    _pickle.PicklingError: Can't pickle local object
    <function _ConfigFileOpt.__init__.<locals>.<lambda> ...>

  Python 3.14 changed the default multiprocessing start method on Linux from
  'fork' to 'forkserver'. cotyledon's ServiceManager uses
  multiprocessing.get_context(), so workers are now started by pickling their
  arguments, including the parsed oslo_config.ConfigOpts object. With
  oslo.config < 10.6.0 the --config-file option type is an unpicklable local
  lambda, so spawning fails and the agent collects/publishes nothing.

  [Test Plan]
  1. Install ceilometer-agent-compute 2:26.0.0-0ubuntu1 on Ubuntu 26.04.
  2. Run:
       sudo -u ceilometer /usr/bin/ceilometer-polling --polling-namespaces compute
     Observe the PicklingError and that no worker starts.
  3. Install the fixed package and repeat; the worker starts and the agent
     stays up. journalctl -u ceilometer-agent-compute shows no PicklingError.

  [Where problems could occur]
  The patch explicitly spawns cotyledon workers with the fork start method,
  matching pre-3.14 behaviour. A problem would prevent workers from starting.
  The heartbeat multiprocessing.Queue in ceilometer-polling keeps the default
  context and was verified to work with the fork-spawned workers.

  [Other Info]
  Root cause is fixed upstream in oslo.config >= 10.6.0 (picklable ConfigOpts
  state snapshots for spawn workers); this patch restores pre-3.14 behaviour
  for the released 26.04 package. Equivalent fixes: octavia (LP: #2156391),
  nova (LP: #2156932).

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ceilometer/+bug/2167831/+subscriptions




More information about the Ubuntu-openstack-bugs mailing list