AWS s3 同时移动同一对象

AWS s3 simultaneous move of the same object

最近我在考虑一个我还没有完全想通的事情。基本上,事情总结在问题中。更广泛地说,我的问题如下:

(假设这些事情是由不同机器上的脚本或同一机器内的不同任务(同时)完成的)

假设我们有一个名为 "bucket-one" 的桶,其中有一个对象,其中的键是 "foo/bar.ext" 一个任务试图将 "foo/bar.ext" 移动到 "foo2/bar.ext",另一个任务试图将对象移动到 "foo3/bar.txt",并且,假设我们使用 boto3 s3 client/resource,例如(可能不会虽然会影响输出)。

当您尝试同时同时将一个对象从一个文件夹移动到同一存储桶中的另一个文件夹时会发生什么情况?

我想到的输出是:

第二个问题是一样的,只是时间不同"not at the exact time, but very close (nearly-same time)"

我知道可能性不大,但我很好奇结果会怎样。

谢谢

唯一可能的结果是您获得了两个目标对象。

S3不支持将对象移动到新键,它只支持在新键(无论是在同一个桶还是不同的桶)复制对象,然后删除原始对象第二个请求。

删除已在复制或下载过程中的对象不会影响已在该对象上进行的操作。

此外,对最近删除的对象的授权删除操作永远不会失败(实际上删除请求可能总是如此,但这个细节在这里并不重要)所以两个进程都不会知道另一个进程已经他们尝试时也只是删除了对象,因为该操作会成功。

您甚至不需要同时发生某些事情,就可以得到两个对象。

如果事件按副本 1、副本 2、删除 1、删除 2 的顺序发生,那么只要删除 1 还没有发生,无论副本 1 和副本 2 发生的时间有多接近,结果仍然如此' t 阻止副本 2 启动...但实际上,对对象的删除操作本身并不是即时的,因此副本 2 可能仍然有效,即使它在删除 1 完成后的一小段时间开始。这是由 S3 为删除和覆盖操作提供的最终一致性行为引起的,这是一种以这种一致性换取更高性能 PUT 和 GET(包括复制)的优化。完全一致性的时间量不是固定值,通常接近于零。没有公开的接口来确定存储桶的索引副本是否完全一致。

请参阅 Amazon Simple Storage Service 开发人员指南中的 Amazon S3 Data Consistency Model