For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Blog
DocsAPI Reference
DocsAPI Reference
    • AIStore
    • Documentation
  • Core Documentation
    • In-depth Overview
    • Terminology and core abstractions
    • Getting Started
    • Networking model
    • Buckets: design, operations, namespaces, and system buckets
    • Observability overview
    • CLI overview
    • Production deployment
    • Technical Blog
  • APIs, SDKs, and Compatibility
    • Go API
    • Python SDK
    • PyPI package
    • Python SDK reference guide
    • PyTorch integration
    • TensorFlow integration
    • HTTP API reference
    • curl examples
    • Easy URL
    • S3 compatibility
    • s3cmd quick start
    • Presigned S3 requests
    • Boto3 support
  • Command-Line Interface
    • CLI overview
    • ais help
    • CLI reference guide
    • Bucket operations
    • Cluster and remote-cluster management
    • Storage and mountpath management
    • Monitoring and ais show
    • Downloads
    • Jobs
    • Authentication and access control
    • Configuration via CLI
    • ETL CLI
    • Distributed shuffle CLI
    • ML / get-batch CLI
    • GCP credentials
    • TLS certificate management
  • Storage and Data Management
    • Storage services
    • Buckets: design, operations, namespaces, and system buckets
    • Native Bucket Inventory (NBI)
    • Backend providers
    • On-disk layout
    • Virtual directories
    • System files
    • Evicting remote buckets and cached data
  • Cluster Operations
    • Node lifecycle: maintenance, shutdown, decommission
    • Global rebalance
    • Resilver
    • AIS in Containerized Environments
    • Highly available control plane
    • Information Center (IC)
    • Out-of-band updates
    • Troubleshooting
  • Configuration and Security
    • Configuration
    • Environment variables
    • Feature flags
    • AuthN and access control
    • Authentication validation
    • HTTPS and certificates
    • Switching a cluster to HTTPS
  • ETL and Advanced Workflows
    • ETL overview
    • ETL CLI docs
    • ETL Python SDK examples
    • Custom transformers
    • ETL Python webserver SDK
    • ETL Go webserver package
    • Archives: read, write, and list
    • Distributed shuffle (dsort)
    • Initial sharding utility (ishard)
    • Downloader
    • Blob Downloader
    • Batch object retrieval (get-batch)
    • Batch operations
    • Tools and utilities
    • Extended actions (xactions)
  • Observability, Monitoring, and Performance
    • Observability overview
    • Monitoring with CLI
    • Logs
    • Prometheus integration
    • Metrics reference
    • Grafana dashboards
    • Kubernetes monitoring
    • Distributed tracing
    • Monitoring get-batch
    • AIS load generator (aisloader)
    • Benchmarking AIStore
    • Performance tuning and testing
    • Performance monitoring via CLI
    • Rate limiting
    • Checksumming
    • Filesystem Health Checker (FSHC)
    • Traffic patterns
  • Networking
    • Networking: multi-homing, network separation, IPv6
    • HTTPS configuration
    • Switching to HTTPS
    • Idle connections
    • MessagePack protocol
  • Deployment
    • AIStore on Kubernetes
    • Kubernetes Operator
    • Ansible playbooks
    • Helm charts
    • Deployment monitoring
    • Docker
  • Developer Resources
    • Development guide
    • aisnode command line
    • Build tags
  • Object and Bucket Naming
    • Unicode and special symbols in object and bucket names
    • Extremely long object names
Blog
NVIDIANVIDIA
Developer-friendly docs for your API
Privacy Policy | Your Privacy Choices | Terms of Service | Accessibility | Corporate Policies | Product Security | Contact

Copyright © 2026, NVIDIA Corporation.

LogoLogoAIStore
On this page
  • Example
  • Out-of-band updates
  • Lesser scope
  • See also
  • Out-of-band writes, deletes and more
  • When reading in-cluster data causes deletion
  • GET latest version
  • References
Cluster Operations

Out-of-band updates

||View as Markdown|
Previous

Information Center (IC)

Next

Troubleshooting

