DNS outbound: Preserve session context for timeout-only connections#6425
DNS outbound: Preserve session context for timeout-only connections#6425Meo597 wants to merge 7 commits into
Conversation
|
感觉TimeoutOnly换成background就是有问题 把所有value ctx都洗掉了 这样的写法不止一处 |
|
是的,所有的出站遇到 XUDP 都 ctx = bg 是在埋雷 |
|
我的意思是可以都换成 withoutcancel |
|
那些其它出站都当 newCtx 给 task.Run 用我之前扫了一眼觉得不会有 BUG 只是以后可能是雷点 我看看都改了他们吧 |
|
这东西当初我写的,帮我找一下当初的 commit 我回忆一下为什么这么写 |
|
|
|
|
|
|
看起来是xudp为了断掉跟上游ctx的生命周期绑定方便其他人接管连接 |
|
或许当时你写的时候还没有 withoutcancel |
|
就是说看 context 开头感觉是 Go 的函数,我也查了下,不是我加的,23 年 8 月份 Go 1.21 自己加的,我当时写的时候还没有 我是当时看了看 Go 代码,linkname 导出了一个 IndependentCancelCtx 但没用过 |
|
还有个问题是有这个函数后能不能在 mux dispatch 那里就加上,而不是每个出站加 |
|
还有 gRPC |
|
哦明白了,会被 dialerProxy 后的 outbound 消费,因此不能统一在 mux 里直接弄 |
|
注释被你找到了但你操作错了,重点是 #2232 (comment)
|
|
|
|
要不靠谱点把这些都 revert 只留第一个 commit 吧 闭包里吃的是上游 ctx |
|
主要是传输层没处理这些东西,如果有 dialerProxy 的话传输层会被 cancel,
|
|
下个 PR 再说吧,那些地方我没摸过不是完全清楚 newCtx 放在 task.Run 之前而不是立即 |
|
|
|
总之其它 outbounds 主要是想只是 copy 时不被上游 cancel,所以只在 task.Run 前,在此之前传递的 ctx 不受影响
但是 DNS 这个下面用到了 ctx 里的值,绝对不引入新 bug 的另一种方法是 |
|
你们这个 不被上游 cancel withoutcancel 不是可以解决吗? |
|
R 主席想要让闭包里面的那些还能被上游 cancel,比如 dial 啥的 |
陈年老 BUG 了,只是没人那么无聊这么配过所以没发现
isOwnLink()特定配置会导致多绕一次sendThrough那么 direct 的查询还会 panic