We are happy to announce the release of AiiDA v2.9.0!
The headline feature of this minor release is the new built-in ZeroMQ broker, which lets you submit calculations and workflows to the daemon without installing and running an external message broker such as RabbitMQ.
It also adds a verdi bug-report command, an overhauled logging system, a Pydantic-based ORM model system, and support for dedicated data transfer nodes in the async SSH transport.
As always, the release can be installed from PyPI using pip install aiida-core==2.9.0, or from conda-forge using conda install -c conda-forge aiida-core=2.9.0.
For a complete list of changes, see the CHANGELOG.
Behavior changes: This release includes several behavior changes that do not constitute API breaking changes warranting a major version bump, but may still affect existing workflows if you rely on the old defaults. Please review the following list and check the detailed sections below:
- Python 3.9 support dropped; the minimum supported version is now 3.10
verdi prestofalls back to the ZeroMQ broker instead of creating a brokerless profile when RabbitMQ is not reachableverdi storage maintainnow cleans up loose files incrementally while packinglogging.db_loglevelrenamed tologging.database_handler- The
aiidalogger no longer propagates to the root logger - ORM entities expose specialized model classes;
Entity.Modelis deprecated - The configuration file schema was bumped to version 10
Below we highlight the main new features.
ZeroMQ broker: run AiiDA without external services
AiiDA needs a message broker to talk to its daemon workers, and until now RabbitMQ was the only option. Installing and managing it separately complicates the setup, especially on machines where you do not have administrator rights, such as HPC login nodes.
This release adds a second broker plugin, core.zeromq, next to the existing core.rabbitmq (#7340).
It requires no external service: the broker is started and supervised automatically by the daemon.
Full process control, so submit(), verdi process play/pause/kill and verdi daemon start/stop, now works out of the box with nothing but pip install aiida-core.
verdi presto first checks whether RabbitMQ is running on localhost.
If it can connect, the profile is configured with RabbitMQ as before; otherwise it now falls back to the ZeroMQ broker rather than creating a brokerless profile.
Use verdi presto --no-broker if you explicitly want a profile without any broker.
The broker can also be chosen at profile creation with verdi profile setup --broker, and existing profiles can be switched with the new verdi profile configure-broker command:
$ verdi profile configure-broker core.rabbitmq
For high-throughput production workloads RabbitMQ remains the recommended broker. The ZeroMQ broker is ideal for getting started, for light production use, and for machines where installing services is not an option. See the installation guide for the updated database and broker compatibility matrix, and the new broker internals documentation for the architecture.
verdi bug-report: bundle diagnostics for bug reports
Asking for help usually starts with a round of questions about versions, profile configuration and log files.
The new verdi bug-report command collects all of that into a single zip archive:
- AiiDA and Python versions, installed packages, and platform details
- profile configuration and the AiiDA configuration file
- service status for storage, broker, and daemon
- the tails of the profile, daemon, circus, and broker log files
Secrets such as passwords are redacted before the configuration is embedded, but do review the archive before posting it publicly. Attach it when asking for help on Discourse or when opening an issue on GitHub.
Logging system overhaul
The logging configuration has been reworked to be easier to understand and control (#7322).
Output from verdi commands and from processes run outside the daemon is now also written to a per-profile log file, so each profile has three log files: the client-side log, the daemon worker log, and the circus supervisor log.
The log files capture all messages, and two new options control what is shown elsewhere: logging.terminal_handler sets the minimum level for messages printed to the terminal, and logging.database_handler sets the minimum level for messages stored on a node, which is what verdi process report displays.
The per-library options such as logging.sqlalchemy_loglevel are now marked as advanced and hidden from verdi config list unless you pass --advanced, and levels for aiidateam packages inherit from logging.aiida_loglevel unless set explicitly.
AiiDA also warns when a logging configuration has no effect because no handler logs at that level.
See the updated troubleshooting documentation for details.
ORM model system
AiiDA’s ORM entities now expose their schema through a Pydantic-based model system, which makes it possible to introspect entities programmatically and to serialize them to and from formats such as JSON (#6990).
Instead of a single Model, each entity provides a schema per context: ReadModel for read and serialization schemas, WriteModel for attribute-based schemas, and, where supported, ConstructorModel and CliModel.
The public Model attribute stays available as a deprecated compatibility wrapper, so existing plugins keep working while the model system stabilizes.
New integrations should use the specialized classes directly.
Transport: dedicated data transfer nodes
Many HPC centers provide a dedicated data transfer node and ask users not to run heavy file transfers on the login node.
The async SSH transport core.ssh_async now accepts a data_node_host option that routes SFTP and scp transfers to such a node, while calculations are still submitted and monitored on the login host (#7460).
Both backends support it, and leaving the option unset keeps the previous behavior.
The openssh backend also gained a use_sftp option (#7423): since OpenSSH 9.0, scp transfers over SFTP by default, so configuring a computer with --no-use-sftp forces the legacy RCP protocol for servers without SFTP support.
See the SSH how-to for details.
Smaller additions
- Schedulers can declare whether they support detailed job info via the new
can_get_detailed_job_infoproperty, which stops the spurious parsing warnings for schedulers such ascore.direct(#7463, #7521). - The new
aiida.tools.WorkflowToolsclass, reachable asWorkChainNode.tools, bundles utilities for introspecting workflow state (#6884). DaemonClient.increase_workers()anddecrease_workers()accept awaitparameter that blocks until the requested number of workers is active (#7502).
Configuration file: schema version 10
The configuration file schema was bumped to version 10, with a migration that renames the deprecated logging and broker options to their replacements.
It is applied automatically the first time the configuration file is accessed.
If you want to go back to an earlier release afterwards, v2.8.1 and v2.7.4 ship the matching downgrade migration, so you can switch back without editing config.json by hand.
Deprecations
verdi profile setup --use-rabbitmq/--no-use-rabbitmqis deprecated in favor of--broker, andverdi profile configure-rabbitmqin favor ofverdi profile configure-broker core.rabbitmq.- The configuration options
logging.db_loglevelandrmq.task_timeoutare deprecated in favor oflogging.database_handlerandbroker.task_timeout. Entity.Model,Entity.model_to_orm_fields(),Entity.model_to_orm_field_values()and severalQbFieldattributes are deprecated as part of the new ORM model system.ArrayData.save_arrays()andArrayData.load_arrays()are deprecated in favor ofnumpy.saveandnumpy.loadwithio.BytesIO.
Happy computing!
The AiiDA team