lib/db, lib/model: Improve error handling on pending items (#7754)
This commit is contained in:
+12
-15
@@ -7,6 +7,7 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
@@ -28,11 +29,7 @@ func (db *Lowlevel) AddOrUpdatePendingDevice(device protocol.DeviceID, name, add
|
||||
|
||||
func (db *Lowlevel) RemovePendingDevice(device protocol.DeviceID) error {
|
||||
key := db.keyer.GeneratePendingDeviceKey(nil, device[:])
|
||||
if err := db.Delete(key); err != nil {
|
||||
l.Warnf("Failed to remove pending device entry: %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return db.Delete(key)
|
||||
}
|
||||
|
||||
// PendingDevices enumerates all entries. Invalid ones are dropped from the database
|
||||
@@ -86,30 +83,30 @@ func (db *Lowlevel) RemovePendingFolderForDevice(id string, device protocol.Devi
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := db.Delete(key); err != nil {
|
||||
l.Warnf("Failed to remove pending folder entry: %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return db.Delete(key)
|
||||
}
|
||||
|
||||
// RemovePendingFolder removes all entries matching a specific folder ID.
|
||||
func (db *Lowlevel) RemovePendingFolder(id string) error {
|
||||
iter, err := db.NewPrefixIterator([]byte{KeyTypePendingFolder})
|
||||
if err != nil {
|
||||
l.Infof("Could not iterate through pending folder entries: %v", err)
|
||||
return err
|
||||
return fmt.Errorf("creating iterator: %w", err)
|
||||
}
|
||||
defer iter.Release()
|
||||
var iterErr error
|
||||
for iter.Next() {
|
||||
if id != string(db.keyer.FolderFromPendingFolderKey(iter.Key())) {
|
||||
continue
|
||||
}
|
||||
if err = db.Delete(iter.Key()); err != nil {
|
||||
l.Warnf("Failed to remove pending folder entry: %v", err)
|
||||
if iterErr != nil {
|
||||
l.Debugf("Repeat error removing pending folder: %v", err)
|
||||
} else {
|
||||
iterErr = err
|
||||
}
|
||||
}
|
||||
}
|
||||
return err
|
||||
return iterErr
|
||||
}
|
||||
|
||||
// Consolidated information about a pending folder
|
||||
@@ -122,7 +119,7 @@ func (db *Lowlevel) PendingFolders() (map[string]PendingFolder, error) {
|
||||
}
|
||||
|
||||
// PendingFoldersForDevice enumerates only entries matching the given device ID, unless it
|
||||
// is EmptyDeviceID. Invalid ones are dropped from the database after a warning log
|
||||
// is EmptyDeviceID. Invalid ones are dropped from the database after a info log
|
||||
// message, as a side-effect.
|
||||
func (db *Lowlevel) PendingFoldersForDevice(device protocol.DeviceID) (map[string]PendingFolder, error) {
|
||||
var err error
|
||||
|
||||
Reference in New Issue
Block a user