mirror of
https://github.com/octoleo/syncthing.git
synced 2025-02-02 03:48:26 +00:00
Fix reset DB
The reset of all folders failed when there was no data for a given folder, as it was not returned by db.ListFolders then. But we don't really care about that, we can "reset" it anyway...
This commit is contained in:
parent
0f1b40da71
commit
2b2cae2d50
@ -570,26 +570,26 @@ func (s *apiSvc) postSystemRestart(w http.ResponseWriter, r *http.Request) {
|
|||||||
func (s *apiSvc) postSystemReset(w http.ResponseWriter, r *http.Request) {
|
func (s *apiSvc) postSystemReset(w http.ResponseWriter, r *http.Request) {
|
||||||
var qs = r.URL.Query()
|
var qs = r.URL.Query()
|
||||||
folder := qs.Get("folder")
|
folder := qs.Get("folder")
|
||||||
var err error
|
|
||||||
if len(folder) == 0 {
|
if len(folder) > 0 {
|
||||||
for folder := range cfg.Folders() {
|
if _, ok := cfg.Folders()[folder]; !ok {
|
||||||
err = s.model.ResetFolder(folder)
|
http.Error(w, "Invalid folder ID", 500)
|
||||||
if err != nil {
|
return
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
err = s.model.ResetFolder(folder)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
http.Error(w, err.Error(), 500)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(folder) == 0 {
|
if len(folder) == 0 {
|
||||||
|
// Reset all folders.
|
||||||
|
for folder := range cfg.Folders() {
|
||||||
|
s.model.ResetFolder(folder)
|
||||||
|
}
|
||||||
s.flushResponse(`{"ok": "resetting database"}`, w)
|
s.flushResponse(`{"ok": "resetting database"}`, w)
|
||||||
} else {
|
} else {
|
||||||
|
// Reset a specific folder, assuming it's supposed to exist.
|
||||||
|
s.model.ResetFolder(folder)
|
||||||
s.flushResponse(`{"ok": "resetting folder `+folder+`"}`, w)
|
s.flushResponse(`{"ok": "resetting folder `+folder+`"}`, w)
|
||||||
}
|
}
|
||||||
|
|
||||||
go restart()
|
go restart()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1732,15 +1732,9 @@ func (m *Model) CheckFolderHealth(id string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) ResetFolder(folder string) error {
|
func (m *Model) ResetFolder(folder string) {
|
||||||
for _, f := range db.ListFolders(m.db) {
|
l.Infof("Cleaning data for folder %q", folder)
|
||||||
if f == folder {
|
db.DropFolder(m.db, folder)
|
||||||
l.Infof("Cleaning data for folder %q", folder)
|
|
||||||
db.DropFolder(m.db, folder)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fmt.Errorf("Unknown folder %q", folder)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Model) String() string {
|
func (m *Model) String() string {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -67,17 +68,17 @@ func TestReset(t *testing.T) {
|
|||||||
|
|
||||||
// Reset indexes of the default folder
|
// Reset indexes of the default folder
|
||||||
log.Println("Reset indexes of default folder")
|
log.Println("Reset indexes of default folder")
|
||||||
_, err = p.Post("/rest/system/reset?folder=default", nil)
|
bs, err := p.Post("/rest/system/reset?folder=default", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Failed to reset indexes of the default folder:", err)
|
t.Fatalf("Failed to reset indexes (default): %v (%s)", err, bytes.TrimSpace(bs))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Syncthing restarts on reset. But we set STNORESTART=1 for the tests. So
|
// Syncthing restarts on reset. But we set STNORESTART=1 for the tests. So
|
||||||
// we wait for it to exit, then do a stop so the rc.Process is happy and
|
// we wait for it to exit, then do a stop so the rc.Process is happy and
|
||||||
// restart it again.
|
// restart it again.
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
checkedStop(t, p)
|
|
||||||
p = startInstance(t, 1)
|
p = startInstance(t, 1)
|
||||||
|
defer checkedStop(t, p)
|
||||||
|
|
||||||
m, err = p.Model("default")
|
m, err = p.Model("default")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -108,17 +109,14 @@ func TestReset(t *testing.T) {
|
|||||||
|
|
||||||
// Reset all indexes
|
// Reset all indexes
|
||||||
log.Println("Reset DB...")
|
log.Println("Reset DB...")
|
||||||
_, err = p.Post("/rest/system/reset?folder=default", nil)
|
bs, err = p.Post("/rest/system/reset", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Failed to reset indexes", err)
|
t.Fatalf("Failed to reset indexes (all): %v (%s)", err, bytes.TrimSpace(bs))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Syncthing restarts on reset. But we set STNORESTART=1 for the tests. So
|
// Syncthing restarts on reset. But we set STNORESTART=1 for the tests. So
|
||||||
// we wait for it to exit, then do a stop so the rc.Process is happy and
|
// we wait for it to exit, then restart it again.
|
||||||
// restart it again.
|
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
checkedStop(t, p)
|
|
||||||
|
|
||||||
p = startInstance(t, 1)
|
p = startInstance(t, 1)
|
||||||
defer checkedStop(t, p)
|
defer checkedStop(t, p)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user