{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "aerospike-clusters": { "additionalProperties": { "$ref": "#/components/schemas/dto.AerospikeCluster" }, "type": "object" }, "backup-policies": { "additionalProperties": { "$ref": "#/components/schemas/dto.BackupPolicy" }, "type": "object" }, "backup-routines": { "additionalProperties": { "$ref": "#/components/schemas/dto.BackupRoutine" }, "type": "object" }, "secret-agents": { "additionalProperties": { "$ref": "#/components/schemas/dto.SecretAgent" }, "type": "object" }, "service": { "$ref": "#/components/schemas/dto.BackupServiceConfig" }, "storage": { "additionalProperties": { "$ref": "#/components/schemas/dto.Storage" }, "type": "object" } }, "components": { "schemas": { "dto.AerospikeCluster": { "description": "AerospikeCluster represents the configuration for an Aerospike cluster for backup.", "properties": { "conn-timeout": { "description": "The connection timeout in milliseconds.", "example": 5000, "type": "integer" }, "credentials": { "allOf": [ { "$ref": "#/components/schemas/dto.Credentials" } ], "description": "The authentication details to the Aerospike cluster.", "type": "object" }, "label": { "description": "The cluster name. Optional: used only in logs and error messages.", "example": "testCluster", "type": "string" }, "max-parallel-scans": { "description": "Specifies the maximum number of parallel scans per the cluster.", "example": 100, "type": "integer" }, "seed-nodes": { "description": "The seed nodes details.", "items": { "$ref": "#/components/schemas/dto.SeedNode" }, "type": "array" }, "tls": { "allOf": [ { "$ref": "#/components/schemas/dto.TLS" } ], "description": "The cluster TLS configuration.", "type": "object" }, "use-services-alternate": { "description": "Whether should use \"services-alternate\" instead of \"services\" in info request during cluster tending.", "type": "boolean" } }, "required": [ "seed-nodes" ], "type": "object" }, "dto.AzureStorage": { "properties": { "account-key": { "description": "AccountKey is the Azure storage account key for Shared Key authentication.\nThis is sensitive information. Can be a path in secret agent or an actual value.", "type": "string" }, "account-name": { "description": "AccountName is the Azure storage account name for Shared Key authentication.", "type": "string" }, "client-id": { "description": "ClientID is the Azure Active Directory client ID for AAD authentication.", "type": "string" }, "client-secret": { "description": "ClientSecret is the Azure Active Directory client secret for AAD authentication.\nThis is sensitive information. Can be a path in secret agent or an actual value.", "type": "string" }, "container-name": { "description": "ContainerName is the name of the Azure Blob container.", "type": "string" }, "endpoint": { "description": "Endpoint is the Azure Blob service endpoint URL.", "type": "string" }, "path": { "description": "Path is the root path for the backup repository within the container.\nIf not specified, backups will be saved in the container's root.", "example": "backups", "type": "string" }, "secret-agent": { "allOf": [ { "$ref": "#/components/schemas/dto.SecretAgent" } ], "description": "Secret Agent configuration (optional).\nMutually exclusive with 'secret-agent-name'.", "type": "object" }, "secret-agent-name": { "description": "Secret Agent configuration (optional). Link to one of preconfigured agents.\nMutually exclusive with 'secret-agent'.", "type": "string" }, "storage-class": { "allOf": [ { "$ref": "#/components/schemas/dto.AzureStorageClass" } ], "description": "StorageClass defines the storage tier for data and metadata objects.", "type": "object" }, "tenant-id": { "description": "TenantID is the Azure Active Directory tenant ID for AAD authentication.", "type": "string" } }, "required": [ "container-name", "endpoint" ], "type": "object" }, "dto.AzureStorageClass": { "properties": { "data": { "description": "DataClass specifies the storage tier for object data.", "type": "string" }, "metadata": { "description": "MetadataClass specifies the storage tier for metadata.", "type": "string" } }, "type": "object" }, "dto.BackupDetails": { "description": "BackupDetails contains information about a backup.", "properties": { "byte-count": { "description": "The size of the backup in bytes.", "example": 2000, "format": "int64", "type": "integer" }, "compression": { "description": "Compression specifies the compression mode used for the backup (ZSTD or NONE).", "type": "string" }, "created": { "description": "The backup time in the ISO 8601 format.", "example": "2023-03-20T14:50:00Z", "type": "string" }, "duration": { "description": "DurationSec represents the elapsed time taken by the backup process in seconds.", "type": "integer" }, "encryption": { "description": "Encryption specifies the encryption mode used for the backup (NONE, AES128, AES256).", "type": "string" }, "file-count": { "description": "The number of backup files created.", "example": 1, "format": "int64", "type": "integer" }, "finished": { "description": "The time the backup operation completed.", "example": "2023-03-20T14:50:00Z", "type": "string" }, "from": { "description": "The lower time bound of backup entities in the ISO 8601 format (for incremental backups only).", "example": "2023-03-19T14:50:00Z", "type": "string" }, "key": { "description": "Key is the path to the backup files within the configured storage location.", "example": "daily/backup/1707915600000/source-ns1", "type": "string" }, "namespace": { "description": "The namespace of a backup.", "example": "testNamespace", "type": "string" }, "record-count": { "description": "The total number of records backed up.", "example": 100, "format": "int64", "type": "integer" }, "secondary-index-count": { "description": "The number of secondary indexes backed up.", "example": 5, "format": "int64", "type": "integer" }, "storage": { "allOf": [ { "$ref": "#/components/schemas/dto.Storage" } ], "description": "Storage specifies the details of the storage location where the backup is stored.", "type": "object" }, "timestamp": { "description": "The backup time in epoch millis.", "example": 1685458200000, "format": "int64", "type": "integer" }, "udf-count": { "description": "The number of UDF files backed up.", "example": 2, "format": "int64", "type": "integer" } }, "type": "object" }, "dto.BackupPolicy": { "description": "BackupPolicy represents a scheduled backup policy.", "properties": { "bandwidth": { "description": "Throttles backup write speed to a maximum of the specified bandwidth in MiB/s.\nDefault is no limit.", "example": 10000, "type": "integer" }, "compression": { "allOf": [ { "$ref": "#/components/schemas/dto.CompressionPolicy" } ], "description": "Compression details (algorithm and mode). Default is no compression.\nEnabling compression reduces storage and network usage, but increases CPU usage during the backup.\nDepending on the system configuration, compression may improve or degrade overall performance.", "type": "object" }, "concurrent-incremental": { "description": "Allows incremental backups to run concurrently.\nWhen false (default), incremental backups are skipped if another backup for same routine is in progress.", "type": "boolean" }, "encryption": { "allOf": [ { "$ref": "#/components/schemas/dto.EncryptionPolicy" } ], "description": "Encryption details (algorithm and key). Default is no encryption.", "type": "object" }, "file-limit": { "description": "File size limit (in MB) for the backup directory. If an .asb backup file crosses this size threshold,\na new backup file will be created. Default is 250 MB.", "example": 1024, "type": "integer" }, "no-indexes": { "description": "Do not back up any secondary index definitions. Default: false.", "type": "boolean" }, "no-records": { "description": "Do not back up any record data (metadata or bin data). Default: false.", "type": "boolean" }, "no-udfs": { "description": "Do not back up any UDF modules. Default: false.", "type": "boolean" }, "parallel": { "description": "Maximum number of scan calls to run in parallel. Each scan call processes a subset of the total\ndata partitions. The optimal value depends on hardware and network configuration.\nDefault: 8.", "example": 1, "type": "integer" }, "records-per-second": { "description": "Limits the number of records returned per second (RPS). Default is no limit.", "example": 1000, "type": "integer" }, "retention": { "allOf": [ { "$ref": "#/components/schemas/dto.RetentionPolicy" } ], "description": "Specifies how long to retain full and incremental backups.\nCleanup runs asynchronously after each successful full backup, never deleting backups preemptively.\nEnsure storage capacity for at least one extra full backup beyond the retention configuration.", "type": "object" }, "retry-policy": { "allOf": [ { "$ref": "#/components/schemas/dto.RetryPolicy" } ], "description": "RetryPolicy defines the configuration for database scan retry attempts in case of failures.\nIf nil, the default policy is used (5 retries with a one-minute delay between attempts).", "type": "object" }, "sealed": { "description": "Sealed determines whether backup should include keys updated during the backup process.\nWhen true, the backup contains only records that last modified before backup started.\nWhen false (default), records updated during backup might be included in the backup, but it's not guaranteed.\nThis parameter does not affect XDR backups (which always includes all keys).", "type": "boolean" }, "socket-timeout": { "description": "Socket timeout in milliseconds. Default is 10 minutes. If this value is 0, it is set to total-timeout.\nIf both are 0, there is no socket idle time limit.", "example": 1000, "type": "integer" }, "total-timeout": { "description": "Total socket timeout in milliseconds. Default is 0, that is, no timeout.", "example": 2000, "type": "integer" }, "with-cluster-configuration": { "description": "Back up Aerospike cluster configuration. Default: false.", "type": "boolean" } }, "type": "object" }, "dto.BackupRoutine": { "description": "BackupRoutine represents a scheduled backup operation routine.", "properties": { "backup-policy": { "description": "The name of the corresponding backup policy (optional).", "type": "string" }, "bin-list": { "description": "The list of backup bin names (optional, an empty list implies backing up all bins).", "example": [ "dataBin" ], "items": { "type": "string" }, "type": "array" }, "disabled": { "description": "Whether this routine is disabled and should not run. Default: false.", "type": "boolean" }, "incr-interval-cron": { "description": "The interval for incremental backup as a cron expression string (optional).", "example": "*/10 * * * * *", "type": "string" }, "interval-cron": { "description": "The interval for full backup as a cron expression string.\nCron expression format: https://github.com/reugn/go-quartz?tab=readme-ov-file#cron-expression-format", "example": "0 0 * * * *", "type": "string" }, "namespaces": { "description": "The list of the namespaces to back up (optional, empty list implies backup up whole cluster).", "example": [ "source-ns1" ], "items": { "type": "string" }, "type": "array" }, "node-list": { "description": "NodeList specifies which Aerospike nodes to include in the backup.\nOnly the listed nodes will be backed up.\nEach node can be specified as one of the following:\n- \":\"\n- \":\"\n- \"\"\nTo obtain node identifiers, run: `asinfo -v \"service:\"`.\nIf using IP addresses or hostnames, ensure they match the values returned by the `asinfo` command.\nThis field is mutually exclusive with partition-list.\nParallelism is determined by the number of listed nodes unless `BackupPolicy.Parallel` is set to a lower value.", "items": { "type": "string" }, "type": "array" }, "partition-list": { "description": "PartitionList defines the list of partitions to include in the backup.\nThe format supports individual partitions or ranges.\n- A range is specified as \",\" (e.g., \"100,50\" backs up 50 partitions starting from 100).\n- A single partition is specified as a number (e.g., \"0\").\nMultiple entries can be comma-separated: e.g., \"0,100,200,300,400,500\".\nBy default, all partitions (0 to 4095) are backed up.\nThis field is mutually exclusive with node-list.", "type": "string" }, "prefer-racks": { "description": "PreferRacks specifies a list of Aerospike Server rack IDs to prioritize when reading records during backup.\nThis is optional and can be used to optimize for rack-aware deployments.", "example": [ 0 ], "items": { "type": "integer" }, "type": "array" }, "secret-agent": { "description": "The Secret Agent configuration for the routine (optional).", "example": "sa", "type": "string" }, "set-list": { "description": "The list of backup set names (optional, an empty list implies backing up all sets).", "example": [ "set1" ], "items": { "type": "string" }, "type": "array" }, "source-cluster": { "description": "The name of the corresponding source cluster.", "example": "testCluster", "type": "string" }, "storage": { "description": "The name of the corresponding storage provider configuration.", "example": "aws", "type": "string" } }, "required": [ "interval-cron", "source-cluster", "storage" ], "type": "object" }, "dto.BackupServiceConfig": { "description": "BackupServiceConfig represents the backup service configuration properties.", "properties": { "http": { "allOf": [ { "$ref": "#/components/schemas/dto.HTTPServerConfig" } ], "description": "HTTPServer is the backup service HTTP server configuration.", "type": "object" }, "logger": { "allOf": [ { "$ref": "#/components/schemas/dto.LoggerConfig" } ], "description": "Logger is the backup service logger configuration.", "type": "object" } }, "type": "object" }, "dto.CompressionPolicy": { "description": "CompressionPolicy contains backup compression information.", "properties": { "level": { "description": "The compression level to use.\nAlgorithm-specific; for zstd: from -1 (fastest) to 22 (best compression).", "type": "integer" }, "mode": { "default": "NONE", "description": "The compression mode to be used (default is NONE).", "enum": [ "NONE", "ZSTD" ], "type": "string" } }, "type": "object" }, "dto.Credentials": { "description": "Credentials represents authentication details to the Aerospike cluster.", "properties": { "auth-mode": { "description": "The authentication mode string (INTERNAL, EXTERNAL, PKI).", "enum": [ "INTERNAL", "EXTERNAL", "PKI" ], "type": "string" }, "password": { "description": "The password for the cluster authentication.\nIt can be either plain text or path into the secret agent.", "example": "testPswd", "type": "string" }, "password-path": { "description": "The file path with the password string.", "example": "/path/to/pass.txt", "type": "string" }, "secret-agent": { "allOf": [ { "$ref": "#/components/schemas/dto.SecretAgent" } ], "description": "Secret Agent configuration (optional).\nMutually exclusive with 'secret-agent-name'.", "type": "object" }, "secret-agent-name": { "description": "Secret Agent configuration (optional). Link to one of preconfigured agents.\nMutually exclusive with 'secret-agent'.", "type": "string" }, "user": { "description": "The username for the cluster authentication.", "example": "testUser", "type": "string" } }, "type": "object" }, "dto.EncryptionPolicy": { "description": "EncryptionPolicy contains backup encryption information.", "properties": { "key-env": { "description": "The name of the environment variable containing the encryption key.", "type": "string" }, "key-file": { "description": "The path to the file containing the encryption key.", "type": "string" }, "key-secret": { "description": "The secret keyword in Aerospike Secret Agent containing the encryption key.", "type": "string" }, "mode": { "default": "NONE", "description": "The encryption mode to be used (NONE, AES128, AES256)", "enum": [ "NONE", "AES128", "AES256" ], "type": "string" } }, "type": "object" }, "dto.FileLoggerConfig": { "description": "FileLoggerConfig represents the configuration for the file logger writer.", "properties": { "compress": { "default": false, "description": "Compress determines if the rotated log files should be compressed\nusing gzip. The default is not to perform compression.", "type": "boolean" }, "filename": { "description": "Filename is the file to write logs to.", "example": "log.txt", "type": "string" }, "maxage": { "description": "MaxAge is the maximum number of days to retain old log files based on the\ntimestamp encoded in their filename. The default is not to remove old log files\nbased on age.", "type": "integer" }, "maxbackups": { "description": "MaxBackups is the maximum number of old log files to retain. The default\nis to retain all old log files.", "type": "integer" }, "maxsize": { "description": "MaxSize is the maximum size in megabytes of the log file before it gets rotated.", "example": 100, "type": "integer" } }, "type": "object" }, "dto.GcpStorage": { "properties": { "bucket-name": { "description": "GCP storage bucket name.", "type": "string" }, "endpoint": { "description": "Alternative url.\nIt is not recommended to use an alternate URL in a production environment.", "type": "string" }, "key": { "description": "Key is the service account key in JSON format.\nThis is sensitive information. Can be a path in secret agent or an actual value.", "type": "string" }, "key-file-path": { "description": "Path to the file containing the service account key in JSON format.", "type": "string" }, "path": { "description": "The root path for the backup repository. If not specified, backups will be saved in the bucket's root.", "example": "backups", "type": "string" }, "secret-agent": { "allOf": [ { "$ref": "#/components/schemas/dto.SecretAgent" } ], "description": "Secret Agent configuration (optional).\nMutually exclusive with 'secret-agent-name'.", "type": "object" }, "secret-agent-name": { "description": "Secret Agent configuration (optional). Link to one of preconfigured agents.\nMutually exclusive with 'secret-agent'.", "type": "string" }, "storage-class": { "allOf": [ { "$ref": "#/components/schemas/dto.GcpStorageClass" } ], "description": "StorageClass defines the storage class for data and metadata objects.", "type": "object" } }, "required": [ "bucket-name" ], "type": "object" }, "dto.GcpStorageClass": { "properties": { "data": { "description": "DataClass specifies the storage class for object data.", "type": "string" } }, "type": "object" }, "dto.HTTPServerConfig": { "description": "HTTPServerConfig represents the service's HTTP server configuration.", "properties": { "address": { "default": "0.0.0.0", "description": "The address to listen on.", "example": "0.0.0.0", "type": "string" }, "context-path": { "default": "/", "description": "ContextPath customizes path for the API endpoints.", "type": "string" }, "port": { "description": "The port to listen on.", "example": 8080, "type": "integer" }, "rate": { "allOf": [ { "$ref": "#/components/schemas/dto.RateLimiterConfig" } ], "description": "HTTP rate limiter configuration.", "type": "object" }, "timeout": { "description": "Timeout for http server operations in milliseconds.", "type": "integer" } }, "type": "object" }, "dto.JobStatus": { "enum": [ "Running", "Done", "Failed", "Cancelled" ], "type": "string", "x-enum-varnames": [ "JobStatusRunning", "JobStatusDone", "JobStatusFailed", "JobStatusCancelled" ] }, "dto.LocalStorage": { "properties": { "path": { "description": "The root path for the backup repository.", "example": "backups", "type": "string" } }, "required": [ "path" ], "type": "object" }, "dto.LoggerConfig": { "description": "LoggerConfig represents the backup service logger configuration.", "properties": { "file-writer": { "allOf": [ { "$ref": "#/components/schemas/dto.FileLoggerConfig" } ], "description": "File writer logging configuration.", "type": "object" }, "format": { "default": "PLAIN", "description": "Format is the logger format (PLAIN, JSON).", "enum": [ "PLAIN", "JSON" ], "type": "string" }, "level": { "default": "DEBUG", "description": "Level is the logger level.", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "WARNING", "ERROR" ], "type": "string" }, "stdout-writer": { "default": true, "description": "Whether to enable logging to the standard output.", "type": "boolean" } }, "type": "object" }, "dto.Metrics": { "description": "Metrics represents the current job speed.", "properties": { "kilobytes-per-second": { "description": "KilobytesPerSecond indicates the amount of data processed per second, in kilobytes.", "type": "integer" }, "pipeline": { "description": "Pipeline represents the number of records that have been read from the source\nbut not yet written to the destination. This metric helps identify bottlenecks:\n- If Pipeline is zero or fluctuates near zero, it means the destination is consuming data\n faster than the source can read.\n- If Pipeline grows large, it indicates that the source is producing data faster\n than the destination can consume.", "type": "integer" }, "records-per-second": { "description": "RecordsPerSecond indicates the number of records processed per second.", "type": "integer" } }, "type": "object" }, "dto.RateLimiterConfig": { "description": "RateLimiterConfig is the HTTP server rate limiter configuration.", "properties": { "size": { "description": "Rate limiter token bucket size (bursts threshold).", "example": 1024, "type": "integer" }, "tps": { "description": "Rate limiter tokens per second threshold.", "example": 1024, "type": "integer" }, "white-list": { "description": "The list of ips to whitelist in rate limiting.", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "dto.RestoreJobStatus": { "description": "RestoreJobStatus represents a restore job status.", "properties": { "current-job": { "$ref": "#/components/schemas/dto.RunningJob" }, "error": { "type": "string" }, "errors-in-doubt": { "description": "The number of errors in doubt while restoring.\n(IsInDoubt signifies that the write operation may have gone through on the server\nbut the client is not able to confirm that due an error.)\nNon zero value indicates that there are might be unexpected side effects during restore, like\n* Generation counter greater than expected for some records.\n* Fresher records counter greater than expected.", "example": 7, "format": "int64", "type": "integer" }, "existed-records": { "example": 15, "format": "int64", "type": "integer" }, "expired-records": { "example": 2, "format": "int64", "type": "integer" }, "fresher-records": { "example": 5, "format": "int64", "type": "integer" }, "ignored-records": { "example": 12, "format": "int64", "type": "integer" }, "index-count": { "example": 3, "format": "int64", "type": "integer" }, "inserted-records": { "example": 8, "format": "int64", "type": "integer" }, "read-records": { "example": 10, "format": "int64", "type": "integer" }, "skipped-records": { "example": 4, "format": "int64", "type": "integer" }, "status": { "$ref": "#/components/schemas/dto.JobStatus" }, "total-bytes": { "example": 2000, "format": "int64", "type": "integer" }, "udf-count": { "example": 1, "format": "int64", "type": "integer" } }, "type": "object" }, "dto.RestoreNamespace": { "description": "RestoreNamespace specifies an alternative namespace name for the restore operation.", "properties": { "destination": { "description": "Name of the destination namespace to restore data into.", "example": "destination-ns", "type": "string" }, "source": { "description": "Original namespace name.\nThis field is required as a safeguard to ensure intentional namespace remapping.", "example": "source-ns", "type": "string" } }, "required": [ "destination", "source" ], "type": "object" }, "dto.RestorePolicy": { "description": "RestorePolicy represents a policy for the restore operation.", "properties": { "bandwidth": { "description": "Throttles read operations from the backup file(s) to not exceed the given I/O bandwidth in bytes/sec.", "example": 50000, "type": "integer" }, "batch-size": { "description": "The max allowed number of records per an async batch write call.\nOnly applicable when using batch writes.\nDefault: 128.", "example": 128, "type": "integer" }, "bin-list": { "description": "The bins to restore (optional, an empty list implies restoring all bins).", "example": [ "bin1", "bin2" ], "items": { "type": "string" }, "type": "array" }, "compression": { "allOf": [ { "$ref": "#/components/schemas/dto.CompressionPolicy" } ], "description": "Compression details (algorithm). Default is no compression.", "type": "object" }, "disable-batch-writes": { "description": "Disables the use of batch writes when restoring records to the Aerospike cluster.\nBy default, the cluster is checked for batch write support.", "type": "boolean" }, "encryption": { "allOf": [ { "$ref": "#/components/schemas/dto.EncryptionPolicy" } ], "description": "Encryption details (algorithm and key). Default is no encryption.", "type": "object" }, "extra-ttl": { "description": "Amount of extra time-to-live to add to records that have expirable void-times.\nMust be set in seconds.", "example": 86400, "type": "integer" }, "max-async-batches": { "description": "The max number of outstanding async record batch write calls at a time.", "example": 32, "type": "integer" }, "namespace": { "allOf": [ { "$ref": "#/components/schemas/dto.RestoreNamespace" } ], "description": "Namespace optionally specifies an alternative namespace name for the restore operation.\nBy default, the data is restored to the namespace from which it was taken.", "type": "object" }, "no-generation": { "description": "Records from backups take precedence. This option disables the generation check.\nWith this option, records from the backup always overwrite records that already exist in\nthe namespace, regardless of generation numbers.", "type": "boolean" }, "no-indexes": { "description": "Do not restore any secondary index definitions.", "type": "boolean" }, "no-records": { "description": "Do not restore any record data (metadata or bin data).\nBy default, record data, secondary index definitions, and UDF modules will be restored.", "type": "boolean" }, "no-udfs": { "description": "Do not restore any UDF modules.", "type": "boolean" }, "parallel": { "description": "The number of concurrent record readers from backup files.\nThis value controls the level of parallelism used by the backup service when\nreading backup files.\nThe optimal value depends on hardware and network configuration.\nDefault: 8.", "example": 8, "type": "integer" }, "replace": { "description": "Replace records. This controls how records from the backup overwrite existing records in\nthe namespace. By default, restoring a record from a backup only replaces the bins\ncontained in the backup; all other bins of an existing record remain untouched.", "type": "boolean" }, "retry-policy": { "allOf": [ { "$ref": "#/components/schemas/dto.RetryPolicy" } ], "description": "Configuration of retries for each restore write operation.\nIf nil, the default policy is used (5 retries with a one-minute delay between attempts).", "type": "object" }, "set-list": { "description": "The sets to restore (optional, an empty list implies restoring all sets).", "example": [ "set1", "set2" ], "items": { "type": "string" }, "type": "array" }, "socket-timeout": { "description": "Timeout (ms) for Aerospike commands to write records, create indexes and create UDFs.\nSocket timeout in milliseconds. Default is 10 minutes. If this value is 0, it is set to total-timeout.\nIf both are 0, there is no socket idle time limit.", "example": 1000, "type": "integer" }, "total-timeout": { "description": "Total socket timeout in milliseconds. Default is 0, that is, no timeout.", "example": 2000, "type": "integer" }, "tps": { "description": "Throttles read operations from the backup file(s) to not exceed the given number of transactions\nper second.", "example": 4000, "type": "integer" }, "unique": { "description": "Existing records take precedence. With this option, only records that do not exist in\nthe namespace are restored, regardless of generation numbers. If a record exists in\nthe namespace, the record from the backup is ignored.", "type": "boolean" } }, "type": "object" }, "dto.RestoreRequest": { "description": "RestoreRequest represents a restore operation request.", "properties": { "backup-data-path": { "description": "Path to the data from storage root.", "type": "string" }, "destination": { "allOf": [ { "$ref": "#/components/schemas/dto.AerospikeCluster" } ], "description": "The details of the Aerospike destination cluster.\nMutually exclusive with 'destination-name'.", "type": "object" }, "destination-name": { "description": "Link to one of preconfigured clusters.\nMutually exclusive with 'destination'.", "type": "string" }, "policy": { "allOf": [ { "$ref": "#/components/schemas/dto.RestorePolicy" } ], "description": "Restore policy to use in the operation.", "type": "object" }, "secret-agent": { "allOf": [ { "$ref": "#/components/schemas/dto.SecretAgent" } ], "description": "Secret Agent configuration (optional).\nMutually exclusive with 'secret-agent-name'.", "type": "object" }, "secret-agent-name": { "description": "Secret Agent configuration (optional). Link to one of preconfigured agents.\nMutually exclusive with 'secret-agent'.", "type": "string" }, "source": { "allOf": [ { "$ref": "#/components/schemas/dto.Storage" } ], "description": "The details of the storage configuration.\nMutually exclusive with 'source-name'.", "type": "object" }, "source-name": { "description": "Link to one of preconfigured storages.\nMutually exclusive with 'source'.", "type": "string" } }, "required": [ "backup-data-path" ], "type": "object" }, "dto.RestoreTimestampRequest": { "description": "RestoreTimestampRequest represents a restore by timestamp operation request.", "properties": { "destination": { "allOf": [ { "$ref": "#/components/schemas/dto.AerospikeCluster" } ], "description": "The details of the Aerospike destination cluster.\nMutually exclusive with 'destination-name'.", "type": "object" }, "destination-name": { "description": "Link to one of preconfigured clusters.\nMutually exclusive with 'destination'.", "type": "string" }, "disable-reordering": { "description": "Disable reverse order of incremental backups optimisation.", "type": "boolean" }, "policy": { "allOf": [ { "$ref": "#/components/schemas/dto.RestorePolicy" } ], "description": "Restore policy to use in the operation.", "type": "object" }, "routine": { "description": "The backup routine name.", "example": "daily", "type": "string" }, "secret-agent": { "allOf": [ { "$ref": "#/components/schemas/dto.SecretAgent" } ], "description": "Secret Agent configuration (optional).\nMutually exclusive with 'secret-agent-name'.", "type": "object" }, "secret-agent-name": { "description": "Secret Agent configuration (optional). Link to one of preconfigured agents.\nMutually exclusive with 'secret-agent'.", "type": "string" }, "source": { "allOf": [ { "$ref": "#/components/schemas/dto.Storage" } ], "description": "The details of the storage configuration.\nMutually exclusive with 'source-name'.", "type": "object" }, "source-name": { "description": "Link to one of preconfigured storages.\nMutually exclusive with 'source'.", "type": "string" }, "time": { "description": "Required epoch time for recovery. The closest backup before the timestamp will be applied.", "example": 1739538000000, "format": "int64", "type": "integer" } }, "required": [ "routine", "time" ], "type": "object" }, "dto.RetentionPolicy": { "properties": { "full": { "description": "Number of full backups to store:\n- If nil, retain all full backups.\n- If N is specified, retain the last N full backups.\n- The minimum value is 1.", "type": "integer" }, "incremental": { "description": "Number of full backups to store incremental backups for:\n- If nil, retain all incremental backups.\n- If N is specified, retain incremental backups for the last N full backups.\n- If set to 0, do not retain any incremental backups.\n- Must not exceed the value of FullBackups.", "type": "integer" } }, "type": "object" }, "dto.RetryPolicy": { "description": "RetryPolicy defines the configuration for retry attempts in case of failures.", "properties": { "base-timeout": { "description": "BaseTimeout is the initial delay between retry attempts, in milliseconds.", "type": "integer" }, "max-retries": { "description": "MaxRetries is the maximum number of retry attempts that will be made.\nIf set to 0, no retries will be performed.", "type": "integer" }, "multiplier": { "description": "Multiplier is used to increase the delay between subsequent retry attempts.\nThe actual delay is calculated as: BaseTimeout * (Multiplier ^ attemptNumber)", "type": "number" } }, "type": "object" }, "dto.RoutineState": { "description": "RoutineState represent the current state of backups (full and incremental).", "properties": { "full": { "allOf": [ { "$ref": "#/components/schemas/dto.RunningJob" } ], "description": "Full represents the state of a full backup. Nil if no full backup is running.", "type": "object" }, "incremental": { "allOf": [ { "$ref": "#/components/schemas/dto.RunningJob" } ], "description": "Incremental represents the state of an incremental backup. Nil if no incremental backup is running.", "type": "object" }, "last-full": { "description": "LastFull: the time of the last successful full backup.\nA nil value indicates that there has never been a full backup.", "type": "string" }, "last-incremental": { "description": "LastIncremental: the time of the last successful incremental backup.\nA nil value indicates that there has never been an incremental backup.", "type": "string" }, "next-full": { "description": "NextFull: the time of the next scheduled full backup.", "type": "string" }, "next-incremental": { "description": "NextIncremental: the time of the next scheduled incremental backup.", "type": "string" } }, "type": "object" }, "dto.RunningJob": { "description": "RunningJob tracks progress of currently running job.", "properties": { "done-records": { "description": "DoneRecords: the number of records that have been successfully done.", "example": 50, "type": "integer" }, "estimated-end-time": { "description": "EstimatedEndTime: the estimated time when the backup operation will be completed.\nA nil value indicates that the estimation is not available yet.", "example": "2006-01-02T15:04:05Z07:00", "type": "string" }, "finish-time": { "description": "FinishTime: the time when the operation finished", "example": "2006-01-02T15:04:05Z07:00", "type": "string" }, "metrics": { "allOf": [ { "$ref": "#/components/schemas/dto.Metrics" } ], "description": "Metrics provides real-time information about data flow performance.", "type": "object" }, "percentage-done": { "description": "PercentageDone: the progress of the backup operation as a percentage.", "example": 50, "type": "integer" }, "start-time": { "description": "StartTime: the time when the operation started.", "example": "2006-01-02T15:04:05Z07:00", "type": "string" }, "total-records": { "description": "TotalRecords: the total number of records to be processed.", "example": 100, "type": "integer" } }, "type": "object" }, "dto.S3Storage": { "properties": { "access-key-id": { "description": "Access Key ID for authentication with S3 StaticCredentialsProvider.\nThis is sensitive information. Can be a path in secret agent or an actual value.", "type": "string" }, "bucket": { "description": "The S3 bucket name.", "type": "string" }, "max-async-connections": { "description": "The maximum number of simultaneous requests from S3.", "example": 16, "type": "integer" }, "min-part-size": { "description": "The minimum size in bytes of individual S3 UploadParts.", "example": 10, "type": "integer" }, "path": { "description": "The root path for the backup repository within the bucket.\nIf not specified, backups will be saved in the bucket's root.", "example": "backups", "type": "string" }, "s3-endpoint-override": { "description": "An alternative endpoint for the S3 SDK to communicate (AWS S3 optional).", "example": "http://host.docker.internal:9000", "type": "string" }, "s3-log-level": { "default": "FATAL", "description": "The log level of the AWS S3 SDK (AWS S3 optional).", "type": "string" }, "s3-profile": { "description": "The S3 profile name (AWS S3 optional).", "example": "default", "type": "string" }, "s3-region": { "description": "The S3 region string.", "example": "eu-central-1", "type": "string" }, "secret-access-key": { "description": "Secret Access Key for authentication with S3 StaticCredentialsProvider.\nThis is sensitive information. Can be a path in secret agent or an actual value.", "type": "string" }, "secret-agent": { "allOf": [ { "$ref": "#/components/schemas/dto.SecretAgent" } ], "description": "Secret Agent configuration (optional).\nMutually exclusive with 'secret-agent-name'.", "type": "object" }, "secret-agent-name": { "description": "Secret Agent configuration (optional). Link to one of preconfigured agents.\nMutually exclusive with 'secret-agent'.", "type": "string" }, "storage-class": { "allOf": [ { "$ref": "#/components/schemas/dto.S3StorageClass" } ], "description": "StorageClass defines the storage class for data and metadata objects.", "type": "object" } }, "required": [ "bucket", "s3-region" ], "type": "object" }, "dto.S3StorageClass": { "description": "S3StorageClass represents the configuration for S3 Storage Class.", "properties": { "data": { "description": "DataClass specifies the storage class for object data.", "type": "string" }, "metadata": { "description": "MetadataClass specifies the storage class for metadata.", "type": "string" } }, "type": "object" }, "dto.SecretAgent": { "description": "SecretAgent represents the configuration of an Aerospike Secret Agent.", "properties": { "address": { "description": "Address of the Secret Agent.", "example": "localhost", "type": "string" }, "connection-type": { "description": "Connection type: tcp, unix.", "example": "tcp", "type": "string" }, "is-base64": { "description": "Flag that shows if secret agent responses are encrypted with base64.", "example": false, "type": "boolean" }, "port": { "description": "Port the Secret Agent is running on.", "example": 8080, "type": "integer" }, "timeout": { "description": "Timeout in milliseconds.", "example": 5000, "type": "integer" }, "tls-ca-file": { "description": "The path to a trusted CA certificate file in PEM format.", "example": "/path/to/ca.pem", "type": "string" } }, "required": [ "address" ], "type": "object" }, "dto.SeedNode": { "description": "SeedNode represents details of a node in the Aerospike cluster.", "properties": { "host-name": { "description": "The host name of the node.", "example": "localhost", "type": "string" }, "port": { "description": "The port of the node.", "example": 3000, "maximum": 65535, "minimum": 1, "type": "integer" }, "tls-name": { "description": "TLS certificate name used for secure connections (if enabled).", "example": "certName", "type": "string" } }, "required": [ "host-name", "port" ], "type": "object" }, "dto.Storage": { "description": "Storage represents the configuration for a backup storage details.", "properties": { "azure-storage": { "allOf": [ { "$ref": "#/components/schemas/dto.AzureStorage" } ], "description": "AzureStorage configuration, set if using Azure storage.", "type": "object" }, "gcp-storage": { "allOf": [ { "$ref": "#/components/schemas/dto.GcpStorage" } ], "description": "GcpStorage configuration, set if using GCP storage.", "type": "object" }, "local-storage": { "allOf": [ { "$ref": "#/components/schemas/dto.LocalStorage" } ], "description": "LocalStorage configuration, set if using local storage.", "type": "object" }, "s3-storage": { "allOf": [ { "$ref": "#/components/schemas/dto.S3Storage" } ], "description": "S3Storage configuration, set if using S3 storage.", "type": "object" } }, "type": "object" }, "dto.TLS": { "description": "TLS represents the Aerospike cluster TLS configuration options.", "properties": { "ca-file": { "description": "Path to a trusted CA certificate file.", "example": "/path/to/cafile.pem", "type": "string" }, "ca-path": { "description": "Path to a directory of trusted CA certificates.", "example": "/path/to/ca", "type": "string" }, "cert-file": { "description": "Path to the chain file for mutual authentication (if Aerospike Cluster supports it).", "example": "/path/to/certfile.pem", "type": "string" }, "cipher-suite": { "description": "TLS cipher selection criteria. The format is the same as OpenSSL's Cipher List Format.", "example": "ECDHE-ECDSA-AES256-GCM-SHA384", "type": "string" }, "key-file": { "description": "Path to the key for mutual authentication (if Aerospike cluster supports it).", "example": "/path/to/keyfile.pem", "type": "string" }, "key-file-password": { "description": "Password to load protected TLS-keyfile (env:VAR, file:PATH, PASSWORD).", "example": "file:/path/to/password", "type": "string" }, "name": { "description": "The default TLS name used to authenticate each TLS socket connection.", "example": "tls-name", "type": "string" }, "protocols": { "description": "TLS protocol selection criteria. This format is the same as Apache's SSL Protocol.", "example": "TLSv1.2", "type": "string" } }, "type": "object" } } } }