diff --git a/internal/files/leveldb.go b/internal/files/leveldb.go index 8ace2d53..362c0400 100644 --- a/internal/files/leveldb.go +++ b/internal/files/leveldb.go @@ -17,6 +17,7 @@ package files import ( "bytes" + "fmt" "runtime" "sort" "sync" @@ -59,6 +60,21 @@ type versionList struct { versions []fileVersion } +func (l versionList) String() string { + var b bytes.Buffer + var id protocol.DeviceID + b.WriteString("{") + for i, v := range l.versions { + if i > 0 { + b.WriteString(", ") + } + copy(id[:], v.device) + fmt.Fprintf(&b, "{%d, %v}", v.version, id) + } + b.WriteString("}") + return b.String() +} + type fileList []protocol.FileInfo func (l fileList) Len() int { @@ -576,9 +592,15 @@ func ldbWithGlobal(db *leveldb.DB, folder []byte, truncate bool, fn fileIterator l.Debugln(dbi.Key()) panic("no versions?") } - fk := deviceKey(folder, vl.versions[0].device, globalKeyName(dbi.Key())) + name := globalKeyName(dbi.Key()) + fk := deviceKey(folder, vl.versions[0].device, name) bs, err := snap.Get(fk, nil) if err != nil { + l.Debugf("folder: %q (%x)", folder, folder) + l.Debugf("key: %q (%x)", dbi.Key(), dbi.Key()) + l.Debugf("vl: %v", vl) + l.Debugf("name: %q (%x)", name, name) + l.Debugf("fk: %q (%x)", fk, fk) panic(err) } @@ -670,6 +692,15 @@ outer: fk := deviceKey(folder, vl.versions[i].device, name) bs, err := snap.Get(fk, nil) if err != nil { + var id protocol.DeviceID + copy(id[:], device) + l.Debugf("device: %v", id) + l.Debugf("need: %v, have: %v", need, have) + l.Debugf("key: %q (%x)", dbi.Key(), dbi.Key()) + l.Debugf("vl: %v", vl) + l.Debugf("i: %v", i) + l.Debugf("fk: %q (%x)", fk, fk) + l.Debugf("name: %q (%x)", name, name) panic(err) }