xmake icon indicating copy to clipboard operation
xmake copied to clipboard

Send cached object file failed

Open Domain opened this issue 3 years ago • 7 comments

Xmake 版本

2.6.8

操作系统版本和架构

Windows 11

描述问题

分布式编译,远程缓存,服务器报错:

send cached object file C:\Users\build\AppData\Local\.xmake\service\server\distcc_build\sessons\e152b859\cache\1f\1f51d85c762e4ba009761d8100f8465b.o ..
...\modules\private\service\distcc_build\server_session.lua:162: send C:\Users\build\AppData\Local\.xmake\service\server\distcc_build\sessons\e152b859\cache\1f\1f51d85c762e4ba009761d8100f8465b.o failed!
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:872]:
    [...\modules\private\service\distcc_build\server_session.lua:162]: in function 'compile'
    [@programdir\modules\private\service\distcc_build\server.lua:90]:

: : : send failed
: : session end

期待的结果

忽略错误,继续跑。 虽然现在加上了timeout设置,但是默认是-1,这对用户不够友好,先不说没有文档说明,每个用户安装好之后还要设置,这样就很麻烦。特别是现在远程编译和缓存还不够稳定的情况,很容易卡住流程。应该默认设置上timeout,让用户无感使用。

工程配置

No response

附加信息和错误日志

No response

Domain avatar Jul 12 '22 02:07 Domain

虽然现在加上了timeout设置,但是默认是-1,这对用户不够友好,先不说没有文档说明,每个用户安装好之后还要设置,这样就很麻烦。特别是现在远程编译和缓存还不够稳定的情况,很容易卡住流程。应该默认设置上timeout,让用户无感使用。

无感了,出了问题,用户到最后都不知道 是否 distcc 真的生效了,特别是实现刚初步支持时期,用户尽早发现和反馈问题 更便于改进。

暂时不会默认开启超时,自己配下。

waruqi avatar Jul 12 '22 05:07 waruqi

...\modules\private\service\distcc_build\server_session.lua:162: send C:\Users\build\AppData\Local.xmake\service\server\distcc_build\sessons\e152b859\cache\1f\1f51d85c762e4ba009761d8100f8465b.o failed!

这块是 distcc server 端对 client 发送失败导致,并且 server 端目前已经做了 fail fallback 处理,server 不会中断影响下次连接会话才对,这边试了下,这个位置即使每次 send 报错,client 端还是能够自动会退到 local 完成编译。

目前的 logs 看不出什么问题,可以给下 client/server 两端的完整 logs 。。

waruqi avatar Jul 12 '22 14:07 waruqi

又跑了一下,服务器没有重启,这次客户端用了-vD,有很多相同的报错:

fallback to the local cache, @programdir\modules\private\service\remote_cache\client.lua:447: <remote_cache_client>: server unreachable!
stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:872]:
    [@programdir\modules\private\service\remote_cache\client.lua:447]: in function '_sock_open'
    [@programdir\modules\private\service\remote_cache\client.lua:182]: in function 'pull'
    [@programdir\modules\private\cache\build_cache.lua:158]:

服务器完全没有任何反应,没有输出,而且CPU占用25%,没有cl进程,像是死循环一样

Domain avatar Jul 13 '22 07:07 Domain

而且虽然提示了fallback,但是编译还是停掉了,和之前一样,感觉还是在等待服务器,可能是等待distcc,不是ccache

Domain avatar Jul 13 '22 08:07 Domain

我不可能凭空猜出哪里有问题,只有server/client 有完整 logs ,我才能继续排查问题

先缩小范围,禁用 ccache 或者 distcc ,单独跑一个服务,出问题后,提供两端完整 -vD logs,或者你可以直接源码调下

如果是卡住了,可以参考这个 https://github.com/xmake-io/xmake/issues/2033 取个栈

waruqi avatar Jul 13 '22 08:07 waruqi

这就是当时所有日志,客户端还有一些正常的本地和distcc的日志,然后不动了,服务器没有任何反应,卡住了。 我试了在服务器用profile运行: C:>set XMAKE_PROFILE=stuck C:>xmake service -vD 然后直接卡住了,CPU>30%,屏幕没有任何输出,按Ctrl+c,弹出vsjitdebugger调试窗口,没有符号表,当然看不到什么东西,屏幕还是没有任何输出。去掉这个环境变量就可以正常启动

Domain avatar Jul 14 '22 02:07 Domain

没太多 logs 就不太好查了。

这就是当时所有日志,客户端还有一些正常的本地和distcc的日志,然后不动了,服务器没有任何反应,卡住了。 我试了在服务器用profile运行: C:>set XMAKE_PROFILE=stuck C:>xmake service -vD 然后直接卡住了,CPU>30%,屏幕没有任何输出,按Ctrl+c,弹出vsjitdebugger调试窗口,没有符号表,当然看不到什么东西,屏幕还是没有任何输出。去掉这个环境变量就可以正常启动

是看 客户端卡的位置,不是服务端。如果这种方式不行,就只能自己加点 print ,跟下具体卡哪里了。

waruqi avatar Jul 14 '22 05:07 waruqi

首次使用初始化配置的时候,目前 connect timeout 默认改成了 10s 另外最近修复了 远程缓存不生效问题 https://github.com/xmake-io/xmake/issues/4592

以及远程缓存 session id 全局固定 https://github.com/xmake-io/xmake/discussions/4524

waruqi avatar Jan 11 '24 07:01 waruqi

Bot detected the issue body's language is not English, translate it automatically.


When using the initialization configuration for the first time, the current connect timeout is changed to 10s by default. In addition, the problem of remote cache not taking effect has recently been fixed https://github.com/xmake-io/xmake/issues/4592

And global fixing of remote cache session id https://github.com/xmake-io/xmake/discussions/4524

Issues-translate-bot avatar Jan 11 '24 08:01 Issues-translate-bot