Skip to content

Support Aviso V2 ECFLOW-2121 - #476

Open
marcosbento wants to merge 27 commits into
developfrom
task/adopt_aviso_v2
Open

marcosbento wants to merge 27 commits into
developfrom
task/adopt_aviso_v2

Conversation

@marcosbento

@marcosbento marcosbento commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Description

As per PR title - see commit messages for details.

Contributor Declaration

By opening this pull request, I affirm the following:

  • All authors agree to the Contributor License Agreement.
  • The code follows the project's coding standards.
  • I have performed self-review and added comments where needed.
  • I have added or updated tests to verify that my changes are effective and functional.
  • I have run all existing tests and confirmed they pass.

🌦️ >> Documentation << 🌦️
https://sites.ecmwf.int/docs/dev-section/ecflow/pull-requests/PR-476

@codecov-commenter

codecov-commenter commented Oct 6, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.83019% with 23 lines in your changes missing coverage. Please review.
✅ Project coverage is 56.54%. Comparing base (9ac4217) to head (870ad5a).

Files with missing lines Patch % Lines
Viewer/ecflowUI/src/VAvisoAttr.cpp 0.00% 12 Missing ⚠️
libs/node/src/ecflow/node/AvisoAttr.cpp 97.61% 3 Missing ⚠️
libs/service/src/ecflow/service/aviso/Aviso.cpp 93.61% 3 Missing ⚠️
libs/node/src/ecflow/node/NodeDelete.cpp 75.00% 2 Missing ⚠️
libs/node/test/TestOperations.cpp 92.00% 2 Missing ⚠️
libs/rest/src/ecflow/http/TypeToJson.cpp 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #476      +/-   ##
===========================================
+ Coverage    56.22%   56.54%   +0.31%     
===========================================
  Files         1268     1265       -3     
  Lines       105366   105752     +386     
  Branches     15374    15390      +16     
===========================================
+ Hits         59247    59795     +548     
+ Misses       46119    45957     -162     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Introduce the ENABLE_AVISO option, ON by default, which requires
libaviso_ffi 2.4.2 or later. Only ecflow_server links the library,
and logs its version at start-up.

Re ECFLOW-2121
Remove the etcd polling backend and the v1 listener schema. An Aviso
attribute now receives notifications from a backend registered by the
executable; without one, the node stays queued with a remote error.

The v1 options --schema and --polling are rejected, naming 5.19.x as
the last release supporting Aviso v1. Checkpoints written by 5.19.x
still load, and the serialised form remains compatible.

Re ECFLOW-2121
@marcosbento
marcosbento force-pushed the task/adopt_aviso_v2 branch 3 times, most recently from cae8e60 to 8e6b958 Compare October 7, 2026 05:34
Each Aviso attribute watches its aviso-server through one client and
one watch, authenticated by its --auth file: the key of an ECMWF API
credentials file, as a bearer token, or Basic credentials. Every error
leaves the node queued with a reason that names 5.19.x as the last
release supporting Aviso v1, and the watch is re-created after 60 s,
resuming after the last consumed notification.

Re ECFLOW-2121
Add a local server implementing the aviso-server watch protocol, used
to test the backend and an ecFlow server end to end, without network
or container. A re-created watch now resumes after the last delivered
notification, or from when the first watch opened, so that nothing
published while the watch was down is lost.

Re ECFLOW-2121
An Aviso attribute whose URL or credentials variable cannot be resolved
no longer fails the begin or requeue of its suite. The node stays
queued with a remote error and a reason naming the variable, which a
requeue no longer clears; once fixed, a reload of the attribute starts
it.

Re ECFLOW-2121
Each release consumes exactly one notification, in order; the option
--collapse consumes all the notifications received in one release.
The notification is held until the node leaves the queued state, and
only then is the revision advanced, so that a query of why the node is
held, or another dependency holding it, no longer loses it.

Re ECFLOW-1984
Changing an Aviso attribute (alter change aviso) now parses the new
configuration with the node as its parent, stops the previous one, and
starts the new one while the node is queued, so that the attribute
keeps working, also after a requeue.

Re ECFLOW-2121
The traversal of the whole definition now reaches every node and its
attributes, so that a server restart (e.g. from a checkpoint) starts
the Aviso attributes of queued nodes, and a halt or shutdown stops
them. A queued Aviso task thus keeps being released, once per
notification, across a server restart.

