<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Full backup: carry on past a failing app, then keep the backup marked as partial]]></title><description><![CDATA[<p dir="auto">Following on from <a class="plugin-mentions-user plugin-mentions-a" href="/user/james" aria-label="Profile: james">@<bdi>james</bdi></a>'s suggestion in <a href="https://forum.cloudron.io/post/129999">https://forum.cloudron.io/post/129999</a> .</p>
<p dir="auto"><strong>What happens today</strong></p>
<p dir="auto">In <code>fullBackup()</code> (<code>src/backuptask.js</code>, the same in 10.0.4, 10.0.5 and master), each app is backed up in turn inside a loop, and the first failure ends the whole run:</p>
<pre><code>const [appBackupError, appBackupResult] = await safe(backupAppWithTag(app, ...));
...
if (appBackupError) throw appBackupError;
</code></pre>
<p dir="auto">Mail and the system data are only backed up after the loop, so when one app fails, every app after it in the list, plus mail and the system data, gets no backup from that run. If the failure persists (an app whose <code>backupCommand</code> keeps failing, for example), the same thing happens every night.</p>
<p dir="auto"><strong>Why it matters</strong></p>
<p dir="auto">For a whole-server restore, one app with a flagged, incomplete backup is much better than a server where half the apps, the mail and the system data have no fresh backup, all because of an app that may sit early in the list.</p>
<p dir="auto">It also leaves app packagers with two bad choices when a <code>backupCommand</code> cannot produce a complete backup. Exiting non-zero is honest, but it costs every other app on the server its backup. Exiting zero protects the others, but hides the failure from the platform, so packages end up inventing their own notices (our Meilisearch package writes a <code>BACKUP-FAILED.txt</code> and repeats it in the log at every start). We would much rather fail honestly.</p>
<p dir="auto"><strong>What we are asking for</strong></p>
<ol>
<li>When an app's backup fails, record the failure and carry on with the remaining apps, then mail and the system data.</li>
<li>Keep the resulting backup, but mark it as <strong>partial</strong>, and name the app or apps that failed and why.</li>
<li>Report the run as failed, with a notification naming those apps, so nothing passes as fine.</li>
<li>For the failed apps, either leave them out of the partial backup or point to their last good backup, but say which, so that a restore from a partial backup warns before it restores an app from something older or incomplete.</li>
<li>Do not let partial backups count towards retention in a way that prunes the last complete backup. Otherwise a week of partial runs could rotate out the only full one.</li>
</ol>
<p dir="auto">With that in place, packages can exit non-zero whenever their <code>backupCommand</code> genuinely fails, and the platform stays the one place where backup health is reported.</p>
<p dir="auto">We are happy to test a build against a package with a deliberately failing <code>backupCommand</code>.</p>
]]></description><link>https://forum.cloudron.io/topic/16011/full-backup-carry-on-past-a-failing-app-then-keep-the-backup-marked-as-partial</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 05:26:28 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/16011.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Sep 2026 12:48:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Full backup: carry on past a failing app, then keep the backup marked as partial on Fri, 25 Sep 2026 14:55:28 GMT]]></title><description><![CDATA[<p dir="auto">Interesting report. Another quirk of community packages. I wrote the whole backup logic with the assumption that backup fail was something we should fix. If the did fail, either it was some platform error or some external backup service error <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=9b8b86ff6f6" class="not-responsive emoji emoji-android emoji--smile" style="height:23px;width:auto;vertical-align:middle" title=":-D" alt="😄" /></p>
]]></description><link>https://forum.cloudron.io/post/130014</link><guid isPermaLink="true">https://forum.cloudron.io/post/130014</guid><dc:creator><![CDATA[girish]]></dc:creator><pubDate>Fri, 25 Sep 2026 14:55:28 GMT</pubDate></item></channel></rss>