# built-in feature, supports import of definitions
# that depend on plugins (e.g. Shovels or custom exchanges)
load_definitions = /path/to/definitions/file.json
```
Definition import in the management plugin (`management.load_definitions`) will be **removed** in
a future RabbitMQ release.
### Upgrade Doc Guides and Change Log
See [3.8.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.0) upgrade and
compatibility notes first if upgrading from an earlier release series (e.g. `3.7.x`).
See the [Upgrading guide](https://www.rabbitmq.com/upgrade.html) for general documentation on upgrades and
[RabbitMQ change log](https://www.rabbitmq.com/changelog.html) for release notes of other releases.
### Upgrading to Erlang 22.x or Later Versions
When upgrading to this release from `3.7.15` or an older version, extra care has to be taken.
Because older RabbitMQ CLI tools can be incompatible with Erlang 22+ releases,
RabbitMQ **must be upgraded at the same time as Erlang**.
Alternatively the node can be upgraded to `3.7.18` on Erlang 21.3 first,
then Erlang 22.x or 23.x, then RabbitMQ to the most recent 3.8.x release.
### Getting Help
Any questions about this release, upgrades or RabbitMQ in general are welcome on the [RabbitMQ mailing list](https://groups.google.com/forum/#!forum/rabbitmq-users)
and [RabbitMQ community Slack](https://rabbitmq-slack.herokuapp.com/).
## Changes Worth Mentioning
### Core Server
#### Bug Fixes
* Starting with `3.8.0`, an unintentionally introduced assertion could prevent classic mirrored queue
mirrors from starting successfully in case the primary replica changed concurrently with their startup.
* RabbitMQ core plugin activation was revisited to be closer to that of `3.7.x`. This does not any
related improvements w.r.t. definition import, e.g. those introudced in [RabbitMQ `3.8.6`](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.6).
*`rabbitmq-diagnostics check_if_node_is_quorum_critical` returned a false positive for a node [marked for maintenance](https://www.rabbitmq.com/upgrade.html#maintenance-mode).
Given the refinement to the `rabbitmq-upgrade drain` command in [rabbitmq/rabbitmq-server#2474](https://github.com/rabbitmq/rabbitmq-server/issues/2474),
`rabbitmq-diagnostics check_if_node_is_quorum_critical` now will unconditionally return a success
* [Quorum queues](https://www.rabbitmq.com/quorum-queues.html) now can use the [`reject-publish`](https://www.rabbitmq.com/maxlength.html#overflow-behaviour)
* Nodes now keep track of failed client authentication attempts and expose it as a metric via both the [Prometheus endpoint](https://www.rabbitmq.com/prometheus.html)
and the HTTP API at `GET /api/auth/attempts/{node}`.
The tracking is done for every cluster node individually. The protocols that support authentication attempt tracking
*`rabbitmq.conf` schema now allows for [peer certificate chain verification depth](https://www.rabbitmq.com/ssl.html#peer-verification) to be set to zero.
When this value is used, peer certificate must be [signed by a trusted CA certificate directly](https://erlang.org/doc/man/ssl.html#type-allowed_cert_chain_length) in order
*`RABBITMQ_IO_THREAD_POOL_SIZE` will no longer be respected by RabbitMQ nodes. It [is no longer relevant](http://blog.erlang.org/IO-Polling/)
with supported Erlang versions and will simplify [`rabbitmq-diagnostics runtime_thread_stats`](https://www.rabbitmq.com/runtime.html#thread-stats) output.
* The `+K` [runtime parameter](https://www.rabbitmq.com/runtime.html) is no longer used by RabbitMQ nodes as it has [no effect](http://blog.erlang.org/IO-Polling/)
*`rabbitmq-queues reclaim_quorum_memory` is a new command that forces Raft WAL compaction which in most cases should reduce memory footprint of a quorum queue:
*`GET /metrics/per-object` is a new endpoint that always returns [individual entity metrics](https://www.rabbitmq.com/prometheus.html#metric-aggregation), even if
`GET /metrics` is configured to return aggregated results.