70
70
return watcher.MustErr(fw.machinesWatcher)
72
for _, id := range change.Dead {
73
machined := fw.machineds[id]
74
delete(fw.machineds, id)
75
if err := machined.Stop(); err != nil {
76
log.Printf("machine %d watcher returned error when stopping: %v", id, err)
78
log.Debugf("firewaller: stopped watching machine %d", id)
80
for _, id := range change.Alive {
81
fw.machineds[id] = newMachineData(id, fw)
82
log.Debugf("firewaller: started watching machine %d", id)
72
for _, id := range change {
73
fw.machineLifeChanged(id)
84
75
case change := <-fw.unitsChange:
85
76
changed := []*unitData{}
209
// machineLifeChanged starts watching new machines when the firewaller
210
// is starting, or when new machines come to life, and stops watching
211
// machines that are dying.
212
func (fw *Firewaller) machineLifeChanged(id int) error {
213
m, err := fw.st.Machine(id)
214
found := !state.IsNotFound(err)
215
if found && err != nil {
218
dead := !found || m.Life() == state.Dead
219
machined, known := fw.machineds[id]
221
return fw.forgetMachine(machined)
224
fw.machineds[id] = newMachineData(id, fw)
225
log.Debugf("firewaller: started watching machine %d", id)
230
func (fw *Firewaller) forgetMachine(machined *machineData) error {
231
for _, unitd := range machined.unitds {
234
if err := fw.flushMachine(machined); err != nil {
237
for _, unitd := range machined.unitds {
240
delete(fw.machineds, machined.id)
241
if err := machined.Stop(); err != nil {
244
log.Debugf("firewaller: stopped watching machine %d", machined.id)
218
248
// forgetUnit cleans the unit data after the unit is removed.
219
249
func (fw *Firewaller) forgetUnit(unitd *unitData) {
220
250
name := unitd.unit.Name()
330
360
case change, ok := <-w.Changes():
332
md.fw.tomb.Kill(watcher.MustErr(w))
362
_, err := md.machine()
363
if !state.IsNotFound(err) {
364
md.fw.tomb.Kill(watcher.MustErr(w))
389
422
case unit, ok := <-ud.watcher.Changes():
424
// TODO(niemeyer): Unit watcher shouldn't return a unit.
391
425
err := watcher.MustErr(ud.watcher)
392
426
if !state.IsNotFound(err) {
393
427
ud.fw.tomb.Kill(err)
469
503
case service, ok := <-sd.watcher.Changes():
505
// TODO(niemeyer): Service watcher shouldn't return a service.
471
506
err := watcher.MustErr(sd.watcher)
472
507
if !state.IsNotFound(err) {
473
508
sd.fw.tomb.Kill(err)