Merge lp:~jameinel/juju-core/desiredversion-not-newer-1304340 into lp:~go-bot/juju-core/trunk

Proposed by John A Meinel
Status: Merged
Approved by: John A Meinel
Approved revision: no longer in the source branch.
Merged at revision: 2592
Proposed branch: lp:~jameinel/juju-core/desiredversion-not-newer-1304340
Merge into: lp:~go-bot/juju-core/trunk
Diff against target: 156 lines (+87/-2)
3 files modified
state/apiserver/upgrader/upgrader.go (+28/-1)
state/apiserver/upgrader/upgrader_test.go (+56/-0)
worker/upgrader/upgrader_test.go (+3/-1)
To merge this branch: bzr merge lp:~jameinel/juju-core/desiredversion-not-newer-1304340
Reviewer Review Type Date Requested Status
Juju Engineering Pending
Review via email: mp+214743@code.launchpad.net

Commit message

state/apiserver/upgrader: Managers upgrade first

This addresses bug #1304340. It gives us a step along the path of having
Manager nodes (API Servers) upgrade themselves before we have all the
other machine agents upgrade (before we have the Unit agents upgrade).
We already had the last two steps. This isn't 100% reliable in HA
circumstances, because we aren't waiting for *all* nodes to be upgraded.

We could potentially change the check so it was just if DesiredVersion
!= CurrentVersion (rather than >= CurrentVersion). It also doesn't probe
the database unless there is an upgrade pending, so DesiredVersion
should still be cheap. This doesn't change FindTools, but it doesn't
seem like it needs to. (All places that call FindTools first call
DesiredVersion, because we broke stuff in the past when we didn't have
API Credentials in time.)

Also, this falls back to returning version.Current rather than returning
the version of the machine/unit/etc had recorded in State. I'm not sure
if that is worth implementing, but when we do the DB lookup to find out
if this entity.IsManager() we could grab its current version.

https://codereview.appspot.com/85450043/

Description of the change

state/apiserver/upgrader: Managers upgrade first

This addresses bug #1304340. It gives us a step along the path of having
Manager nodes (API Servers) upgrade themselves before we have all the
other machine agents upgrade (before we have the Unit agents upgrade).
We already had the last two steps. This isn't 100% reliable in HA
circumstances, because we aren't waiting for *all* nodes to be upgraded.

We could potentially change the check so it was just if DesiredVersion
!= CurrentVersion (rather than >= CurrentVersion). It also doesn't probe
the database unless there is an upgrade pending, so DesiredVersion
should still be cheap. This doesn't change FindTools, but it doesn't
seem like it needs to. (All places that call FindTools first call
DesiredVersion, because we broke stuff in the past when we didn't have
API Credentials in time.)

Also, this falls back to returning version.Current rather than returning
the version of the machine/unit/etc had recorded in State. I'm not sure
if that is worth implementing, but when we do the DB lookup to find out
if this entity.IsManager() we could grab its current version.

https://codereview.appspot.com/85450043/

To post a comment you must log in.
Revision history for this message
John A Meinel (jameinel) wrote :
Download full text (6.9 KiB)

Reviewers: mp+214743_code.launchpad.net,

Message:
Please take a look.

Description:
state/apiserver/upgrader: Managers upgrade first

This addresses bug #1304340. It gives us a step along the path of having
Manager nodes (API Servers) upgrade themselves before we have all the
other machine agents upgrade (before we have the Unit agents upgrade).
We already had the last two steps. This isn't 100% reliable in HA
circumstances, because we aren't waiting for *all* nodes to be upgraded.

We could potentially change the check so it was just if DesiredVersion
!= CurrentVersion (rather than >= CurrentVersion). It also doesn't probe
the database unless there is an upgrade pending, so DesiredVersion
should still be cheap. This doesn't change FindTools, but it doesn't
seem like it needs to. (All places that call FindTools first call
DesiredVersion, because we broke stuff in the past when we didn't have
API Credentials in time.)

Also, this falls back to returning version.Current rather than returning
the version of the machine/unit/etc had recorded in State. I'm not sure
if that is worth implementing, but when we do the DB lookup to find out
if this entity.IsManager() we could grab its current version.

https://code.launchpad.net/~jameinel/juju-core/desiredversion-not-newer-1304340/+merge/214743

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/85450043/