Re ECFLOW-2121
A node with an Aviso attribute now defines ECF_AVISO_EVENT_TYPE,
ECF_AVISO_EVENT_SEQUENCE, ECF_AVISO_EVENT_DATA_IDENTIFIER and
ECF_AVISO_EVENT_DATA_PAYLOAD, describing the notification that released
it (the latest one, when collapsing). Until a notification releases the
node, the variables are empty and the sequence is 0.

The notification is kept in checkpoints (option --event), so the
variables survive a server restart.

Re ECFLOW-2026
Re ECFLOW-1983
The user manual describes the Aviso attribute for Aviso v2 only, with
the minimum aviso-client and aviso-server versions, the listener, the
credentials file, one release per notification and --collapse, the
generated variables, the errors and the fixed 60 s retry delay. It
states that a release may be repeated after a server crash.

The cookbook adds an end-to-end use case: a script that runs an
aviso-server in a container, an ecflow_server and a suite. The client
help and the Python reference are regenerated, and the build
documentation covers ENABLE_AVISO and AVISO_FFI_ROOT.

Re ECFLOW-2121
Re ECFLOW-1984
Re ECFLOW-2026
The Aviso v1 reminder no longer names the current release, and a
credentials error names its file. A watch that fails to be re-created
is reported at once, and clearing an Aviso error no longer clears the
remote error flag of a node without one.

Unused code is removed, shared test helpers are factored out, and the
comments and documentation are aligned with the behaviour.

Re ECFLOW-2121
An Aviso attribute is refused on a suite or a family, where no job
would ever consume a notification: definitions and check points that
hold one fail to load, and alter and the Python API refuse to add it.
Tasks and their aliases are unaffected.

Re ECFLOW-2121
Starting an attribute that is already watching keeps its configuration,
so the active listener and the error match the running watch; reload
applies a new one. An attribute added to a queued node with alter is
started at once, and a deleted attribute stops watching and clears the
remote error flag it raised.

Re ECFLOW-2121
The local test server ends a stream with the routine reason
max_duration_reached, after which the client library reconnects by
itself, or with an error event, after which the backend re-creates the
watch following the retry delay. The documentation states that the
delay applies only after an error the library does not recover from.

Re ECFLOW-2121
The Aviso attribute page states that the revision is kept with the rest
of the node state in the check point, so a crash, a forced reboot or a
takeover from an earlier check point copy can release a task again for
the same notification, and how a task can detect the repeat.

Re ECFLOW-2121
With Aviso v1 removed, the listener, credentials and error helpers join
the Aviso types, the backend interface becomes BaseAvisoBackend, and the
backend based on the aviso-client library becomes AvisoBackend. The test
target u_service_aviso_v2 is renamed u_service_aviso_backend.

Re ECFLOW-2121
The Debian package is built with Aviso, and the Aviso client library
of the build environment is delivered beside it and installed by the
image, whose test checks that the server uses it.

Re ECFLOW-2121
An invalid value leaves the running watch untouched, and the replaced
attribute no longer holds the node in error. A change restarts from
the given --revision, as now documented.

Re ECFLOW-2121
A mirrored node takes its state from the remote node, which a release
by a notification would contradict: definitions and check points that
hold both fail to load, and alter and the Python API refuse to add one
next to the other.

Re ECFLOW-2121
A package build replaces only the Aviso archive of its own
architecture, and the ecflow-server image build fails when a library
needed by the ecFlow executables is missing.

Re ECFLOW-2121
Name every Aviso service test, create the credentials files through the
test scaffold, and label the backend tests that run against a local
Aviso server as integration tests.

Re ECFLOW-2121
Iterate test inputs by reference, which silences a range-loop warning,
and drop the report tags from test comments.

Re ECFLOW-2121
Document the parameters and results of the Aviso attribute, service
and test server declarations, in the project Doxygen style.

Re ECFLOW-2121
State that one aviso attribute is allowed per task, and name the fields
of the --event option, as the attribute page does.

Re ECFLOW-2121
The local Aviso server reports the notifications streamed and the
streams ended, so that the tests wait for them with a bounded timeout.

Re ECFLOW-2121
The script stops when the aviso-server does not become healthy, and
publishes once the watch of the attribute is established.

Re ECFLOW-2121
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants