From c85c7f48e8f29923038d4c90cc1a6f9b8bcd7673 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Fri, 9 Oct 2026 18:23:52 +0200 Subject: feat(node): refuse an upload on a full disk with a stated reason Nothing on the upload path knew about ENOSPC: a write that found no room raised out of the handler, the catch-all answered "Request failed", and the .part stayed behind holding the space that had run out. The node now refuses with `disk_full` at chunk 0 when the announced size would leave less than 1 GiB free, and at any write that fails with ENOSPC/EDQUOT, dropping the partial. The client carries the code on the error and the transfers panel says "The node's disk is full" in every catalogue. Co-Authored-By: Claude Opus 5.5 --- packages/meshbay-hub/src/meshbay_hub/static/transport-upload.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'packages/meshbay-hub/src/meshbay_hub/static/transport-upload.js') diff --git a/packages/meshbay-hub/src/meshbay_hub/static/transport-upload.js b/packages/meshbay-hub/src/meshbay_hub/static/transport-upload.js index a8f039d..e11613d 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/transport-upload.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/transport-upload.js @@ -80,6 +80,10 @@ extendTransport(class { // this client did before there was anything to ask. if (answerProbe(0)) return; failure = new Error(msg.detail || 'Upload refused'); + // Carried so a caller can tell a refusal it can act on (`disk_full`: + // stop, nothing will fit until the operator makes room) from one it + // cannot. The detail is English; whoever shows it translates by code. + if (msg.code) failure.code = msg.code; wake(); return; } -- cgit v1.2.3