Skip to content

Commit 990b43e

Browse files
bishos123mabuyo
andauthored
Enhance offline license documentation and troubleshooting (#8681)
Co-authored-by: Michelle Mabuyo <[email protected]>
1 parent 3688e15 commit 990b43e

File tree

1 file changed

+55
-16
lines changed

1 file changed

+55
-16
lines changed

docs/source/routing/license.mdx

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,20 @@ Offline license support is available on an as-needed basis to Enterprise organiz
7070

7171
</Tip>
7272

73+
<Caution>
74+
75+
An offline license is valid for the duration of your contract or one year, whichever is shorter. It includes a grace period of 28 days.
76+
77+
<br/><br/>
78+
79+
Keep your offline license files up to date by [renewing your license](#renew-an-offline-license).
80+
81+
<br/><br/>
82+
83+
See [Grace period for expired plans](#grace-period-for-expired-plans) for details on what happens when your license expires.
84+
85+
</Caution>
86+
7387
Running your GraphOS Router fleet while fully connected to GraphOS is the best choice for most Apollo users. However, some scenarios can prevent your routers from connecting to GraphOS for an extended period, ranging from disasters that break connectivity to isolated sites operating with air-gapped networks. If you need to restart or rapidly scale your entire router fleet, but you're unable to communicate with Apollo Uplink, new router instances won't be able to serve traffic.
7488

7589
To support long-term disconnection scenarios, GraphOS supports __offline licenses__ for the GraphOS Router. An offline license enables routers to start and serve traffic without a persistent connection to GraphOS. Instead of fetching its supergraph schema from Apollo Uplink, an offline router gets its supergraph schema from a local supergraph schema file.
@@ -84,14 +98,6 @@ An offline license can be retrieved from GraphOS with the [`rover license fetch`
8498

8599
With an offline license, a router can either be fully disconnected from GraphOS or configured to connect to GraphOS on a best-effort basis so that it can send graph usage metrics. Apollo recommends configuring your router to report graph usage metrics to GraphOS whenever possible. Since your router sends metrics in a best-effort fashion, it incurs no performance or uptime penalties while enabling several powerful GraphOS features, such as operation checks, field insights, operation traces, and contracts.
86100

87-
<Note>
88-
89-
A router using an offline license requires [the use of local manifests](/graphos/routing/security/persisted-queries#local_manifests) when using [safelisting with persisted queries](/graphos/routing/security/persisted-queries), otherwise it will not work as designed when the router is disconnected from Uplink.
90-
91-
</Note>
92-
93-
An offline license is valid for the lesser of the duration of your contract with Apollo, or one year, with an added grace period of 28 days. You are responsible for keeping your offline license files up to date within your infrastructure by rerunning `rover license fetch` to fetch updated license files.
94-
95101
### Set up offline license for the GraphOS Router
96102

97103
Follow these steps to configure an GraphOS Router to use an offline license:
@@ -103,7 +109,6 @@ Follow these steps to configure an GraphOS Router to use an offline license:
103109
```
104110

105111
1. Provide the offline license to your router on startup. The router accepts an offline license in a few ways:
106-
107112
1. [`--license <license_path>`](/graphos/reference/router/configuration#--license) CLI option, with an argument containing an absolute or relative path to an offline license file
108113
1. [`APOLLO_ROUTER_LICENSE_PATH`](/graphos/reference/router/configuration#--license) environment variable, containing an absolute or relative path to an offline license file
109114
1. [`APOLLO_ROUTER_LICENSE`](/graphos/reference/router/configuration#--license) environment variable, containing the stringified contents of an offline license file
@@ -121,26 +126,50 @@ Follow these steps to configure an GraphOS Router to use an offline license:
121126
* [`APOLLO_SUPERGRAPH_PATH`](/graphos/reference/router/configuration#-s----supergraph) environment variable, containing an absolute or relative path to supergraph schema file
122127
* [`APOLLO_SUPERGRAPH_URLS`](/graphos/reference/router/configuration#-s----supergraph) environment variable, containing URLs to supergraph schemas
123128

129+
<Note>
130+
131+
Update your local supergraph schema files using your CI/CD pipelines. Failing to propagate schema changes can lead to schema drift, unexpected errors, or outages.
132+
133+
</Note>
134+
124135
1. Configure the router to report usage metrics to GraphOS in a best-effort basis by setting both the [`APOLLO_KEY`](/graphos/reference/router/configuration#apollo_key) and [`APOLLO_GRAPH_REF`](/graphos/reference/router/configuration#apollo_graph_ref) environment variables.
125136

126137
These metrics are necessary for several important GraphOS features (operations checks, field insights, operation traces, contracts). Sending them best-effort incurs no performance or uptime penalties.
127138

128-
## Troubleshooting
139+
### Renew an offline license
129140

130-
**If your router doesn't successfully connect to GraphOS,** it logs an error that begins with one of the following strings if any GraphOS features are enabled:
141+
Because the router does not auto-fetch updated licenses, you need to keep license files current across all deployments.
131142

132-
| Error Message | Description |
133-
|-----------------------------|-------------|
134-
| `Not connected to GraphOS.` | At least one of the `APOLLO_KEY` and `APOLLO_GRAPH_REF` environment variables wasn't set on router startup. |
135-
| `License not found.` | The router connected to GraphOS with credentials that are not associated with a GraphOS plan. |
136-
| `License has expired.` | Your organization's GraphOS subscription has ended. **Your router will stop processing incoming requests at the end of the standard [grace period](#grace-period-for-expired-plans).** |
143+
Failure to rotate licenses before they expire causes the router to degrade. See [Grace period for expired plans](#grace-period-for-expired-plans).
144+
145+
Follow these steps to rotate your license regularly and safely:
146+
147+
1. Schedule a [`rover license fetch` job](/rover/commands/license) as part of every subscription renewal cycle.
148+
2. Securely distribute the newly generated license file to all router instances.
149+
3. Replace the existing license file immediately after the contract is renewed.
150+
4. Ensure your CI/CD or configuration management system includes this rotation step as a standard operational procedure.
151+
152+
### Stop using an offline license
153+
154+
If you no longer want the router to rely on an offline license, move back to online validation through Uplink or disable GraphOS features entirely to avoid license enforcement. Do this when routers regain reliable connectivity, when you want to eliminate manual license rotation, or when Apollo Support confirms your account should no longer operate in offline-licensed mode.
155+
156+
Follow these steps to stop using an offline license:
157+
158+
1. Remove any `--license` flags and unset all `APOLLO_ROUTER_LICENSE*` environment variables.
159+
1. Ensure that `APOLLO_KEY` and `APOLLO_GRAPH_REF` are set correctly so the router can authenticate with Uplink and retrieve entitlements automatically.
160+
161+
Once online, license renewal is handled through GraphOS without the need to manually rotate files.
162+
163+
If you prefer not to reconnect to Uplink and do not plan to renew the offline license, you must disable all GraphOS features that require entitlements before the grace period ends. Otherwise, once the license expires, the router will stop processing requests.
137164

138165
## Turning off GraphOS features
139166

140167
To turn off an GraphOS feature, remove all of its associated configuration keys from your router's [YAML config file](/graphos/reference/router/configuration#yaml-config-file).
141168

142169
## Grace period for expired plans
143170

171+
An offline license is valid for the lesser of the duration of your contract with Apollo, or one year, with an added grace period of 28 days. Keep your offline license files up to date by [renewing your license](#renew-an-offline-license).
172+
144173
If your organization terminates its GraphOS subscription, your router's license is considered expired at the end of your final paid subscription period. GraphOS provides a grace period for expired licenses so that you can turn off GraphOS features before they produce breaking errors in your router.
145174

146175
If your router has an expired GraphOS license, its behavior degrades according to the following schedule, _if_ any GraphOS features are still enabled:
@@ -150,3 +179,13 @@ If your router has an expired GraphOS license, its behavior degrades according t
150179
- **After 28 days,** your router begins a **hard outage**. It no longer processes incoming client requests and continues emitting logs and metrics from the soft outage.
151180

152181
Your router resumes normal functioning whenever you renew your GraphOS subscription or turn off all [GraphOS features](/graphos/routing/graphos-features).
182+
183+
## Troubleshooting
184+
185+
If your router doesn't successfully connect to GraphOS, it logs an error that begins with one of the following strings if any GraphOS features are enabled:
186+
187+
| Error Message | Description |
188+
|-----------------------------|-------------|
189+
| `Not connected to GraphOS.` | At least one of the `APOLLO_KEY` and `APOLLO_GRAPH_REF` environment variables wasn't set on router startup. |
190+
| `License not found.` | The router connected to GraphOS with credentials that are not associated with a GraphOS plan. |
191+
| `License has expired.` | Your organization's GraphOS subscription has ended. Your router will stop processing incoming requests at the end of the standard [grace period](#grace-period-for-expired-plans). |

0 commit comments

Comments
 (0)