[00:00] why do we have canonical-written code that isn't hosted in LP? [00:01] bigjools: which code ? [00:02] mgo [00:03] bigjools: https://launchpad.net/mgo [00:03] it is [00:03] but gustavo is using a 'vanity url' [00:03] ah ok [00:03] thanks [00:03] bigjools: mgo is not Canonical written, by the way [00:03] bigjools: it is Gustavo written [00:03] I'd change that purely from the PoV of getting lTAB to work in the shell :) [00:04] niemeyer: under Canonical time? [00:04] bigjools: under Gustavo time [00:04] * davecheney butts out [00:04] Its creation predates even Canonical's adoption in Go, so there's little to be said [00:04] s/in Go/of Go/ [00:54] thumper: have you ever had a bzr pointless merge error? [01:04] yes [01:05] wallyworld: I'm off to walk the dog now [01:05] bbl [01:05] thumper: ok, can you ping me when you get back [01:05] WARNING Merging https://code.launchpad.net/~wallyworld/goose/null-project-description into https://code.launchpad.net/~go-bot/goose/trunk would be pointless [01:05] i'm not sure why the merge fails [01:06] the mp shows a nice diff etc [01:29] wallyworld: interesting, haven't had exactly that before [01:29] wallyworld: try merging trunk into null-project-description first [01:29] wallyworld: also, try 'bzr missing --mine ' from the null-project [01:29] thumper: ok. u had done that prior to proposing i'd swear but i'll try again [01:30] thumper: i've commented on https://codereview.appspot.com/10447045/, perhaps you could do the same [01:30] * thumper looks [01:45] thumper: so, no revs to merge in from trunk, and bzr missing shows what i would expect https://pastebin.canonical.com/93338/ [01:47] wallyworld: ok, I have no idea [01:47] np [01:47] i'll bug john latert [01:48] thumper: i'd like another quick chat about constraints when you have a moment [01:48] wallyworld: sure, let me go make a drink and I'll be right back [01:48] kk [01:53] got a hangout? [01:53] i'll make one [01:54] https://plus.google.com/hangouts/_/8868e66b07fa02bdc903be4601200d470dae9ee3 [04:53] * thumper bbl for more fwereade chats :) [05:51] mornin' all [05:56] morning rogpeppe, you seem up early [05:56] jam: i wanna get stuff done before i go away on thurs [06:09] jam: i have to take my son to the dr but do you know why i get a bzr pointless merge error trying to get my bracnh into trunk? [06:09] WARNING Merging https://code.launchpad.net/~wallyworld/goose/null-project-description into https://code.launchpad.net/~go-bot/goose/trunk would be pointless [06:09] i get the above in the tarmac log [06:09] the mp diff looks fine [06:09] bzr missing looks fine - shows the 2 revs that i have committed [06:10] tim doesn't know what's wrong [06:10] maybe you do? [06:10] i'll check in when i get back [06:11] wallyworld: because goose successfully merged and committed your change, but failed to push it back to Launchpad [06:11] so its local branch has merged your changes. [06:12] wallyworld: I just pushed it out. I don't specifically know why it would have gotten into this situation. [06:13] jam: i have some outstanding reviews, BTW, which it would be great to get moving; in particular fwereade has verbally ok'd this; i need another review and i'd appreciate your input. https://codereview.appspot.com/10259049/ [06:16] hi. We need to generate an iso9660 from the user data that the Azure provider needs. We can shell out, or invoke some C, or .... anything better you can think of? [06:20] bigjools: the recommendation that seems to come from the lxc work is that you should shell out [06:20] jam: ok cheers. === tasdomas_afk is now known as tasdomas [07:08] bigjools: would it be that hard to write a little package that generates an iso9660 image? the format doesn't look that abstruse, at first glance anyway. [07:09] rogpeppe: I'd really rather not reinvent the wheel [07:11] bigjools: i'm slightly concerned about juju acquiring many external dependencies. is there something that can produce an iso9660 image installed by default in ubuntu? [07:11] yes [07:12] what's the problem with external dependencies? [07:14] bigjools: they might not always be available on platforms we want juju to run on. [07:14] ok [07:15] the one I am looking at is genisoimage [07:16] ah it gets installed by ubuntu-desktop [07:20] rogpeppe: I think we'll shell out for now (we're short on time) but the motivated can easily replace it with a native piece of code [07:21] at least, it's good to show the rest of the code works before spending the time writing this [07:21] bigjools: that seems reasonable. you could make a package for it anyway, designed to be reimplemented at some future point. [07:22] rogpeppe: yes, that would be good [07:22] gives a nice clean break [07:26] morning [08:33] fwereade: would you be free for a quick chat? [08:37] wallyworld, sure, start a hangout, with you in a sec [08:39] fwereade: https://plus.google.com/hangouts/_/8868e66b07fa02bdc903be4601200d470dae9ee3 [09:46] jam: hello there [09:47] jam: landing issue because I tried to add a new dependency [09:47] jam: launchpad.net/golxc [09:47] mgz: morning [09:48] jam: oh, just saw the emails, seems like you are on it [09:51] hey thumper [09:51] mgz: hey, have you managed to hand off the api stuff yet? [09:53] thumper: yeah... +- one annyoing branch that's ready to land [10:04] thumper: I installed the new dependency, still fai [10:04] fails [10:04] # launchpad.net/juju-core/container/lxc container/lxc/instance.go:49: undefined: instance.Metadata [10:04] oh ffs [10:04] that;s right [10:04] wallyworld: removed it again [10:04] I'll have to fix it tomorrow [10:04] jam: but thanks [10:05] thumper: np. Poke me if you need updated golxc/etc. [10:05] ok, ta [10:05] thumper: i did tell you :-) [10:08] mgz: is that branch really ready to land now? i'm blocked on it [10:09] rogpeppe: really :) [10:11] mgz: i don't see anything different from yesterday (assuming we're both talking about https://codereview.appspot.com/10439043) [10:17] pushing now-ish [10:18] rogpeppe: so the reason thumper went with another package name was so that you could do: import . "launchpad.net/juju-core/testing/checkers" is there a reason you prefer not to use '.' ? [10:18] (the idea is to make it act the same as gocheck checkers) [10:19] jam: yeah, i really don't think we should do any more importing to . [10:19] jam: having one package imported from . is bad enough [10:20] jam: and i don't think the saved typing is a good enough justification [10:20] rogpeppe: I'd rather be consistent, so we should probably have that discussion on the list. thumper's assertion at least was without 'import .' there isn't really a benefit of 'testing.IsTrue' over Equals, true) [10:20] rogpeppe: I do think it makes the code 'read' better. [10:20] c.Assert(err, Satisfies, errors.IsNotFoundError) without the extra "checkers." in there. [10:21] jam: we're introducing pollution to the local name space. there's a reason Go doesn't do that all the time [10:21] jam: yes, i understand that point [10:21] rogpeppe: so at least my argument is: either (a) put them in 'testing' and import it as a module or (b) put them in checkers and import them as '.' [10:22] jam: i hadn't realised that was the only reason for putting the checkers in a new package [10:23] jam: in which case i'd put them all in testing [10:24] jam: there is another possible reason for putting them in a new package, which is that testing has lots of dependencies, where checkers has almost none. [10:24] rogpeppe: 's up [10:24] mgz: ta [10:25] I think william might have wanted something different on the inital-event handling, but I didn't understand where he wanted the change, and just landing this seems... like a desired thing [10:29] mgz: for the test, I think if we move NotifyWatcherC somewhere we can use it, then you can just NotifyWatcherC(resource).AssertOneChange() [10:30] yup, though I got the impression he wanted the actual logic, not the test, to change? I wasn't completely clear. [10:30] jam: surely reading from a channel with a timeout is not something we *need* to factor out [10:30] jam: we do it all over the place [10:31] mgz: "then do some basic verification of the watcher's state with something like NotifyWatcherC" [10:31] rogpeppe: the current code, for instance, does not check that there aren't further events [10:31] rogpeppe: I think NotifyWatcherC is intended to become something more than just reading off a channel. [10:31] mgz: that's true, but we aren't testing the watcher here [10:31] helpers are as much about making sure everyone gets the code right as saving typing [10:31] mgz: we're testing that the watcher is there and watching the right thing [10:31] mgz: your test tests the former but not actually the latter [10:32] mgz: to be honest, i think the client test should test that and kill two birds with one stone [10:32] I agree there's some question over what should be covered in the client tests rather than here [10:33] mgz: originally i *only* did client tests, reasoning that they cover almost exactly the same ground [10:33] mgz: but since the advent of bulk-for-everything (and the lack of a client interface to that), server-side-only tests are necessary [10:33] mgz: testing that the side effect happened is very unit-y vs integration-y, and since we don't have a client-side thing yet... [10:34] rogpeppe: while integration tests can cover everything unit-tests do, they tend to be overbroad and trigger to many failures when something low-level changes, vs a unit test that tends to be more precise. (I'm personally in favor of having both) [10:35] jam: i don't really see the interposing the API server makes it that much more of an integration test [10:35] jam: we're still calling all the way down to mongo [10:35] rogpeppe: more piecs == more integration [10:35] pieces [10:36] I don't see how that is hard to see. [10:36] testing-per-layer is a good thing to do IMO [10:36] jam: i'm more interested in test coverage [10:36] jam: and keeping tests from taking hours [10:37] jam: and i dislike having a lot of seriously overlapping test code [10:37] jam: because it wastes time and energy [10:39] jam: i do see your point about the failures being harder to diagnose though [10:39] rogpeppe: easier to diagnose failures often save *lots* of debugging time. Which in the lifetime of a project can easily dominate the overall cost. [10:40] rogpeppe: I agree spending huge amounts of runtime testing the same codepath is a bit of a waste. [10:40] I personally am in favor of layer testing, and a small number of integration tests. [10:40] So you don't have to look at all the edge cases at integration time [10:41] and just cover things that fail because of the combination, and general "does it work" tests. [10:41] fwereade: ping [10:41] jam: in this case, i tend to see the server type + the rpc package as one "layer" [10:42] jam: and that nothing other than the rpc package will ever talk to the server types [10:42] so, I have a friend who might be interested in helping with the containerisation work [10:42] jam: and the overhead of talking through that is fairly minimal [10:43] thumper, have we got any reasonably seperate parts that someone could have a go at? [10:43] rogpeppe: except anytime you have an RPC you *really* want to test them in isolation, so you don't run into the "client 1.11 tests all pass, and 1.10 tests all pass, but 1.11 can't talk to 1.10 because we weren't asserting what the conversation actually was" [10:44] jam: thx for review [10:45] jam: that's an interesting point; i think we need both. [10:45] jam: I came about chmod the dir because it is created in tests externally. this also can happen later [10:46] jam: i'm not entirely sure of the best way to do the compatibility checks. [10:46] jam: that's why I correct it during the initial writing ;) [10:48] mgz: you have a review [10:49] rogpeppe: I agree we need both [10:50] jam: i think we could have automated tests for rpc message compatibility, but version compatibility involves much more than just the format of the rpc messages [10:53] fwereade, anyone else: could you please review https://codereview.appspot.com/10497043 ? Thanks! [10:53] frankban: looking [10:53] thanks [10:55] frankban, I'll take a look after lunch [10:55] TheMue, pong, very quickly [10:55] fwereade: great thank you [10:57] mgz, rogpeppe, jam: I had liked rogpeppe's(?) original model in which the Watch call returns only when the guaranteed initial event has been read off the watcher, so the client-side watcher can hand that straight over to the out chan on creation, which seems kinda nice [10:57] fwereade: ah, good catch [10:58] mgz, rogpeppe, jam: ofc this is a degenerate case, there's no actual data to send, but for consistency's sake we should still be consuming the initial event before we hand over over as a resource to be Watch()ed [10:58] mgz: yeah, it should do that [10:58] fwereade: okay, that's the statement from the review I wasn't clear on [10:58] mgz, Next()ed, rather [10:58] so, the Watch call needs to pull from the channel, then the test needs to assert there are no further events [10:59] mgz, yeah, do an AssertNoChange, tweak the machine, do an AssertOneChange [10:59] mgz: yes to the former; for the latter, i'd change something in the Machine, Sync, and verify you get a change [10:59] rogpeppe, I think the NotifyWatcherC gives quite a good vocabulary for those tests [11:00] fwereade: i don't think it's necessary to AssertNoChange [11:00] fwereade: we're not testing the actual watcher here [11:00] fwereade: just that it exists and is attached to the right thing [11:00] fwereade: oh, a quick pong? so we should talk about auto-sync later [11:00] rogpeppe, how else do we verify the original event was read? we're testing the SUT by reference to the known and tested-elsewhere characteristics of the watcher [11:01] fwereade: hmm, good point [11:03] TheMue, ok, can we maybe talk about it just before kanban? or are you blocked? ...I never double-checked your english, sorry [11:03] TheMue, would you link me that CL quickly please? [11:04] fwereade: so, I still don't know *where* exactly you want that initial event pulled off [11:04] fwereade: we can talk before kanban, yes [11:05] mgz, the Watch call should create the watcher, read its initial event, register it as a resource and return its resource id [11:05] fwereade: review is https://codereview.appspot.com/10441044/ [11:05] which one though, the MachinerAPI Watch call, or the Machine Watch call, or newEntityWatcher... [11:05] mgz, MachinerAPI [11:06] okay. [11:07] mgz, this is what we're currently implementing, in terms of the watchers that already exist and have this somewhat convenient initial-event model, which we want to take advantage of in the api [11:07] ...I thinmk I'll do this in a new branch [11:07] because it really wants the test helpers [11:08] mgz, ok, sgtm [11:09] fwereade: i have about two other branches blocked on mgz's branch BTW, so i'd very much like something to go in [11:09] fwereade: soon [11:09] landing the current, then doing that change [11:30] fwereade, frankban: here's an interesting question: if someone has a service with minUnits=5, then destroys a unit, should the new unit be created when the old unit has gone away entirely, or when it starts to die? [11:32] davecheney: hiya [11:44] lunch [11:56] rogpeppe: my understanding is that MinimumUnits expresses the concept of "minimum amount of units that should be alive". If that's correct, it seems sane to me to react right when one unit starts to die. [11:59] mramm: I saw you show up for a second. I just got back from the restroom [12:09] mgz: i think you need to re-approve your branch [12:09] mgz: it died with one of them "bad MAC" errors [12:10] rogpeppe: do you know about those? [12:10] first time I've seen it, will resubmitting help? [12:10] mgz: yeah, it's intermittent [12:10] mgz: i thought that was the problem that jam fixed [12:11] mgz, rogpeppe: I think this is a different error. This is using system mongo instead of the tarball mongo [12:11] I'll try to fix it quicky. [12:13] rogpeppe, mgz: I'm resubmitting now. [12:14] jam: thanks! [12:23] mgz: when I update the config that the tarmac charm uses it rewrites crontab, which means I have to manually go fix it up, and I forgot to set the PATH [12:24] urgh === ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: rogpeppe | Bugs: 6 Critical, 81 High - https://bugs.launchpad.net/juju-core/ [13:09] clear [13:16] mgz, rogpeppe: Looks like my fix worked. [13:17] jam: cool [13:17] (uninstalled the system mongo which the charm also installs, fix up the PATH for the test suite.) [13:17] I'm actually pretty impressed that there is only 1 failing test [13:17] (well 2, but it looks like 1 fails to tear down so 2 notices the setup isn't clean) [13:56] gary_poster, mramm - is today the cross-team meeting today? I have something on my calendar, but it looks old. [13:57] Makyo: it's thursdays now [13:57] mramm, Thanks. Same time? [13:58] mramm, actually, I won't have the hangout; can you invite me? [13:59] Makyo, sorry, I might have misunderstood what you said you wanted last Friday. cross-team is half hour after kanban time === wedgwood_away is now known as wedgwood [13:59] Makyo, I'll delete the Tuesday juju core kanban appt for you? [13:59] gary_poster, That's what I meant, I just had the old event on my board for today. [13:59] gary_poster, I think I beat you to it :) [14:00] :-) you declined, I deleted [14:00] Ah, okay. === BradCrittenden is now known as bac === tasdomas is now known as tasdomas_afk [16:15] a branch to review, if anyone fancies it: https://codereview.appspot.com/10494043 [16:18] frankban: your merge proposal seems to be corrupted; could you re-propose, please? https://codereview.appspot.com/10497043 === meetingology` is now known as meetingology [16:20] rogpeppe: done [16:21] frankban: ta [16:21] hi, I'm hitting an error deploying with juju-core on openstack: instances goes into ERROR state with "ProcessExecutionError". I tried to remove the unit and destroy the service, but it all seems stuck [16:23] ackk: that sounds pretty solidly like an issue with nova, not juju [16:23] mgz_, can you force the destroy of the service/unit in juju? [16:23] just `juju destroy-environment`, and manually `nova delete` if needed [16:24] you can use terminate-machine for one machine, but starting from scratch seems wiser [16:25] mgz_, yeah I tried that, it doesn't work because the machine is still associated to the unit (which has life: dying) [16:25] right, you just need to wipe if things get that screwed [16:25] frankban: you've got a review [16:26] rogpeppe: thanks [16:26] mgz_, I see. thanks [16:36] To get the unit tests to pass, is there a reference ~/.juju/environments.yaml file that i need to have? [16:38] I'm trying to follow the "Testing" section from the "CONTRIBUTING" file, but what is written there is not working. [16:42] i have to go a bit early today [16:42] g'night all [16:45] fwereade, in your nomenclature LKP = ? [16:45] dpb1: do you mean the live tests? you don't need environments.yaml for the unit tests [16:48] mgz_: I'm running just make check from the juju-core checkout. I installed mongodb (obvious error) the errors I'm getting now are not as obvious. I can paste in one at a time, but I'm wondering if there is more than what the CONTRIBUTING file states. [16:49] mgz_: I checked out juju core with go get -v -u launchpad.net/juju-core/... [16:51] mgz_: I just found the README as well. I'm missing some things, let me check back, thanks [16:51] dpb1: feel free to pastebin anything if you get stuck [17:05] mgz_: for starters, I'm getting this: http://paste.ubuntu.com/5799084/ (cstack2 is an environment from my ~/.juju/environments.yaml file, which is why I asked my original question the way I did). [17:17] that's probably just bad isolation in one test... [17:18] dpb1: try running with JUJU_HOME=/tmp or something [17:19] mgz_: ok, I have tons of failures like these, will try now. Hope that will be it [17:24] mgz_: you were close. apparently some tests don't isolate against JUJU_ENV (which I had set). All good now [17:43] lbox is throwing an error about not being about diff branches when I submit a proposal: http://paste.ubuntu.com/5799185/ -- what am I missing? === tasdomas_afk is now known as tasdomas [18:10] hso I have a unit in pending state, and nova list shows the instance is in ERROR. It never launched. Any idea how to recover without destroying the environment? [18:11] http://pastebin.ubuntu.com/5799285/ [18:12] it's related to #1187959 [18:12] <_mup_> Bug #1187959: juju does not detect instance launch error, waits forever? [18:14] ok, a combination of juju destroy-service and destroy-unit allowed me to "terminate" that machine [18:20] ...except terminate-machine doesn't work [18:20] does nothing === andreas__ is now known as ahasenack [18:48] maybe i misunderstanding something.. when does a service in state 'dying' get garbage collected? [19:04] hazmat: I don't think it does [19:04] hazmat: or I haven't waited long enough [21:12] morning === tasdomas is now known as tasdomas_afk [21:37] poke fwereade [21:38] hazmat: ping [21:42] thumper, pong [21:43] hazmat: what was the dependency tool you found that caused you to drop the requirements.txt work for juju-core? [21:44] thumper, none, the use case for a commit or ci test runner was fulfilled i thought [21:45] hmm... not really [21:45] not in a reproducable way [21:53] thumper, why's is that.. it puts all deps at a known revision based on req.txt or gets head? [21:53] head [21:53] AFAIK [21:54] I thought, and I may be wrong here, that we just have tarmac doing the landings for us [21:54] not that there is any special revno checking there [21:54] thumper, a frontend script/make blows away the tree between runs [21:56] thumper, go get -u should still pull/update to trunk afaik, but blowing away the tree is simple as well [21:57] thumper, there's a bunch of other build tools, one other i might have mentioned is https://github.com/mozilla-services/heka-build [21:59] ok, I may take a look [22:04] thumper, g+? [22:04] hazmat: sure === wedgwood is now known as Guest19180 === Guest19180 is now known as wedgwood === wedgwood is now known as wedgwood_away [23:38] wallyworld_: you know how at the end of last week I said your watcher was returning dupes... [23:38] wallyworld_: well, I was wrong [23:38] wallyworld_: my code was bad [23:38] \o/ [23:39] I'm just trying to work out how to write a test for it [23:39] my code would never have any bugs :-P [23:41] thumper: talked to martin last night. he's across what we need to do. i asked him to send an email to us summarising the steps to address the main use case (deploy into container on new instance) as well as the next use case (mysql and wordpress in separate containers on an instance) [23:41] * thumper nods [23:41] there's something easy we can do initially. it might get complicated later [23:42] but that can wait [23:42] lxc.net is an easy thing to get inter-container networking on the same machine [23:42] and we can bridge to get the first use case going [23:43] he already has some work in progress towards the goals so that's good [23:56] wallyworld_: provisioner_test, TestProvisioningDoesNotOccurForContainers [23:56] wallyworld_: why do you have cleanup code at the end of the test? [23:56] wallyworld_: doesn't the test framework clean that up? [23:58] * wallyworld_ looks