From ac190b2e39cc37de77d56659b600e4531e3b2f06 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Sun, 3 Jan 2016 19:08:19 +0100 Subject: [PATCH] Change DB label format (index folders, devices) --- cmd/syncthing/locations.go | 2 +- cmd/syncthing/main.go | 14 +- lib/db/.gitignore | 1 + lib/db/blockmap.go | 53 +++---- lib/db/blockmap_test.go | 11 +- lib/db/leveldb.go | 2 + lib/db/leveldb_convert.go | 114 ++++++++++++++ lib/db/leveldb_convert_test.go | 136 +++++++++++++++++ lib/db/leveldb_dbinstance.go | 245 ++++++++++++++++++++++++------- lib/db/leveldb_test.go | 7 +- lib/db/set.go | 4 +- lib/db/testdata/oldformat.db.zip | Bin 0 -> 139879 bytes lib/db/virtualmtime.go | 7 +- test/util.go | 51 ++++--- 14 files changed, 522 insertions(+), 125 deletions(-) create mode 100644 lib/db/leveldb_convert.go create mode 100644 lib/db/leveldb_convert_test.go create mode 100644 lib/db/testdata/oldformat.db.zip diff --git a/cmd/syncthing/locations.go b/cmd/syncthing/locations.go index 54c6dd86e..9fbd4d6b7 100644 --- a/cmd/syncthing/locations.go +++ b/cmd/syncthing/locations.go @@ -48,7 +48,7 @@ var locations = map[locationEnum]string{ locKeyFile: "${config}/key.pem", locHTTPSCertFile: "${config}/https-cert.pem", locHTTPSKeyFile: "${config}/https-key.pem", - locDatabase: "${config}/index-v0.11.0.db", + locDatabase: "${config}/index-v0.13.0.db", locLogFile: "${config}/syncthing.log", // -logfile on Windows locCsrfTokens: "${config}/csrftokens.txt", locPanicLog: "${config}/panic-${timestamp}.log", diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 012584071..b21350fda 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -633,6 +633,7 @@ func syncthingMain(runtimeOptions RuntimeOptions) { dbFile := locations[locDatabase] ldb, err := db.Open(dbFile) + if err != nil { l.Fatalln("Cannot open database:", err, "- Is another copy of Syncthing already running?") } @@ -1153,12 +1154,13 @@ func autoUpgrade(cfg *config.Wrapper) { // suitable time after they have gone out of fashion. func cleanConfigDirectory() { patterns := map[string]time.Duration{ - "panic-*.log": 7 * 24 * time.Hour, // keep panic logs for a week - "audit-*.log": 7 * 24 * time.Hour, // keep audit logs for a week - "index": 14 * 24 * time.Hour, // keep old index format for two weeks - "config.xml.v*": 30 * 24 * time.Hour, // old config versions for a month - "*.idx.gz": 30 * 24 * time.Hour, // these should for sure no longer exist - "backup-of-v0.8": 30 * 24 * time.Hour, // these neither + "panic-*.log": 7 * 24 * time.Hour, // keep panic logs for a week + "audit-*.log": 7 * 24 * time.Hour, // keep audit logs for a week + "index": 14 * 24 * time.Hour, // keep old index format for two weeks + "index*.converted": 14 * 24 * time.Hour, // keep old converted indexes for two weeks + "config.xml.v*": 30 * 24 * time.Hour, // old config versions for a month + "*.idx.gz": 30 * 24 * time.Hour, // these should for sure no longer exist + "backup-of-v0.8": 30 * 24 * time.Hour, // these neither } for pat, dur := range patterns { diff --git a/lib/db/.gitignore b/lib/db/.gitignore index 54f299079..d5316784f 100644 --- a/lib/db/.gitignore +++ b/lib/db/.gitignore @@ -1 +1,2 @@ +!*.zip testdata/*.db diff --git a/lib/db/blockmap.go b/lib/db/blockmap.go index a1dd333c7..57c3fb118 100644 --- a/lib/db/blockmap.go +++ b/lib/db/blockmap.go @@ -4,16 +4,9 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this file, // You can obtain one at http://mozilla.org/MPL/2.0/. -// Package db provides a set type to track local/remote files with newness -// checks. We must do a certain amount of normalization in here. We will get -// fed paths with either native or wire-format separators and encodings -// depending on who calls us. We transform paths to wire-format (NFC and -// slashes) on the way to the database, and transform to native format -// (varying separator and encoding) on the way back out. package db import ( - "bytes" "encoding/binary" "fmt" @@ -30,10 +23,10 @@ const maxBatchSize = 256 << 10 type BlockMap struct { db *Instance - folder string + folder uint32 } -func NewBlockMap(db *Instance, folder string) *BlockMap { +func NewBlockMap(db *Instance, folder uint32) *BlockMap { return &BlockMap{ db: db, folder: folder, @@ -123,7 +116,7 @@ func (m *BlockMap) Discard(files []protocol.FileInfo) error { // Drop block map, removing all entries related to this block map from the db. func (m *BlockMap) Drop() error { batch := new(leveldb.Batch) - iter := m.db.NewIterator(util.BytesPrefix(m.blockKeyInto(nil, nil, "")[:1+64]), nil) + iter := m.db.NewIterator(util.BytesPrefix(m.blockKeyInto(nil, nil, "")[:keyPrefixLen+keyFolderLen]), nil) defer iter.Release() for iter.Next() { if batch.Len() > maxBatchSize { @@ -173,12 +166,13 @@ func (f *BlockFinder) String() string { func (f *BlockFinder) Iterate(folders []string, hash []byte, iterFn func(string, string, int32) bool) bool { var key []byte for _, folder := range folders { - key = blockKeyInto(key, hash, folder, "") + folderID := f.db.folderIdx.ID([]byte(folder)) + key = blockKeyInto(key, hash, folderID, "") iter := f.db.NewIterator(util.BytesPrefix(key), nil) defer iter.Release() for iter.Next() && iter.Error() == nil { - folder, file := fromBlockKey(iter.Key()) + file := blockKeyName(iter.Key()) index := int32(binary.BigEndian.Uint32(iter.Value())) if iterFn(folder, osutil.NativeFilename(file), index) { return true @@ -194,48 +188,41 @@ func (f *BlockFinder) Fix(folder, file string, index int32, oldHash, newHash []b buf := make([]byte, 4) binary.BigEndian.PutUint32(buf, uint32(index)) + folderID := f.db.folderIdx.ID([]byte(folder)) batch := new(leveldb.Batch) - batch.Delete(blockKeyInto(nil, oldHash, folder, file)) - batch.Put(blockKeyInto(nil, newHash, folder, file), buf) + batch.Delete(blockKeyInto(nil, oldHash, folderID, file)) + batch.Put(blockKeyInto(nil, newHash, folderID, file), buf) return f.db.Write(batch, nil) } // m.blockKey returns a byte slice encoding the following information: // keyTypeBlock (1 byte) -// folder (64 bytes) +// folder (4 bytes) // block hash (32 bytes) // file name (variable size) -func blockKeyInto(o, hash []byte, folder, file string) []byte { - reqLen := 1 + 64 + 32 + len(file) +func blockKeyInto(o, hash []byte, folder uint32, file string) []byte { + reqLen := keyPrefixLen + keyFolderLen + keyHashLen + len(file) if cap(o) < reqLen { o = make([]byte, reqLen) } else { o = o[:reqLen] } o[0] = KeyTypeBlock - copy(o[1:], []byte(folder)) - for i := len(folder); i < 64; i++ { - o[1+i] = 0 - } - copy(o[1+64:], []byte(hash)) - copy(o[1+64+32:], []byte(file)) + binary.BigEndian.PutUint32(o[keyPrefixLen:], folder) + copy(o[keyPrefixLen+keyFolderLen:], []byte(hash)) + copy(o[keyPrefixLen+keyFolderLen+keyHashLen:], []byte(file)) return o } -func fromBlockKey(data []byte) (string, string) { - if len(data) < 1+64+32+1 { +// blockKeyName returns the file name from the block key +func blockKeyName(data []byte) string { + if len(data) < keyPrefixLen+keyFolderLen+keyHashLen+1 { panic("Incorrect key length") } if data[0] != KeyTypeBlock { panic("Incorrect key type") } - file := string(data[1+64+32:]) - - slice := data[1 : 1+64] - izero := bytes.IndexByte(slice, 0) - if izero > -1 { - return string(slice[:izero]), file - } - return string(slice), file + file := string(data[keyPrefixLen+keyFolderLen+keyHashLen:]) + return file } diff --git a/lib/db/blockmap_test.go b/lib/db/blockmap_test.go index a3317c6d3..598f13e3d 100644 --- a/lib/db/blockmap_test.go +++ b/lib/db/blockmap_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/syncthing/syncthing/lib/protocol" + "github.com/syndtr/goleveldb/leveldb/util" ) func genBlocks(n int) []protocol.BlockInfo { @@ -55,7 +56,7 @@ func setup() (*Instance, *BlockFinder) { } func dbEmpty(db *Instance) bool { - iter := db.NewIterator(nil, nil) + iter := db.NewIterator(util.BytesPrefix([]byte{KeyTypeBlock}), nil) defer iter.Release() if iter.Next() { return false @@ -70,7 +71,7 @@ func TestBlockMapAddUpdateWipe(t *testing.T) { t.Fatal("db not empty") } - m := NewBlockMap(db, "folder1") + m := NewBlockMap(db, db.folderIdx.ID([]byte("folder1"))) f3.Flags |= protocol.FlagDirectory @@ -152,8 +153,8 @@ func TestBlockMapAddUpdateWipe(t *testing.T) { func TestBlockFinderLookup(t *testing.T) { db, f := setup() - m1 := NewBlockMap(db, "folder1") - m2 := NewBlockMap(db, "folder2") + m1 := NewBlockMap(db, db.folderIdx.ID([]byte("folder1"))) + m2 := NewBlockMap(db, db.folderIdx.ID([]byte("folder2"))) err := m1.Add([]protocol.FileInfo{f1}) if err != nil { @@ -221,7 +222,7 @@ func TestBlockFinderFix(t *testing.T) { return true } - m := NewBlockMap(db, "folder1") + m := NewBlockMap(db, db.folderIdx.ID([]byte("folder1"))) err := m.Add([]protocol.FileInfo{f1}) if err != nil { t.Fatal(err) diff --git a/lib/db/leveldb.go b/lib/db/leveldb.go index 896e3ee04..0e75b0ddc 100644 --- a/lib/db/leveldb.go +++ b/lib/db/leveldb.go @@ -42,6 +42,8 @@ const ( KeyTypeDeviceStatistic KeyTypeFolderStatistic KeyTypeVirtualMtime + KeyTypeFolderIdx + KeyTypeDeviceIdx ) type fileVersion struct { diff --git a/lib/db/leveldb_convert.go b/lib/db/leveldb_convert.go new file mode 100644 index 000000000..b12cbe437 --- /dev/null +++ b/lib/db/leveldb_convert.go @@ -0,0 +1,114 @@ +// Copyright (C) 2015 The Syncthing Authors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +package db + +import ( + "bytes" + + "github.com/syndtr/goleveldb/leveldb" +) + +// convertKeyFormat converts from the v0.12 to the v0.13 database format, to +// avoid having to do rescan. The change is in the key format for folder +// labels, so we basically just iterate over the database rewriting keys as +// necessary. +func convertKeyFormat(from, to *leveldb.DB) error { + l.Infoln("Converting database key format") + blocks, files, globals, unchanged := 0, 0, 0, 0 + + dbi := newDBInstance(to) + i := from.NewIterator(nil, nil) + for i.Next() { + key := i.Key() + switch key[0] { + case KeyTypeBlock: + folder, file := oldFromBlockKey(key) + folderIdx := dbi.folderIdx.ID([]byte(folder)) + hash := key[1+64:] + newKey := blockKeyInto(nil, hash, folderIdx, file) + if err := to.Put(newKey, i.Value(), nil); err != nil { + return err + } + blocks++ + + case KeyTypeDevice: + newKey := dbi.deviceKey(oldDeviceKeyFolder(key), oldDeviceKeyDevice(key), oldDeviceKeyName(key)) + if err := to.Put(newKey, i.Value(), nil); err != nil { + return err + } + files++ + + case KeyTypeGlobal: + newKey := dbi.globalKey(oldGlobalKeyFolder(key), oldGlobalKeyName(key)) + if err := to.Put(newKey, i.Value(), nil); err != nil { + return err + } + globals++ + + case KeyTypeVirtualMtime: + // Cannot be converted, we drop it instead :( + + default: + if err := to.Put(key, i.Value(), nil); err != nil { + return err + } + unchanged++ + } + } + + l.Infof("Converted %d blocks, %d files, %d globals (%d unchanged).", blocks, files, globals, unchanged) + + return nil +} + +func oldDeviceKeyFolder(key []byte) []byte { + folder := key[1 : 1+64] + izero := bytes.IndexByte(folder, 0) + if izero < 0 { + return folder + } + return folder[:izero] +} + +func oldDeviceKeyDevice(key []byte) []byte { + return key[1+64 : 1+64+32] +} + +func oldDeviceKeyName(key []byte) []byte { + return key[1+64+32:] +} + +func oldGlobalKeyName(key []byte) []byte { + return key[1+64:] +} + +func oldGlobalKeyFolder(key []byte) []byte { + folder := key[1 : 1+64] + izero := bytes.IndexByte(folder, 0) + if izero < 0 { + return folder + } + return folder[:izero] +} + +func oldFromBlockKey(data []byte) (string, string) { + if len(data) < 1+64+32+1 { + panic("Incorrect key length") + } + if data[0] != KeyTypeBlock { + panic("Incorrect key type") + } + + file := string(data[1+64+32:]) + + slice := data[1 : 1+64] + izero := bytes.IndexByte(slice, 0) + if izero > -1 { + return string(slice[:izero]), file + } + return string(slice), file +} diff --git a/lib/db/leveldb_convert_test.go b/lib/db/leveldb_convert_test.go new file mode 100644 index 000000000..468684819 --- /dev/null +++ b/lib/db/leveldb_convert_test.go @@ -0,0 +1,136 @@ +// Copyright (C) 2015 The Syncthing Authors. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +package db + +import ( + "archive/zip" + "io" + "os" + "path/filepath" + "testing" + + "github.com/syndtr/goleveldb/leveldb" +) + +func TestLabelConversion(t *testing.T) { + os.RemoveAll("testdata/oldformat.db") + defer os.RemoveAll("testdata/oldformat.db") + os.RemoveAll("testdata/newformat.db") + defer os.RemoveAll("testdata/newformat.db") + + if err := unzip("testdata/oldformat.db.zip", "testdata"); err != nil { + t.Fatal(err) + } + + odb, err := leveldb.OpenFile("testdata/oldformat.db", nil) + if err != nil { + t.Fatal(err) + } + + ldb, err := leveldb.OpenFile("testdata/newformat.db", nil) + if err != nil { + t.Fatal(err) + } + + if err = convertKeyFormat(odb, ldb); err != nil { + t.Fatal(err) + } + ldb.Close() + odb.Close() + + inst, err := Open("testdata/newformat.db") + if err != nil { + t.Fatal(err) + } + + fs := NewFileSet("default", inst) + files, deleted, _ := fs.GlobalSize() + if files+deleted != 953 { + // Expected number of global entries determined by + // ../../bin/stindex testdata/oldformat.db/ | grep global | grep -c default + t.Errorf("Conversion error, global list differs (%d != 953)", files+deleted) + } + + files, deleted, _ = fs.LocalSize() + if files+deleted != 953 { + t.Errorf("Conversion error, device list differs (%d != 953)", files+deleted) + } + + f := NewBlockFinder(inst) + // [block] F:"default" H:1c25dea9003cc16216e2a22900be1ec1cc5aaf270442904e2f9812c314e929d8 N:"f/f2/f25f1b3e6e029231b933531b2138796d" I:3 + h := []byte{0x1c, 0x25, 0xde, 0xa9, 0x00, 0x3c, 0xc1, 0x62, 0x16, 0xe2, 0xa2, 0x29, 0x00, 0xbe, 0x1e, 0xc1, 0xcc, 0x5a, 0xaf, 0x27, 0x04, 0x42, 0x90, 0x4e, 0x2f, 0x98, 0x12, 0xc3, 0x14, 0xe9, 0x29, 0xd8} + found := 0 + f.Iterate([]string{"default"}, h, func(folder, file string, idx int32) bool { + if folder == "default" && file == filepath.FromSlash("f/f2/f25f1b3e6e029231b933531b2138796d") && idx == 3 { + found++ + } + return true + }) + if found != 1 { + t.Errorf("Found %d blocks instead of expected 1", found) + } + + inst.Close() +} + +func unzip(src, dest string) error { + r, err := zip.OpenReader(src) + if err != nil { + return err + } + defer func() { + if err := r.Close(); err != nil { + panic(err) + } + }() + + os.MkdirAll(dest, 0755) + + // Closure to address file descriptors issue with all the deferred .Close() methods + extractAndWriteFile := func(f *zip.File) error { + rc, err := f.Open() + if err != nil { + return err + } + defer func() { + if err := rc.Close(); err != nil { + panic(err) + } + }() + + path := filepath.Join(dest, f.Name) + + if f.FileInfo().IsDir() { + os.MkdirAll(path, f.Mode()) + } else { + f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + return err + } + defer func() { + if err := f.Close(); err != nil { + panic(err) + } + }() + + _, err = io.Copy(f, rc) + if err != nil { + return err + } + } + return nil + } + + for _, f := range r.File { + err := extractAndWriteFile(f) + if err != nil { + return err + } + } + + return nil +} diff --git a/lib/db/leveldb_dbinstance.go b/lib/db/leveldb_dbinstance.go index 9814fdd74..f432d99e3 100644 --- a/lib/db/leveldb_dbinstance.go +++ b/lib/db/leveldb_dbinstance.go @@ -8,11 +8,15 @@ package db import ( "bytes" + "encoding/binary" "os" + "path/filepath" "sort" "strings" + "github.com/syncthing/syncthing/lib/osutil" "github.com/syncthing/syncthing/lib/protocol" + "github.com/syncthing/syncthing/lib/sync" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/errors" "github.com/syndtr/goleveldb/leveldb/iterator" @@ -25,14 +29,33 @@ type deletionHandler func(t readWriteTransaction, folder, device, name []byte, d type Instance struct { *leveldb.DB + folderIdx *smallIndex + deviceIdx *smallIndex } +const ( + keyPrefixLen = 1 + keyFolderLen = 4 // indexed + keyDeviceLen = 4 // indexed + keyHashLen = 32 +) + func Open(file string) (*Instance, error) { opts := &opt.Options{ OpenFilesCacheCapacity: 100, WriteBuffer: 4 << 20, } + if _, err := os.Stat(file); os.IsNotExist(err) { + // The file we are looking to open does not exist. This may be the + // first launch so we should look for an old version and try to + // convert it. + if err := checkConvertDatabase(file); err != nil { + l.Infoln("Converting old database:", err) + l.Infoln("Will rescan from scratch.") + } + } + db, err := leveldb.OpenFile(file, opts) if leveldbIsCorrupted(err) { db, err = leveldb.RecoverFile(file, opts) @@ -60,9 +83,12 @@ func OpenMemory() *Instance { } func newDBInstance(db *leveldb.DB) *Instance { - return &Instance{ + i := &Instance{ DB: db, } + i.folderIdx = newSmallIndex(i, []byte{KeyTypeFolderIdx}) + i.deviceIdx = newSmallIndex(i, []byte{KeyTypeDeviceIdx}) + return i } func (db *Instance) Compact() error { @@ -72,13 +98,10 @@ func (db *Instance) Compact() error { func (db *Instance) genericReplace(folder, device []byte, fs []protocol.FileInfo, localSize, globalSize *sizeTracker, deleteFn deletionHandler) int64 { sort.Sort(fileList(fs)) // sort list on name, same as in the database - start := db.deviceKey(folder, device, nil) // before all folder/device files - limit := db.deviceKey(folder, device, []byte{0xff, 0xff, 0xff, 0xff}) // after all folder/device files - t := db.newReadWriteTransaction() defer t.close() - dbi := t.NewIterator(&util.Range{Start: start, Limit: limit}, nil) + dbi := t.NewIterator(util.BytesPrefix(db.deviceKey(folder, device, nil)[:keyPrefixLen+keyFolderLen+keyDeviceLen]), nil) defer dbi.Release() moreDb := dbi.Next() @@ -237,13 +260,10 @@ func (db *Instance) updateFiles(folder, device []byte, fs []protocol.FileInfo, l } func (db *Instance) withHave(folder, device []byte, truncate bool, fn Iterator) { - start := db.deviceKey(folder, device, nil) // before all folder/device files - limit := db.deviceKey(folder, device, []byte{0xff, 0xff, 0xff, 0xff}) // after all folder/device files - t := db.newReadOnlyTransaction() defer t.close() - dbi := t.NewIterator(&util.Range{Start: start, Limit: limit}, nil) + dbi := t.NewIterator(util.BytesPrefix(db.deviceKey(folder, device, nil)[:keyPrefixLen+keyFolderLen+keyDeviceLen]), nil) defer dbi.Release() for dbi.Next() { @@ -258,13 +278,10 @@ func (db *Instance) withHave(folder, device []byte, truncate bool, fn Iterator) } func (db *Instance) withAllFolderTruncated(folder []byte, fn func(device []byte, f FileInfoTruncated) bool) { - start := db.deviceKey(folder, nil, nil) // before all folder/device files - limit := db.deviceKey(folder, protocol.LocalDeviceID[:], []byte{0xff, 0xff, 0xff, 0xff}) // after all folder/device files - t := db.newReadWriteTransaction() defer t.close() - dbi := t.NewIterator(&util.Range{Start: start, Limit: limit}, nil) + dbi := t.NewIterator(util.BytesPrefix(db.deviceKey(folder, nil, nil)[:keyPrefixLen+keyFolderLen]), nil) defer dbi.Release() for dbi.Next() { @@ -359,7 +376,10 @@ func (db *Instance) withGlobal(folder, prefix []byte, truncate bool, fn Iterator l.Debugf("vl.versions[0].device: %x", vl.versions[0].device) l.Debugf("name: %q (%x)", name, name) l.Debugf("fk: %q", fk) - l.Debugf("fk: %x %x %x", fk[1:1+64], fk[1+64:1+64+32], fk[1+64+32:]) + l.Debugf("fk: %x %x %x", + fk[keyPrefixLen:keyPrefixLen+keyFolderLen], + fk[keyPrefixLen+keyFolderLen:keyPrefixLen+keyFolderLen+keyDeviceLen], + fk[keyPrefixLen+keyFolderLen+keyDeviceLen:]) panic(err) } @@ -403,13 +423,10 @@ func (db *Instance) availability(folder, file []byte) []protocol.DeviceID { } func (db *Instance) withNeed(folder, device []byte, truncate bool, fn Iterator) { - start := db.globalKey(folder, nil) - limit := db.globalKey(folder, []byte{0xff, 0xff, 0xff, 0xff}) - t := db.newReadOnlyTransaction() defer t.close() - dbi := t.NewIterator(&util.Range{Start: start, Limit: limit}, nil) + dbi := t.NewIterator(util.BytesPrefix(db.globalKey(folder, nil)[:keyPrefixLen+keyFolderLen]), nil) defer dbi.Release() var fk []byte @@ -546,9 +563,7 @@ func (db *Instance) checkGlobals(folder []byte, globalSize *sizeTracker) { t := db.newReadWriteTransaction() defer t.close() - start := db.globalKey(folder, nil) - limit := db.globalKey(folder, []byte{0xff, 0xff, 0xff, 0xff}) - dbi := t.NewIterator(&util.Range{Start: start, Limit: limit}, nil) + dbi := t.NewIterator(util.BytesPrefix(db.globalKey(folder, nil)[:keyPrefixLen+keyFolderLen]), nil) defer dbi.Release() var fk []byte @@ -598,71 +613,72 @@ func (db *Instance) checkGlobals(folder []byte, globalSize *sizeTracker) { // deviceKey returns a byte slice encoding the following information: // keyTypeDevice (1 byte) -// folder (64 bytes) -// device (32 bytes) +// folder (4 bytes) +// device (4 bytes) // name (variable size) func (db *Instance) deviceKey(folder, device, file []byte) []byte { return db.deviceKeyInto(nil, folder, device, file) } func (db *Instance) deviceKeyInto(k []byte, folder, device, file []byte) []byte { - reqLen := 1 + 64 + 32 + len(file) + reqLen := keyPrefixLen + keyFolderLen + keyDeviceLen + len(file) if len(k) < reqLen { k = make([]byte, reqLen) } k[0] = KeyTypeDevice - if len(folder) > 64 { - panic("folder name too long") - } - copy(k[1:], []byte(folder)) - copy(k[1+64:], device[:]) - copy(k[1+64+32:], []byte(file)) + binary.BigEndian.PutUint32(k[keyPrefixLen:], db.folderIdx.ID(folder)) + binary.BigEndian.PutUint32(k[keyPrefixLen+keyFolderLen:], db.deviceIdx.ID(device)) + copy(k[keyPrefixLen+keyFolderLen+keyDeviceLen:], []byte(file)) return k[:reqLen] } +// deviceKeyName returns the device ID from the key func (db *Instance) deviceKeyName(key []byte) []byte { - return key[1+64+32:] + return key[keyPrefixLen+keyFolderLen+keyDeviceLen:] } +// deviceKeyFolder returns the folder name from the key func (db *Instance) deviceKeyFolder(key []byte) []byte { - folder := key[1 : 1+64] - izero := bytes.IndexByte(folder, 0) - if izero < 0 { - return folder + folder, ok := db.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen:])) + if !ok { + panic("bug: lookup of nonexistent folder ID") } - return folder[:izero] + return folder } +// deviceKeyDevice returns the device ID from the key func (db *Instance) deviceKeyDevice(key []byte) []byte { - return key[1+64 : 1+64+32] + device, ok := db.deviceIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen+keyFolderLen:])) + if !ok { + panic("bug: lookup of nonexistent device ID") + } + return device } // globalKey returns a byte slice encoding the following information: // keyTypeGlobal (1 byte) -// folder (64 bytes) +// folder (4 bytes) // name (variable size) func (db *Instance) globalKey(folder, file []byte) []byte { - k := make([]byte, 1+64+len(file)) + k := make([]byte, keyPrefixLen+keyFolderLen+len(file)) k[0] = KeyTypeGlobal - if len(folder) > 64 { - panic("folder name too long") - } - copy(k[1:], []byte(folder)) - copy(k[1+64:], []byte(file)) + binary.BigEndian.PutUint32(k[keyPrefixLen:], db.folderIdx.ID(folder)) + copy(k[keyPrefixLen+keyFolderLen:], []byte(file)) return k } +// globalKeyName returns the filename from the key func (db *Instance) globalKeyName(key []byte) []byte { - return key[1+64:] + return key[keyPrefixLen+keyFolderLen:] } +// globalKeyFolder returns the folder name from the key func (db *Instance) globalKeyFolder(key []byte) []byte { - folder := key[1 : 1+64] - izero := bytes.IndexByte(folder, 0) - if izero < 0 { - return folder + folder, ok := db.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen:])) + if !ok { + panic("bug: lookup of nonexistent folder ID") } - return folder[:izero] + return folder } func unmarshalTrunc(bs []byte, truncate bool) (FileIntf, error) { @@ -692,3 +708,132 @@ func leveldbIsCorrupted(err error) bool { return false } + +// checkConvertDatabase tries to convert an existing old (v0.11) database to +// new (v0.13) format. +func checkConvertDatabase(dbFile string) error { + oldLoc := filepath.Join(filepath.Dir(dbFile), "index-v0.11.0.db") + if _, err := os.Stat(oldLoc); os.IsNotExist(err) { + // The old database file does not exist; that's ok, continue as if + // everything succeeded. + return nil + } else if err != nil { + // Any other error is weird. + return err + } + + // There exists a database in the old format. We run a one time + // conversion from old to new. + + fromDb, err := leveldb.OpenFile(oldLoc, nil) + if err != nil { + return err + } + + toDb, err := leveldb.OpenFile(dbFile, nil) + if err != nil { + return err + } + + err = convertKeyFormat(fromDb, toDb) + if err != nil { + return err + } + + err = toDb.Close() + if err != nil { + return err + } + + // We've done this one, we don't want to do it again (if the user runs + // -reset or so). We don't care too much about errors any more at this stage. + fromDb.Close() + osutil.Rename(oldLoc, oldLoc+".converted") + + return nil +} + +// A smallIndex is an in memory bidirectional []byte to uint32 map. It gives +// fast lookups in both directions and persists to the database. Don't use for +// storing more items than fit comfortably in RAM. +type smallIndex struct { + db *Instance + prefix []byte + id2val map[uint32]string + val2id map[string]uint32 + nextID uint32 + mut sync.Mutex +} + +func newSmallIndex(db *Instance, prefix []byte) *smallIndex { + idx := &smallIndex{ + db: db, + prefix: prefix, + id2val: make(map[uint32]string), + val2id: make(map[string]uint32), + mut: sync.NewMutex(), + } + idx.load() + return idx +} + +// load iterates over the prefix space in the database and populates the in +// memory maps. +func (i *smallIndex) load() { + tr := i.db.newReadOnlyTransaction() + it := tr.NewIterator(util.BytesPrefix(i.prefix), nil) + for it.Next() { + val := string(it.Value()) + id := binary.BigEndian.Uint32(it.Key()[len(i.prefix):]) + i.id2val[id] = val + i.val2id[val] = id + if id >= i.nextID { + i.nextID = id + 1 + } + } + it.Release() + tr.close() +} + +// ID returns the index number for the given byte slice, allocating a new one +// and persisting this to the database if necessary. +func (i *smallIndex) ID(val []byte) uint32 { + i.mut.Lock() + // intentionally avoiding defer here as we want this call to be as fast as + // possible in the general case (folder ID already exists). The map lookup + // with the conversion of []byte to string is compiler optimized to not + // copy the []byte, which is why we don't assign it to a temp variable + // here. + if id, ok := i.val2id[string(val)]; ok { + i.mut.Unlock() + return id + } + + id := i.nextID + i.nextID++ + + valStr := string(val) + i.val2id[valStr] = id + i.id2val[id] = valStr + + key := make([]byte, len(i.prefix)+8) // prefix plus uint32 id + copy(key, i.prefix) + binary.BigEndian.PutUint32(key[len(i.prefix):], id) + i.db.Put(key, val, nil) + + i.mut.Unlock() + return id +} + +// Val returns the value for the given index number, or (nil, false) if there +// is no such index number. +func (i *smallIndex) Val(id uint32) ([]byte, bool) { + i.mut.Lock() + val, ok := i.id2val[id] + i.mut.Unlock() + if !ok { + return nil, false + } + + return []byte(val), true +} diff --git a/lib/db/leveldb_test.go b/lib/db/leveldb_test.go index 823da1b9e..ae7d7792a 100644 --- a/lib/db/leveldb_test.go +++ b/lib/db/leveldb_test.go @@ -16,7 +16,9 @@ func TestDeviceKey(t *testing.T) { dev := []byte("device67890123456789012345678901") name := []byte("name") - db := &Instance{} + db := OpenMemory() + db.folderIdx.ID(fld) + db.deviceIdx.ID(dev) key := db.deviceKey(fld, dev, name) @@ -38,7 +40,8 @@ func TestGlobalKey(t *testing.T) { fld := []byte("folder6789012345678901234567890123456789012345678901234567890123") name := []byte("name") - db := &Instance{} + db := OpenMemory() + db.folderIdx.ID(fld) key := db.globalKey(fld, name) diff --git a/lib/db/set.go b/lib/db/set.go index 481adbe6e..d23e6ecaf 100644 --- a/lib/db/set.go +++ b/lib/db/set.go @@ -97,7 +97,7 @@ func NewFileSet(folder string, db *Instance) *FileSet { localVersion: make(map[protocol.DeviceID]int64), folder: folder, db: db, - blockmap: NewBlockMap(db, folder), + blockmap: NewBlockMap(db, db.folderIdx.ID([]byte(folder))), mutex: sync.NewMutex(), } @@ -244,7 +244,7 @@ func DropFolder(db *Instance, folder string) { db.dropFolder([]byte(folder)) bm := &BlockMap{ db: db, - folder: folder, + folder: db.folderIdx.ID([]byte(folder)), } bm.Drop() NewVirtualMtimeRepo(db, folder).Drop() diff --git a/lib/db/testdata/oldformat.db.zip b/lib/db/testdata/oldformat.db.zip new file mode 100644 index 0000000000000000000000000000000000000000..692b33d05c80b94564f2779c2a4216e54c7de40d GIT binary patch literal 139879 zcmZ5`Q?M}14&=4GaPW@IR1d z5KH{uw=3#>c1dwwD1c3hk(=hxG9CS7&M*o*^95GVuf298(VNI{AfQt4y zzuzkZaWD)7MO4%j1xAGfmx5vg^e6`EQ^{^^MZrd_#>VddP`hqjfUzF8zhypf-8=u) zv;P*q|Kxy}k?H)p={xoNJMGPbCLl>Z7a`(Vg=?L*Mc#5E!mn8^C5DBhB1&Hd};q+xbx{I6yIV3EI`5I}Y_Rb+aVWx+E z3=XyLtNgrAMM)oti^2{mlep;D}|~r-k+&p;>1eqWT3I$_+sxJE*O6 z_lC{styt1EO~p-xn?HB@BmI--)u1>%w3}6%r$qAaIXy87UAoW@^$Z!sDwPW#5s`w& z#t({=Dvatei2|a<&Vi)95=%O@$?DhA^QZ^mMN*RuKx(4T~Wjz^P8v7HzDyRLh;#9OJ zI>qwQ@NBm}G>YBYiMDZ-d6y!wqA93^u|>oQX|$@SWHP2CnTwj5>N{U(yeCTwa>(3r zEviSjWmi=|Tv!lAia_X1%Zk*mpp-e!J0{E5T-ZXo&uN8+zE*eQ`TN+%3H3SC@i46G z?4s1o(+~>dc`qu9fCn7r@r0ZxoxZ6kvH=BI8AGj1bgck2xCBEC*)njQ74^5|8q3y! z$!fVNKlh^*1yn)0TUrZmjkz#CRN~o7Oyguxl2Fg<7z%N}dyUV`8AN}N^JewVsoSaD zdjG<&`oa2rZKbArG+A1TsMHCCV2bFmfCwxaN@SvDmKm((IxN^JjL2bu5OOox z4Jeg0II7U{GWk{wUR{GC2;v%1vsA=e5BNv<-TR7a&)ZL}JL9j$a@lP1a=nPT+V7J0 zT&4J6pcv$=0)^DN!aPj~l_LL8$u^bff2*4|ld> ziGJi&cz4^gj6Bw}k8pIHh!Dc!aRR>t7jab(;X?`$WE2sm!4-@gpf-7B5*Z`SQoM`6 zPj3^bFJ0bylVz~sOFEL82C5Hz5s_BbtNP~)<3C+z?l@X^m#-tja&h?FMeFmA-P1VT zYF*RCP^rYp`vV>>%aHPl02niOu$ruy`Cs9(*#1cUO4pkD=++qw_LQgG3 zmRQl)*O`W=ewXja_Tf?ctf;wwN?E@<@G!p*nFhAw4WQEY(^uWcOT}ttVl|lkR{HU* zYRAUmGn>tt%S$>u|8bxRQ+Gf;!?eu|J(Pv8SdC`R@bC3;Q>a3Wd^c^WgSUGi0C8mMpdl+G* zqKYIS@hg~e%OsKlQs=VG(HqQre#Z?gPLn~dA*9~vqbwN>+uTJH8V#gRr3)a!!k$WW z2qM%_YpZt-6ih-zpbcj!uop07AY|w$!gyFyQ@Ik=VDUKaP)N$@#9Dz`2z8-DoVw_c z)nds?<+f%?LeCVU*fyN)_q&r`Rb(1qF??TEGuL=RU98X)FHbLrg>}1XcpXV4)`m1J zQw6B$g|0D$teVOaLZ~bvC6-Vtu#s~SV*#VZHX1>%psBkRoRReiTM@HU&spv=DpWN3 z-^zEH{MUPl)~Q`J)4TWv6@5)prMHs}c343fR?&4&(Ph#k5=%(~N!23};YExKXjng(ti!qE95#zj=x3!Al~Gk>01d>E16GR+j z539H%%0x0rDFLl_Y5MMOX)T{da~L=b$h^j^(I~sDt|Lzb-s^Jxf7;hCNu;FCHJ6F@ zCo7n>U2uAujQcrarrq>-JhP`Ws16%=J6L%mL5fr1;@W3(PQU05#RY?Q4#nU71F)et zPpkKvX%i5kD=4BX8fj$%Q&uTd)m+eIuq$$4$@Rrnd=)j8wy89Q7NMzn7NZ4tkiwA# zbsN0MXefC?Aslb&-A^yV$WN!HclFYA=#v7F*jP=@1L(gzof|CX?yP< zBkirT!EUMd~A=h>$}ifq@U?CHQHH}o$jwChQ2kRd1`fe1oE_QSC#1#G!rkUPJ7t1z(eUs z6>4}e?N)C67pOM^tK}^8BI*{&{^zarFK*pya{2lt3tb1HqH{Mvr>lwOw=7MAHG}fs z7%1P+!l({l9~+R_k-&rWmpyX;D+?}D3odg8s+uY!nW`Xa%b;Pb3r{_oevTlXln#o> zO)Msic`r`OOpEgskRr15)Q5p=L9N1}d>mh8FSNrkcMpYQ>}|svmcv*dcYY3n9cj{; z0{Hp9HKIlHbBayq(nRzoTNq1cnOo?HoC=o+quH?}lF!3YJ_)Q7QbY6xF~*Vl4v?IS zatP=tV9o{UQbPA&d4;A5Jh5c}(2*z_R$<`m&=nG9u&}Dl$D9O12|Ou83LUuu;tA!$ zs9MZeFLD@i2<0-3;)in+GgHT>ipo`dENtj|-DML29*iymd)T@8YdFHbd6Z*(`0q8k z-ABm?G6>`qDD_e`Gr@7o2HBtkgg5{MxuSqOsDG)x2XfKx*cNu$(1{1F%r*vE6A$Q< zu4;G%xyT&jC$+J5@jZJl26fNI`tm4I_G#tUEm5?rF|Or7t8R3}6&I!yRC_`M+cW@< zpDjw$N)&NS7@}-03$}v*Hv(8RmI*lpi9`d)D|^G?q2=#z1L-&dh;0zmUQs-^bcGK= zf*?+?;QAPc$$~8|bkj9H;Zm0>?S8pW^YDA_r8_*hbv#hm8q~wCB^G1Q#OvbuhqqDW zgpuf)a!0IkNf^Nwele9P?)e{gZg{x9Q5zktdv(5u; zPC02yr;nLpq~r8IJ2jmSSHk_V+ju=6kLDt&7kQ>)TH6y?U}@@5;j-iz&zBPL6s)`v zgqm{1sGUy4p~jv{3o39ok#&IU39xXn5Gpy#fHFtpPg4Z12ck3nzo1yF zWGRUr$75qa5B{q78SQ$#73jWTbrOGkzCR1rsa380{9kwaZVc;AJ6)tOc?d zib?^7ruY9)=otXct-=fTCa(0x?td3Yv{?wL#+u0TS3hAvhof5JC7SK(noE>-cafoa z^_Sa3K6aXIE~hs{z1?db_RbD%mJat+V2ve@B$!Jk5J9kcaYHi;}1V92Xt05-r~E483xo!M{_Nqg1rgVSjq%9SNN z0HJL7-1k)H{#lMY+mcXki0}0&6b2N#n(ZEg4yj)x#{?*1O6Rx!^}O4`!4h}tXq@K2 zLeg~+Ms0h9Pm!(@_K_-=87m-bNRZYbV4jy4gfw-YRVWyfaO!wavr-OiVnP6ML z(1)8+&!1Gy7b!(_q1NKHD_Y>e8bkQU;4B&n$?(e{a3b#d*(OZ@OR)r0V$c*b2NZHJ zFm@GD(!eLx6!5s%zyZK}=qdtDC?C#pcB8Z)&knO~ECTLz5-u|PM$|5Y-kxcGMTZ+- zO}Cjx9yTpZaX(DF$xSNbg|;TI2VEYS$R$vuA_bs46eM+(+>=x`P+@?tI0x>sjclSG zqPC{C70G$PMVIu2yWU1k^#P}UQkDvR#HQNr$*IV^7p6{8K zgL$Xmx1Y{?1Mh2fBa-@i8+f3L3SBSY4-h;L< z4H^-TWlE3oy0A^f$o~6e;7WAf;dS~N{>kJ9cir4Huh5U^u zSnSA}$88#;fcI)Q6!;>QG7`k#6huLd1s)|aRmsZ>1CZ)KpN*@;g(*~!py>**wE}Nv z<8zRc#?I9!b(6kQUXD3D4D{67*K+lC{;nF!m4lD`=T&TkZKURl5g6oTTq%MXf|UE; zR|;GML4B2)SmF=`lcKjEl89<5S>UO}t`W#=B1=Sx_Tu*1KIx>{eZ=Nj$`}%;n8Kli z5(CucQR9svsvu@|6TX_|)U~10CS#(L@wZ|}-9$r86G=>-CAf$b`?~DOW0P#Sxqy+;n(WbYX#dIy-93P*t-w5k z7N+hZ_L80B+4b0|Ys`*n_56KUl%ovpf18e=T|wR3?E6`ge$4Ia4Cji#eJe76uK!$+ z*E}9kWEwH|7uo+95U8kVU_hM#&7T1YU;x+;uwfsF$q#@EXOdr-ZUv67Ac-17bdRN| z;EHsnx5g5hZW2q*sw9-@sc5;J-!}PJ{#zhBNGFFTtC0AZT@N>#Z}!p={Vmo?y|wQrSUh1ZHH549%(?=68B!bDV9 zxHpl#i3=N9%fga0 z$HDEE12(wLM^mUK7(qN0l)wZUT;GrzAgN|~09qqv)kF!|R8>JlNi~3O0R~tF@J0OC z2573`x}T(z3op9ap^--NOg1$w=bEWHtR^+Pl_-w|JDYs3Tc>bBx2|M6HE)Le_)Nwl zqy1=r$lBiMZI+Qn+=z*wIsk_yiftf2nF)3+N}Ypc{Wm)}m|T9;9r|+zOx9r+knDaj z=h2foXL)&#NBf7$@i64w9Ctr2o8i*)rhOE6Uo6(@Osnbo<@+b_+W>Po?b{AV95Al? zQ1HEIX%J&v5k<=JOxVv8f*Q16WM2T15iLm6#c5CxB@_`GvQCV^R1wJ~s)R*sWgy}a zMS6LHm_U0fVq(xEh4~yY(-E{5(h|fGAr%@k&?#tHXgUXj0*O@V3&E2JkP7Jm8%Qz# zLSWm&AXiu6I6-luTa;v@8a2>1^8UFk1osaqc`K2itLPrnSg}&%9T<9AFfogYQGnGT z(L(?zi!Rt6%|09hcAZAKv)Q;pjL)JsQ^|rzZ*` z7gjdZACB-LAp>r-B1v^~-^cB(ideab5+JbzG!fioBiF2R7fmq``Sjqp0b35BfwuUD z?o1k}Z85fHrIQG?3Y7d}J7_-APp;+2?58tY@5al*QG)!}?Ht7G)4xVk*?tqu58s{5 zEhld7__b%hkgyRw-GIUf z9uBhI1J+Cv!%UE<Dd7X(zb&F5ArSfQv}A5t}w?3+020 zQox7=h0zrN6a)7ZD2XHqy)i(OxI#~~n$RkRo-u&h0!&Oj0qvRijZz6e06(*qwRi{A z8~sLLoicVPXRr;{mRXSl9rV~r!18FOap|NQ2&!>wqB3)f@UJ4R zHBsO=4{n{0p}B+TS5fK{PB+lgY%gBlxNud%p)XI@Mo*;j#JYJ$3ZyA}DdczF(yNV? z|7yilMB`5}YGetke8|@IfY-oGU{E8_R78~(1d4`T6+%{A?cHPzMf5~)M7x;3Nh`eI zx3D^qJ!2LEiZSpwqQjDwM|nK3ZQvgm`KT<>S`KN=Bj0B73vCIm7jLkk~s}}K}^N9Pt;T}jM z(RoS2gfS{K+GH}0@6XerO!~js>6fwizC&yJBMa2_N_0)zKN28RTF(OsBmVqJuQ+(i zLu;Z>)#$o+^m} zbUq!E&uC=WKJW_a_AA$(Ee^R;{I22+)_m3pYDh(iBe5TdrUgN?78+j^qOihj)?l0i zu4zy?r@vjmCyMf62jzv5EJ4ZxTMmHT9=SylS_dXJj4T*C{O@|1V34ulaUF-wRsw&9 z3DXC`*B;w9&VEu5&4_%vhBRt2ipofL=)UDMaQCuRjZeFe7qM)$b3Xld&4+N4=NB@3nS)*{g?M3&qWMd3Gb z0p|+9_g@Cd+k28w8lHojlc4Dh1xA=bh*3@|#{G-6W@?^{l=kJowDd9WnmKlws=L<{ zX=mm=JJ{;sjybc7r(2jR2xXT2;Jkl=3>G^rNo+?^MIhLCJ6k(MieXW`pzK6I&qC;{@v0Eq-5}TdN;cn1tW>u z{wy|3kB0 za0tr_v;NCPov`o@H58zZ$hdxtli7W2cTZyR;)2pC#MCXt5N7NqM4=# zSBlK|i}6b!NNQRD1JVyIXALkyi3SNTXegk>nOefK{?1d@m=QG(DcbEccDoK? zlf6paxB2U)BI!%yNQ1D^@tKOchU<;S1)IBb{+P^-|178H)JCfm;$#hM&}qc5o$BkK0d0=s{zlo(zbE8m!ERI(%c_V61BNeh_cBm$f$|Bnu*MmsT*zkl7Bb081ZuqUB{Bs$@6?j|g(0wuZ%bZvD`*sTJUG z0*I<$uLII05f|l>GMaACe16|P>6_8@y@)?8(neR}FFMCd<=UlIzxY0U960kHZ^vE} zj93j@vmxtgbK!umw$9L0aC@GBUzaCt-@^4q0_VV|6BW zOce?BBXoQp4RJqLc(-AHRsr;p>?*+wxRDS{yng z5hF&L+7MfBL}rs$foiBnO_hU!ywWig`M}u3mjhTZ-4sEJnG{}|Y1q}9URfLZ4qhNs` zw#P)}hUAcEW2A6I3|-&hkpf05sxBdHXjmyBa0W8lhUtJ*JK>NNCIxP+pr4JcVFI(C z!x<4?*|?+9yBo}heB-Uf>w@g9{YcWaZ10}0bhz5MLM*Kq7L5F2=ZTJcqhIM{VYam= z_SV$irvG8h*-$`8X5*Kcy+}ijRIiX*5ojr5kujnZ0S?Wx4@9Q`sP3V;1jB$Nc&Cw! z&Y7_03O?3{!Mb>eU*MY1Uo|7}FI*gRAc9A_=bH(OiloWt2O(Y2S)%Vep_^Pe2C-8LOhnt3lj&Y#8B|68efZN1auR$k&)-~7kFZCAJO zCCJrtI*Ze!S$_|v?H20m5_U_m@I@F>Ki*}UNhV7qUCN?sxKXcp)|(H*X)!X^2y1Lf2|WoW%t!-e|ffyPyY6= zt9h{%Uv{hgdf#^^E$}v~JsDHcgmU(PQw*6xGYk|_6;eC|193)9LqJ1NrnMrAqX0v2 zza1g%qWMDoWLPbWfT`yu^Zr-Xh zc}X&8)b0~M&xvsj_x*D}lr%|LCE!n?NQBE+3)I0E$IUnMFZjB7N5HMU@WkT4a5D_a zj}i7%7KLx$mVy&Y2B@;3L9B^jk;)o_0~X?U2v9XaQzUDRXj`pF9wgFM5pzCtVjMN1 z2JcpuE#Xc6X58r{^USf}-_T&9uG$|(MiR67^)j@Z?#I)0ZnrHRt2&#kWuPo~{3{1z zG4S!l_%R1`TNauMI@%VP3Q7#Qe35V2LkqBDd++EmZU9%8FwH@is^aJ+oxzBpmqp;1 z25bXqf~_3-0${;izxLdVMaM9yLhPUuoq!6S5doCzYx}f>RS)JnHQ_w%h2RcjFm)54 z%Lq)}MB=@(3{{WQIcE|49;78VV!D_}MFN+6?}DBt_fUazL7{6;j}!{2?v9J?-y1mHwSOYrD&)u8*w&@9 zr|qrv>22HzH9$}GBKev1)Z%gx{R+lYJ>cHQ3a942*n+55369Oyy~^LH(xuA`jqW%q zhxR37+7LeUzFp@r^;p*nD6W<4Fn+FQiFZyi*L3j2h@ltVSb)PPrs<}j5o(X|@Fflb zO$vF2Sw<$>BH{)S#?3`kPjp2*dPLnb>u?Nc#t9v~jGx}0M4WuB{a_CRx;Vn3sk>1| zqC<1#2>haZWOZd29MHo5l-zqU9BKy?0;9+x)v%I*V+M&GZ&vZPGq*8AvhZq^U8o6i zD6p6vu(D=sRQ(j_xem@M*_Uj8o+{>Yp+e_mGJ0<|1J5|0Tdhy%@uF zMOWmo(W<0paP5fky8<`7Q7jGxSPE<%e!8bDYXvHTWR`L%s*-FPsHyy(&fGpiAH|MePHP#lu4Ce^ zEyKF5ts6N7lVk;k!_^!Bi#Q*=)&SY+EU=r( zGrNEV3^=w6RJ2!FH38Uw*oDggrv{sqz>#a)W=jG37=0RSZIPb;#5d9=KE)k#M)$ZKR>G>xh1uFGc2AF6ubjK_VD9wr#!pmpNmOIO zrE3GxK_|-tVIRX{8hI;=FUI!F1oo^+7m=UPuf%m(2oEWVx-yOIHqUeN+#Y8Df3XYU zI5|uCAFi&CkmQT^(=#%woyvO!tv9kyX4kRi44aph5eLhM+b=D2DlcC=rv`R3*ewjq znrec)5kgL?2a)cTGR0FbV1Q)UQhSrnqwVo}jPSY=5(E);XUj$AvhdKzM_~

sao()PImj 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

1pulF*7#BOB`z`0LB47 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 literal 0 HcmV?d00001 diff --git a/lib/db/virtualmtime.go b/lib/db/virtualmtime.go index f6049de15..a89dde5a0 100644 --- a/lib/db/virtualmtime.go +++ b/lib/db/virtualmtime.go @@ -7,6 +7,7 @@ package db import ( + "encoding/binary" "fmt" "time" ) @@ -24,10 +25,12 @@ type VirtualMtimeRepo struct { } func NewVirtualMtimeRepo(ldb *Instance, folder string) *VirtualMtimeRepo { - prefix := string(KeyTypeVirtualMtime) + folder + var prefix [5]byte // key type + 4 bytes folder idx number + prefix[0] = KeyTypeVirtualMtime + binary.BigEndian.PutUint32(prefix[1:], ldb.folderIdx.ID([]byte(folder))) return &VirtualMtimeRepo{ - ns: NewNamespacedKV(ldb, prefix), + ns: NewNamespacedKV(ldb, string(prefix[:])), } } diff --git a/test/util.go b/test/util.go index 99db0a212..5cc49f795 100644 --- a/test/util.go +++ b/test/util.go @@ -14,7 +14,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "log" "math/rand" "os" @@ -192,30 +191,34 @@ func alterFiles(dir string) error { return osutil.TryRename(path, newPath) } - // Switch between files and directories - case r == 3 && comps > 3 && rand.Float64() < 0.2: - if !info.Mode().IsRegular() { - err = removeAll(path) - if err != nil { + /* + This doesn't in fact work. Sometimes it appears to. We need to get this sorted... + + // Switch between files and directories + case r == 3 && comps > 3 && rand.Float64() < 0.2: + if !info.Mode().IsRegular() { + err = removeAll(path) + if err != nil { + return err + } + d1 := []byte("I used to be a dir: " + path) + err := ioutil.WriteFile(path, d1, 0644) + if err != nil { + return err + } + } else { + err := osutil.Remove(path) + if err != nil { + return err + } + err = os.MkdirAll(path, 0755) + if err != nil { + return err + } + generateFiles(path, 10, 20, "../LICENSE") + } return err - } - d1 := []byte("I used to be a dir: " + path) - err := ioutil.WriteFile(path, d1, 0644) - if err != nil { - return err - } - } else { - err := osutil.Remove(path) - if err != nil { - return err - } - err = os.MkdirAll(path, 0755) - if err != nil { - return err - } - generateFiles(path, 10, 20, "../LICENSE") - } - return err + */ /* This fails. Bug?