{"record":{"id":"3194d50d224fc559","repo":"XX-net/XX-Net","slug":"process-appid-not-exist-remove-ip-s","errorCode":null,"errorMessage":"process_appid_not_exist, remove ip:%s","messagePattern":"process_appid_not_exist, remove ip:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/gae_proxy/local/appid_manager.py","lineNumber":86,"sourceCode":"        with self.lock:\n            if appid not in self.out_of_quota_appids:\n                self.out_of_quota_appids.append(appid)\n            try:\n                self.working_appid_list.remove(appid)\n            except:\n                pass\n\n    def report_not_exist(self, appid, ip):\n        self.logger.debug(\"report_not_exist:%s %s\", appid, ip)\n        th = threading.Thread(target=self.process_appid_not_exist, args=(appid, ip), name=\"process_appid_not_exist\")\n        th.start()\n\n    def process_appid_not_exist(self, appid, ip):\n        ret = self.check_api(ip, \"xxnet-1\")\n        if ret and ret.ok:\n            self.set_appid_not_exist(appid)\n        else:\n            self.logger.warn(\"process_appid_not_exist, remove ip:%s\", ip)\n\n            self.ip_manager.report_connect_fail(ip, force_remove=True)\n\n    def set_appid_not_exist(self, appid):\n        self.logger.warn(\"APPID_manager, set_appid_not_exist %s\", appid)\n        with self.lock:\n            if appid not in self.not_exist_appids:\n                self.not_exist_appids.append(appid)\n            try:\n                self.config.GAE_APPIDS.remove(appid)\n            except:\n                pass\n\n            try:\n                self.working_appid_list.remove(appid)\n            except:\n                pass\n","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/gae_proxy/local/appid_manager.py#L68-L104","documentation":"While handling a 'appid not exist' report, the manager tried to verify by calling check_api(ip, 'xxnet-1') on the IP that reported it. The check failed (non-ok), so instead of disabling the appid it treats the IP as bad and force-removes it via ip_manager.report_connect_fail.","triggerScenarios":"process_appid_not_exist called with an IP whose GAE endpoint no longer answers the check request (blocked, dead, or serving errors), making the verification request fail.","commonSituations":"GFE IP blocked by firewall, IP rotated out by Google, or local network interfering with the check request — commonly seen during IP blocking events.","solutions":["Let the IP scanner rescan/replace IPs; ensure good_ip_list can refresh","Check network reachability to Google IPs","Re-verify the appid actually exists in your GCP console before assuming removal","Update XX-Net check logic if Google changed the check endpoint"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Maintain a healthy rotating IP pool so removed IPs are replaced","Verify appid existence in GCP console before relying on automated removal","Re-scan IPs after mass removal events"],"tags":["gae-proxy","ip-management","appid","verification"],"backgroundTag":"health-check-endpoint-unreachable","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}