Skip to content

graphsense-lib 2.20.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 14:16
· 8 commits to master since this release

[2.20.0] - 2026-10-29

graphsense-cli sync run gains scheduled tasks (e.g. the weekly cross-chain pubkey update), and Delta Lake compaction no longer deletes files a running Spark job still reads. The API version stays 2.19.0 (no OpenAPI change, no new Python client).

Upgrade notes

  • Vacuum keeps removed Delta Lake files for 48h (was 0), so storage of compacted-away files is freed two days later.
  • sync run --once exits 2 when the sync section or the -c network is missing from the config (was 0).

Web API + Python client

Changed

  • A non-JSON error answer from the notifications service (e.g. a proxy's HTML error page) is no longer passed to the client; the client gets the status and its reason phrase, and the body is logged.

Library

Added

  • sync run runs scheduled tasks (sync.tasks): a graphsense-cli command at a time of day (UTC), optionally on one weekday, on one daemon of the task's channel at a time. A missed time is caught up, a failure alerts and is retried every retry_minutes, and the last run survives restarts. sync status lists the tasks; sync pause/resume --task <name>. Replaces the cron line of the weekly pubkey update.
  • transformation pubkey-update-all: pubkey-update --skip-detect for every network with a delta sink (or -n, in that order), then pubkey-detect, pubkey-compact and, for a delta sink, pubkey-load, as one job.
  • Tagpack validation names the t1 address behind a ZIP-320 TEX address (tex1…) in its hint; the chain, and so the tagstore lookup, only has the t1 form.

Changed

  • sync run warns once, not every second, when the sync section or a -c network is missing from the config; with --once it then exits 2 instead of 0.
  • Sync jobs log the config file they run with, instead of "Running version … without a config".
  • Compatible with pandas 3.1 (no inplace=True, deprecated there). Dependency updates: pandas 3.1.0, fastapi 0.162.0, authlib 1.9.1, dnspython 2.9.0 (GHSA-45c3-73f7-pv4m), aiohttp 3.14.4, uv image 0.13.6; Python client: python-dateutil 3.0.0.

Fixed

  • Delta Lake compaction no longer deletes files a running Spark job still reads. Vacuum kept no removed files (retention 0), so a transformation or pubkey-update that overlapped a compaction of its source network could fail mid-read on a missing parquet file. Removed files are now kept for 48h; storage of compacted-away files is freed that much later. The time of the last vacuum is stored in the table property graphsense.lastVacuum, since a vacuum that deletes nothing leaves no commit to schedule auto_compact on.
  • The legacy ingest pipeline (GRAPHSENSE_LEGACY_INGEST) honours ingest_config.reorg_backoff_blocks; it always used the built-in backoff.
  • --auto-compact-last-n 0 is refused like auto_compact_last_n: 0 in the config; it silently fell back to the default.
  • A stop while taking a Redis lock no longer leaves the lock behind, also in the moment between acquiring it and starting work.

Full Changelog: v2.19.0...v2.20.0