-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lxc-images 下载出错 (index 同步先于images完成?) #558
Comments
不太明白为什么 即使是同步时无法做到index后于images完成,也可以用一些通用的方法解决原子性。
同步完成后,不忙着把C指向B。额外检查一下index与images是否一致, 对于 lxc-images 这种仓库,同步的频率不是重点,是否做到daily问题不大,但原子性是很重要的。 |
检查index和images是否一致这件事情本身并不好做 |
@jiegec 非常好做,路径就在index文件里写着,依次检测每个条目对应的xz压缩包是否存在就够了 。 你可以下载那个index文件然后用文本编辑器打开。再简单不过的结构了。 |
这一个例子可能简单,但是我们没有这么多精力去研究每一个repo的index格式。 |
@jiegec 你们代码里对 lxc-images 仓库进行镜像的方式就是对该文件进行解析然后下载,如果“没有精力解析”,你们 lxc-images 的镜像就不会存在。 |
大部分都是直接 rsync 的。我的意思就是,可以做,但是我们不会有精力对所有repo去做。 |
这个仓库并不是。
|
rsync 本身有机制可以保证同步的原子性,所以你们可以什么都不做。 |
rsync 不足够保证原子性,这里还涉及到lb的问题。目前index和data不一致是普遍的问题而不是个例。 |
既然如此,可以考虑用普遍的方法来解决普遍的问题。 |
如果 lxc 的 images 是可以保证已有的 image 不修改,只增加和删除的话,那么可以先拉取新的 index,再拉取新的包,然后再上线 index。否则无法做到原子性。 我们的同步脚本会尽量避免和减少读取已有的文件的内容,以及扫描文件夹的操作。因为镜像服务器的磁盘 IO 压力非常大。 |
不修改,每次都是新增一些文件(以构建日期开头的文件夹)。旧的文件会在index更新后失效。 |
想到这样一个同步策略:
这样可以一定程度保证同步过程不影响正在使用的用户,并且保证索引中引用的文件都是存在的。 |
差不多。 |
the method described in tuna/issues#558 (comment)
已按照上述思路更新脚本,等待同步完成,之后发现问题再报告吧。 |
执行命令
结果
而
https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ubuntu/bionic/amd64/default/20190505_07:42/rootfs.tar.xz
确实不存在。The text was updated successfully, but these errors were encountered: