{"record":{"id":"cd3459ac5ae2375b","repo":"XX-net/XX-Net","slug":"mark-sn-timeout-renew-sn-d-t-f","errorCode":null,"errorMessage":"mark_sn_timeout renew sn:%d t:%f","messagePattern":"mark_sn_timeout renew sn:(.+?) t:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/x_tunnel/local/base_container.py","lineNumber":342,"sourceCode":"                    # xlog.debug(\"recv_pool sn:%d processed\", sn)\n                    self.block_list.remove(self.next_sn)\n                    self.next_sn += 1\n                return True\n        except Exception as e:\n            raise Exception(\"recv_pool put sn:%d len:%d error:%r\" % (sn, len(data), e))\n        finally:\n            self.lock.release()\n\n    def mark_sn_timeout(self, sn, t, server_time):\n        # xlog.warn(\"mark_sn_timeout down_sn:%d\", sn)\n        with self.lock:\n            if sn not in self.timeout_sn_list:\n                self.logger.warn(\"mark_sn_timeout sn:%d t:%f\", sn, server_time - t)\n                self.timeout_sn_list[sn] = {\n                    \"server_send_time\": t,\n                }\n            elif t > self.timeout_sn_list[sn][\"server_send_time\"]:\n                self.logger.warn(\"mark_sn_timeout renew sn:%d t:%f\", sn, server_time - t)\n                self.timeout_sn_list[sn][\"server_send_time\"] = t\n\n    def get_timeout_list(self, server_time, timeout):\n        sn_list = []\n        with self.lock:\n            for sn, info in self.timeout_sn_list.items():\n                if server_time - info[\"server_send_time\"] < timeout:\n                    continue\n\n                if server_time - info.get(\"retry_time\", server_time) < timeout:\n                    continue\n\n                self.logger.warn(\"get_timeout_list sn:%d sent:%f retry:%f\", sn, server_time - info[\"server_send_time\"],\n                                 server_time - info.get(\"retry_time\", server_time))\n                info[\"retry_time\"] = server_time\n                sn_list.append(sn)\n\n        return sn_list","sourceCodeStart":324,"sourceCodeEnd":360,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/base_container.py#L324-L360","documentation":"Logged when an SN already in the timeout list is re-marked with a newer server send time, renewing its timeout window. Means the same unacknowledged SN was resent/reported with a fresher timestamp.","triggerScenarios":"Server reports an SN unacked again after a retry, with a newer send time than the stored one.","commonSituations":"High loss links where the same chunk is resent multiple times; expected behavior of the renewal logic.","solutions":["Monitor frequency; occasional renewal is normal","Reduce link congestion or switch front/server if continuous","Verify clock synchronization between peers affecting server_time"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat renew warnings as normal retry behavior","Avoid links with heavy loss for tunnel traffic"],"tags":["x-tunnel","retransmission","renewal","timeout"],"backgroundTag":"packet-retransmission-timeout","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}