james.maes a825360ba1 Merge pull request #24 from QRun-IO/feature/health-system-session
fix(health): run the context-less health check as the system user
2026-10-14 17:36:41 -05:00

QBit Backups

License Java

QQQ QBit: logical backup, restore and verification of QQQ data to S3-compatible storage.

Status: design: QRun-IO/qqq#1091; implementation in progress. Nothing is published yet.

Requirements

  • Java 21.
  • QQQ 4.1 (targets 4.1.0-RC.6, not yet released).

Install

Not yet published. Once released, add com.kingsrook.qbits:qbit-backups and produce the qbit into your QInstance:

new BackupsQBitProducer()
   .withQBitConfig(new BackupsQBitConfig().withBackendName("rdbms"))
   .produce(qInstance);

Setup

This qbit ships no DDL and seeds nothing from a changelog: its one setup value, the storage bucket alias, belongs to your application. On a fresh install open Backups, read the Setup card, and run Create default plan on Backup plans (it asks only for the alias of a bucket your storage resolver provides). It creates the insert-only "Nightly full" plan: whole instance, data and audit tables, JSONL and gzip, 02:00 UTC, verified Sundays 04:00 UTC. Edit any setting afterwards. Help for every table, including how its rows get created, ships in help/qbit-backups.yaml.

Naming

Tables are backups_<name> (lowercase snake_case, backend name equal to the table name). Permissions are backups.<action>.

Adopting in another app

Follow the QQQ adoption checklist once the first release is published.

Build

./mvnw verify

Before RC.6 is released, verify against the locally installed core build only:

./mvnw -B verify -Dqqq.snapshot.version=4.1.0-ARCHRC6-SNAPSHOT

The POM stays on RC.6. See the RC.6 migration notes for fingerprint compatibility, paging guarantees and restore permissions.

Always use the Maven wrapper (Maven 3.9.11); Maven 3.10 cannot read the parent POM.

License

Apache License 2.0. See LICENSE and NOTICE.

Alerts integration

Backups binds directly to core QAlerts in QQQ 4.1.0-RC.5 and declares its nine alert types on each instance. Hosts install an AlertSinkInterface through AlertsInstanceMetaData.withSink(QCodeReference). Without a configured sink, backup alert calls remain no-ops (they do not use core's logging fallback). Custom BackupAlertSink bindings are preserved. Core handles dispatch failures; adapter failures are caught and logged once, so alerting cannot fail a backup. Raise and resolve follow core's transaction-aware dispatch; heartbeats run immediately. The backup SLA checker still owns expected intervals and grace periods.

RC.5 requires hyphenated alert names: backups.run.missing-in-storage and backups.plan.owner-invalid replace the former underscore spellings, including their deduplication keys. Update host routing rules that used those spellings.

S
Description
QQQ QBit: logical backup, restore and verification of QQQ data to S3-compatible storage
Readme
20 MiB
0 Stars 3 Watchers 0 Forks
Languages
Java 100%