Versioning is the capability of the namespace to store multiple versions of objects. If the namespace supports versioning, you can save a new version of an object and the previous version will be kept.
Each version is an independent copy of the object that includes both data and metadata. A new version is created each time you save the object, but not when you modify metadata, ACLs, or custom metadata. A version can also be a special entity that represents a deleted object.
You use HTTP to save a new version of an object. HCP does not support versioning operations through any other protocol.
All objects, including those created when versioning is not enabled, have version IDs. Version IDs are integers. Each time a new version of an existing object is created, it is assigned an ID that is greater than the previous version of the object. The IDs for multiple versions of an object are not necessarily consecutive numbers.
Directories do not normally have versions. One exception exists: if a directory contains or contained one or more versions of an object and also contained, at some time, a subdirectory with the same name as the object, the deleted subdirectory has a version ID.
You can use version IDs and version ID ranges to delete older versions of objects (provided that the versions are not under retention or on hold). Similarly, you can use timestamps and timestamp ranges to delete older versions of objects.
If versioning is enabled for the namespace, pruning may also be enabled. Pruning is the automatic deletion of old versions after a specific length of time. HCP does not prune versions of objects that are on hold.
Each version of an object has its own retention, shred, and index settings and its own custom metadata.
When you store a new version of an object, the retention setting of the old version doesn’t change. However, you cannot explicitly delete old versions of objects under retention, even if their retention periods have expired.
If you specify a retention value for an object by using an offset or retention class, the retention period is relative to the time the current version was stored, not when the first version was stored.
Hold settings apply to all versions of an object; if you put an object on hold, all old versions of the object are also put on hold.
Object owner settings apply to all versions of an object; if you change the owner of an object, that change affects all versions of the object. However, if you restore a deleted object, the object owner of the object may differ between the current version and the old version or versions.
ACLs do not apply to all versions of an object. You can add, replace, or delete an ACL from any specific version of an object or all versions of the object. If you restore a deleted object, the ACL on the object may differ between the current version and the old version or versions.
Tenant administrators can enable, disable, and reenable versioning for the namespace. When versioning is disabled, old versions are not lost. However, while versioning is disabled, you cannot list or access old versions. If versioning is later reenabled, you can again list, retrieve, and purge any preexisting versions (until HCP prunes them because of their age).
If you enable S3 Object Lock for your namespace:
- You can set a unique retention period for each version of an object.
- You can create new versions of objects under object lock retention or hold.
- Pruning requests check the retention period of each object version to determine if it can be pruned.
- Disposition requests verify if the retention period for each object version has expired.