Affected files (+86, -1 lines):
   A [revision details]
   M state/apiserver/upgrader/upgrader.go
   M state/apiserver/upgrader/upgrader_test.go

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: tarmac-20140408095416-cm5185gdi4wm6d6n
+New revision: <email address hidden>

Index: state/apiserver/upgrader/upgrader.go
=== modified file 'state/apiserver/upgrader/upgrader.go'
--- state/apiserver/upgrader/upgrader.go 2014-02-18 00:15:30 +0000
+++ state/apiserver/upgrader/upgrader.go 2014-04-08 12:50:26 +0000
@@ -6,6 +6,8 @@
  import (
   "errors"

+ "github.com/juju/loggo"
+
   "launchpad.net/juju-core/environs/config"
   "launchpad.net/juju-core/state"
   "launchpad.net/juju-core/state/api/params"
@@ -14,6 +16,8 @@
   "launchpad.net/juju-core/version"
  )

+var logger = loggo.GetLogger("juju.state.apiserver.upgrader")
+
  type Upgrader interface {
   WatchAPIVersion(args params.Entities) (params.NotifyWatchResults, error)
   DesiredVersion(args params.Entities) (params.VersionResults, error)
@@ -91,6 +95,22 @@
   return agentVersion, cfg, nil
  }

+type hasIsManager interface {
+ IsManager() bool
+}
+
+func (u *UpgraderAPI) entityIsManager(tag string) bool {
+ entity, err := u.st.FindEntity(tag)
+ if err != nil {
+ return false
+ }
+ if m, ok := entity.(hasIsManager); !ok {
+ return false
+ } else {
+ return m.IsManager()
+ }
+}
+
  // DesiredVersion reports the Agent Version that we want that agent to be
running
  func (u *UpgraderAPI) DesiredVersion(args params.Entities)
