updateVservers processes a list of vserver configurations then stops deleted vservers, spawns new vservers and updates the existing vservers.
()
| 486 | // updateVservers processes a list of vserver configurations then stops |
| 487 | // deleted vservers, spawns new vservers and updates the existing vservers. |
| 488 | func (e *Engine) updateVservers() { |
| 489 | e.clusterLock.RLock() |
| 490 | cluster := e.cluster |
| 491 | e.clusterLock.RUnlock() |
| 492 | |
| 493 | // Delete vservers that no longer exist in the new configuration. |
| 494 | for name, vserver := range e.vservers { |
| 495 | if cluster.Vservers[name] == nil { |
| 496 | log.Infof("Stopping unconfigured vserver %s", name) |
| 497 | vserver.stop() |
| 498 | <-vserver.stopped |
| 499 | delete(e.vservers, name) |
| 500 | e.vserverLock.Lock() |
| 501 | delete(e.vserverSnapshots, name) |
| 502 | e.vserverLock.Unlock() |
| 503 | } |
| 504 | } |
| 505 | |
| 506 | // Spawn new vservers and provide current configurations. |
| 507 | for _, config := range cluster.Vservers { |
| 508 | if e.vservers[config.Name] == nil { |
| 509 | vserver := newVserver(e) |
| 510 | go vserver.run() |
| 511 | e.vservers[config.Name] = vserver |
| 512 | } |
| 513 | } |
| 514 | for _, override := range e.overrides { |
| 515 | e.distributeOverride(override) |
| 516 | } |
| 517 | for _, config := range cluster.Vservers { |
| 518 | e.vservers[config.Name].updateConfig(config) |
| 519 | } |
| 520 | } |
| 521 | |
| 522 | // updateARPMap goes through the new config and updates the internal ARP map so that |
| 523 | // the gratutious arp loop adopts to new changes. |
no test coverage detected