mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 10:58:57 +00:00
### Purpose Resend our indexes since we fixed that index-sending issue. I made a new thing to only drop the non-local-device index IDs, i.e., those for other devices. This means we will see a mismatch and resend all indexes, but they will not. This is somewhat cleaner as it avoids resending everything twice when two devices are upgraded, and in any case, we have no reason to force a resend of incoming indexes here. ### Testing It happens on my computer...
This commit is contained in:
parent
6fb3c5ccf2
commit
61b94b9ea5
@ -103,6 +103,7 @@ type keyer interface {
|
|||||||
// index IDs
|
// index IDs
|
||||||
GenerateIndexIDKey(key, device, folder []byte) (indexIDKey, error)
|
GenerateIndexIDKey(key, device, folder []byte) (indexIDKey, error)
|
||||||
FolderFromIndexIDKey(key []byte) ([]byte, bool)
|
FolderFromIndexIDKey(key []byte) ([]byte, bool)
|
||||||
|
DeviceFromIndexIDKey(key []byte) ([]byte, bool)
|
||||||
|
|
||||||
// Mtimes
|
// Mtimes
|
||||||
GenerateMtimesKey(key, folder []byte) (mtimesKey, error)
|
GenerateMtimesKey(key, folder []byte) (mtimesKey, error)
|
||||||
@ -308,6 +309,10 @@ func (k defaultKeyer) FolderFromIndexIDKey(key []byte) ([]byte, bool) {
|
|||||||
return k.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen+keyDeviceLen:]))
|
return k.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen+keyDeviceLen:]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (k defaultKeyer) DeviceFromIndexIDKey(key []byte) ([]byte, bool) {
|
||||||
|
return k.folderIdx.Val(binary.BigEndian.Uint32(key[keyPrefixLen : keyPrefixLen+keyDeviceLen]))
|
||||||
|
}
|
||||||
|
|
||||||
type mtimesKey []byte
|
type mtimesKey []byte
|
||||||
|
|
||||||
func (k defaultKeyer) GenerateMtimesKey(key, folder []byte) (mtimesKey, error) {
|
func (k defaultKeyer) GenerateMtimesKey(key, folder []byte) (mtimesKey, error) {
|
||||||
|
@ -665,6 +665,24 @@ func (db *Lowlevel) dropIndexIDs() error {
|
|||||||
return t.Commit()
|
return t.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dropOtherDeviceIndexIDs drops all index IDs for devices other than the
|
||||||
|
// local device. This means we will resend our indexes to all other devices,
|
||||||
|
// but they don't have to resend to us.
|
||||||
|
func (db *Lowlevel) dropOtherDeviceIndexIDs() error {
|
||||||
|
t, err := db.newReadWriteTransaction()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer t.close()
|
||||||
|
if err := t.deleteKeyPrefixMatching([]byte{KeyTypeIndexID}, func(key []byte) bool {
|
||||||
|
dev, _ := t.keyer.DeviceFromIndexIDKey(key)
|
||||||
|
return !bytes.Equal(dev, protocol.LocalDeviceID[:])
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return t.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
func (db *Lowlevel) dropMtimes(folder []byte) error {
|
func (db *Lowlevel) dropMtimes(folder []byte) error {
|
||||||
key, err := db.keyer.GenerateMtimesKey(nil, folder)
|
key, err := db.keyer.GenerateMtimesKey(nil, folder)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
// do not put restrictions on downgrades (e.g. for repairs after a bugfix).
|
// do not put restrictions on downgrades (e.g. for repairs after a bugfix).
|
||||||
const (
|
const (
|
||||||
dbVersion = 14
|
dbVersion = 14
|
||||||
dbMigrationVersion = 19
|
dbMigrationVersion = 20
|
||||||
dbMinSyncthingVersion = "v1.9.0"
|
dbMinSyncthingVersion = "v1.9.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -102,7 +102,8 @@ func (db *schemaUpdater) updateSchema() error {
|
|||||||
{14, 14, "v1.9.0", db.updateSchemaTo14},
|
{14, 14, "v1.9.0", db.updateSchemaTo14},
|
||||||
{14, 16, "v1.9.0", db.checkRepairMigration},
|
{14, 16, "v1.9.0", db.checkRepairMigration},
|
||||||
{14, 17, "v1.9.0", db.migration17},
|
{14, 17, "v1.9.0", db.migration17},
|
||||||
{14, 19, "v1.9.0", db.dropIndexIDsMigration},
|
{14, 19, "v1.9.0", db.dropAllIndexIDsMigration},
|
||||||
|
{14, 20, "v1.9.0", db.dropOutgoingIndexIDsMigration},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, m := range migrations {
|
for _, m := range migrations {
|
||||||
@ -130,13 +131,13 @@ func (db *schemaUpdater) updateSchema() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (*schemaUpdater) writeVersions(m migration, miscDB *NamespacedKV) error {
|
func (*schemaUpdater) writeVersions(m migration, miscDB *NamespacedKV) error {
|
||||||
if err := miscDB.PutInt64("dbVersion", m.schemaVersion); err != nil && err == nil {
|
if err := miscDB.PutInt64("dbVersion", m.schemaVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := miscDB.PutString("dbMinSyncthingVersion", m.minSyncthingVersion); err != nil && err == nil {
|
if err := miscDB.PutString("dbMinSyncthingVersion", m.minSyncthingVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := miscDB.PutInt64("dbMigrationVersion", m.migrationVersion); err != nil && err == nil {
|
if err := miscDB.PutInt64("dbMigrationVersion", m.migrationVersion); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -831,10 +832,14 @@ func (db *schemaUpdater) migration17(prev int) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *schemaUpdater) dropIndexIDsMigration(_ int) error {
|
func (db *schemaUpdater) dropAllIndexIDsMigration(_ int) error {
|
||||||
return db.dropIndexIDs()
|
return db.dropIndexIDs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *schemaUpdater) dropOutgoingIndexIDsMigration(_ int) error {
|
||||||
|
return db.dropOtherDeviceIndexIDs()
|
||||||
|
}
|
||||||
|
|
||||||
func rewriteGlobals(t readWriteTransaction) error {
|
func rewriteGlobals(t readWriteTransaction) error {
|
||||||
it, err := t.NewPrefixIterator([]byte{KeyTypeGlobal})
|
it, err := t.NewPrefixIterator([]byte{KeyTypeGlobal})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user