Aerospike Backup Service 3.7.0 release notes
For the complete documentation index see: llms.txt
All documentation pages available in markdown.
September 29, 2026 | Download
New in this version
Aerospike Backup Service (ABS) 3.7.0 is built on backup-go v0.12.0. It adds an optional HTTPS listener for the REST API, redacts secrets in configuration responses and logs, and runs the Linux packages as an unprivileged service account. It also adds cumulative incremental backups, cron schedule timezones, filter expressions on routines, and set index backup.
This release has breaking changes for the configuration API, configuration validation, and Linux package installations. See Upgrade ABS for a checklist before you replace ABS 3.6.2 and earlier.
Breaking changes
Configuration API
-
Configuration API
GETendpoints (/v1/configand related read paths) no longer return literal secret values. Literal passwords, keys, and similar fields are replaced with the sentinel"[secret]". Secret Agent references (secrets:...) are returned as-is. [BKRS-333] -
PUTrequests that round-trip aGETresponse must leave unchanged secret fields as"[secret]". ABS treats that sentinel as “keep the stored value.” Sending"[secret]"for a newly added entity that has no stored secret is invalid. See API secrets. [BKRS-269, BKRS-393] -
Endpoints that change configuration return a status code that describes the outcome, instead of
400 Bad Requestfor every error. This applies toPOST,PUT, andDELETEunder/v1/config/routines,/v1/config/storage,/v1/config/clusters, and/v1/config/policies, and to the routineenableanddisableendpoints. [BKRS-439]- A routine, storage destination, cluster, or policy that does not exist returns
404 Not Found. The response body matches theGETresponse, such asroutine "daily" not found. - A name that is already taken, or an entity that a backup routine still references when you delete it, returns
409 Conflict. - A malformed body, failed validation, or unreachable TLS endpoint still returns
400 Bad Request.
Clients that branch on
400, or that match response text to tell a missing entity from a bad payload, must branch on the status code instead. - A routine, storage destination, cluster, or policy that does not exist returns
Configuration validation
- Configuration paths must be canonical. ABS validates local, S3, GCP, and Azure storage paths, restore
backup-data-path, password paths, TLS and HTTPS files, encryption-key files, GCP key files, Secret Agent TLS files, and log file paths. Paths that contain.., start with~, contain redundant separators, end with/, or use a non-canonical prefix such as./fail validation. Relative storage paths must stay under their storage root. [BKRS-271, BKRS-338, BKRS-390] - Names of routines, storage destinations, clusters, policies, and Secret Agents must be usable as a single path segment. A name cannot be
.or.., contain/,\, or a NUL byte, start with~, or start or end with whitespace. Namespace names in routines and restore requests must follow Aerospike naming rules: at most 31 bytes of Latin letters, digits,_,-, and$, and not the reserved namenull. [BKRS-414] - A
compressionorencryptionblock in a backup policy or restore request must setmode. For compression,ZSTDrequireslevel(-1 to 22), andNONEmust not setlevel. To turn off compression or encryption, setmode: NONEor omit the block. Earlier releases accepted a compression block withoutmode, and every backup and restore that used it failed at run time. [BKRS-441] - Secret Agent references (
secrets:...) are validated when the configuration is loaded or applied. A malformed reference, or a reference without a configured Secret Agent, fails the load or apply instead of the first job that needs the secret. [BKRS-287] - An empty HTTP rate-limiter
white-listapplies rate limiting to every client. Disable limiting only with the CIDR0.0.0.0/0. Prefixes such as0.0.0.0without/0are not treated as a full exemption. [BKRS-272] - List fields such as
namespaces,set-list,bin-list,node-list, and the rate-limiterwhite-listreject duplicate values and empty strings. Theseed-nodes,prefer-racks, andrack-listfields reject duplicate values. The rate-limitertpsandsizevalues must be positive. [BKRS-313, BKRS-448]
Linux packages
- The
.deband.rpmpackages create the system accountaerospike-backup-serviceand run ABS as that account under a systemd sandbox, instead of as root. Check the following before you upgrade. Most of these fail only when ABS first uses the path or file, not at startup. [BKRS-277]- Only
/etc/aerospike-backup-service,/var/lib/aerospike-backup-service, and/var/log/aerospike-backup-serviceare writable. A routine whoselocal-storagepath is anywhere else fails withread-only file system. Add the path toReadWritePathsin a systemd drop-in, and make the service account its owner. /rootand/homeare hidden from ABS. Move cloud credentials such as~/.aws/credentialsunder/var/lib/aerospike-backup-service, which is the account’s home directory. You can also set them in/etc/default/aerospike-backup-service(Debian) or/etc/sysconfig/aerospike-backup-service(RPM).- Cluster and HTTPS TLS files (
cert-file,key-file,ca-file, and HTTPSclient-ca-file) andpassword-pathfiles must be readable by the service account. Set them to mode0600with owneraerospike-backup-service. - A listener on a port below 1024 no longer binds. Grant
CAP_NET_BIND_SERVICEwithAmbientCapabilitiesandCapabilityBoundingSetin a drop-in.
- Only
- The packages set the configuration file to mode
0600, owned byaerospike-backup-service, on every install and upgrade. [BKRS-277] - The log file moves from
/var/log/aerospike-backup-service.logto/var/log/aerospike-backup-service/aerospike-backup-service.log. The package moves an existing log and its rotated files. If you customized the configuration file, updateservice.logger.file-writer.filename. ABS refuses to start when it cannot write its log file. [BKRS-277] - The systemd unit file moves to
/usr/lib/systemd/systemand is replaced on every upgrade. Put local changes in a drop-in withsystemctl edit aerospike-backup-service. The package renames an earlier unit file in/etc/systemd/systemtoaerospike-backup-service.service.pre-hardening.bak, because that copy would keep ABS running as root. Reapply its changes as a drop-in. [BKRS-277] - To downgrade from 3.7.0 to an earlier Debian package, purge the 3.7.0 package first. See Roll back a failed upgrade.
- RPM only: the upgrade to 3.7.0 leaves the service stopped and disabled, because the earlier package’s removal script still runs. Run
systemctl enable --now aerospike-backup-serviceafter this upgrade. Later upgrades are not affected.
Local backup file permissions
- In every deployment, ABS creates
local-storagebackup files with mode0600and directories with mode0700, owned by the account ABS runs as. These modes do not follow the umask, so adding another account to the service’s group does not grant access. Tools that read local backups as another user, such as a separateasrestoreaccount or a log shipper, must run as the ABS account or restore through the REST API. Cloud storage is not affected.
Kubernetes
- The Helm chart disables automounting the service account token and sets a hardened container
securityContext(non-root UID 65532, read-only root filesystem, drop all capabilities). Local disk storage and file logs need an extra writable volume. See Install ABS on Kubernetes with Helm. [BKRS-302]
New features
- Optional
service.httpslistener (default port 8443) with TLS certificate and key, minimum protocol version, cipher suites, and optional mutual TLS (client-auth,client-ca-file). Setcrl-fileto revoke client certificates with DER or PEM certificate revocation lists (CRLs).crl-filerequiresclient-ca-fileandclient-auth: require-and-verify. A missing matching CRL, or an expired or future-dated CRL, rejects the handshake. OCSP is not supported. Omithttpsto keep HTTP-only behavior. You can run HTTP and HTTPS together if the ports differ, and at least one listener must stay enabled. [BKRS-285, BKRS-299, BKRS-314] - Rewriting the HTTPS
cert-file,key-file,client-ca-file, andcrl-fileat the same paths reloads TLS material about every 10 seconds without a restart. Changing the configured paths still requires a restart. [BKRS-367, BKRS-376, BKRS-314] - TLS key files for the HTTPS listener and for cluster connections can use PKCS#8 encryption, the OpenSSL 3 default, as well as legacy PEM encryption. HTTPS
client-ca-fileandcrl-filefiles can include the text thatopenssl x509 -textandopenssl crl -textprint. [BKRS-426] - Backup policy
incr-mode:differential(default) copies records changed since the last successful backup, andcumulativecopies records changed since the last successful full backup. Restore-by-timestamp with cumulative mode uses the last full backup plus the latest covering incremental. [BKRS-369] - Optional
schedule-timezoneonservice.backupand on each routine. Cron expressions default to UTC. Accepted values areUTC,Local, or an IANA name such asAmerica/New_York. Changingservice.backup.schedule-timezonerequires a restart. Backup folder names andtimestamp-formatsuffixes stay UTC. [BKRS-370, BKRS-388] - Routine
filter-expapplies a Base64-encoded Aerospike filter expression, so the backup includes only matching records. The field is mutually exclusive with a multi-setset-list. [BKRS-259] - Set indexes in a namespace are included in backup and restore together with secondary indexes, unless you set
no-indexes. This requires Aerospike Database 8.1.2 and later, which lists set indexes insindex-list. When a namespace has a set index, ABS writes the backup metadata in.asbformat version 3.3, which ABS 3.6.2 and earlier cannot read. [BKRS-334]
Improvements
- HTTP and HTTPS listeners bound
read-timeout(30s),write-timeout(60s), andidle-timeout(120s) in addition to headertimeout. Existing configurations that omit the fields pick up the new defaults. [BKRS-297] - Each namespace in a routine run is retried on its own, in a separate folder under the run’s timestamp, such as
data/NAMESPACE.2for the second attempt. A failed attempt deletes nothing, and ABS removes the folders of earlier attempts after the namespace completes. To check which namespaces a run contains, useGET /v1/backups/full/ROUTINE_NAMEor the run’smetadata.yamlfiles instead of folder names. [BKRS-405] - ABS no longer retries a backup failure that cannot succeed on retry, such as an invalid configuration, corrupt data, a missing resource, or a filter expression that the server rejects. A malformed
filter-expreports a Base64 decoding error. [BKRS-438] - A restore that sets
policy.namespaceis rejected before it starts unless every namespace in the restore matchespolicy.namespace.source. Earlier releases started the restore and then failed on records from the other namespaces. See Restore to the same namespace or a new namespace. [BKRS-438] - ABS no longer caches resolved Secret Agent values across jobs. If Secret Agent is unreachable, new jobs that need a secret fail. [BKRS-292]
- Literal secrets are redacted in structured logs and error messages. HTTP request bodies are not logged. [BKRS-333, BKRS-266, BKRS-354, BKRS-389, BKRS-398]
- HTTPS configuration with
disabled: truedoes not probe placeholder certificate paths at startup. Enabling the listener still fails if the files are missing or invalid. [BKRS-377] - The HTTP rate limiter tracks each IPv6 client by its /64 prefix and caps the number of tracked clients, so a client that rotates addresses cannot grow the limiter’s memory without bound. [BKRS-417]
- Restore job IDs are at most 253 - 1, the largest integer that JSON clients such as JavaScript represent exactly. [BKRS-448]
- When
-cnames an HTTP or HTTPS URL, fetching the configuration times out after 30 seconds. A secondSIGINTorSIGTERMduring shutdown stops ABS immediately instead of waiting for the graceful shutdown to finish. [BKRS-424]
Bug fixes
- Fixed a namespace backup failure that deleted the run folder shared by every namespace in the run. Namespaces that had already completed lost their data, and the run could be reported as successful without them. [BKRS-405]
- Fixed a routine run that waited until shutdown when a namespace backup could not start, for example because the cluster was unreachable. ABS then skipped later runs of that routine as already in progress and reported no failure. The run now fails immediately. [BKRS-407]
- Fixed retention with
retention.incremental: 0deleting an incremental backup that was still being written whenconcurrent-incrementalis enabled. Retention now deletes only completed incremental backups. [BKRS-411] - Fixed restore by timestamp for backup chains that include backups written by ABS 3.0.x, whose
metadata.yamlhas no compression setting. [BKRS-456] - Fixed cluster TLS connections when
key-file-passwordis a Secret Agent reference. ABS did not resolve the reference before it decrypted the client key, logged the error, and opened the connection without TLS. [BKRS-394] - Fixed S3 storage that uses a Secret Agent without a static
access-key-idlosing its Secret Agent setting when ABS saved and reloaded the configuration. [BKRS-419] - Fixed a deadlock between closing and opening Aerospike Database cluster connections. Closing one cluster’s connection no longer waits for another cluster to finish connecting. [BKRS-444]
- Fixed configuration changes through the API that were only partly applied when the client disconnected during the request. Memory, the configuration file, and the scheduler could then describe different configurations. ABS now finishes applying a change after it passes validation. [BKRS-424]
- Fixed
aerospike_backup_service_last_successful_backup_timestampbeing set from two sources. ABS set it from the start time of the run, and again from the backup history it reads from storage. The metric now comes only from the backup history, which ABS refreshes after each successful backup. [BKRS-327]
For additional details about fixes, improvements, and maintenance in this release, see the release page on GitHub.