(params.VersionResults, error) {
   results := make([]params.VersionResult, len(args.Entities))
@@ -101...

Read more...

Revision history for this message
William Reade (fwereade) wrote :

LGTM

https://codereview.appspot.com/85450043/diff/1/state/apiserver/upgrader/upgrader_test.go
File state/apiserver/upgrader/upgrader_test.go (right):

https://codereview.appspot.com/85450043/diff/1/state/apiserver/upgrader/upgrader_test.go#newcode291
state/apiserver/upgrader/upgrader_test.go:291:
s.rawMachine.SetAgentVersion(version.Current)
refresh raw machine instead maybe?

https://codereview.appspot.com/85450043/

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (38.7 KiB)

The attempt to merge lp:~jameinel/juju-core/desiredversion-not-newer-1304340 into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.106s
ok launchpad.net/juju-core/agent/mongo 0.389s
ok launchpad.net/juju-core/agent/tools 0.208s
ok launchpad.net/juju-core/bzr 5.011s
ok launchpad.net/juju-core/cert 1.914s
ok launchpad.net/juju-core/charm 0.406s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.031s
ok launchpad.net/juju-core/cloudinit/sshinit 0.774s
ok launchpad.net/juju-core/cmd 0.176s
ok launchpad.net/juju-core/cmd/charm-admin 0.735s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/envcmd 0.231s
ok launchpad.net/juju-core/cmd/juju 210.733s
ok launchpad.net/juju-core/cmd/jujud 66.127s
ok launchpad.net/juju-core/cmd/plugins/juju-metadata 8.744s
? launchpad.net/juju-core/cmd/plugins/juju-restore [no test files]
ok launchpad.net/juju-core/cmd/plugins/local 0.153s
? launchpad.net/juju-core/cmd/plugins/local/juju-local [no test files]
ok launchpad.net/juju-core/constraints 0.022s
ok launchpad.net/juju-core/container 0.029s
ok launchpad.net/juju-core/container/factory 0.031s
ok launchpad.net/juju-core/container/kvm 0.180s
ok launchpad.net/juju-core/container/kvm/mock 0.033s
? launchpad.net/juju-core/container/kvm/testing [no test files]
ok launchpad.net/juju-core/container/lxc 3.265s
? launchpad.net/juju-core/container/lxc/mock [no test files]
? launchpad.net/juju-core/container/lxc/testing [no test files]
? launchpad.net/juju-core/container/testing [no test files]
ok launchpad.net/juju-core/downloader 5.238s
ok launchpad.net/juju-core/environs 2.432s
ok launchpad.net/juju-core/environs/bootstrap 11.374s
ok launchpad.net/juju-core/environs/cloudinit 0.546s
ok launchpad.net/juju-core/environs/config 2.918s
ok launchpad.net/juju-core/environs/configstore 0.033s
ok launchpad.net/juju-core/environs/filestorage 0.027s
ok launchpad.net/juju-core/environs/httpstorage 0.627s
ok launchpad.net/juju-core/environs/imagemetadata 0.490s
? launchpad.net/juju-core/environs/imagemetadata/testing [no test files]
ok launchpad.net/juju-core/environs/instances 0.035s
ok launchpad.net/juju-core/environs/jujutest 0.195s
ok launchpad.net/juju-core/environs/manual 10.596s
ok launchpad.net/juju-core/environs/simplestreams 0.308s
? launchpad.net/juju-core/environs/simplestreams/testing [no test files]
ok launchpad.net/juju-core/environs/sshstorage 0.890s
ok launchpad.net/juju-core/environs/storage 0.874s
ok launchpad.net/juju-core/environs/sync 49.440s
ok launchpad.net/juju-core/environs/testing 0.120s
ok launchpad.net/juju-core/environs/tools 4.497s
? launchpad.net/juju-core/environs/tools/testing [no test files]
ok launchpad.net/juju-core/errors 0.013s
ok launchpad.net/juju-core/instance 0.021s
? launchpad.net/juju-core/instance/testing [no test files]
ok launchpad.net/juju-core...

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (169.8 KiB)

The attempt to merge lp:~jameinel/juju-core/desiredversion-not-newer-1304340 into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.134s
ok launchpad.net/juju-core/agent/mongo 0.367s
ok launchpad.net/juju-core/agent/tools 0.209s
ok launchpad.net/juju-core/bzr 5.412s
ok launchpad.net/juju-core/cert 2.761s
ok launchpad.net/juju-core/charm 0.401s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.029s
ok launchpad.net/juju-core/cloudinit/sshinit 0.803s
ok launchpad.net/juju-core/cmd 0.158s
ok launchpad.net/juju-core/cmd/charm-admin 0.770s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/envcmd 0.182s
ok launchpad.net/juju-core/cmd/juju 215.321s
panic: Session already closed

goroutine 2031 [running]:
labix.org/v2/mgo.(*Session).cluster(0xc2009c8160, 0x0)
 /home/tarmac/trees/src/labix.org/v2/mgo/session.go:1037 +0x64
labix.org/v2/mgo.(*Session).acquireSocket(0xc2009c8160, 0xc200000001, 0x0, 0x0, 0x0, ...)
 /home/tarmac/trees/src/labix.org/v2/mgo/session.go:3099 +0x212
labix.org/v2/mgo.(*Query).Iter(0xc2006b7ee0, 0x7f891ed53e78)
 /home/tarmac/trees/src/labix.org/v2/mgo/session.go:2249 +0x18a
launchpad.net/juju-core/state/watcher.(*Watcher).sync(0xc200f2a6c0, 0xc2006002a0, 0x7f891ed53f70)
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:350 +0xe8
launchpad.net/juju-core/state/watcher.(*Watcher).loop(0xc200f2a6c0, 0x0, 0xc2002774a0)
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:220 +0x87
launchpad.net/juju-core/state/watcher.func·001()
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:118 +0x2c
created by launchpad.net/juju-core/state/watcher.New
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:120 +0x100

goroutine 1 [chan receive]:
testing.RunTests(0x10958d8, 0x170f300, 0x2, 0x2, 0xe20801, ...)
 /usr/lib/go/src/pkg/testing/testing.go:434 +0x88e
testing.Main(0x10958d8, 0x170f300, 0x2, 0x2, 0x171bd00, ...)
 /usr/lib/go/src/pkg/testing/testing.go:365 +0x8a
main.main()
 launchpad.net/juju-core/cmd/jujud/_test/_testmain.go:45 +0x9a

goroutine 2 [syscall]:

goroutine 4 [syscall]:
os/signal.loop()
 /usr/lib/go/src/pkg/os/signal/signal_unix.go:21 +0x1c
created by os/signal.init·1
 /usr/lib/go/src/pkg/os/signal/signal_unix.go:27 +0x2f

goroutine 6 [chan receive]:
launchpad.net/juju-core/provider/dummy.func·001()
 /home/tarmac/trees/src/launchpad.net/juju-core/provider/dummy/environs.go:208 +0x3a
created by launchpad.net/juju-core/provider/dummy.init·1
 /home/tarmac/trees/src/launchpad.net/juju-core/provider/dummy/environs.go:210 +0xcf

goroutine 9 [chan receive]:
launchpad.net/gocheck.(*suiteRunner).runTest(0xc2003d6700, 0xc2003de850, 0xc2008fa640)
 /home/tarmac/trees/src/launchpad.net/gocheck/gocheck.go:771 +0x4f
launchpad.net/gocheck.(*suiteRunner).run(0xc2003d6700, 0xc200286600)
 /home/tarmac/trees/src/launchpad.net/gocheck/gocheck.go:584 +0x1c5
launch...

Revision history for this message
Go Bot (go-bot) wrote :
Download full text (168.5 KiB)

The attempt to merge lp:~jameinel/juju-core/desiredversion-not-newer-1304340 into lp:juju-core failed. Below is the output from the failed tests.

ok launchpad.net/juju-core 0.014s
ok launchpad.net/juju-core/agent 1.242s
ok launchpad.net/juju-core/agent/mongo 0.384s
ok launchpad.net/juju-core/agent/tools 0.205s
ok launchpad.net/juju-core/bzr 5.367s
ok launchpad.net/juju-core/cert 2.825s
ok launchpad.net/juju-core/charm 0.435s
? launchpad.net/juju-core/charm/hooks [no test files]
? launchpad.net/juju-core/charm/testing [no test files]
ok launchpad.net/juju-core/cloudinit 0.031s
ok launchpad.net/juju-core/cloudinit/sshinit 0.802s
ok launchpad.net/juju-core/cmd 0.204s
ok launchpad.net/juju-core/cmd/charm-admin 0.748s
? launchpad.net/juju-core/cmd/charmd [no test files]
? launchpad.net/juju-core/cmd/charmload [no test files]
ok launchpad.net/juju-core/cmd/envcmd 0.217s
ok launchpad.net/juju-core/cmd/juju 208.118s
panic: Session already closed

goroutine 2024 [running]:
labix.org/v2/mgo.(*Session).cluster(0xc2003682c0, 0x0)
 /home/tarmac/trees/src/labix.org/v2/mgo/session.go:1037 +0x64
labix.org/v2/mgo.(*Session).acquireSocket(0xc2003682c0, 0xc200000001, 0x0, 0x0, 0x0, ...)
 /home/tarmac/trees/src/labix.org/v2/mgo/session.go:3099 +0x212
labix.org/v2/mgo.(*Query).Iter(0xc2009bd7e0, 0x7fccc2525e78)
 /home/tarmac/trees/src/labix.org/v2/mgo/session.go:2249 +0x18a
launchpad.net/juju-core/state/watcher.(*Watcher).sync(0xc200533b40, 0xc200e97380, 0x7fccc2525f70)
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:350 +0xe8
launchpad.net/juju-core/state/watcher.(*Watcher).loop(0xc200533b40, 0x0, 0xc2004d4db8)
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:220 +0x87
launchpad.net/juju-core/state/watcher.func·001()
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:118 +0x2c
created by launchpad.net/juju-core/state/watcher.New
 /home/tarmac/trees/src/launchpad.net/juju-core/state/watcher/watcher.go:120 +0x100

goroutine 1 [chan receive]:
testing.RunTests(0x10958d8, 0x170f300, 0x2, 0x2, 0xe20801, ...)
 /usr/lib/go/src/pkg/testing/testing.go:434 +0x88e
testing.Main(0x10958d8, 0x170f300, 0x2, 0x2, 0x171bd00, ...)
 /usr/lib/go/src/pkg/testing/testing.go:365 +0x8a
main.main()
 launchpad.net/juju-core/cmd/jujud/_test/_testmain.go:45 +0x9a

goroutine 2 [syscall]:

goroutine 4 [syscall]:
os/signal.loop()
 /usr/lib/go/src/pkg/os/signal/signal_unix.go:21 +0x1c
created by os/signal.init·1
 /usr/lib/go/src/pkg/os/signal/signal_unix.go:27 +0x2f

goroutine 6 [chan receive]:
launchpad.net/juju-core/provider/dummy.func·001()
 /home/tarmac/trees/src/launchpad.net/juju-core/provider/dummy/environs.go:208 +0x3a
created by launchpad.net/juju-core/provider/dummy.init·1
 /home/tarmac/trees/src/launchpad.net/juju-core/provider/dummy/environs.go:210 +0xcf

goroutine 9 [chan receive]:
launchpad.net/gocheck.(*suiteRunner).runTest(0xc200567a80, 0xc20071dbd0, 0xc2009971e0)
 /home/tarmac/trees/src/launchpad.net/gocheck/gocheck.go:771 +0x4f
launchpad.net/gocheck.(*suiteRunner).run(0xc200567a80, 0xc20037a600)
 /home/tarmac/trees/src/launchpad.net/gocheck/gocheck.go:584 +0x1c5
launch...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'state/apiserver/upgrader/upgrader.go'
2--- state/apiserver/upgrader/upgrader.go 2014-02-18 00:15:30 +0000
3+++ state/apiserver/upgrader/upgrader.go 2014-04-09 09:51:25 +0000
4@@ -6,6 +6,8 @@
5 import (
6 "errors"
7
8+ "github.com/juju/loggo"
9+
10 "launchpad.net/juju-core/environs/config"
11 "launchpad.net/juju-core/state"
12 "launchpad.net/juju-core/state/api/params"
13@@ -14,6 +16,8 @@
14 "launchpad.net/juju-core/version"
15 )
16
17+var logger = loggo.GetLogger("juju.state.apiserver.upgrader")
18+
19 type Upgrader interface {
20 WatchAPIVersion(args params.Entities) (params.NotifyWatchResults, error)
21 DesiredVersion(args params.Entities) (params.VersionResults, error)
22@@ -91,6 +95,22 @@
23 return agentVersion, cfg, nil
24 }
25
26+type hasIsManager interface {
27+ IsManager() bool
28+}
29+
30+func (u *UpgraderAPI) entityIsManager(tag string) bool {
31+ entity, err := u.st.FindEntity(tag)
32+ if err != nil {
33+ return false
34+ }
35+ if m, ok := entity.(hasIsManager); !ok {
36+ return false
37+ } else {
38+ return m.IsManager()
39+ }
40+}
41+
42 // DesiredVersion reports the Agent Version that we want that agent to be running
43 func (u *UpgraderAPI) DesiredVersion(args params.Entities) (params.VersionResults, error) {
44 results := make([]params.VersionResult, len(args.Entities))
45@@ -101,10 +121,17 @@
46 if err != nil {
47 return params.VersionResults{}, common.ServerError(err)
48 }
49+ // Is the desired version greater than the current API server version?
50+ isNewerVersion := agentVersion.Compare(version.Current.Number) > 0
51 for i, entity := range args.Entities {
52 err := common.ErrPerm
53 if u.authorizer.AuthOwner(entity.Tag) {
54- results[i].Version = &agentVersion
55+ if !isNewerVersion || u.entityIsManager(entity.Tag) {
56+ results[i].Version = &agentVersion
57+ } else {
58+ logger.Debugf("desired version is %s, but current version is %s and agent is not a manager node", agentVersion, version.Current.Number)
59+ results[i].Version = &version.Current.Number
60+ }
61 err = nil
62 }
63 results[i].Error = common.ServerError(err)
64
65=== modified file 'state/apiserver/upgrader/upgrader_test.go'
66--- state/apiserver/upgrader/upgrader_test.go 2014-03-13 07:54:56 +0000
67+++ state/apiserver/upgrader/upgrader_test.go 2014-04-09 09:51:25 +0000
68@@ -25,6 +25,7 @@
69 // These are raw State objects. Use them for setup and assertions, but
70 // should never be touched by the API calls themselves
71 rawMachine *state.Machine
72+ apiMachine *state.Machine
73 upgrader *upgrader.UpgraderAPI
74 resources *common.Resources
75 authorizer apiservertesting.FakeAuthorizer
76@@ -38,6 +39,11 @@
77
78 // Create a machine to work with
79 var err error
80+ // The first machine created is the only one allowed to
81+ // JobManageEnviron
82+ s.apiMachine, err = s.State.AddMachine("quantal", state.JobHostUnits,
83+ state.JobManageEnviron)
84+ c.Assert(err, gc.IsNil)
85 s.rawMachine, err = s.State.AddMachine("quantal", state.JobHostUnits)
86 c.Assert(err, gc.IsNil)
87
88@@ -277,3 +283,53 @@
89 c.Assert(agentVersion, gc.NotNil)
90 c.Check(*agentVersion, gc.DeepEquals, version.Current.Number)
91 }
92+
93+func (s *upgraderSuite) bumpDesiredAgentVersion(c *gc.C) version.Number {
94+ // In order to call SetEnvironAgentVersion we have to first SetTools on
95+ // all the existing machines
96+ s.apiMachine.SetAgentVersion(version.Current)
97+ s.rawMachine.SetAgentVersion(version.Current)
98+ newer := version.Current
99+ newer.Patch++
100+ err := s.State.SetEnvironAgentVersion(newer.Number)
101+ c.Assert(err, gc.IsNil)
102+ cfg, err := s.State.EnvironConfig()
103+ c.Assert(err, gc.IsNil)
104+ vers, ok := cfg.AgentVersion()
105+ c.Assert(ok, jc.IsTrue)
106+ c.Check(vers, gc.Equals, newer.Number)
107+ return newer.Number
108+}
109+
110+func (s *upgraderSuite) TestDesiredVersionUnrestrictedForAPIAgents(c *gc.C) {
111+ newVersion := s.bumpDesiredAgentVersion(c)
112+ // Grab a different Upgrader for the apiMachine
113+ authorizer := apiservertesting.FakeAuthorizer{
114+ Tag: s.apiMachine.Tag(),
115+ LoggedIn: true,
116+ MachineAgent: true,
117+ }
118+ upgraderAPI, err := upgrader.NewUpgraderAPI(s.State, s.resources, authorizer)
119+ c.Assert(err, gc.IsNil)
120+ args := params.Entities{Entities: []params.Entity{{Tag: s.apiMachine.Tag()}}}
121+ results, err := upgraderAPI.DesiredVersion(args)
122+ c.Assert(err, gc.IsNil)
123+ c.Check(results.Results, gc.HasLen, 1)
124+ c.Assert(results.Results[0].Error, gc.IsNil)
125+ agentVersion := results.Results[0].Version
126+ c.Assert(agentVersion, gc.NotNil)
127+ c.Check(*agentVersion, gc.DeepEquals, newVersion)
128+}
129+
130+func (s *upgraderSuite) TestDesiredVersionRestrictedForNonAPIAgents(c *gc.C) {
131+ newVersion := s.bumpDesiredAgentVersion(c)
132+ c.Assert(newVersion, gc.Not(gc.Equals), version.Current.Number)
133+ args := params.Entities{Entities: []params.Entity{{Tag: s.rawMachine.Tag()}}}
134+ results, err := s.upgrader.DesiredVersion(args)
135+ c.Assert(err, gc.IsNil)
136+ c.Check(results.Results, gc.HasLen, 1)
137+ c.Assert(results.Results[0].Error, gc.IsNil)
138+ agentVersion := results.Results[0].Version
139+ c.Assert(agentVersion, gc.NotNil)
140+ c.Check(*agentVersion, gc.DeepEquals, version.Current.Number)
141+}
142
143=== modified file 'worker/upgrader/upgrader_test.go'
144--- worker/upgrader/upgrader_test.go 2014-03-21 03:27:16 +0000
145+++ worker/upgrader/upgrader_test.go 2014-04-09 09:51:25 +0000
146@@ -46,7 +46,9 @@
147
148 func (s *UpgraderSuite) SetUpTest(c *gc.C) {
149 s.JujuConnSuite.SetUpTest(c)
150- s.state, s.machine = s.OpenAPIAsNewMachine(c)
151+ // s.machine needs to have IsManager() so that it can get the actual
152+ // current revision to upgrade to.
153+ s.state, s.machine = s.OpenAPIAsNewMachine(c, state.JobManageEnviron)
154 // Capture the value of RetryAfter, and use that captured
155 // value in the cleanup lambda.
156 oldRetryAfter := *upgrader.RetryAfter

Subscribers

People subscribed via source and target branches

to status/vote changes: