Skip to main content

Cache invalidation

Fused caches UDF results automatically (see Efficient caching). When you need to force-refresh cached results — after updating source data, fixing a bug in a UDF, or redeploying a pipeline — you can invalidate the cache programmatically.

Python SDK​

Call invalidate_cache() on any saved UDF object to clear its cached results.

Full cache​

@fused.udf
def udf():
parent = fused.load("udf_to_invalidate")
parent.invalidate_cache()
data = parent()
return data

Single tile​

For Tile UDFs, you can invalidate the cache for a specific tile instead of the entire UDF. Pass z, x, and y as keyword arguments:

udf = fused.load("udf_to_invalidate")

udf.invalidate_cache(z=15, x=9647, y=12320)
note

All three tile coordinates (z, x, y) must be provided together. You cannot invalidate by zoom level alone.

HTTP API with service token​

You can also invalidate cache via the HTTP API, authenticated with a Fused Service Account. This is useful for CI/CD pipelines, cron jobs, or any automation that runs outside of Fused.

The endpoint is:

DELETE https://www.fused.io/server/v1/realtime-shared/{client_id}/udf-cache/by-id/{udf_id}/delete

Both values can be looked up with the Python SDK:

@fused.udf
def udf():
import pandas as pd

my_udf = fused.load("udf_to_invalidate")
udf_id = my_udf.metadata["fused:id"]
client_id = fused.options.realtime_client_id

return pd.DataFrame({"udf_id": [udf_id], "client_id": [client_id]})

These values stay stable and can be stored as environment variables. The service account token should be stored securely as a secret.

Full cache​

import requests
import os

fused_service_account_token = os.getenv("FUSED_SERVICE_ACCOUNT_TOKEN")

headers = {
"Authorization": f"fused-service-token {fused_service_account_token}",
}

response = requests.delete(
f"https://www.fused.io/server/v1/realtime-shared/{client_id}/udf-cache/by-id/{udf_id}/delete",
headers=headers,
)
response.raise_for_status()

Single tile​

Append z, x, and y as query parameters to scope the purge to one tile:

response = requests.delete(
f"https://www.fused.io/server/v1/realtime-shared/{client_id}/udf-cache/by-id/{udf_id}/delete",
headers=headers,
params={"z": 15, "x": 9647, "y": 12320},
)
response.raise_for_status()
note

All three query parameters (z, x, y) must be provided together. The server returns 422 Unprocessable Entity if only some are present.

See also​