Conversation
…REPEATABLE READ transactions
…REPEATABLE READ transactions
…mplify NULL field management
…ironment and E2E tests
…bID` and `errMsg`.
… and refactor related logic
…ment consistency, enhance return type clarity, and address stale job handling
…nd On-Prem backends
…ment consistency, enhance return type clarity, and address stale job handling
…mance and reduce database load.
…che handling and reduce database queries
…ze database queries
…ce database queries
… reduce database queries
…uce database queries
…lities for cache-aside operations; remove legacy implementation.
…hedrepo` utilities for cache-aside operations.
…chedrepo` utilities for cache-aside operations.
…o `cachedrepo` utilities for cache-aside operations.
…e to `cachedrepo` utilities for cache-aside operations.
…migrate to `cachedrepo` utilities for cache-aside operations.
…grate to `cachedrepo` utilities for cache-aside operations.
…s; add `TimeWindow` tests across modules.
…rt file validation logic.
… e2e tests. Update configurations and operations to use dynamic resource names instead of hardcoded defaults.
|
@cursoragent bugbot review |
|
The GH token still lacks comment permissions. Here is the full third review inline. Third Review — 19 New Commits Since Last ReviewMajor new work: time-window exporter refactor, Critical — New1. 2. High — New
Medium — New
Low — New
Previously Resolved (still good)All fixes from reviews 1 and 2 remain intact: |
…indow in `NewExporterWithWindow`.
…duling; update task logic to use dynamic backup intervals.
|
|
||
| postgres: | ||
| image: postgres:15.2-alpine | ||
| image: postgres:18-alpine |
There was a problem hiding this comment.
@jirevwe, was this absolutely necessary? I don't have an issue with it. I am only worried about self-hosted upgrades and if there are any incompatibilities users might run into. If we can't do without it, then we'll need to have upgrade notes.
Also, if this is a prerequisite i'm curious about the availability across cloud providers.
| hour_start TIMESTAMPTZ NOT NULL, | ||
| hour_end TIMESTAMPTZ NOT NULL, | ||
| status VARCHAR NOT NULL DEFAULT 'pending', | ||
| worker_id VARCHAR, |


Summary
Overhauls the backup/export infrastructure to support streaming uploads, multiple storage backends, CDC-based backup via PostgreSQL logical replication, incremental time-windowed exports, and on-demand
manual backup via CLI and API.
Two Backup Modes
pglogrepl, buffers in memory, flushes to blob storage on interval. Zero DB load at export time, 1 persistent replication connection.Toggle via
CONVOY_CDC_BACKUP_ENABLED=true. Both produce gzip-compressed JSONL atbackup/{date}/{table}/{timestamp}.jsonl.gz.Three Storage Backends
s3managerazblob.UploadStream, auto-creates containerNew
BlobStoreinterface (Upload(ctx, key, io.Reader)) replaces the old file-basedObjectStore.Save(filename)pattern, eliminating/tmpdisk usage during S3 uploads.Manual Backup (CLI + API)
Operators can trigger one-time backups on demand — always uses the cron-based exporter, never CDC, regardless of config:
Key Changes
JSONL to any BlobStore on a configurable interval. Atomic flushedLSN, at-least-once flush semantics.
Added NewExporterWithWindow for manual backups with explicit start/end bounds.
Configuration
Tessting