Detail
In some cases a node may evict records even though it has not crossed the configured high-water-mark (HWM) for eviction.
Answer
Starting in Aerospike 4.5.1, eviction behavior was enhanced so that eviction depth is coordinated across all nodes in the cluster.
Aerospike tracks eviction progress using a value called evict-void-time.
This timestamp represents the oldest record timestamp that should be retained in the namespace.
Records with a void-time less than or equal to this value are eligible for eviction.
Nodes exchange the current evict-void-time through the System Metadata (SMD) subsystem.
This ensures that all nodes in the cluster maintain a consistent eviction depth.
When a new node joins a cluster that has already performed eviction, the new node may receive an updated evict-void-time from other nodes.
Even if the new node has not exceeded its own high-water marks, it will evict records whose evict-void-time is older than the cluster-wide eviction cutoff.
This behavior ensures that newly joined nodes do not reintroduce records that have already been evicted elsewhere in the cluster.
In the example below, a new node joins a cluster where eviction has already occurred due to disk HWM pressure.
The new node starts with an empty eviction state:
Jan 14 2025 11:50:05 GMT: INFO (smd): (smd.c:2346) no file '/opt/aerospike/smd/evict.smd' - starting empty
The node then receives the cluster eviction timestamp:
Jan 14 2025 11:50:13 GMT: INFO (nsup): (nsup.c:314) {default} got smd evict-void-time 474903645
The namespace supervisor (nsup) then evicts records older than that timestamp:
Jan 14 2025 11:50:13 GMT: INFO (nsup): (nsup.c:515) {default} nsup-start: evict-threads 1 evict-ttl 352232 evict-void-time (0,474903645)
Jan 14 2025 11:50:13 GMT: INFO (nsup): (nsup.c:842) {default} nsup-done: non-expirable 0 expired (0,0) evicted (275,275) evict-ttl 352232 total-ms 3
This is expected behavior and ensures that eviction remains consistent across the cluster.