Table of Contents

  • Example
  • Out-of-band updates
  • Lesser scope
  • Out-of-band writes, deletes and more
  • When reading in-cluster data causes deletion
  • GET latest version
  • References

There are multiple ways to fully synchronize in-cluster content with remote backend. Let’s first take a look at the following ais cp and ais prefetch examples:

Example

1$ ais cp s3://BUCKET s3://BUCKET --prefix PREFIX --num-workers 64 --sync

Notice the --sync option.

Alternatively, to fully synchronize in-cluster content (and since “prefetch” typically does not imply any deletions) we can also use ais evict followed by ais prefetch:

1## run "evict" and wait for the job to finish; optionally use `--wait` option
2##
3$ ais evict BUCKET[/PREFIX] --keep-md
4
5## optionally, `ais ls` to show that nothing is "cached"
6##
7$ ais ls BUCKET[/PREFIX] --cached
8
9## no need to use `--latest` option (redundant and slowing-down).
10##
11$ ais prefetch BUCKET[/PREFIX] --num-workers 64 --blob-threshold 1GiB

Notice the --keep-md option above.

TIP: always a good idea to check --help for the most recent updates.

Out-of-band updates

One (but not the only one) way to deal with out-of-band updates is to configure bucket as follows:

1$ ais bucket props set s3://abc versioning.validate_warm_get true
2"versioning.validate_warm_get" set to: "true" (was: "false")

Here, s3://abc is presumably an Amazon S3 bucket, but it could be any Cloud or remote AIS bucket.

It could also be any ais:// bucket with Cloud or remote AIS backend. For usage, see backend_bck option in CLI documentation and examples.

Once validate_warm_get is set, any read operation on the bucket will take a bit of extra time to compare the in-cluster metadata with its remote counterpart.

Further, if and when this comparison fails, aistore performs a cold GET, to create a new copy of the remote object and make sure that the cluster has the latest version.

Needless to say, the latest version will be always returned to the user as well.

Lesser scope

But sometimes, we may want to perform a single given operation without updating bucket configuration. For instance:

1$ ais prefetch s3://abc --latest
2
3prefetch-objects[f70MKzP63]: prefetch entire bucket s3://abc. To monitor the progress, run 'ais show job f70MKzP63'

Notice the --latest switch above. As far as this particular prefetch is concerned --latest will have the same effect as setting versioning.validate_warm_get=true. But only “as far” - the scope of validating in-cluster versions will be limited to this specific batch job.

The same applies to copying buckets and copying ranges and lists of objects, and certainly getting (as in GET) individual objects.

Here’s the an excerpt from GET help (and note --latest below):

1$ ais get --help
2
3USAGE:
4 ais get BUCKET[/OBJECT_NAME] [OUT_FILE|OUT_DIR|-] [command options]
5
6OPTIONS:
7 --offset value object read offset; must be used together with '--length'; default formatting: IEC (use '--units' to override)
8 --length value object read length; default formatting: IEC (use '--units' to override)
9 --checksum validate checksum
10 --yes, -y assume 'yes' to all questions
11 --check-cached instead of GET execute HEAD(object) to check if the object is present in aistore
12 (applies only to buckets with remote backend)
13 --latest GET, prefetch, or copy the latest object version from the associated remote bucket;
14 allows operation-level control over object version synchronization _without_ changing bucket configuration
15 (the latter can be done using 'ais bucket props set BUCKET versioning')
16...

See also

  • ais cp command and, in particular, its --sync option.
  • Example copying buckets and multi-objects with simultaneous synchronization

Out-of-band writes, deletes and more

  1. with version validation enabled, aistore will detect both out-of-band writes and deletes;
  2. buckets with versioning disabled are also supported;
  3. decision on whether to perform cold-GET is made upon comparing remote and local metadata;
  4. the latter always includes object size, but also may include any combination of:
    • version
    • ETag
    • ais object checksum (by default, xxhash that we store as part of custom Cloud metadata)
    • MD5
    • CRC32C

To enable version validation, run:

