<commit_before>---
layout: default
description: It is recommended to check the following list of incompatible changes before upgrading to ArangoDB 3.9
---
Incompatible changes in ArangoDB 3.9
====================================

It is recommended to check the following list of incompatible changes **before**
upgrading to ArangoDB 3.9, and adjust any client programs if necessary.

The following incompatible changes have been made in ArangoDB 3.9:

Architecture requirements
-------------------------

The minimum architecture requirements have been raised from the Westmere
architecture to the Sandy Bridge architecture. 256 bit AVX instructions are
now expected to be present on all targets that run ArangoDB 3.9 executables.
If a target does not support AVX instructions, it may fail with SIGILL at
runtime.

AQL
---

The following complexity limits have been added in 3.9 for AQL queries, 
Additional complexity limits have been added for AQL queries, in order to 
prevent programmatically generated large queries from causing trouble 
(too deep recursion, enormous memory usage, long query optimization 
and distribution passes etc.).

The following limits have been added:

- a recursion limit for AQL query expressions. An expression can now be
  up to 500 levels deep. An example expression is `1 + 2 + 3 + 4`, which
  is 3 levels deep `1 + (2 + (3 + 4))`.
  The recursion of expressions is limited to 500 levels.
- a limit for the number of execution nodes in the initial query 
  execution plan. The number of execution nodes is limited to 4,000.

Also see [Known limitations for AQL queries](aql/fundamentals-limitations.html).

Startup options
---------------

### Timeout for web interface sessions

The timeout value for web interface sessions is now configurable via the
startup option `--server.session-timeout`. The value for the option can
be specified in seconds.

The default timeout value for web interface sessions is **one hour** in
ArangoDB 3.9. Previous versions of ArangoDB had a longer, hard-coded timeout.

The session will be renewed automatically as long as you regularly interact with
the Web UI in your browser. You will not get logged out while actively using it.

### Disallowed usage of collection names in AQL expressions

The startup option `--query.allow-collections-in-expressions` added in 3.8.0
controls whether collection names are allowed in arbitrary places in AQL
expressions. The default was *true*, but is now changed to *false* in 3.9.0 to
make queries like `FOR doc IN collection RETURN collection` fail, where it was
probably intended to `RETURN doc` instead. Also see
[ArangoDB Server Query Options](programs-arangod-query.html#allowing-the-usage-of-collection-names-in-aql-expressions)

Such unintentional usage of collection names in queries now makes the query
fail with error 1568 ("collection used as expression operand") by default.
The option can be set to *true* to restore the 3.8 behavior. However, the
option is deprecated from 3.9.0 on and will be removed in future versions.
From then on, unintended usage of collection names will always be disallowed.

If you use queries like `RETURN collection` then you should replace them with
`FOR doc IN collection RETURN doc` to ensure future compatibility.

### "Old" system collections

The option `--database.old-system-collections` was introduced in 3.6 and 3.7
to control if the obsolete system collections `_modules` and `_routing` should
be created with every new database or not.

The option was introduced with a default value of `true` in 3.6 and 3.7 for
downwards-compatibility reasons. With the introduction of the option, it was
also announced that the default value would change to `false` in ArangoDB 3.8.
This has happened, meaning that 3.8 installations by default will not create
these system collections anymore.
<commit_msg>Fix cluster-internal network protocol to HTTP/1 (#761)<commit_after>---
layout: default
description: It is recommended to check the following list of incompatible changes before upgrading to ArangoDB 3.9
---
Incompatible changes in ArangoDB 3.9
====================================

It is recommended to check the following list of incompatible changes **before**
upgrading to ArangoDB 3.9, and adjust any client programs if necessary.

The following incompatible changes have been made in ArangoDB 3.9:

Architecture requirements
-------------------------

The minimum architecture requirements have been raised from the Westmere
architecture to the Sandy Bridge architecture. 256 bit AVX instructions are
now expected to be present on all targets that run ArangoDB 3.9 executables.
If a target does not support AVX instructions, it may fail with SIGILL at
runtime.

AQL
---

The following complexity limits have been added in 3.9 for AQL queries, 
Additional complexity limits have been added for AQL queries, in order to 
prevent programmatically generated large queries from causing trouble 
(too deep recursion, enormous memory usage, long query optimization 
and distribution passes etc.).

The following limits have been added:

- a recursion limit for AQL query expressions. An expression can now be
  up to 500 levels deep. An example expression is `1 + 2 + 3 + 4`, which
  is 3 levels deep `1 + (2 + (3 + 4))`.
  The recursion of expressions is limited to 500 levels.
- a limit for the number of execution nodes in the initial query 
  execution plan. The number of execution nodes is limited to 4,000.

Also see [Known limitations for AQL queries](aql/fundamentals-limitations.html).

Startup options
---------------

### Timeout for web interface sessions

The timeout value for web interface sessions is now configurable via the
startup option `--server.session-timeout`. The value for the option can
be specified in seconds.

The default timeout value for web interface sessions is **one hour** in
ArangoDB 3.9. Previous versions of ArangoDB had a longer, hard-coded timeout.

The session will be renewed automatically as long as you regularly interact with
the Web UI in your browser. You will not get logged out while actively using it.

### Disallowed usage of collection names in AQL expressions

The startup option `--query.allow-collections-in-expressions` added in 3.8.0
controls whether collection names are allowed in arbitrary places in AQL
expressions. The default was *true*, but is now changed to *false* in 3.9.0 to
make queries like `FOR doc IN collection RETURN collection` fail, where it was
probably intended to `RETURN doc` instead. Also see
[ArangoDB Server Query Options](programs-arangod-query.html#allowing-the-usage-of-collection-names-in-aql-expressions)

Such unintentional usage of collection names in queries now makes the query
fail with error 1568 ("collection used as expression operand") by default.
The option can be set to *true* to restore the 3.8 behavior. However, the
option is deprecated from 3.9.0 on and will be removed in future versions.
From then on, unintended usage of collection names will always be disallowed.

If you use queries like `RETURN collection` then you should replace them with
`FOR doc IN collection RETURN doc` to ensure future compatibility.

### Cluster-internal network protocol

The cluster-internal network protocol is hard-coded to HTTP/1 in ArangoDB 3.9.
Any other protocol selected via the startup option `--network.protocol` will 
automatically be switched to HTTP/1. The startup option `--network.protocol` 
is now deprecated and hidden by default. It will be removed in a future version.

### "Old" system collections

The option `--database.old-system-collections` was introduced in 3.6 and 3.7
to control if the obsolete system collections `_modules` and `_routing` should
be created with every new database or not.

The option was introduced with a default value of `true` in 3.6 and 3.7 for
downwards-compatibility reasons. With the introduction of the option, it was
also announced that the default value would change to `false` in ArangoDB 3.8.
This has happened, meaning that 3.8 installations by default will not create
these system collections anymore.

{'fraction_non_alphanumeric': 0.06912726823848908, 'fraction_numerical': 0.01654116775706703, 'mean_word_length': 4.2338501291989665, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6946667', 'n_tokens_mistral': 2089, 'n_tokens_neox': 1954, 'n_words': 1160}