所以,我看到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(这个失败)
考虑到我刚刚移动内容,这是非常奇怪的。
任何指针?
答案 0 :(得分:0)
Openstack Swift有一些后台进程可以检查其文件的复制和一致性。当您自己移动文件时,Swift可能会理解为某种不一致,具体取决于您的群集设置,并会尝试修复它。所以,这不应该有效。
但是,如果您仍想了解发生的情况,建议您在上传后列出容器内容,移动文件,然后再次列出容器内容。等几分钟再次列出。将文件移回并再次列出。这可以帮助您在移动文件时查明后台进程是否正在执行某些操作。