1$ ais bucket props set BUCKET versioning.validate_warm_get true
2
3## optionally:
4
5$ ais bucket props show BUCKET versioning
6PROPERTY VALUE
7versioning.enabled ...
8versioning.validate_warm_get true
9versioning.synchronize false

No assumption is being made on whether any of the above is present (except, of course, the size aka “Content-Length”).

The rules are simple:

  • compare existing items of the same kind (size vs size, MD5 and MD5, etc.);
  • fail immediately - that is, require cold GET - if any pair of comparable items differ;
  • count all matches except size (in other words, same size does not contribute to decision in favor of skipping cold GET);
  • exclude double counting (which is mostly relevant for ETag vs MD5);
  • require two or more matches.

When there are no matches, we go ahead with cold GET.

A single match - e.g. only the version (if exists), or only ETag, etc. - is currently resolved positively iff the source backend is the same as well.

E.g., copying object from Amazon to Google and then performing validated GET with aistore backend “pointing” to Google - will fail the match.

TODO: make it configurable to require at least two matches.

Needless to say, if querying remote metadata fails the corresponding GET transaction will fail as well.

When reading in-cluster data causes deletion

But there’s one special condition when the call to query remote metadata returns “object not found”. In other words, when the remote backend unambiguously indicates that the remote object does not exist (any longer).

In this case, there are two configurable choices as per (already shown) versioning section of the bucket config:

1$ ais bucket props show BUCKET versioning
2PROPERTY VALUE
3versioning.enabled ...
4versioning.validate_warm_get true
5versioning.synchronize false ## <<<<<<<<<<<<<<<< note!

The knob called versioning.synchronize is simply a stronger variant of the versioning.validate_warm_get; that entails both:

  1. validating remote object version, and
  2. deleting in-cluster object if its remote (“cached”) counterpart does not exist.

To recap:

if an attempt to read remote metadata returns “object not found”, and versioning.synchronize is set to true, then we go ahead and delete the object locally, thus effectively synchronizing in-cluster content with it’s remote source.

GET latest version

But sometimes, there may be a need to have a more fine-grained, operation level, control over this functionality.

AIS API supports that. In CLI, the corresponding option is called --latest. Let’s see a brief example, where:

  1. s3:///abc is a bucket that contains
  2. s3://abc/README.md object that was previously
  3. out-of-band updated

In other words, the setup we describe boils down to a single main point:

  • aistore contains a different version of an object (in this example: s3://abc/README.md).

Namely:

1$ aws s3api list-object-versions --bucket abc --prefix README.md --max-keys 1
2{
3 "Name": "abc",
4 "KeyMarker": "",
5 "MaxKeys": 1,
6 "IsTruncated": true,
7 "NextVersionIdMarker": "KJOQsGcR3qBX5WvXbwiB.2LAQW12opbQ",
8...
9 "Versions": [
10 {
11 "IsLatest": true,
12...
13 }
14 ],
15 "Prefix": "README.md"
16}

AIS, on the other hand, shows:

1$ ais show object s3://abc/README.md --props version
2PROPERTY VALUE
3version 1yNHzpfd9Y16nDS71V5scjTMfbRZUPJI

Moreover, GET operation with default parameters doesn’t help:

1$ ais get s3://abc/README.md /dev/null
2GET (and discard) README.md from s3://abc (13.82KiB)
3
4$ ais show object s3://abc/README.md --props version
5PROPERTY VALUE
6version 1yNHzggpfd9Y16nDS71V5scjTMfbRZUPJI

To reconcile, we employ the --latest option:

1$ ais get s3://abc/README.md /dev/null --latest
2GET (and discard) README.md from s3://abc (13.82KiB)
3
4$ ais show object s3://abc/README.md --props version
5PROPERTY VALUE
6version KJOQsGcR3qBX5WvXbwiB.2LAQW12opbQ

Notice that we now have the latest KJOQsGc... version (that s3api also calls VersionIdMarker).

References

  • ais cp command and, in particular, its --sync option.
  • Example copying buckets and multi-objects with simultaneous synchronization