2
0
mirror of https://github.com/xcat2/confluent.git synced 2026-10-20 14:45:45 +00:00
Markus Hilger 3563da041b Stop the service without raising through the event loop
terminate() called sys.exit(0) from a signal handler while the asyncio loop was
running. The SystemExit escaped run_forever, and closing the loop afterwards
then failed with "Cannot close a running event loop", so every clean stop wrote
a cascade of tracebacks and left a pending task behind.

Ask the loop to stop instead: deliver the signals through add_signal_handler,
which is the signal safe route, and set an event the main coroutine waits on so
that it returns and asyncio can unwind itself. Flush configuration on the way
out, as the client requested shutdown has always done.

That client requested shutdown went the same way, calling sys.exit from inside a
request coroutine, and it is the route the systemd unit uses to stop the
service. It now asks for the same orderly stop through a hook the running
service registers, keeping the old behaviour when nothing is registered.

Measured on all three routes, with redfish and ipmi sessions to a bmc in flight:
under a third of a second and no tracebacks, where before each one wrote a
cascade.
2026-08-14 21:26:28 +02:00
2026-08-11 05:50:55 +02:00
2026-06-10 07:44:50 -04:00
2021-01-21 11:52:22 -05:00

Confluent

Python 3 License

Confluent is a software package to handle essential bootstrap and operation of scale-out server configurations. It supports stateful and stateless deployments for various operating systems.

Check this page for a more detailed list of features.

Confluent is the modern successor of xCAT. If you're coming from xCAT, check out this comparison.

Documentation

Confluent documentation is hosted on: https://xcat2.github.io/confluent-docs/

Download

Get the latest version from: https://xcat2.github.io/confluent-docs/downloads/

Check release notes on: https://xcat2.github.io/confluent-docs/release_notes/

Open Source License

Confluent is made available under the Apache 2.0 license: https://opensource.org/license/apache-2-0

Developers

Want to help? Submit a Pull Request.

Versioning and releases

The top-level VERSION file names the release the current branch is working toward. Build scripts call ./mkversion, which turns it into the version stamped on packages: the tag itself on a release tag (4.0.1), otherwise a development version (4.0.1.dev5+gdeadbee, or 4.0.1~dev5+gdeadbee for the packages that have no setup.py).

mkversion also derives a version from the newest tag reachable from HEAD and uses whichever is higher, so forgetting to bump VERSION after tagging the current branch cannot walk the version backwards. Staying ahead of tags on other branches is what VERSION itself is for: patch releases are tagged on release branches, which master never sees.

Cutting a new series:

  1. Land the release commit on master and tag X.Y.0 there.
  2. Create branch X.Y from that tag; it inherits VERSION=X.Y.0.
  3. Only then bump VERSION on master. Doing it before step 2 leaves the release branch on the wrong series.

Patch releases land on branch X.Y and are tagged X.Y.Z there; no VERSION edit is needed.

S
Description
xCAT confluent - replacement of conserver and eventually xcatd
Readme 20 MiB
Languages
Python 85.3%
Shell 11.1%
C 2.3%
Go Template 0.7%
Go 0.3%
Other 0.2%