Openstack Swift奇怪的是复制数据目录

时间:2017-05-10 07:47:35

标签: openstack openstack-swift

所以,我看到Openstack Swift有一些非常奇怪的行为。如果我启动所有swift进程,并说做一个操作(例如上传文件),那么如果我杀死所有的Swift进程,将所有数据目录复制到其他临时位置,删除所有数据目录的内容,将所有临时目录复制回数据目录并再次启动我的swift进程,我无法对该对象执行GET。 (我可以访问容器信息,但快速下载失败)。

我花了几个小时来调试这个非常奇怪的行为。其他人都遇到过这个问题吗?

重现错误的步骤:(假设4个数据目录在/ mnt / sdb1 / dir中说明)

  

=> swift-init全部开始   => swift上传some_container some_file
  => (可以跟随任何快速操作)   => swift-init全部杀死了   => cp -R / mnt / sdb1 / 1 / mnt / sdb1 / 1_temp(从原始目录复制到临时目录)
  => cp -R / mnt / sdb1 / 2 / mnt / sdb1 / 2_temp(从原始目录复制到临时目录)
  => cp -R / mnt / sdb1 / 3 / mnt / sdb1 / 3_temp(从原始目录复制到临时目录)
  => cp -R / mnt / sdb1 / 4 / mnt / sdb1 / 4_temp(从原始目录复制到临时目录)
  => rm -rf / mnt / sdb1 / 1 / *(删除原始数据的所有内容dir)
  => rm -rf / mnt / sdb1 / 2 / *(删除原始数据的所有内容dir)
  => rm -rf / mnt / sdb1 / 3 / *(删除原始数据的所有内容dir)
  => rm -rf / mnt / sdb1 / 4 / *(删除原始数据的所有内容dir)
  => cp -R / mnt / sdb1 / 1_temp / mnt / sdb1 / 1(从临时目录复制到原始文件)
  => cp -R / mnt / sdb1 / 2_temp / mnt / sdb1 / 2(从临时目录复制到原始文件)
  => cp -R / mnt / sdb1 / 3_temp / mnt / sdb1 / 3(从临时目录复制到原始文件)
  => cp -R / mnt / sdb1 / 4_temp / mnt / sdb1 / 4(从临时目录复制到原始版本)

     

=> swift-init全部启动(再次启动swift)
  =>快速清单(这个成功)
  =>快速列表some_container(这个成功)
  =>快速下载some_container some_file(这个失败)

考虑到我刚刚移动内容,这是非常奇怪的。

任何指针?

1 个答案:

答案 0 :(得分:0)

Openstack Swift有一些后台进程可以检查其文件的复制和一致性。当您自己移动文件时,Swift可能会理解为某种不一致,具体取决于您的群集设置,并会尝试修复它。所以,这不应该有效。

但是,如果您仍想了解发生的情况,建议您在上传后列出容器内容,移动文件,然后再次列出容器内容。等几分钟再次列出。将文件移回并再次列出。这可以帮助您在移动文件时查明后台进程是否正在执行某些操作。