mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-23 11:28:59 +00:00
Adding a node does not require restart; move logic to config package
This commit is contained in:
parent
5144330807
commit
e13976a3b3
@ -332,34 +332,7 @@ func restPostConfig(m *model.Model, w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Figure out if any changes require a restart
|
// Start or stop usage reporting as appropriate
|
||||||
|
|
||||||
if len(cfg.Repositories) != len(newCfg.Repositories) {
|
|
||||||
configInSync = false
|
|
||||||
} else {
|
|
||||||
om := cfg.RepoMap()
|
|
||||||
nm := newCfg.RepoMap()
|
|
||||||
for id := range om {
|
|
||||||
if !reflect.DeepEqual(om[id], nm[id]) {
|
|
||||||
configInSync = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(cfg.Nodes) != len(newCfg.Nodes) {
|
|
||||||
configInSync = false
|
|
||||||
} else {
|
|
||||||
om := cfg.NodeMap()
|
|
||||||
nm := newCfg.NodeMap()
|
|
||||||
for k := range om {
|
|
||||||
if _, ok := nm[k]; !ok {
|
|
||||||
// A node was removed and another added
|
|
||||||
configInSync = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if newCfg.Options.URAccepted > cfg.Options.URAccepted {
|
if newCfg.Options.URAccepted > cfg.Options.URAccepted {
|
||||||
// UR was enabled
|
// UR was enabled
|
||||||
@ -375,12 +348,9 @@ func restPostConfig(m *model.Model, w http.ResponseWriter, r *http.Request) {
|
|||||||
stopUsageReporting()
|
stopUsageReporting()
|
||||||
}
|
}
|
||||||
|
|
||||||
if !reflect.DeepEqual(cfg.Options, newCfg.Options) || !reflect.DeepEqual(cfg.GUI, newCfg.GUI) {
|
|
||||||
configInSync = false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Activate and save
|
// Activate and save
|
||||||
|
|
||||||
|
configInSync = !config.ChangeRequiresRestart(cfg, newCfg)
|
||||||
newCfg.Location = cfg.Location
|
newCfg.Location = cfg.Location
|
||||||
newCfg.Save()
|
newCfg.Save()
|
||||||
cfg = newCfg
|
cfg = newCfg
|
||||||
|
@ -423,6 +423,39 @@ func Load(location string, myID protocol.NodeID) (Configuration, error) {
|
|||||||
return cfg, err
|
return cfg, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChangeRequiresRestart returns true if updating the configuration requires a
|
||||||
|
// complete restart.
|
||||||
|
func ChangeRequiresRestart(from, to Configuration) bool {
|
||||||
|
// Adding, removing or changing repos requires restart
|
||||||
|
if len(from.Repositories) != len(to.Repositories) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
fromRepos := from.RepoMap()
|
||||||
|
toRepos := to.RepoMap()
|
||||||
|
for id := range fromRepos {
|
||||||
|
if !reflect.DeepEqual(fromRepos[id], toRepos[id]) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removing a node requires a restart. Adding one does not. Changing
|
||||||
|
// address or name does not.
|
||||||
|
fromNodes := from.NodeMap()
|
||||||
|
toNodes := to.NodeMap()
|
||||||
|
for nodeID := range fromNodes {
|
||||||
|
if _, ok := toNodes[nodeID]; !ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// All of the generic options require restart
|
||||||
|
if !reflect.DeepEqual(from.Options, to.Options) || !reflect.DeepEqual(from.GUI, to.GUI) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func convertV3V4(cfg *Configuration) {
|
func convertV3V4(cfg *Configuration) {
|
||||||
// In previous versions, rescan interval was common for each repository.
|
// In previous versions, rescan interval was common for each repository.
|
||||||
// From now, it can be set independently. We have to make sure, that after upgrade
|
// From now, it can be set independently. We have to make sure, that after upgrade
|
||||||
|
Loading…
Reference in New Issue
Block a user