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

  1. Restart Syncthing to clear transient DB states; deletions retry on next pull.
  2. If persistent, stop the service and rebuild the database (remove index dir / -reset-database), then let it re-scan.
  3. Verify disk health and free space on the database volume (ties into minHomeDiskFree).
  4. 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

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


AI-assisted analysis of syncthing/syncthing@058bcd7334 (2026-08-15). Data as JSON: /api/errors/ce7c9fb5eb0e6448. Report an issue: GitHub.