我的問題可能是我對谷歌存儲全球一致性的誤解的結果,但由於我直到最近(11月中旬)纔有過這個問題,現在看起來很容易重現,所以我想要澄清一下。這個問題發生在使用bdutil運行在計算引擎上的一段spark代碼中,但是我可以使用gsutil從命令行重現。GCS - 全球一致性與刪除+重命名
我的代碼正在刪除目標路徑,然後立即將源路徑重命名爲目標路徑。由於目標路徑不再存在,因此在全局一致性的情況下,由於目標路徑不再存在,因此src將被重命名爲目標,但src被嵌套在目標中,就好像目標仍然存在並且不一致。
Hadoop的代碼來重現的樣子:
fs.delete(new Path(dest), true)
fs.rename(new Path(src), new Path(dest))
從命令行我可以重現:
gsutil -m rm -r gs://mybucket/dest
gsutil -m cp -r gs://mybucket/src gs://mybucket/dest
如果原因是因爲列表操作是最終一致和文件系統實現用列出操作以確定目標是否仍然存在,然後我明白了,然後是否有推薦的解決方案來確保重命名之前目標不再存在?
感謝, 盧克
謝謝。我想我會重新設計數據流,因此我總是在名稱中創建一個帶有時間戳的新「目錄」,而不是試圖替換現有的「目錄」 – lukeforehand