Google 云存储元数据更新

Google Cloud Storage metadata updates

关于 GCS 中元数据更新通知的性质,我有一个由两部分组成的问题。 // For the mods: if I should split this into two, let me know and I will.

我在 Google 云存储中有一个存储桶,为对象元数据更改配置了 Pub/Sub 通知。我经常得到 double 元数据更新,似乎不知从何而来。发生的事情是,在某一时刻,Cloud 运行 容器读取通知指定的对象并执行一些导致
的操作 a) 正在添加一个新文件。
b) 正在发送电子邮件。
这应该是它的结束。

但是,应用程序。 10 分钟后,针对同一对象触发第二个通知,metageneration 增加但通知对象中没有明显的 实际 更改。
奇怪的是,ETag 似乎变化很小(CJ+2tfvk+egCEG0 -> CJ+2tfvk+egCEG4),但 CRC32C 和 MD5 校验和保持不变——从对象没有被写入的意义上来说这是正确的。

问题是双重的,那么:
- 当没有元数据 set/updated?
时,metageneration 属性的增量到底是什么? - 如果基础数据没有改变,ETag 怎么能改变,如校验和所示(我猜文档确实说 "that they will change whenever the underlying data changes"[1],这并不严格意味着它们不能改变)。


1: https://cloud.google.com/storage/docs/hashes-etags#_ETags

正如@Brandon Yarbrough 评论的那样如果 metageneration 数字增加,最可能的原因是来自某处意外的显式调用以某种方式更新元数据,以及一种验证没有额外更新调用的方法正在执行的是通过启用 Stackdriver 或存储桶访问日志。

关于 ETag 更改,ETag documentation on Cloud Storage 指出

Users should make no assumptions about those ETags except that they will change whenever the underlying data changes.

这表明唯一保证ETag会被更改的场景是在数据更改时,但是,其他事件也可能触发ETag更改,因此您不应将ETag作为文件更改的参考.