{"record":{"id":"4fd71a24a5132790","repo":"XX-net/XX-Net","slug":"load-s-for-host-failed-r","errorCode":null,"errorMessage":"load %s for host failed:%r","messagePattern":"load (.+?) for host failed:%r","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/x_tunnel/local/cloudflare_front/ip_manager.py","lineNumber":43,"sourceCode":"    def load_domains(self):\n        domain_map = {}  # top_domain -> {}\n        for fn in [self.domain_fn, self.default_domain_fn]:\n            if not os.path.isfile(fn):\n                continue\n\n            try:\n                with open(fn, \"r\") as fd:\n                    ds = json.load(fd)\n                    for top in ds:\n                        domain_map[str(top)] = {\n                            \"links\": 0,\n                            \"fail_times\": 0,\n                            \"last_try\": 0.0\n                        }\n                self.logger.info(\"load %s success\", fn)\n                break\n            except Exception as e:\n                self.logger.warn(\"load %s for host failed:%r\", fn, e)\n        return domain_map\n\n    def save_domains(self, domains):\n        ns = []\n        for top_domain, _ in self.domain_map.items():\n            ns.append(top_domain)\n\n        if ns == domains:\n            self.logger.debug(\"save domains not changed, ignore\")\n            return\n        else:\n            self.logger.info(\"save domains:%s\", domains)\n\n        dat = {}\n        for domain in domains:\n            dat[domain] = [\"www.\" + domain]\n\n        with open(self.domain_fn, \"w\") as fd:","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/cloudflare_front/ip_manager.py#L25-L61","documentation":"ip_manager failed to load a domain-list file (by host variant); it tries multiple filenames and warns per failure. If all fail, domain_map starts empty.","triggerScenarios":"__init__/save_domains iterate candidate filenames; JSON parse error, missing keys, or IOError triggers the warn and moves to the next file.","commonSituations":"Corrupted or manually edited domain list file; first run with no saved file; schema change between versions.","solutions":["Delete/regenerate the corrupted ip_manager domain file so it is rebuilt","Check file JSON syntax with a validator","Upgrade both code and saved files together"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"import json\njson.loads(open(fn).read())  # validate before letting ip_manager load it","typeGuard":null,"tryCatchPattern":"try:\n    ip_manager.load_domains()\nexcept Exception:\n    delete_state_file_and_restart()","preventionTips":["Keep domain-list files machine-generated only","Back up state files before upgrading"],"tags":["cloudflare","ip-manager","config-load","json"],"backgroundTag":"config-file-load-failed","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}