Chromium的当前net/disk_cache/simple file模块没有实现缓存的原子更新

问题:当服务器端初始响应浏览器的HTTP GET请求并设置Date头部字段,浏览器缓存了cache的第一个版本;其后下一次请求revalidate时,浏览器设置If-Modified-Since,并期望得到一个304。不幸的是,浏览器却返回了200,并重新发回完整的response body响应。这种情况下,Chromium的net/disk_cache/simple file模块将尝试更新cache entry。问题是,如果这个下载过程中,如果网络突然中断,浏览器对应此URL请求的缓存数据将被破坏。原来的cache也没有了。

原因是:Chromium的当前net/disk_cache/simple file模块没有实现缓存的原子更新。有一个simple index索引文件,倒是有点像是数据库文件,它的更新倒是原子的:——先写一个临时文件,待临时文件写完成后,删除目标文件,并重命名临时文件为目标文件。

假如simple file的设计是每个cache entry文件有0,1,2三个stream,可以单独更新(?),那么仅仅在API实现的下一层级别做简单的修改可能不能实现cache的atomic update。或者至少要更麻烦一点。

可以考虑在上层解决这个问题:假设对每个HTTP Cache请求,虽然不是每个URL对应相同的response body内容,但是我们加上Last-Modified或者ETag(有后者的情况下,优先选择后者),那我们确保对于<string URL, long Last-Modified>二元组,或者<string URL, string ETag>都有一个唯一的快照版本。

对于只使用ETag区分服务器版本的情况,浏览器客户端本地需要维护一个long Local-Updated时间戳,这样才能够定位到最新的cache是哪一个。

我得承认,Chromium内核的当前net IO模块代码使用了C++加回调来进行异步IO操作,内部维护了状态机,这一切都很巧妙(区别于传统的同步阻塞IO编程),问题是:所有的文件IO操作应该满足ACID(类似于数据库系统实现的约束),可是它没有;同时异步IO下状态机模型的每个状态命名都很令人费解。本来代码上应该做更多的语义-名字映射的。




<think>嗯,用户遇到了一个问题,就是在Termux里运行git clone命令时提示仓库找不到。首先,我需要确认用户提供的命令是否正确。用户执行的是`git clone https://mirrors.tencent.com/chromium/chromium/tools/depot_tools.git`,但返回了fatal: repository not found。 首先,我应该检查这个URL是否有效。访问https://mirrors.tencent.com/chromium/chromium/tools/depot_tools.git,看看是否能正常访问。可能这个镜像已经不再维护,或者路径有变化。比如,腾讯镜像可能调整了目录结构,导致原来的路径不存在了。 另外,用户提到要报告问题到https://bugs.termux.com,但这个问题可能和Termux本身无关,而是仓库地址的问题。需要确认用户是否正确的仓库地址。通常,depot_tools的正确仓库应该是Google官方的,比如https://chromium.googlesource.com/chromium/tools/depot_tools.git。用户可能使用了镜像,但镜像可能不可用,建议用户尝试官方源。 接下来,用户可能遇到的另一个问题是网络问题,比如Termux没有网络权限,或者所在地区对某些镜像的访问有限制。可以建议用户检查网络连接,或者尝试更换镜像源,例如换成中科大的镜像或者其他可用的源。 另外,用户可能没有正确安装git或者相关依赖,但在Termux中通常git是已经安装好的,所以这个可能性较低。不过,可以提醒用户更新Termux的包,确保所有依赖都是最新的。 总结下来,可能的解决方案包括:检查URL有效性,更换镜像源,检查网络连接,确保git正确安装。同时,报告问题的话,如果确定是Termux的问题,才需要到指定的bug页面提交,否则可能需要联系镜像的维护者或者检查仓库地址的正确性。</think>你的命令报错显示仓库地址无法访问。以下是逐步排查和解决方案: $$git\ clone\ https://mirrors.tencent.com/chromium/chromium/tools/depot_tools.git$$ **故障分析:** 1. 镜像源失效:腾讯镜像站可能已停止维护该仓库 2. 路径变更:Chromium项目结构调整导致目录路径改变 3. 网络限制:您的网络环境可能屏蔽了该域名 **解决方案:** 1. 尝试官方源(Google源): ```bash git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git ``` 2. 国内推荐镜像源(中科大): ```bash git clone https://mirrors.ustc.edu.cn/chromium/chromium/tools/depot_tools.git ``` 3. 验证网络连通性: ```bash curl -v https://chromium.googlesource.com ping mirrors.tencent.com ``` **Termux环境注意事项:** 1. 确保已更新基础组件: ```bash pkg update && pkg upgrade pkg install git python -y ``` 2. 若持续报错,请按提示到 https://bugs.termux.com 提交: - 需要包含完整的错误日志 - 注明Termux版本:`termux-info` - 建议附加网络诊断结果 **补充说明:** Chromium仓库体积较大(约1GB),建议在稳定WiFi环境下操作,若遇中断可使用: ```bash git fetch --unshallow # 续传克隆 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值