juju status panic() when unable to parse .jenv

Bug #1312136 reported by John A Meinel
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
juju-core
Fix Released
High
John A Meinel
1.18
Fix Released
High
John A Meinel

Bug Description

While investigating bug #1307677, I tried changing my local.jenv file to make it connect directly to the state server. I ended up getting:

$ juju status -e localkvm --debug
2014-04-24 11:45:08 INFO juju.cmd supercommand.go:296 running juju-1.19.1-trusty-amd64 [gc]
2014-04-24 11:45:08 DEBUG juju.conn api.go:185 trying cached API connection settings
2014-04-24 11:45:08 INFO juju.conn api.go:264 connecting to API addresses: [127.0.0.1:17017]
2014-04-24 11:45:08 INFO juju.state.api apiclient.go:198 dialing "wss://127.0.0.1:17017/"
2014-04-24 11:45:08 DEBUG juju.state.api apiclient.go:204 error dialing "wss://127.0.0.1:17017/", will retry: websocket.Dial wss://127.0.0.1:17017/: dial tcp 127.0.0.1:17017: connection refused
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4e06c1]

goroutine 9 [running]:
runtime.panic(0xc4aa20, 0x18db528)
 /usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6
launchpad.net/juju-core/environs/config.(*Config).mustString(0x0, 0xd7b1e0, 0x4, 0xc210060918, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/environs/config/config.go:424 +0x31
launchpad.net/juju-core/environs/config.(*Config).Type(0x0, 0xc210060900, 0x430edf)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/environs/config/config.go:444 +0x3b
launchpad.net/juju-core/environs.New(0x0, 0xc210134420, 0x0, 0x7fc32ceb5201, 0xc210125300)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/environs/open.go:161 +0x27
launchpad.net/juju-core/juju.apiConfigConnect(0x7fc32ceb51e0, 0xc2100519a0, 0xc210129420, 0x7fff2d0496e6, 0x8, ...)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:301 +0x108
launchpad.net/juju-core/juju.func·003(0xc210134420, 0x0, 0x0, 0x0, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:196 +0x6b
launchpad.net/juju-core/utils/parallel.func·005()
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:135 +0x41
created by launchpad.net/juju-core/utils/parallel.(*Try).loop
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:86 +0x9f

goroutine 1 [chan receive]:
launchpad.net/tomb.(*Tomb).Wait(0xc210051850, 0xc210126420, 0xc210081a00)
 /home/jameinel/dev/go/src/launchpad.net/tomb/tomb.go:110 +0x42
launchpad.net/juju-core/utils/parallel.(*Try).Result(0xc210051850, 0xc21012a300, 0x0, 0x0, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:192 +0x2e
launchpad.net/juju-core/juju.newAPIFromStore(0x7fff2d0496e6, 0x8, 0x7fc32ceb5138, 0xc2101094d0, 0xf2bc00, ...)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:199 +0x3d7
launchpad.net/juju-core/juju.newAPIClient(0x7fff2d0496e6, 0x8, 0xc2100b5b60, 0x0, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:125 +0x7b
launchpad.net/juju-core/juju.NewAPIClientFromName(0x7fff2d0496e6, 0x8, 0x0, 0x0, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:84 +0x31
main.(*StatusCommand).Run(0xc2100da3c0, 0xc2100bd140, 0x0, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/status.go:77 +0xb7
main.envCmdWrapper.Run(0x7fc32ceb39d0, 0xc2100da3c0, 0xc2100bd140, 0x7fc32cd1d190, 0x2)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/main.go:162 +0x48
main.(*envCmdWrapper).Run(0xc210036ce0, 0xc2100bd140, 0x14, 0x7fc32cd1d190)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/addmachine.go:1 +0x9a
launchpad.net/juju-core/cmd.(*SuperCommand).Run(0xc2100cd780, 0xc2100bd140, 0xc2100bd140, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/supercommand.go:297 +0x439
launchpad.net/juju-core/cmd.Main(0x7fc32ceb4e00, 0xc2100cd780, 0xc2100bd140, 0xc21000a010, 0x4, ...)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/cmd.go:244 +0x283
main.Main(0xc21000a000, 0x5, 0x5)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/main.go:135 +0x44c2
main.main()
 /home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/main.go:177 +0x44

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

goroutine 6 [select]:
launchpad.net/juju-core/utils/parallel.(*Try).loop(0xc210051850, 0x0, 0x8a8b70, 0xc210052700, 0x443452)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:83 +0x30f
launchpad.net/juju-core/utils/parallel.func·004()
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:62 +0x54
created by launchpad.net/juju-core/utils/parallel.NewTry
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:65 +0x1b3

goroutine 7 [chan receive]:
launchpad.net/tomb.(*Tomb).Wait(0xc210051cb0, 0xc210134540, 0x4e7b00)
 /home/jameinel/dev/go/src/launchpad.net/tomb/tomb.go:110 +0x42
launchpad.net/juju-core/utils/parallel.(*Try).Result(0xc210051cb0, 0xc210134660, 0x0, 0x8bb2c97001, 0x77359400)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:192 +0x2e
launchpad.net/juju-core/state/api.Open(0xc2101344e0, 0x2faf080, 0x8bb2c97000, 0x77359400, 0x0, ...)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/state/api/apiclient.go:139 +0x326
launchpad.net/juju-core/juju.defaultAPIOpen(0xc2101344e0, 0x2faf080, 0x8bb2c97000, 0x77359400, 0x20, ...)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:117 +0x4a
launchpad.net/juju-core/juju.apiInfoConnect(0x7fc32ceb5138, 0xc2101094d0, 0x7fc32ceb51e0, 0xc2100519a0, 0xf2bc00, ...)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:271 +0x2c7
launchpad.net/juju-core/juju.func·002(0xc210134420, 0x436a6f, 0x18ff140, 0x100000000, 0x100000200)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:187 +0x56
launchpad.net/juju-core/utils/parallel.func·005()
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:135 +0x41
created by launchpad.net/juju-core/utils/parallel.(*Try).loop
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:86 +0x9f

goroutine 8 [select]:
launchpad.net/juju-core/utils/parallel.(*Try).loop(0xc210051cb0, 0x0, 0x0, 0x0, 0x35)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:83 +0x30f
launchpad.net/juju-core/utils/parallel.func·004()
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:62 +0x54
created by launchpad.net/juju-core/utils/parallel.NewTry
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:65 +0x1b3

goroutine 10 [runnable]:
time.Sleep(0x77328fd5)
 /usr/lib/go/src/pkg/runtime/time.goc:31 +0x31
launchpad.net/juju-core/utils.(*Attempt).Next(0xc210134720, 0xe58a70)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/attempt.go:51 +0x122
launchpad.net/juju-core/state/api.func·002(0xc2101346c0, 0x0, 0x0, 0x0, 0x0)
 /home/jameinel/dev/go/src/launchpad.net/juju-core/state/api/apiclient.go:192 +0x58
launchpad.net/juju-core/utils/parallel.func·005()
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:135 +0x41
created by launchpad.net/juju-core/utils/parallel.(*Try).loop
 /home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:86 +0x9f

Tags: panic

Related branches

Revision history for this message
John A Meinel (jameinel) wrote :

in juju/api.go
  cfg, err = config.New(config.NoDefaults, info.BootstrapConfig())

That err is never checked. So presumably we have an error in my .jenv file but we are getting an err and then cfg is nil, and then we proceed to just do environs.New(nil) which causes the panic.

summary: - juju status panic() when unable to connect to local provider
+ juju status panic() when unable to parse .jenv
Changed in juju-core:
status: Triaged → In Progress
Go Bot (go-bot)
Changed in juju-core:
status: In Progress → Fix Committed
Curtis Hovey (sinzui)
Changed in juju-core:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.