Iterations
Data transfers consist of consecutive iterations. Each iteration passes the source and destination buckets once. At each iteration, Object Storage performs the following operations in parallel:-
Lists objects in the source bucket by making a
ListObjectsrequest for every 1000 objects. For every listed source object, Object Storage makesHeadObjectrequests to both the source and destination buckets, and then determines which objects need to be transferred:- If you allow overwriting destination objects, a source object that is newer than its destination pair (based on the
Last-Modifiedheader) overwrites it. If you also allow overwriting unmanaged objects, the same applies to objects in the destination that weren’t copied from the source bucket during the current or past transfers. - After the first successful iteration, source objects that were last modified before the last successful iteration are skipped to reduce synchronization costs.
- If the source and destination objects have identical data but different metadata, Object Storage doesn’t transfer the object data again. Instead, it updates the destination object’s metadata by making a
CopyObjectrequest withMetadataDirectiveset toREPLACE.
- If you allow overwriting destination objects, a source object that is newer than its destination pair (based on the
-
If deleting destination objects is enabled, Object Storage lists objects in the destination bucket by making a
ListObjectsrequest for every 1000 objects. Object Storage compares source and destination object lists, determines which destination objects don’t have pairs in the source, and deletes them usingDeleteObject. If overwriting and deleting unmanaged objects is disabled, Object Storage doesn’t delete destination objects that weren’t copied from the source bucket during the current or past transfers. -
For every object that needs to be transferred:
-
If the object is less than 100 MB, it makes a single
GetObjectrequest to the source bucket and a singlePutObjectrequest to the destination bucket. -
For larger objects, it makes the following requests:
CreateMultipartUploadto the destination bucket.GetObjectto the source bucket andUploadPartto the destination bucket for every approximately 50 MB of the object.CompleteMultipartUploadto the destination bucket after uploading all parts.
-
If the object is less than 100 MB, it makes a single