Merge lp:~dimitern/juju-core/001-upgrade-charm-filter-restart-watchers into lp:~juju/juju-core/trunk
Proposed by
Dimiter Naydenov
Status: | Merged |
---|---|
Merged at revision: | 922 |
Proposed branch: | lp:~dimitern/juju-core/001-upgrade-charm-filter-restart-watchers |
Merge into: | lp:~juju/juju-core/trunk |
Diff against target: |
103 lines (+38/-16) 2 files modified
worker/uniter/filter.go (+33/-16) worker/uniter/filter_test.go (+5/-0) |
To merge this branch: | bzr merge lp:~dimitern/juju-core/001-upgrade-charm-filter-restart-watchers |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
The Go Language Gophers | Pending | ||
Review via email: mp+149910@code.launchpad.net |
Description of the change
uniter: WantAllRelation
This is the first CL in preparation for the
implementation of upgrade-charm. Here, we'll
prepare the Uniter to handle upgrades better,
by restarting the relations watcher in the
filter, when requested with WantAllRelation
To post a comment you must log in.
Reviewers: mp+149910_ code.launchpad. net,
Message:
Please take a look.
Description:
uniter: restart filter relations watcher
This is the first CL in preparation for the
implementation of upgrade-charm. Here, we'll
prepare the Uniter to handle upgrades better,
by restarting the relations watcher in the
filter, when we detect an upgrade.
https:/ /code.launchpad .net/~dimitern/ juju-core/ 001-upgrade- charm-filter- restart- watchers/ +merge/ 149910
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/7373046/
Affected files: uniter/ filter. go
A [revision details]
M state/service.go
M worker/
Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: <email address hidden>
+New revision:
<email address hidden>
Index: state/service.go
=== modified file 'state/service.go'
--- state/service.go 2013-02-20 13:27:51 +0000
+++ state/service.go 2013-02-21 19:02:04 +0000
@@ -267,6 +267,11 @@
// SetCharm changes the charm for the service. New units will be started
with
// this charm, and existing units will be upgraded to use it. If force is
true,
// units will be upgraded even if they are in an error state.
+//
+// A sanity check is performed:
+// * The new charm must still implement the local endpoints of every
+// relation the service is in, otherwise return an error.
+//
func (s *Service) SetCharm(ch *Charm, force bool) (err error) {
ops := []txn.Op{{
C: s.st.services.Name,
Index: worker/ uniter/ filter. go uniter/ filter. go' uniter/ filter. go 2013-01-16 17:04:22 +0000 uniter/ filter. go 2013-02-21 19:02:04 +0000 WatchConfig( ) Stop(configw, &f.tomb) WatchRelations( ) Stop(relationsw , &f.tomb) Stop(relationsw , &f.tomb) }()
=== modified file 'worker/
--- worker/
+++ worker/
@@ -179,7 +179,8 @@
configw := f.service.
defer watcher.
relationsw := f.service.
- defer watcher.
+ // relationsw can be recreated when sending upgrades
+ defer func() { watcher.
// Config events cannot be meaningfully discarded until one is available; Changes( ): Debugf( "filter: got relations change") MustErr( relationsw) WatchRelations( ) relationsChange d(ids)
// once we receive the initial change, we unblock discard requests by
@@ -218,8 +219,11 @@
discardConfig = f.discardConfig
case ids, ok := <-relationsw.
log.
- if !ok {
- return watcher.
+ if !ok && relationsw.Err() == nil {
+ // It was stopped cleanly, so restart it
+ relationsw = f.service.
+ } else {
+ return relationsw.Err()
}
f.
@@ -228,6 +232,10 @@ Debugf( "worker/ uniter/ filter: sent upgrade event") upgradeRequeste d.url = f.upgrade.URL() Debugf( "worker/ uniter/ filter: sent resolved event")
log.
f.
f.outUpgrade = nil
+ // To avoid missing any changes to relations, we need
+ // to restart the watcher after an upgrade is triggered
+ // (it'll get recreated above).
+ relationsw.Stop()
case f.outResolved <- f.resolved:
log.
f.outResolved = nil