Zackriya-Solutions/meetily · error · anyhow::Error

Failed to preserve after overlong response

Error message

Failed to preserve {} after overlong response: {}

What it means

When the download server sends more bytes than the artifact's declared exact_bytes, the code flushes the writer (to preserve what was written) before failing with the 'response exceeds exact size' error. This specific message is the flush failure — i.e. the OS/disk could not flush the partial file, masking the original overlong-response problem.

Solutions

  1. Free disk space (the flush failure is usually ENOSPC) and retry the download
  2. Check the target models directory is writable and not locked by antivirus/backup tools
  3. Verify the model server is serving the correct file matching the catalog's exact_bytes
  4. Report the server-side size mismatch to whoever publishes the model catalog

Example fix

// before
// no pre-check
writer.flush().await.map_err(|e| anyhow!("Failed to preserve {} after overlong response: {}", f, e))?;
// after
// check space up front to make flush failures rare
anyhow::ensure!(free_space(models_dir)? > artifact.exact_bytes, "insufficient disk space for {}", artifact.filename);
Defensive patterns

Strategy: validation

Validate before calling

// check disk space before starting download
let free = fs2::free_space(&models_dir)?;
anyhow::ensure!(free > artifact.exact_bytes + margin, "not enough disk space for {}", artifact.filename);

Try / catch

match result {
    Err(e) if e.to_string().contains("Failed to preserve") => {
        // flush failed: check disk space and file locks, then retry
        ensure_disk_space_and_unlock(models_dir)?;
        retry_download()
    }
    other => other,
}

Prevention

When it happens

Trigger: Server sent a body larger than artifact.exact_bytes (next_artifact_bytes > exact_bytes) AND the subsequent writer.flush().await failed at parakeet_engine.rs:1037-1039 — disk full, I/O error, file handle invalidated, or the underlying file was removed/locked.

Common situations: Disk full while buffering an oversized response; antivirus or backup software locking the partial model file; network share disconnect; server misconfigured to serve wrong/larger file than catalog declares.

Understand the failure class

Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.

Related errors


AI-assisted analysis of Zackriya-Solutions/meetily@a2cb62e827 (2026-09-12). Data as JSON: /api/errors/0c6f24970b8ffd53. Report an issue: GitHub.

Appendix: source

Thrown at frontend/src-tauri/src/parakeet_engine/parakeet_engine.rs:1038

                        writer.flush().await.map_err(|flush_error| {
                            anyhow!(
                                "Failed to preserve {} after stream error: {}",
                                artifact.filename,
                                flush_error
                            )
                        })?;
                        return Err(anyhow!("Download stream failed for {}: {}", artifact.filename, error));
                    }
                    Ok(Some(Ok(chunk))) => chunk,
                };

                let chunk_bytes = chunk.len() as u64;
                let next_artifact_bytes = artifact_bytes
                    .checked_add(chunk_bytes)
                    .ok_or_else(|| anyhow!("{} size overflow", artifact.filename))?;
                if next_artifact_bytes > artifact.exact_bytes {
                    writer.flush().await.map_err(|error| {
                        anyhow!("Failed to preserve {} after overlong response: {}", artifact.filename, error)
                    })?;
                    return Err(anyhow!(
                        "{} response exceeds its exact {} byte size",
                        artifact.filename,
                        artifact.exact_bytes
                    ));
                }
                let next_confirmed_bytes = confirmed_bytes
                    .checked_add(chunk_bytes)
                    .ok_or_else(|| anyhow!("Progress overflow while downloading {}", artifact.filename))?;
                if next_confirmed_bytes > total_bytes {
                    return Err(anyhow!("Download progress exceeds the catalog total"));
                }

                writer
                    .write_all(&chunk)
                    .await
                    .map_err(|error| anyhow!("Failed to write {}: {}", artifact.filename, error))?;

View on GitHub (pinned to a2cb62e827)