Google cloud storage 是";“在云端”;GSCP是原子操作吗?

Google cloud storage 是";“在云端”;GSCP是原子操作吗?,google-cloud-storage,gsutil,Google Cloud Storage,Gsutil,假设我使用以下命令将一个对象复制到Google云存储桶中: gsutil -h "Cache-Control:public,max-age=3600" cp -a public-read a.html gs://some-bucket/ 我现在想“在云中”复制此文件,同时保留公共ACL并同时更新缓存控制头: gsutil -h "Cache-Control:no-store" cp -p gs://some-bucket/a.html gs://some-bucket/b.html 这是原子

假设我使用以下命令将一个对象复制到Google云存储桶中:

gsutil -h "Cache-Control:public,max-age=3600" cp -a public-read a.html gs://some-bucket/
我现在想“在云中”复制此文件,同时保留公共ACL并同时更新缓存控制头:

gsutil -h "Cache-Control:no-store" cp -p gs://some-bucket/a.html gs://some-bucket/b.html
这是原子行动吗?也就是说,我是否可以确定,对象
gs://some bucket/b.html
最初将通过修改后的
缓存控件:no store
头可用


我提出这个问题的原因是:我正在使用谷歌云存储桶作为CDN后端。虽然我希望CDN根据
缓存控制
标题中提供的
max age
缓存bucket中的大多数对象,但我希望确保一些特定文件(实际上是可缓存版本的副本)永远不会被CDN缓存。因此,至关重要的是,这些对象在被复制时,永远不会以
缓存控件:public出现,max age=XXX
但立即出现
缓存控制:无存储
标头,以消除来自CDN的请求在
max age
仍然存在的时间点读取复制的对象,从而缓存本应永远不会缓存的对象的可能性。

是,复制到设置了缓存控制的新对象将是原子的。您可以通过查看对象的元生成属性来验证这一点

例如,上载对象:

$ BUCKET=mybucket
$ echo foo | ./gsutil cp - gs://$BUCKET/foo.txt
Copying from <STDIN>...
/ [1 files][    0.0 B/    0.0 B]                                                
Operation completed over 1 objects.
每当修改对象的元数据时,元生成都会更改。例如,如果缓存控件稍后像这样更新:

$ ./gsutil setmeta -h "Cache-Control:no-store" gs://$BUCKET/foo.txt
Setting metadata on gs://mybucket/foo.txt...
/ [1 objects]                                                                   
Operation completed over 1 objects.  
新的元代是2:

$ ./gsutil ls -L gs://$BUCKET/foo.txt | grep Meta
    Metageneration:         2
现在,如果我们运行copy命令:

$ ./gsutil -h "Cache-Control:no-store" cp -p gs://$BUCKET/foo.txt gs://$BUCKET/bar.txt
Copying gs://mybucket/foo.txt [Content-Type=application/octet-stream]...
- [1 files][    4.0 B/    4.0 B]                                                
Operation completed over 1 objects/4.0 B. 
新对象的元生成为1:

$ ./gsutil ls -L gs://$BUCKET/bar.txt | grep Meta
    Metageneration:         1
这意味着该对象只写了一次,此后未被修改

$ ./gsutil ls -L gs://$BUCKET/bar.txt | grep Meta
    Metageneration:         1