charles-gauthereau b0da2e40a3 feat: retry the database backup
Each attempt now dumps into its own tmp_path/attempt-{n} directory,
which is removed when the attempt fails. Without the per-attempt
directory pg_dump -Fd would refuse every retry, because it will not
write into a directory a previous attempt left behind; removing it on
failure keeps peak disk at one attempt's artifacts rather than five.

A backup blocked by a concurrent job is retried before surfacing the
same backup_already_in_progress code, since FileLock reports it as an
ordinary error and the combinator cannot tell it apart.

Reshapes retry()'s bound from the native AsyncFnMut sugar to the
classic F: FnMut(u32) -> Fut, Fut: Future<Output = Result<T, E>> + Send
shape (the pattern tokio-retry and backoff both use). AsyncFnMut's
produced future is a lifetime-quantified associated type
(F::CallRefFuture<'_>) that cannot be named or bounded as Send on
stable Rust, so wiring a retried call through it into a future that
eventually gets polled inside tokio::spawn (dispatcher.rs, via
execute_backup) made rustc's opaque-type Send inference fail with
"implementation of Send is not general enough" at the spawn site,
several call layers away from the actual retry call. Naming Fut as its
own type parameter lets Send be asserted on it directly instead, which
resolves cleanly. The combinator's control flow, log messages, and
formats are unchanged; only the bound and the call sites' closure
shape (async |x| { } becomes |x| async { }, with shared references
bound outside a move closure so the inner async move block only moves
Copy references, not the originals) are affected.
2026-08-27 18:39:41 +02:00
2026-07-25 15:19:46 +02:00
2026-03-27 22:24:59 +01:00
2026-08-21 13:50:40 +02:00
2026-07-24 18:29:04 +02:00
2026-08-27 18:39:41 +02:00
2026-03-05 11:19:47 +01:00
2026-01-03 23:55:50 +01:00
2026-03-08 20:58:19 +01:00
2026-08-21 17:09:15 +00:00
2026-08-21 17:09:15 +00:00
2026-08-21 17:09:15 +00:00
2026-07-02 21:51:17 +02:00
2026-05-11 22:04:36 +02:00
2026-03-27 22:24:59 +01:00
2026-03-16 12:16:03 +01:00
2026-07-24 18:29:04 +02:00


Logo

Portabase Agent (Rust)

Portabase Agent is use with Portabase Server. This service is for backup/restore db instances. Portabase Server

License: Apache Docker Pulls Helm Chart Platform Support Portabase

PostgreSQL MySQL SQLite Redis MariaDB MongoDB Valkey Firebird

Self Hosted Open Source

Rust Tokio Redis Docker

WebsiteDocumentationDemoInstallationReport BugRequest Feature

Installation

You have 4 ways to install Portabase Agent:

Ensure Docker is installed on your machine before getting started.

Contributors

Contributors

"Support Portabase"

License

Distributed under the Apache License. See LICENSE.txt for more information.

S
Description
Agent for the Portabase Server. Database backup & restore tool for PostgreSQL, MsSQL, MySQL/MariaDB, MongoDB, SQLite, Redis, Valkey, Firebird and Docker Volume.
Readme Cite this repository 160 MiB
Languages
Rust 96.9%
Shell 1.3%
Dockerfile 1%
Just 0.7%
TSQL 0.1%