# Database 8.1.2 Release Notes

April 16, 2026  |  **[Download](https://aerospike.com/download/)**

## New in this version

-   Enhanced path expressions
-   Operation projection added to queries
-   Set index management
-   Support for AlmaLinux 9 and 10

### Enhanced path expressions

Enhanced the expression API to make path expressions easier to write.

Path expressions significantly enhance Aerospike’s capability as a document store, simplifying the developer experience by offering native support for JSON-like models. Developers can effectively model data as a list of map elements and easily index, query, and retrieve data from those complex structures. When combined with [index expressions](https://aerospike.com/docs/database/learn/tutorials/quick-start-expression-index/), you can use path expressions to index and query data within deeply nested structures.

See [Path expressions](https://aerospike.com/docs/develop/expressions/path/) for details.

### Operation projection in queries

Queries now accept the same bin projection, operations, and read expressions used in single-key and `operate` batched-commands. This unifies the developer API and eliminates the two-phase _query and batch_ workaround.

-   Use read operations (bin reads, collection data type (CDT) API and [read expressions](https://aerospike.com/docs/develop/expressions#operation-expressions)) in query projections.
-   Apply path expressions in query projection, not only in the [filter expression](https://aerospike.com/docs/develop/expressions/#record-filtering-with-expressions).
-   Reduce bandwidth and latency by projecting only requested bins or values computed server-side.
-   Projection of a list of bin-names remains supported for backward compatibility.

See [Operation projection in queries](https://aerospike.com/docs/develop/learn/queries/projection) for details.

### Manage set indexes with info commands

You can create and delete set indexes using the same info commands as secondary indexes, with the **sindex-admin** privilege. With this change, you can manage set indexes on Aerospike Cloud, where the sys-admin role is not available to users.

-   **Create a set index** – Use [`sindex-create`](https://aerospike.com/docs/database/reference/info/#sindex-create) with `indextype=set` and a required index name, namespace, and set. The equivalent command in `asadm` is `manage sindex create INDEX-NAME ns NAMESPACE set SET`.
-   **Delete a set index** – Use [`sindex-delete`](https://aerospike.com/docs/database/reference/info/#sindex-delete) with the index name, namespace, and set. The **sindex-admin** privilege is required.
-   **List indexes** – [`sindex-list`](https://aerospike.com/docs/database/reference/info/#sindex-list) and `show sindex` include both secondary and set indexes. The output includes a **mode** column (`secondary` or `digest`).

See [Managing set indexes](https://aerospike.com/docs/database/manage/namespace/sets#managing-set-indexes) and [Set index](https://aerospike.com/docs/database/learn/architecture/data-storage/set-index).

### Deprecated: set-config / enable-index for set index lifecycle

Creating or removing set indexes via [`set-config`](https://aerospike.com/docs/database/reference/info/#set-config) (or asadm `manage config`) with [`enable-index`](https://aerospike.com/docs/database/reference/config#namespace__enable-index) is **deprecated**. Use `sindex-create` and `sindex-delete` instead. Deprecation warnings are logged when the config method is used. Backward compatibility is maintained: you can still use `set-config`/`enable-index` for existing workflows, but new set indexes should use `sindex-create`. See [Managing set indexes](https://aerospike.com/docs/database/manage/namespace/sets#managing-set-indexes) and [Special upgrades](https://aerospike.com/docs/database/advanced/special-upgrades) for upgrade guidance.

### Control group (cgroup) memory tracking

The new [`cgroup-mem-tracking`](https://aerospike.com/docs/database/reference/config#service__cgroup-mem-tracking) service configuration parameter enables control group (cgroup)-aware stop-writes memory calculations. When enabled, [`system_free_mem_kbytes`](https://aerospike.com/docs/database/reference/metrics#node_stats__system_free_mem_kbytes) and [`system_free_mem_pct`](https://aerospike.com/docs/database/reference/metrics#node_stats__system_free_mem_pct) report control group (cgroup)-aware values. The new [`host_free_mem_kbytes`](https://aerospike.com/docs/database/reference/metrics#node_stats__host_free_mem_kbytes) and [`host_free_mem_pct`](https://aerospike.com/docs/database/reference/metrics#node_stats__host_free_mem_pct) statistics always report host-level memory. Even when disabled, the server logs a warning if a control group (cgroup) memory limit is detected and less than 10% is available.

### Query threads limit warning

The warning about exceeding `query-threads-limit` is now rate-limited through the ticker instead of emitted per query. Per-job failure warnings are demoted to detail level.

### TLS CA hot-reload (Enterprise only)

The TLS refresh mechanism now monitors `ca-file` and `ca-path` for changes. When CA trust material changes, the SSL context is rebuilt and swapped, enabling CA rotation without a node restart.

### XDR recovery drain on prole (Enterprise only)

Pending XDR recovery retry requests are now drained when a partition transitions to prole, preventing a possible invariant violation where a node could become master with more than MAX\_IN\_PROGRESS outstanding requests.

## Tools updates

See the [Tools 13.0.0 release notes](https://aerospike.com/docs/database/tools/release-notes/#tools-1300) for full details.

## Upgrade instructions

You can upgrade directly to Database 8.1.2 from releases 7.1.0.x through 8.1.1.x.

-   For upgrade instructions, see [Upgrade or repair an Aerospike server](https://aerospike.com/docs/database/install/upgrade).
-   For special upgrade instructions, see [Special upgrades and downgrades](https://aerospike.com/docs/database/advanced/special-upgrades).

## Info command updates

| Item | Action | Notes |
| --- | --- | --- |
| [`sindex-create`](https://aerospike.com/docs/database/reference/info/#sindex-create) | extended | Add `mode=digest` to create a [set index](https://aerospike.com/docs/database/learn/architecture/data-storage/set-index). Default `mode=secondary` for traditional secondary indexes. |
| [`sindex-delete`](https://aerospike.com/docs/database/reference/info/#sindex-delete) | extended | Supports deleting set indexes created with sindex-create. |
| [`sindex-list`](https://aerospike.com/docs/database/reference/info/#sindex-list) | extended | Output includes set indexes; **mode** (or equivalent) column indicates `secondary` or `digest`. |
| [`sindex-exists`](https://aerospike.com/docs/database/reference/info/#sindex-exists) | extended | Checks for set indexes in addition to secondary indexes. |

## Configuration / set-config

| Item | Action | Notes |
| --- | --- | --- |
| `set-config` / `enable-index` for set index create/remove | deprecated | Use [`sindex-create`](https://aerospike.com/docs/database/reference/info/#sindex-create) with `mode=digest` and [`sindex-delete`](https://aerospike.com/docs/database/reference/info/#sindex-delete) instead. See [Managing set indexes](https://aerospike.com/docs/database/manage/namespace/sets#managing-set-indexes). |
| [`tomb-raider-unmark-threads`](https://aerospike.com/docs/database/reference/config#namespace__tomb-raider-unmark-threads) | added | Caps parallelism during the tomb raider unmark phase. |
| [`cgroup-mem-tracking`](https://aerospike.com/docs/database/reference/config#service__cgroup-mem-tracking) | added | When enabled, stop-writes memory calculations use control group (cgroup) limits instead of host `/proc/meminfo`. |
| [`proto-fd-max`](https://aerospike.com/docs/database/reference/config#service__proto-fd-max) | modified | Upper limit increased from 2,097,152 to 2,147,483,647 (INT32\_MAX). |

## Statistics changes

| Item | Action | Notes |
| --- | --- | --- |
| [`host_free_mem_kbytes`](https://aerospike.com/docs/database/reference/metrics#node_stats__host_free_mem_kbytes) | added | Always reports host-level free memory in KiB, regardless of `cgroup-mem-tracking`. |
| [`host_free_mem_pct`](https://aerospike.com/docs/database/reference/metrics#node_stats__host_free_mem_pct) | added | Always reports host-level free memory percentage, regardless of `cgroup-mem-tracking`. |
| [`system_free_mem_kbytes`](https://aerospike.com/docs/database/reference/metrics#node_stats__system_free_mem_kbytes) | modified | When `cgroup-mem-tracking` is enabled, reports control group (cgroup)-aware values. |
| [`system_free_mem_pct`](https://aerospike.com/docs/database/reference/metrics#node_stats__system_free_mem_pct) | modified | When `cgroup-mem-tracking` is enabled, reports control group (cgroup)-aware values. |
| [`stop-writes-sys-memory-pct`](https://aerospike.com/docs/database/reference/config#namespace__stop-writes-sys-memory-pct) | modified | Memory evaluation now respects `cgroup-mem-tracking`. |

## Server log changes

| Item | Action | Notes |
| --- | --- | --- |
| [system cpu/memory stats ticker](https://aerospike.com/docs/database/reference/logs#info__1585872527) | modified | Added `host-free-mem-kbytes` and `host-free-mem-pct` fields to the system ticker line. |
| [control group (cgroup) used bytes exceed limit](https://aerospike.com/docs/database/reference/logs#cf_os__6883000001) | added | Warns when cgroup used bytes exceed the configured memory limit. |
| [control group (cgroup) zero available memory](https://aerospike.com/docs/database/reference/logs#cf_os__6883000002) | added | Warns when cgroup reports zero available memory. |
| [control group (cgroup) memory below 10 percent](https://aerospike.com/docs/database/reference/logs#cf_os__6883000003) | added | Warns when cgroup-available memory drops below 10%. |
| [failed to read /proc/meminfo](https://aerospike.com/docs/database/reference/logs#info__6883000004) | added | Warns when the server cannot read `/proc/meminfo`. |
| [bad cgroup-mem-tracking value](https://aerospike.com/docs/database/reference/logs#info__6883000005) | added | Warns on an invalid `cgroup-mem-tracking` configuration value. |
| [cgroup-mem-tracking already set](https://aerospike.com/docs/database/reference/logs#info__6883000006) | added | Logged when `cgroup-mem-tracking` is set to its current value. |
| [cgroup-mem-tracking changed from false](https://aerospike.com/docs/database/reference/logs#info__6883000007) | added | Logged when `cgroup-mem-tracking` is enabled. |
| [cgroup-mem-tracking changed from true](https://aerospike.com/docs/database/reference/logs#info__6883000008) | added | Logged when `cgroup-mem-tracking` is disabled. |
| [query-threads-limit reached (ticker)](https://aerospike.com/docs/database/reference/logs#info__6886000001) | added | Rate-limited ticker warning replaces the former per-query warning. |
| [basic query job failed to start (demoted)](https://aerospike.com/docs/database/reference/logs#query__6886000002) | added | Demoted from warning to detail level. |
| [aggregation query job failed to start (demoted)](https://aerospike.com/docs/database/reference/logs#query__6886000003) | added | Demoted from warning to detail level. |
| [udf-bg query job failed to start (demoted)](https://aerospike.com/docs/database/reference/logs#query__6886000004) | added | Demoted from warning to detail level. |
| [ops-bg query job failed to start (demoted)](https://aerospike.com/docs/database/reference/logs#query__6886000005) | added | Demoted from warning to detail level. |
| [expression display null](https://aerospike.com/docs/database/reference/logs#exp__6884000001) | added | Warns when an expression is null during display. |
| [build\_in\_list invalid arg type](https://aerospike.com/docs/database/reference/logs#exp__6889000001) | added | Invalid argument type for `IN_LIST` expression. |
| [eval\_in\_list list expected](https://aerospike.com/docs/database/reference/logs#exp__6889000002) | added | `IN_LIST` expression received a non-list argument. |
| [build\_count\_sz invalid instruction](https://aerospike.com/docs/database/reference/logs#exp__6889000003) | added | Invalid instruction during expression build. |
| [cdt\_select\_map invalid key list](https://aerospike.com/docs/database/reference/logs#particle__6889000004) | added | Invalid key list in CDT map select. |
| [cdt\_select\_map key list not ordered](https://aerospike.com/docs/database/reference/logs#particle__6889000005) | added | Unordered key list in CDT map select. |
| [cdt\_select\_stack\_init AND invalid ctx type](https://aerospike.com/docs/database/reference/logs#particle__6889000006) | added | Invalid context type in CDT select AND clause. |
| [cdt\_select\_stack\_init AND no preceding entry](https://aerospike.com/docs/database/reference/logs#particle__6889000007) | added | AND clause with no preceding entry in CDT select. |
| [cdt\_select\_stack\_init duplicate AND](https://aerospike.com/docs/database/reference/logs#particle__6889000008) | added | Duplicate AND in CDT select stack. |
| [cdt\_select\_stack\_init AND on EXP base](https://aerospike.com/docs/database/reference/logs#particle__6889000009) | added | AND clause on expression base in CDT select. |
| [sindex-create context not supported for set index](https://aerospike.com/docs/database/reference/logs#info__6891000001) | added | Context parameter not supported for set index creation. |
| [sindex-create indexdata not supported for set index](https://aerospike.com/docs/database/reference/logs#info__6891000002) | added | Index data parameter not supported for set index creation. |
| [sindex-create type not supported for set index](https://aerospike.com/docs/database/reference/logs#info__6891000003) | added | Type parameter not supported for set index creation. |
| [sindex-create bin not supported for set index](https://aerospike.com/docs/database/reference/logs#info__6891000004) | added | Bin parameter not supported for set index creation. |
| [sindex-create exp not supported for set index](https://aerospike.com/docs/database/reference/logs#info__6891000005) | added | Expression parameter not supported for set index creation. |
| [sindex-create namespace not found](https://aerospike.com/docs/database/reference/logs#info__6891000006) | added | Namespace not found during set index creation. |
| [sindex-create failed to get/create set](https://aerospike.com/docs/database/reference/logs#info__6891000007) | added | Failed to get or create set during set index creation. |
| [sindex-delete deleting in SMD](https://aerospike.com/docs/database/reference/logs#info__6891000008) | added | Logged when a set index is deleted via SMD. |
| [SINDEX CREATE index name already in use](https://aerospike.com/docs/database/reference/logs#sindex__6891000009) | added | Index name collision during set index creation. |
| [SINDEX CREATE failed get-create set](https://aerospike.com/docs/database/reference/logs#sindex__6891000010) | added | Failed to get or create set during SMD processing. |
| [SINDEX DROP set not found](https://aerospike.com/docs/database/reference/logs#sindex__6891000011) | added | Set not found during set index drop. |
| [SINDEX DROP si not found](https://aerospike.com/docs/database/reference/logs#sindex__6891000012) | added | Secondary index not found during set index drop. |
| [set index enabled via different method - cannot enable](https://aerospike.com/docs/database/reference/logs#sindex__6891000013) | added | Cannot enable a set index that was enabled via a different method. |
| [set index already disabled](https://aerospike.com/docs/database/reference/logs#sindex__6891000014) | added | Set index is already disabled. |
| [set index enabled via different method - cannot disable](https://aerospike.com/docs/database/reference/logs#sindex__6891000015) | added | Cannot disable a set index that was enabled via a different method. |
| [smd set name required for set index](https://aerospike.com/docs/database/reference/logs#sindex__6891000016) | added | Set name required when creating a set index via SMD. |
| [SINDEX CREATE renaming index](https://aerospike.com/docs/database/reference/logs#sindex__6891000017) | added | Logged when an existing set index is renamed. |
| [SINDEX CREATE request received via SMD](https://aerospike.com/docs/database/reference/logs#sindex__6891000018) | added | Logged when a set index create request arrives via SMD. |
| [SINDEX DROP already disabled](https://aerospike.com/docs/database/reference/logs#sindex__6891000019) | added | Set index already disabled during drop. |
| [SINDEX DROP request received via SMD](https://aerospike.com/docs/database/reference/logs#sindex__6891000020) | added | Logged when a set index drop request arrives via SMD. |
| [changing creation mode of set index](https://aerospike.com/docs/database/reference/logs#sindex__6891000021) | added | Logged when a set index creation mode changes. |
| [set index already enabled via method](https://aerospike.com/docs/database/reference/logs#sindex__6891000022) | added | Set index already enabled via the specified method. |
| [basic query job no bin data and projection ops both set](https://aerospike.com/docs/database/reference/logs#query__6892000001) | added | Cannot set both no-bin-data and projection operations. |
| [queries should only provide read ops](https://aerospike.com/docs/database/reference/logs#query__6892000002) | added | Query projection received a non-read operation. |
| [apply\_ops\_make\_response failed](https://aerospike.com/docs/database/reference/logs#query__6892000003) | added | Projection operation response construction failed. |
| [build\_ops\_response\_msg can’t get key](https://aerospike.com/docs/database/reference/logs#query__6892000004) | added | Cannot retrieve key during projection response. |
| [apply\_ops\_make\_response bad number of ops](https://aerospike.com/docs/database/reference/logs#query__6892000005) | added | Unexpected operation count during projection response. |
| [read\_local bad number of ops](https://aerospike.com/docs/database/reference/logs#rw__6892000006) | added | Unexpected operation count in local read. |
| [error while fetching timestamp for CA file](https://aerospike.com/docs/database/reference/logs#tls__6897000001) | added | Error reading timestamp of CA file during refresh check. |
| [failed to load CA file](https://aerospike.com/docs/database/reference/logs#tls__6897000002) | added | CA file could not be loaded during hot-reload. |
| [retrying CA refresh in context](https://aerospike.com/docs/database/reference/logs#tls__6897000003) | added | CA refresh failed; retrying in the named TLS context. |
| [ca-file changed in context](https://aerospike.com/docs/database/reference/logs#tls__6897000004) | added | Detected change to `ca-file` in a TLS context. |
| [ca-path changed in context](https://aerospike.com/docs/database/reference/logs#tls__6897000005) | added | Detected change to `ca-path` in a TLS context. |
| [updated ca-file](https://aerospike.com/docs/database/reference/logs#tls__6897000006) | added | Successfully reloaded `ca-file`. |
| [updated ca-path](https://aerospike.com/docs/database/reference/logs#tls__6897000007) | added | Successfully reloaded `ca-path`. |

## Known issues

See [Database known issues reference](https://aerospike.com/docs/database/reference/issues?search=8.1.2.0) for details.

## Complete list of changes

| ID | Description |
| --- | --- |
| AER-6866 | (LOGGING) Improve memory statistics and logging when running inside a control group (cgroup). |
| AER-6883 | (STATS) Introduced option to base stop-writes on control group (cgroup) limits. |
| AER-6884 | (EXPRESSIONS) Fix assert for invalid CDT context in expression display. |
| AER-6885 | (CONFIG) Increase `proto-fd-max` upper limit to INT32\_MAX. |
| AER-6886 | (QUERY) Rate-limit query-threads-limit warning to ticker instead of per-query. |
| AER-6889 | (EXPRESSIONS) Add IN\_LIST, MAP\_KEYS, MAP\_VALUES expression ops. |
| AER-6890 | (LOGGING) Improved bad record on disk logging. |
| AER-6891 | (SINDEX) Create set indexes with sindex-admin role. |
| AER-6892 | (SINDEX) Implement operation projection for foreground queries. |
| AER-6893 | (STORAGE) Introduced `tomb-raider-unmark-threads` to control parallelism across all devices. |
| AER-6895 | (CICD) Implement server builds from GitHub action runners. |
| AER-6897 | (TLS) Hot-reload CA trust material (`ca-file`, `ca-path`) without node restart (Enterprise only). |
| AER-6898 | (XDR) Drain pending XDR recovery retry requests when partition transitions to prole (Enterprise only). |