[02:23] <cherylj> wallyworld: ping?
[02:24] <wallyworld> cherylj: hey give me a sec
[02:24] <cherylj> np
[02:26] <wallyworld> cherylj: hey. btw do you have a link to the 2.0 todo list that has been srated for the sprint?
[02:27] <cherylj> wallyworld: I don't know that one has been started yet
[02:27] <wallyworld> ah, ok, np. next week then
[02:28] <cherylj> wallyworld: I know that when you guys were working the bootstack upgrade issues, you came across the problem in this bug:  https://bugs.launchpad.net/juju-core/+bug/1459033
[02:28] <mup> Bug #1459033: Invalid binary version, version "1.23.3--amd64" or "1.23.3--armhf" <constraints> <maas-provider> <juju-core:Triaged> <https://launchpad.net/bugs/1459033>
[02:28] <wallyworld> yes
[02:28] <cherylj> but I cannot find / remember what the cause of that was determined to be
[02:28] <wallyworld> they had bad data in their tools metadata collection in state
[02:29] <wallyworld> at some point, juju i think must have returned "" for an unknown series lookup
[02:29] <wallyworld> and so when tools were being imported, wily or xenial tools for that bad version
[02:29] <cherylj> did you have to manually recover the db?
[02:29] <wallyworld> yeah, i went in and deleted the tools metadata
[02:30] <wallyworld> this causes juju to go out to streams.canonical.com
[02:30] <wallyworld> to fetch tools instead of using any cached values
[02:30] <wallyworld> and the newly downloaded tools are then cached again
[02:30] <cherylj> okay, cool.  Thanks!
[02:31] <wallyworld> but hard to reporduce
[02:31] <wallyworld> i don't know how old that "" series issue is
[02:31] <cherylj> I can take a look
[02:32] <wallyworld> there's a lot of moving parts
[02:32] <wallyworld> may be hard to pin down a definitive "this is it" release
[02:32] <wallyworld> it should be an upgrade check
[02:32] <wallyworld> the upgrader checks for bad metadata and deletes it
[02:50] <wallyworld> axw: here's the pr http://reviews.vapour.ws/r/3317/
[02:50] <axw> wallyworld: ta, looking
[03:07] <axw> wallyworld: reviewed
[03:40] <wallyworld> axw: good pickups on the other issues; i've explained one point, hopefully it makes sense
[03:40] <axw> wallyworld: ok, looking again
[03:41] <axw> wallyworld: alternatively just "ServiceOffers" if URL is the canonical identifier
[03:41] <axw> wallyworld: your call tho
[03:42] <wallyworld> that might work
[03:42] <wallyworld> shit , just saw a typo
[03:42] <wallyworld> formatOfferedServiceDetailss
[03:42] <wallyworld> will fix that
[03:58] <axw> wallyworld: responded
[04:00] <wallyworld> looking
[04:01] <axw> wallyworld: going to go have lunch and start packing, will check back in a little while
[04:01] <wallyworld> ok, np, i'll push changes
[05:04] <axw> wallyworld: under what circumstances? re  "even if the query(filter) succeeds and the Error above is nil, converting the data from a particular query result item may have an error."
[05:05] <axw> wallyworld: just wondering if it's actually worthwhile departing from the conventional all-or-nothing per result
[05:05] <wallyworld_> axw: it gets the query result and then does things like look up the service and/or charm details (can't recall exactly)
[05:05] <wallyworld_> so that op per record could fail
[05:06] <axw> wallyworld_: does it make sense to include that in the result at all then? what're you going to do with that? you didn't specifically ask for an item, you just said "give me all the things that this filter matches"
[05:07] <wallyworld_> the doc in offered services collection does match. but composing the result errors
[05:07] <wallyworld_> we could ignore such errors i guess
[05:07] <axw> wallyworld_: yep... why would the user care about that?
[05:07] <wallyworld_> and pretent the item doesn't exist
[05:08] <wallyworld_> i'll rework it
[05:08] <axw> wallyworld_: it's just not clear to me how the user can action on that error
[05:08] <axw> wallyworld_: it's not due to an error in input, it's a server-side error
[05:09] <axw> wallyworld_: if you like, defer to a follow up
[05:09] <wallyworld_> as person making an offer, i would want to know if one of my offers went bad somehow
[05:10] <wallyworld_> let's land now and iterate next week? there's a fair bit of other cruft to fix also
[05:10] <wallyworld_> this is a good start though
[05:10] <axw> wallyworld_: then I tink we need to move the error inside the details, rather than outside the details. that would be more like the errors we have in machine status, I think
[05:10] <axw> wallyworld_: sure
[05:10] <wallyworld_> hmm, ok, i could move inside
[05:11] <wallyworld_> i'll land as is and we can think a bit. i need to go pack etc
[05:11] <axw> wallyworld_: do it later, I'll take a once over now
[05:11] <wallyworld_> ok
[05:15] <axw> wallyworld_: couple small fixes please, then shipit
[05:20] <wallyworld> axw: thanks. my eyes get sore looking at all those params structs. they all start to merge into a big mess
[05:20] <axw> wallyworld: :)
[08:29] <TheMue> Heya, old team. Next week in OAK/SFO?
[10:04] <voidspace> dimitern: standup?
[10:04] <dimitern> voidspace, omw - having some HO issues
[10:24] <mup> Bug #1522484 changed: state package tests no longer run since PR #3806 <blocker> <ci> <regression> <unit-tests> <juju-core:Fix Released by dimitern> <https://launchpad.net/bugs/1522484>
[10:27] <mup> Bug #1522484 opened: state package tests no longer run since PR #3806 <blocker> <ci> <regression> <unit-tests> <juju-core:Fix Released by dimitern> <https://launchpad.net/bugs/1522484>
[10:30] <mup> Bug #1522484 changed: state package tests no longer run since PR #3806 <blocker> <ci> <regression> <unit-tests> <juju-core:Fix Released by dimitern> <https://launchpad.net/bugs/1522484>
[10:53] <fwereade> dimitern, axw, rogpeppe: you have all contributed to this logic, so you may have insight: ISTM that the broken/closed logic in api/apiclient.go is really rather likely to deadlock on Close(); which would match a bug I've seen; any comments/recollections?
[10:55] <dimitern> fwereade, I don't recall much around that code, i have to do a refresher
[10:55] <fwereade> dimitern, axw, rogpeppe2: and it STM that http://paste.ubuntu.com/13665970/ would fix it
[10:55] <dimitern> fwereade, that looks like it should have been like this to begin with :)
[10:56] <fwereade> dimitern, it's just about the interaction of 2 channels (s.closed/s.broken) and how the heartbeatMonitor goroutine doesn't always close broken; but Close always waits for broken to be closed
[10:56] <rogpeppe2> fwereade: looking
[10:57] <rogpeppe2> fwereade: what's the difference between those two pieces of code?
[10:57] <rogpeppe2> fwereade: i ca't see that using defer makes a difference
[10:57] <fwereade> rogpeppe2, ...goddammit
[10:57] <fwereade> rogpeppe2, this is why it's a good idea to talk to you about these things ;)
[10:57] <rogpeppe2> fwereade: :)
[10:58] <fwereade> rogpeppe2, hadn't picked up that we always ping until we fail
[10:58]  * fwereade wonders if a ping could hang somehow...
[11:09] <rogpeppe2> uiteam: support removing multiple entities at once: https://github.com/CanonicalLtd/charmstore-client/pull/150
[11:35] <dimitern> voidspace, ping
[11:40] <frobware> dooferlad, your python observations on add-juju-bridge.py. I think I'm going to land on master as-is because I'm going to work on the multiple bridge / multiple NICs straight away and I can a) fix them there and b) don't want to invalidate any of the manual testing. Ok?
[11:41] <dooferlad> frobware: sure
[11:48] <dimitern> frobware, voidspace, I found out why David is having that issue - I'm about to propose a PR that fixes it by allowing Subnets() to be called without an instanceId (returning all subnets)
[11:55] <frobware> dimitern, great & thanks.
[11:57] <voidspace> dimitern: pong
[11:58] <voidspace> dimitern: without an instanceId... interesting
[11:58] <dimitern> voidspace, yes - like "gimme all subnets there are
[11:58] <voidspace> dimitern: sure, what will use that?
[11:58] <dimitern> voidspace, with the new api that's easy, and in fact already implemented
[11:58] <dimitern> voidspace, in Spaces()
[11:58] <voidspace> dimitern: for maas, yes
[11:59] <dimitern> voidspace, yes, only for maas and until we have import in place
[11:59] <dimitern> voidspace, this will allow David & et al to try spaces in constraints
[11:59] <voidspace> dimitern: ok, cool
[12:24] <rogpeppe2> uiteam: now updated to allow a -n flag: https://github.com/CanonicalLtd/charmstore-client/pull/150
[12:25]  * rogpeppe2 lunches
[12:56] <voidspace> dimitern: frobware: dooferlad: wife ill in bed, I'm looking after the boy
[12:56] <voidspace> hopefully she'll be rested and up soon
[12:56] <frobware> voidspace, ack
[12:57] <dimitern> voidspace, sure - speedy recovery!
[12:58] <dooferlad> voidspace: hope things improve soon :-(
[13:23] <frobware> dimitern, dooferlad, voidspace: PTAL @ http://reviews.vapour.ws/r/3319/
[13:25] <dimitern> frobware, looking
[13:27] <dimitern> frobware, LGTM
[13:33] <frobware> dimitern, once that lands on master I plan to rebase maas-spaces as I can do the multi nic / multi bridge with that change in place
[13:34] <dimitern> frobware, great
[13:34]  * dimitern steps out for ~1h
[13:34]  * frobware lunches
[13:56] <fwereade> rogpeppe2, re that heartbeatMonitor
[13:56] <rogpeppe2> fwereade: yes?
[13:57] <fwereade> rogpeppe2, the only reason I can see for it to block on Close is if Ping somehow hangs; and while I can't explain exactly why that would happen, it doesn't seem *intrinsically* implausible if the state server is misbehaving somehow
[13:58] <fwereade> rogpeppe2, (I'm mainly asking you because I think you wrote v1? anyway)
[13:58] <rogpeppe> fwereade: yeah, i'm responsible for the design of most of that code, i think
[13:58] <rogpeppe> fwereade: have you got a reproducible test case?
[13:58] <fwereade> rogpeppe, anything obviously insane about timing the ping out and stopping? AFAICS none of the clients need to block until it's *actually* stoppped?
[13:58] <fwereade> rogpeppe, sadly not
[13:59] <fwereade> rogpeppe, I am experimenting with messing around with connectioons and it's been flawless for me so far
[13:59] <rogpeppe> fwereade: is there a bug report?
[14:00] <fwereade> rogpeppe, but there's a bug open -- and that includes a panicking state server somewhere -- yeah, https://bugs.launchpad.net/juju-core/+bug/1522544
[14:00] <mup> Bug #1522544: workers restart endlessly <juju-core:Triaged by fwereade> <https://launchpad.net/bugs/1522544>
[14:00] <rogpeppe> fwereade: how would a hung-up heartbeatMonitor cause endless restarts?
[14:00] <rogpeppe> fwereade: i'd've thought it would have the opposite effect
[14:01] <rogpeppe> fwereade: i.e. it *can't* restart when needed
[14:02] <fwereade> rogpeppe, the worker that wraps it never finishes and is never restarted; so the conn resource doesn't get replaced, and everybody keeps gamely trying to connect with the old one
[14:02] <fwereade> rogpeppe, after all, it might just have been some transient error ;)
[14:02] <rogpeppe> fwereade: hmm
[14:02] <fwereade> rogpeppe, (but ofc they all just start up, try to do something, fall down)
[14:02] <fwereade> rogpeppe, anyway
[14:04] <rogpeppe> fwereade: before putting a timeout on the ping, i would make sure that that actually is happening
[14:04] <rogpeppe> fwereade: for example by getting a *full* stack trace of all goroutines when this is happening
[14:04] <rogpeppe> fwereade: if the connection to the state machine has gone, the Ping *should* exit
[14:04] <fwereade> rogpeppe, yeah, I'm not worried about that
[14:05] <rogpeppe> fwereade: if it doesn't then it may be a bug in the rpc package
[14:06] <fwereade> rogpeppe, I'm worried about the worst case of what a confused state server might induce I guess
[14:07] <fwereade> rogpeppe, ehh, just a thought -- the interesting thing I suppose is that the same failure could have happened silently before, I suspect, it'd just manifest as an agent blocked for some reason and when there's no clear cause it's all too easy to bounce it and move on
[14:09] <rogpeppe> fwereade: all the client request *should* return regardless of the server state
[14:09] <rogpeppe> fwereade: because we close the connection
[14:09] <fwereade> rogpeppe, do you recall the rationale for waiting for a failed ping, rather than just exiting on close? I don't think a successful ping-failure implies anything useful about whether any other clients are using the conn
[14:10] <rogpeppe> fwereade: and if the connection's closed the response reader should close
[14:10] <rogpeppe> fwereade: no, i think it would be just fine to return after reading on s.closed
[14:11] <rogpeppe> fwereade: i don't think that'll make any difference though
[14:12] <rogpeppe> fwereade: because sending an API request after the client is closed will immediately return an error without actually doing anything
[14:12] <rogpeppe> fwereade: actually i do see at least one rationale
[14:12] <rogpeppe> fwereade: which is that State.Close waits on s.broken before returning
[14:13] <fwereade> rogpeppe, I'm thinking of scenarios like "a panicking apiserver has somehow deadlocked itself mid-rpc"
[14:13] <rogpeppe> fwereade: thus ensuring that the heartbeat monitor is cleaned up
[14:13] <rogpeppe> fwereade: even then, it should cause a client to hang up
[14:13] <rogpeppe> fwereade: i mean, feel free to experiment
[14:14] <rogpeppe> fwereade: but i think that if you try making an rpc server that never replies on any request, you should still be able to close the client ok
[14:14] <rogpeppe> fwereade: (if not it's a bug)
[14:16] <fwereade> rogpeppe, yeah, I think you're right
[14:16] <fwereade> rogpeppe, cheers :)
[14:17] <rogpeppe> fwereade: np
[14:42] <voidspace> frobware: you rebased yet?
[14:51] <mup> Bug #1522861 opened: Panic in ClenupOldMetrics <juju-core:New> <https://launchpad.net/bugs/1522861>
[14:55] <frobware> voidspace, just about to. make check works ok on maas-spaces.
[14:57] <frobware> voidspace, I forget (doh!) what we agreed for rebasing. Just push, or PR and push?
[14:57] <frobware> dimitern, ^^
[14:57] <voidspace> frobware: I'd say just push
[14:58] <voidspace> frobware: you can't merge the PR anyway, so no point (IMO)
[14:58] <frobware> voidspace, exactly.
[14:58] <frobware> voidspace, couldn't remember what I did last time...
[14:58] <voidspace> you PR'd then pushed
[15:02] <frobware> voidspace, for the record, diff against master looks like: http://pastebin.ubuntu.com/13669884/
[15:02] <dimitern> frobware, +1 for just push
[15:06] <frobware> dimitern, dooferlad, voidspace: rebased. http://pastebin.ubuntu.com/13669966/
[15:07] <dooferlad> frobware: cool, thanks!
[15:19] <dimitern> frobware, sweet!
[15:44] <natefinch> mgz:  you around?
[15:45] <mgz> natefinch: yo
[15:47] <natefinch> mgz: something wonky with my feature branch here: http://juju-ci.vapour.ws:8080/job/github-merge-juju-charm/20/console
[15:47] <natefinch> + /var/lib/jenkins/juju-ci-tools/git_gate.py --project gopkg.in/juju/charm.nate-minver
[15:47] <natefinch> should be --project gopkg.in/juju/charm.v6-unstable
[15:48] <natefinch> probably the first time we've ever tried a feature branch on a gopkg.in library
[15:49] <natefinch> mgz: not really sure how we're supposed to make that work.  I can understand what the CI code is doing... I don't know how to tell it "pretend this is charm.v6-unstable"
[15:50] <mgz> yeah, I don't think gopkg.in and feature branches are compatible
[15:51] <mgz> well, they are, it's just via the go mechanism of rewriting all your imports
[15:51] <mgz> you can't name a branch something other than v6-unstable then import it as that via gopkg.in
[15:58] <natefinch> well, I mean, it works fine using godeps from juju/juju.... because godeps just sets the right commit... but yeah, I guess there's no real way to do that solely from the gopkg.in branch directly
[15:58] <natefinch> like, you can do go get gopkg.in/juju/charm.v6-unstable and then git checkout minver and it'll work fine
[15:59] <natefinch> er nate-minver
[16:00] <mgz> you can get git to give you any rev it can find in the repo
[16:00] <natefinch> right
[16:00] <mgz> that doesn't mean it's in any relevent history
[16:01] <natefinch> I think we need feature branch support in CI.  Otherwise we get into the case where a change to one of these versioned branches breaks juju/juju ... just like that email I sent a week ago or so
[16:02] <mgz> we can't really hack around the way gopkg.in works
[16:02] <mgz> ci on github.com/ stuff is fine
[16:02] <mgz> but we'd need to actually sed imports to make gopokg.in work I think, and that's... not very productive
[16:03] <natefinch> sure you can.  I just said how: You do go get gopkg.in/juju/charm.v6-unstable and then git checkout nate-minver
[16:03] <natefinch> (and then godeps dependencies.tsv)_
[16:03] <natefinch> that's how I do development on my feature branch
[16:04] <natefinch> let me double check that that actually works from scratch
[16:05] <natefinch> yep, totally works
[16:05] <mgz> hm, the simple case works with just mv on the dir yeah
[16:06] <natefinch> yeah, you just need the code from the branch to be in the directory go expects
[16:07] <natefinch> so the current CI code could work if we added a simple mv statement... though again, it has to understand what the code "expects" to be called, which now has to live outside the branch name.
[16:11] <mgz> natefinch: can we just naming scheme it?
[16:11] <mgz> how many dots is too many dots?
[16:12] <natefinch> mgz: whatever is easiest for you guys. *I* don't care what the name of my branch is
[16:12] <natefinch> mgz: I'm pretty sure that gopkg.in only cares about that first dot
[16:12] <natefinch> mgz: we could do gopkg.in/juju/charm.v6-unstable.nate-minver
[16:13] <natefinch> lol almost semantic versioning at that point
[16:13] <mgz> charm.v6-unstable.featurename seems somewhat workabl... right
[16:58] <natefinch> mgz: would you like me to poke at the CI code to get something like that working? I need it to get my min juju version stuff tested and landed
[16:59] <mgz> lp:juju-ci-tools git_gate.py I'd add a flag to do magic dot handling
[17:00] <natefinch> good lord bzr is slow
[17:00] <natefinch> mgz: thanks, I'll look at it
[17:00] <mgz> you should just be able to mangle the directory variable in go_test()
[17:03] <natefinch> mgz: can you rename my branch?
[17:04] <mgz> natefinch: I can
[17:08] <natefinch> lol, writing python just broke sublime
[17:08] <natefinch> bbiab
[17:41] <dimitern> frobware, voidspace, dooferlad, any of you guys still around?
[17:44] <frobware> dimitern, yep
[17:44] <dimitern> frobware, before I go today I need a review on the PR I'm proposing to unblock David
[17:45] <dimitern> frobware, doing a final live test on maas 1.9 now and I'll publish it
[17:45] <frobware> dimitern, OK
[17:45] <frobware> dimitern, it's on the maas-spaces branch so we're pretty contained
[17:45] <dimitern> frobware, yep
[17:49] <frobware> dimitern, the alternative is to just email a patch to Davi if you're unsure that you want to land it.
[17:49] <dimitern> frobware, oh boy :/ I've just discovered it won't work because of yet another maas bug
[17:50] <dimitern> frobware, http://paste.ubuntu.com/13673162/
[17:50] <dimitern> frobware, well, I can still propose it and land it, as it's useful but it won't unblock David until this is resolved
[17:56] <frobware> dimitern, why does that fail?
[17:56] <dimitern> frobware, no idea - looking at the maas logs now
[17:58] <dimitern> frobware, PR: http://reviews.vapour.ws/r/3322/
[17:58] <dimitern> frobware, I don't know why it includes already merged commits though :/
[17:59] <dimitern> my changes are only in provider/maas/environ.go and environ_whitebox_test.go
[17:59] <frobware> dimitern, is that because of my rebase?
[17:59] <dimitern> frobware, well, I did a rebase of my origin/maas-spaces onto upstream/maas-spaces
[18:00] <dimitern> frobware, and then rebased the last 2 commits on top of that
[18:00] <dimitern> anyway, I need to start packing..
[18:00] <frobware> dimitern, your commit touches a lot of files
[18:01] <frobware> dimitern, that's the single patch for David?
[18:01] <dimitern> frobware, most of the changed files come from voidspace's ProviderId for subnets/spaces
[18:01] <frobware> dimitern, are you merging from his branch?
[18:01] <dimitern> frobware, I guess I'll redo it cleanly starting from fresh upstream/maas-spaces
[18:02] <dimitern> frobware, no, I was rebasing.. well I did something wrong obviously
[18:03] <voidspace> dimitern: I'm here, sort of
[18:03] <frobware> dimitern, the review is split over two pages for me
[18:04] <dimitern> voidspace, false alarm it seems :)
[18:04] <dimitern> frobware, yeah, I'll redo it cleanly, but not now
[18:04] <voidspace> dimitern: how come that PR has my "already landed" changes in it
[18:05] <dimitern> voidspace, a git late-friday-evening mystery :)
[18:05] <voidspace> dimitern: heh