outpost tunnel worker: lines, each followed by one JSON object with an
event field. The events below are logged at WARNING, so they show at the default log level.
Others, such as stream_refused and signed_in, are logged at INFO and show only when Genesis
logs at INFO:
outpost tunnel worker: not running: ....
Diagnoses
Not connected: it has not connected since Genesis started (never_connected)
Not connected: it has not connected since Genesis started (never_connected)
- The Outpost is not running. Start it.
- Its sign-in is refused: the key does not match the one registered on the Snowflake user, the user is disabled, or the Outpost’s IP address is outside the user’s network policy. See Sign-in refused.
GENESIS_ENDPOINTis wrong, or the host cannot make outbound HTTPS connections on port 443 (check firewalls andHTTPS_PROXY).
Not connected: it was connected, then its tunnel dropped (disconnected)
Not connected: it was connected, then its tunnel dropped (disconnected)
Not connected: the tunnel server refused its sign-in key (key_refused)
Not connected: the tunnel server refused its sign-in key (key_refused)
Runs with the wrong slot (slot_mismatch)
Runs with the wrong slot (slot_mismatch)
OUTPOST_SLOT does not match the slot Genesis assigned it (shown on its card),
so no route through it can work. Set OUTPOST_SLOT to the value the fix names and restart
the Outpost.Its answers are not proven by its key (unproven)
Its answers are not proven by its key (unproven)
Refuses destinations Genesis needs (destination_refused)
Refuses destinations Genesis needs (destination_refused)
host:port is not in its
ALLOWED_DESTINATIONS. Add the named destinations on the Outpost and restart it. This is
your own allowlist working as intended; only add systems you want Genesis to reach.Blocks a destination (destination_blocked)
Blocks a destination (destination_blocked)
Does not resolve, or did not accept a connection (destination_unreachable)
Does not resolve, or did not accept a connection (destination_unreachable)
- Does not resolve inside your network: check the host name and the DNS server the Outpost’s machine uses.
- Did not accept a connection: check that the service is running on that port and that firewalls between the Outpost and the host allow the connection.
Connected but does not hold the route (route_missing)
Connected but does not hold the route (route_missing)
OUTPOST_CAPABILITIES includes tunnel and that
ALLOWED_DESTINATIONS lists the destination, then restart the Outpost.Port already used by Genesis (port_in_use)
Port already used by Genesis (port_in_use)
host:port because Genesis itself already uses that port in
your deployment. In the Snowflake Native App this affects port 8082, and its debug shell
port (21234) is also reserved; see Snowflake Native App endpoints.
This is a known limitation being removed. Until then, reach the system on another port if it
offers one (for example HTTPS on 443 or 8443), or contact Genesis support.Host name claimed by multiple Outposts (host_conflict)
Host name claimed by multiple Outposts (host_conflict)
Host reached through another connection's Outpost (routed_by_another_connection)
Host reached through another connection's Outpost (routed_by_another_connection)
Host name cannot be mapped to the tunnel (names_unresolvable)
Host name cannot be mapped to the tunnel (names_unresolvable)
/etc/hosts is read-only and no writable hosts file is
preloaded. A Databricks App resolves routed names from version 1.19.97 (its launcher
preloads nss_wrapper); upgrade an older App, and if it still fails, read the App log at
start for why the Outpost host-name resolver was not installed. On a self-hosted Genesis,
let the Genesis process write /etc/hosts.Tunnel server refused the route (tunnel_refused)
Tunnel server refused the route (tunnel_refused)
port_in_useorlisten_failed: Genesis cannot listen on that port, usually because Genesis itself already uses it. Treat it likeport_in_useabove.too_many_routes: the Outpost declared more than 254 routes. Spread the systems over more Outposts.outside_slot,duplicate_addressormalformed: the Outpost declared a route Genesis does not accept from it (a tunnel address outside its own127.77.<slot>.xrange, two routes on one address, or a route Genesis cannot read). CheckOUTPOST_SLOTagainst its card and restart the Outpost; if it persists, send Genesis support the Outpost’s log.
Genesis refused route; backing off with the reason.Tunnel admission refused the connection (admission_refused)
Tunnel admission refused the connection (admission_refused)
admission: refused log line and its reason. Administrators can temporarily disable the
check with
outpost.enforce_tunnel_admission.An agent tool or agent code cannot reach a routed host
A routed host is meant to be reached through a connection routed through its Outpost. Agent tools and code that agents run hold no Outpost grant, so Genesis refuses them routed hosts where they make their requests (see Routed hosts inside Genesis). An agent that fetches a routed host’s URL itself, opens it in the browser, or connects to it from Python it runs is refused, with a message such as:127.77.x.y). In a Databricks App, the MCP
servers, coding-agent CLIs and dashboards Genesis starts for agents do not resolve routed host
names at all; the Twin lineage server does.
Sign-in refused (in the Outpost log)
An Outpost signs in twice: first at the platform’s front door (a Snowflake service user, a Databricks service principal, or a self-hosted ingress), then inside the tunnel with its own tunnel key. Most refusals appear only in the Outpost’s log, each as atunnel session ended; reconnecting line whose error names the cause. Genesis shows the
Outpost as Not connected, or as key_refused when its tunnel refused the key.
Genesis ended the session
These lines mean the Outpost was signed in and Genesis ended the session:A connection through the Outpost is closed at once
Genesis carries each connection to a routed host as its own stream inside the Outpost’s tunnel, and closes the connection at once (the driver reports the connection closed or reset) when the stream cannot open. The reason is in the Outpost’s log as astream refused line,
or in the Genesis log as an outpost tunnel worker line with "event":"stream_refused"
(logged at INFO, so it shows only when Genesis logs at INFO):
A secret from the Outpost cannot be read
A connection whose password is anoutpost_<outpost>/<secret-name> reference fails with
the Outpost’s reason, which names the store it reads (aws-secrets-manager,
azure-key-vault or gcp-secret-manager), and a fix for that store. The Outpost’s log has
an audit record for every read.
If the Outpost read succeeds but Test Connection rejects the credential
after rotation, Genesis may have been using its cached reference value. See
Connections for how to retry and where to correct
the value.
Reinstalling or restarting an Outpost
You can reinstall an Outpost, move it to another machine, or restart it at any time. Click Install on its card to get the commands again. Keep the sameOUTPOST_SLOT.
You do not need to recreate routes. The Outpost restores its last routes from its state
directory when it restarts. If it starts with none (a new machine, or a Kubernetes pod with an
empty state volume), Genesis re-sends them automatically: the next time a query or connection
test through it fails to open, and in its hourly check.
Ask Eve
Administrators can ask Eve to diagnose an Outpost in plain language, for example:- “Why is Outpost acme-prod down?”
- “Check route: can Outpost acme-prod reach db.corp.internal on port 5432?”
- “Explain routing: which Outpost will my connection to jira.corp.internal use?”

