Upgrading
Release notes for each version are on the Edge Site releases page. Read them before upgrading.
If your Edge Site runs edge-site Helm chart 0.0.32 or earlier, follow Upgrade from chart 0.0.x instead.
Upgrade the edge controller
- Debian package
- Statically linked Linux executable
- Docker image
- Kubernetes
Download the latest package from the Edge Site releases page, saving it as /tmp/foxglove-edge-controller.deb, and install it:
sudo apt install /tmp/foxglove-edge-controller.deb
The package keeps your envfile and catalog, and restarts the service. Check the logs for the new version number:
journalctl -u foxglove-edge-controller
Download the latest binary from the Edge Site releases page. Then stop the running edge controller, replace the executable, and start it again with the same environment.
Pull the image for the latest version from the Edge Site releases page, then stop and remove the container:
docker pull us-central1-docker.pkg.dev/foxglove-images/images/edge-controller:<version>
docker stop foxglove-edge-controller
docker rm foxglove-edge-controller
Start a new container with the new version, using the docker run command in Run the edge controller. Keep the same catalog volume.
New releases of the Helm chart are available to view in GitHub. Update the list of versions available to Helm, and view them with helm search:
helm repo update
helm search repo foxglove/edge-site --versions
Upgrade to a version from that list with your complete values file:
helm upgrade foxglove-edge-site foxglove/edge-site \
--namespace foxglove \
--version <version> \
--values ./values.yaml
Always pass --version. Without it, helm upgrade installs the latest chart.
Helm keeps your current settings on its own only when you pass no --values or --set options at all; in that case it reuses the values stored with the release. If you pass either option, any value you leave out returns to the chart's default. To get the values stored with the release, run:
helm get values foxglove-edge-site --namespace foxglove --output yaml
Upgrade from chart 0.0.x
The edge-site Helm chart 0.1.0 and later run a reimplemented edge controller. It can keep your site's existing catalog, but it doesn't find it on its own. Chart 0.0.32 and earlier store the catalog at /data/index/foxglove.db on the index volume, while chart 0.1.0 and later default to /data/index/controller.db.
If you upgrade without pointing the edge controller at the existing catalog, it creates a new catalog at the default location and starts a new site epoch. Foxglove then treats the site's existing recordings as removed from the Edge Site.
Before you upgrade
Check the following, and resolve any differences before upgrading:
- Recording storage. If your values set
recordingStorage.providertos3_compatible, or setrecordingStorage.bucketName, stay on chart 0.0.32 and contact support. The edge controller reads recordings only from the recording storage Persistent Volume Claim. WithrecordingStorage.providerset to anything other thanlocal, chart 0.1.x exits at startup withinvalid storage root /data/storage. - Recordings API clients. Requests to
POST /v1/recordingsmust includeprojectId.deviceNamemust be up to 100 characters, using letters, digits,_,., and-. Paths must be relative to the storage directory, and can't be absolute or contain...GET /v1/recordingsisn't available. See Recordings API. - Recording paths. On the Recordings page, check the paths of this site's recordings. If any path is absolute or contains
.., contact support before upgrading. Retention resolves those paths as written, not inside the storage directory. It can delete a file outside the storage directory, or report a recording as deleted while its file stays in the storage directory. - Environment overrides. Review
edgeController.envin your values file:GARBAGE_COLLECTION_MAX_WORKERS,SLOW_QUERY_LOG_MIN_DURATION,SLOW_QUERY_LOG_PARAMETERS,DISABLE_DATABASE_STATISTICS_REPORTING,DISABLE_SERVER, andRECORDING_STORAGE_BUCKET_NAMEare no longer read.- Chart 0.0.x keeps watch mode off when
WATCH_MODEisn't set, and later chart versions might not. To keep submitting recordings only through the recordings API, addWATCH_MODEwith the value'"false"'. - In
WATCH_AUTO_IMPORT_PATTERN,*matches across directory separators, so*.mcapalso matches recordings in subdirectories. WATCH_IGNORE_SUFFIXis deprecated. The edge controller applies it only when noWATCH_INCLUDE_*orWATCH_EXCLUDE_*variable is set. Setting any of those variables also stops the default exclusion of.activeand.jsonfiles. To filter recordings, use the variables in Recording filters.
- Google Cloud Storage uploads. Verify that your existing credential file and bucket permissions support the reimplemented edge controller. Uploads at or above
MULTIPART_PART_SIZE(8 MiB by default) use XML multipart uploads, which need additional permissions. See Google Cloud Storage credentials. - Azure uploads. Add
STORAGE_AZURE_STORAGE_ACCOUNT_NAMEto yourcloud-credentialsSecret, or setglobals.upload.bucketNameto<account>/<container>. See Configure cloud credentials. - Metrics.
imports_gigabytesandrecording_upload_msare no longer exposed.recordings_gigabyteschanges from a cumulative value updated during indexing and uploads to a catalog-size snapshot, using units of 1024³ bytes instead of decimal gigabytes. Userecordings_indexed_bytesandrecordings_imported_bytesfor indexing and upload rates. See Available metrics.
Upgrade steps
-
Save the values your chart 0.0.x release uses, and make a copy to edit:
helm get values foxglove-edge-site --namespace foxglove --output yaml > values-0.0.x.yamlcp values-0.0.x.yaml values.yamlIn
values.yaml, add the existing catalog's location:edgeController:env:- name: DATABASE_CONNECTION_STRINGvalue: sqlite://file:/data/index/foxglove.dbIf
values.yamlalready has anedgeController.envlist, add the entry to that list instead of adding a secondedgeControllerkey.This is chart 0.0.x's connection string without its
?_journal_mode=WALsuffix. Don't copy the suffix: the edge controller exits at startup withunknown query parameter `_journal_mode` while parsing connection URL. Keep this setting in your values file for all later upgrades. -
Pause processes that submit recordings to the recordings API. Let in-flight imports finish, or record any unresolved import requests and their status for follow-up. Keep normal recording submissions paused until validation is complete.
-
Stop the edge controller and wait for its pod to terminate:
kubectl scale statefulset site-controller --replicas=0 -n foxglovekubectl wait --for=delete pod/site-controller-0 \--namespace foxglove --timeout=120sScaling changes the desired replica count without waiting for shutdown. Continue only once the pod is absent; if the wait times out, resolve the shutdown before proceeding.
-
Back up the index volume (the
edge-controller-index-claimPersistent Volume Claim, unless you changededgeController.indexClaim). With the controller stopped, take a snapshot with your storage provider's tools, or copyfoxglove.dband anyfoxglove.db-walandfoxglove.db-shmfiles off the index volume as one backup set. Keep the backup until you've confirmed the upgrade.On the Recordings page, record the paths of a few recent recordings from this site.
-
Upgrade the release to the latest chart version from
helm search repo foxglove/edge-site --versions:helm repo updatehelm upgrade foxglove-edge-site foxglove/edge-site \--namespace foxglove \--version <version> \--values ./values.yamlThe upgrade restores the StatefulSet to one replica. If the pod doesn't start, scale it up:
kubectl scale statefulset site-controller --replicas=1 -n foxglove -
Check the logs:
kubectl logs -n foxglove statefulset/site-controllerOn a site with existing recordings, the
site initializedentry must show asite_epochof0. A legacy catalog with neither recordings nor reporting history gets a new epoch at first start, which is expected. A higher epoch on a site with existing recordings means the controller started with a new catalog instead of adopting the existing one. In that case, stop it and contact support. -
Confirm that the site shows as "Online" on the Sites settings page, and that the recordings from step 4 are still listed on the Recordings page.
-
With normal recording submissions still paused, submit a completed test recording using your updated recordings API client. Confirm that the POST succeeds and the recording appears in Foxglove, then import it to your Primary Site and wait for the import to complete. Test with the site's existing credentials and network configuration, including any proxy. For self-managed uploads, use a recording at or above the configured
MULTIPART_PART_SIZE(8 MiB by default) to validate multipart permissions. -
Resume normal recording submissions after these checks pass, and check any unresolved import requests from step 2.
Roll back
To return to chart 0.0.32 before the chart 0.1.x edge controller has started, upgrade to chart 0.0.32 with your chart 0.0.x values file, without the DATABASE_CONNECTION_STRING override:
helm upgrade foxglove-edge-site foxglove/edge-site \
--namespace foxglove \
--version 0.0.32 \
--values ./values-0.0.x.yaml
If the chart 0.1.x edge controller has started, it has already updated the catalog in place, and chart 0.0.32 can't reliably use it:
- Pause recording submissions, scale the StatefulSet to zero, and wait for
site-controller-0to terminate, as in upgrade step 3. - Restore the index-volume snapshot, or replace
foxglove.dband its-waland-shmfiles with the matching backup set. Remove any post-upgrade catalog and sidecar files before restoring the file backup, including sidecars that aren't present in the backup. Keep the controller stopped throughout the restore. - Run the chart 0.0.32 upgrade command above, confirm that the controller starts, and resume recording submissions.
Recordings cataloged after the backup aren't in the restored catalog.
If the chart 0.1.x edge controller started a new site epoch, restoring the backup doesn't bring back the recordings Foxglove treated as removed. Contact support.