Files
c-relay-pg/plans/caching_code_consolidation_plan.md

2.7 KiB

Caching Code Consolidation Plan

Goal

Move all caching_relay source code into a caching/ directory inside c-relay-pg, and switch the launcher to use PostgreSQL mode (-p <pg-conn>) so all config comes from the c-relay-pg config table — no JSON config file needed.

Key Finding

The caching_relay binary already supports PG mode via -p <pg-conn>. Its pg_config.c reads the same config table keys the caching page sets (caching_root_npubs, caching_bootstrap_relays, caching_kinds, etc.), and pg_inbox.c writes fetched events to the caching_event_inbox table. The PG schema tables already exist in src/pg_schema.sql.

Steps

Step 1: Create caching/ directory and copy source files

Copy all src/*.c and src/*.h from /home/user/lt/caching_relay/src/ into caching/src/ in this repo. Also copy the Makefile, build_static.sh, Dockerfile.alpine-musl, and VERSION.

Files to copy:

  • src/main.c, src/main.h
  • src/config.c, src/config.h (legacy JSON config — kept for fallback)
  • src/pg_config.c, src/pg_config.h (PG config reader)
  • src/pg_inbox.c, src/pg_inbox.h (PG inbox writer)
  • src/backfill.c, src/backfill.h
  • src/follow_graph.c, src/follow_graph.h
  • src/live_subscriber.c, src/live_subscriber.h
  • src/relay_sink.c, src/relay_sink.h (legacy WebSocket sink — kept for fallback)
  • src/relay_discovery.c, src/relay_discovery.h
  • src/state.c, src/state.h
  • src/debug.c, src/debug.h
  • src/jsonc_strip.c, src/jsonc_strip.h
  • Makefile
  • VERSION

Step 2: Adapt the Makefile

Update caching/Makefile to:

  • Point NOSTR_CORE_DIR at ../nostr_core_lib (sibling in this repo)
  • Output binary to caching/caching_relay or build/caching_relay

Step 3: Update the launcher to use PG mode

Update src/caching_service_launcher.c:

  • Change caching_service_start_fork() to pass -p <pg_conn> instead of -c <config_path>
  • Update caching_service_start() to read caching_service_pg_conn from config table instead of caching_service_config_path

Step 4: Remove config_path from defaults and UI

  • Remove caching_service_config_path from src/default_config_event.h
  • Remove the "Caching Service Config Path" field from api/index.html
  • Remove the field from CACHING_CONFIG_FIELDS in api/index.js
  • Update caching_service_binary_path default to point at the new build location (./caching/caching_relay or ./build/caching_relay)

Step 5: Build and test

  • Build the caching_relay binary from the new caching/ directory
  • Build c-relay-pg with the updated launcher
  • Test: set caching config on the page, apply, start service, verify it runs in PG mode reading config from the database

Step 6: Push

Run ./increment_and_push.sh with a descriptive commit message.