XX-net/XX-Net · error · NoRescourceException

no appid

Error message

no appid

What it means

NoRescourceException raised by get_host when the appid manager returns no appid. The host manager needs an appid to build '<appid>.appspot.com'; with none available it logs 'no appid', sleeps 10s to avoid hot-looping, then throws. get_sni_host and any GAE request needing a hostname will propagate it.

Solutions

  1. Configure at least one valid appid (deploy your own GAE app) in the settings
  2. Restore benched appids by restarting XX-Net after fixing quota/existence issues
  3. Deploy multiple appids for redundancy
  4. Verify appids in the Google console and redeploy deleted ones
Defensive patterns

Strategy: validation

Validate before calling

from gae_proxy.local import appid_manager
if not appid_manager.appids:
    raise RuntimeError('No appid configured; set one before requesting GAE hosts')

Try / catch

try:
    host = host_manager.get_host()
except NoRescourceException:
    time.sleep(10)  # mirror internal backoff, then re-check config
    if not appid_manager.appids:
        raise
    host = host_manager.get_host()

Prevention

When it happens

Trigger: Calling get_host/get_sni_host when the appid list is empty or all appids have been benched (reported not-exist or out-of-quota via report_not_exist/report_out_of_quota).

Common situations: Fresh install with no appids configured, all configured appids removed by Google or exhausted quota, shared public appids all dead.

Related errors


AI-assisted analysis of XX-net/XX-Net@cfa5bc17b6 (2026-08-27). Data as JSON: /api/errors/bb04324f4e513202. Report an issue: GitHub.

Appendix: source

Thrown at code/default/gae_proxy/local/host_manager.py:24


class HostManager(HostManagerBase):
    def __init__(self, config, logger):
        self.config = config
        self.logger = logger
        self.appid_manager = None

        self.sni_manager = SniManager(logger)

    def get_host(self):
        if not self.appid_manager:
            return ""

        appid = self.appid_manager.get()
        if not appid:
            self.logger.warn("no appid")
            time.sleep(10)
            raise NoRescourceException("no appid")

        return appid + ".appspot.com"

    def get_sni_host(self, ip):
        sni = self.sni_manager.get()
        host = self.get_host()

        return sni, host

View on GitHub (pinned to cfa5bc17b6)