// watchRelationUnits starts watching the relation units for the given // relation, waits for its first event, and records the information in // the current snapshot. func (w *RemoteStateWatcher) watchRelationUnits( rel Relation, relationTag names.RelationTag, in apiwatcher.RelationUnitsWatcher, ) error { relationSnapshot := RelationSnapshot{ Life: rel.Life(), Members: make(map[string]int64), } select { case <-w.tomb.Dying(): return tomb.ErrDying case change, ok := <-in.Changes(): if !ok { return watcher.EnsureErr(in) } for unit, settings := range change.Changed { relationSnapshot.Members[unit] = settings.Version } } w.current.Relations[rel.Id()] = relationSnapshot w.relations[relationTag] = newRelationUnitsWatcher( rel.Id(), in, w.relationUnitsChanges, ) return nil }