syncthing/syncthing · error
delete file: %w
Error message
delete file: %w
What it means
Pull error in deleteFile when fetching the current local database record for the file being deleted fails at the DB level. Before deleting, Syncthing looks up the existing FileInfo (needed to decide archiving vs plain delete); a GetDeviceFile error — not mere absence — aborts with 'delete file' before any filesystem action.
Source
Thrown at lib/model/folder_sendrecv.go:868
if fs.IsNotExist(err) || fs.IsErrCaseConflict(err) {
err = nil
dbUpdateChan <- dbUpdateJob{file, dbUpdateDeleteDir}
}
return
}
if err = f.deleteDirOnDisk(file.Name, scanChan); err != nil {
return
}
dbUpdateChan <- dbUpdateJob{file, dbUpdateDeleteDir}
}
// deleteFile attempts to delete the given file
func (f *sendReceiveFolder) deleteFile(file protocol.FileInfo, dbUpdateChan chan<- dbUpdateJob, scanChan chan<- string) {
cur, hasCur, err := f.model.sdb.GetDeviceFile(f.folderID, protocol.LocalDeviceID, file.Name)
if err != nil {
f.newPullError(file.Name, fmt.Errorf("delete file: %w", err))
return
}
f.deleteFileWithCurrent(file, cur, hasCur, dbUpdateChan, scanChan)
}
func (f *sendReceiveFolder) deleteFileWithCurrent(file, cur protocol.FileInfo, hasCur bool, dbUpdateChan chan<- dbUpdateJob, scanChan chan<- string) {
// Used in the defer closure below, updated by the function body. Take
// care not declare another err.
var err error
f.sl.Debug("Deleting file or symlink", slogutil.FilePath(file.Name))
f.evLogger.Log(events.ItemStarted, map[string]string{
"folder": f.folderID,
"item": file.Name,
"type": "file",
"action": "delete",
})View on GitHub (pinned to 058bcd7334)
Solutions
- Restart Syncthing to clear transient DB states; deletions retry on next pull.
- If persistent, stop the service and rebuild the database (remove index dir / -reset-database), then let it re-scan.
- Verify disk health and free space on the database volume (ties into minHomeDiskFree).
- Upgrade to the latest release for database robustness fixes.
Defensive patterns
Strategy: retry
Try / catch
if strings.Contains(errStr, "delete file") && isDBReadError(err) {
// restart service; if persistent, schedule database reset during a maintenance window
} Prevention
- Graceful shutdowns only; avoid SIGKILL during sync.
- Monitor DB disk space and I/O errors.
- Maintain backups/restoral procedure for a database reset (full rescan cost).
When it happens
Trigger: deleteFile pulls a remote deletion, and model.sdb.GetDeviceFile(folderID, LocalDeviceID, file.Name) returns corruption/IO error from the database layer.
Common situations: LevelDB corruption or heavy compaction I/O errors; disk space exhaustion on the home/database volume; database damaged after power loss or forced kill.
Related errors
- handling dir: %w
- delete dir: %w
- not found (folder/file not in database)
- restart after db reset initiated by rest API
- encountered directory when trying to remove file/symlink
AI-assisted analysis of syncthing/syncthing@058bcd7334 (2026-08-15).
Data as JSON: /api/errors/ce7c9fb5eb0e6448.
Report an issue: GitHub.