/srv/irclogs.ubuntu.com/2012/09/25/#juju-dev.txt

davecheneyniemeyer: testing/mgo_test.go wasn't being run01:48
davecheneyi'll roll that fix into my next proposal01:48
niemeyerdavecheney: Oops.. thanks!02:14
davecheneyniemeyer: https://code.launchpad.net/~niemeyer/goetveld/trunk/+merge/12613602:19
davecheney^ not propsed with lbox, sorry02:20
davecheneyurgh, change list is empty as well ...02:22
davecheneyahh, because i did it ass backawards02:24
davecheneyniemeyer: https://code.launchpad.net/~dave-cheney/goetveld/001-add-darwin-termios-support/+merge/12613702:25
niemeyerdavecheney: LGTM03:16
niemeyerdavecheney: I've just changed the project so it's trunk is owned by the gophers team03:16
niemeyers/it's/its/03:16
niemeyerdavecheney: Please feel free to repropose against the new trunk and submit it straihgt03:16
niemeyerstraight03:16
* niemeyer => bed03:24
fwereadeha! my first Refresh-related bug with a long-lived-entity07:52
rogpeppefwereade: morning!07:52
rogpeppefwereade: it was bound to happen07:52
fwereaderogpeppe, what would you think about putting Refresh in at the start of Watch on Unit and Service?07:52
fwereaderogpeppe, that way the initial event actually is the current state, rather than potentially being whatever aged rubbish you started to watch?07:53
rogpeppefwereade: what are the events that those watchers produce?07:53
fwereaderogpeppe, something-changed07:54
fwereaderogpeppe, send fresh units back07:54
rogpeppefwereade: so won't the initial event be a fresh unit?07:54
rogpeppefwereade: and hence have all the currently correct settings?07:54
fwereaderogpeppe, AFAICT it'll correspond to *some* transaction more recent than the revno of the old document07:54
fwereaderogpeppe, hey wait that makes no sense07:55
rogpeppefwereade: hmm, that seems wrong07:55
fwereaderogpeppe, ok, time seemed to be flowing in reverse, and a Refresh fixed it, but clearlymore thought is required07:55
rogpeppefwereade: the initial event should be the most recent revno07:55
fwereaderogpeppe, ah, no, the initial event is just the unit yu originally watched07:56
rogpeppefwereade: that seems wrong to me07:56
fwereaderogpeppe, yeah, agreed07:56
rogpeppefwereade: then there's no point in having the initial event07:56
fwereaderogpeppe, well, yeah; we could either Refresh it or reconstruct a new one and send that back07:57
rogpeppefwereade: i'd incline towards the latter07:57
rogpeppefwereade: we don't do any implict Refresh anywhere else07:57
rogpeppeTheMue: yo!07:58
fwereaderogpeppe, ok, sgtm07:58
rogpeppefwereade: and every other event on the channel is a fresh object07:58
fwereadeTheMue, heyhey07:58
fwereaderogpeppe, yeah, feels neat07:58
TheMuemorniing rogpeppe and fwereade07:58
fwereaderogpeppe, TheMue: should be trivial: https://codereview.appspot.com/657104708:32
rogpeppefwereade: LGTM08:35
fwereaderogpeppe, cheers; trivial enough to submit directly, do you think?08:36
rogpeppefwereade: i *think* so, but it is a significant change in one sense.08:37
rogpeppefwereade: even though the code is trivial08:37
fwereaderogpeppe, in the sense that it causes the uniter to work properly, it is significant ;p08:38
fwereaderogpeppe, and I think it is unambiguously (1) correct, because watches should send current state and then deltas; and (2) safer, because we don't ever send the originating entity over to some unknown client over a channel08:39
rogpeppefwereade: it's that last thing that i think is the killer argument08:39
fwereaderogpeppe, indeed, it is only secondary in my mind because it wasn't the thing that bit me08:39
rogpeppefwereade: i'd say go for it08:40
* fwereade cheers08:40
Arammoin.09:41
davecheneyhello and goodbye09:42
davecheneytime to make the dinner09:42
davecheneythen i'll see ya'll for the hangout09:42
fwereadeok  launchpad.net/juju-core/worker/uniter117.284s09:46
fwereadeok  launchpad.net/juju-core/worker/uniter/charm7.835s09:46
fwereadeok  launchpad.net/juju-core/worker/uniter/hook0.007s09:46
fwereadeok  launchpad.net/juju-core/worker/uniter/relation8.826s09:46
davecheneyfwereade: did you see my comment to the list about i/o usage09:46
davecheneythat might explain your excessive test times09:46
fwereadedavecheney, I did, makes a lot of sense09:46
fwereadedavecheney, thanks09:46
davecheneyfwereade: maybe aram can help09:46
davecheneyi had a look today, but I wasn't much chop for anything09:46
davecheneyinvoking mgo the way the tests do, doesn't make it create that big _tmp09:47
davecheneyflie09:47
davecheneybut then again, I never connected a client to the manually invoked one09:47
Aram20MB09:47
Arammake it smaller09:47
Aram1MB09:47
davecheneyon my machine _tmp was 256mb09:47
Aramhmm?09:47
Aramperhaps testing/mgo had leaked?09:47
Aramor was this only from one test?09:48
Aramaaah09:48
AramI know09:48
Aramniemeyer made the capped collection 20MB09:48
Aram20009:48
davecheneyaram what is _tmp ?09:48
Aramand it needs contiguous space for that09:48
davecheney(see email)09:48
fwereadeAram, aaaahhh, and it's only made little in *some* tests09:48
Aramok, let me read the email09:48
fwereadeAram, right?09:48
davecheneyfwereade: only made little in cloudinit -> deploy to ec209:49
davecheneyoh, that explains why my had started version didn't use any disk space09:50
davecheneyit won't do that until someone connects to it and does ensure index ...09:50
fwereadedavecheney, StartMgoServer specifies everything that addMongoToBoot does, doesn't it?09:53
Aramfwereade: make the capped collection 1MB and see if tests take less.09:54
Aramin open.go09:54
Aramwtf is wrong with launchpad today, so slow.09:55
Aramactually, my internet is slow.09:56
* Aram reboots router09:56
TheMuelunchtime, see you in the hangout10:15
TheMuehmm, my build complains about an undefined bson.SetZero. i already update mgo. or is it a different problem?10:59
Arambzr pull10:59
Aramgo get -u is not enough10:59
TheMueAram: thx, will try11:00
TheMueAram: it pulled nothing, but i'm still using 1.0.2. may this be the problem?11:01
Aramno11:01
Aramyou pulled mgo, right?11:01
TheMueyes11:02
Aramwhat does bzr log --line -r -1 say?11:02
davecheneyso, how about that meeting ...11:03
TheMuefunny, 172 with the added SetZero11:04
davecheneyTheMue: maybe a fast path is to11:04
davecheneyrm -rf .../v2/mgo11:04
davecheneygo get ...11:04
davecheneythe cd v2/mgo11:04
davecheneybzr pull11:05
davecheneythat is what I did11:05
davecheneyi'm pretty sure it will work11:05
TheMuewill try that too11:05
davecheneyplease double check you don't have another mgo snuck away somewhere else11:05
Aramdavecheney: but it's always funny to find new bzr misfeatures and broken behaviors to complain about them.11:05
* davecheney smiles at Aram 11:06
davecheneyits like bzr has set the revision to a revision in a branch11:06
fwereadehm, should we be meeting now?11:07
davecheneyindeed11:08
davecheneywe should11:08
Aramwe should have a meeting about the lack of the meeting.11:12
davecheneyAram: please propose an agenda first11:13
Arama user story.11:13
Aramwhich we have to send to a program manager.11:13
TheMueshall i sent out the invite?11:13
* davecheney is texting mrarmm11:14
fwereadeTheMue, please do11:15
TheMuedone11:16
mrammsorry I was late to the meeting11:17
davecheneys'ok11:17
davecheneylets get going11:17
mrammI'm in the meeting, called by frank11:20
davecheneyerr, nobody else is11:20
Aramwe are11:21
Aram:)11:21
Aramdavecheney: https://plus.google.com/hangouts/_/74ad471b07ee1c4e3215133bbf54c62e79ff5c7b?authuser=1&hl=en11:21
davecheneyta11:21
Aramrogpeppe: ^ ^11:23
rogpeppeoops, didn't see it11:24
rogpeppewill be there in a moment11:24
mramm16:06 niemeyer: Woah11:29
mramm16:06 niemeyer: services:11:29
mramm16:06 niemeyer:  builddb:11:29
mramm16:06 niemeyer:    charm: builddb11:29
mramm16:06 niemeyer:    exposed: false11:29
mramm16:06 niemeyer:    units:11:29
mramm16:06 niemeyer:      builddb/0:11:29
mramm16:06 niemeyer:        agent-version: 0.0.011:29
mramm16:06 niemeyer:        machine: 111:29
mramm16:06 niemeyer:        public-address: ec2-204-236-223-223.compute-1.amazonaws.com11:29
mramm16:06 niemeyer:        status: started11:29
fwereadedavecheney, sorry, did you paste it somewhere I missed?11:33
davecheneysorry, email11:33
davecheneyirc is on another machine, sorry11:33
fwereadedavecheney, np, ty11:35
fwereadelunch bbl11:59
niemeyerMorning juju masters!12:48
davecheneyniemeyer: hello13:06
niemeyerdavecheney: Heya!13:06
davecheneysleep it would seem, eludes me13:06
TheMueniemeyer: hi13:10
niemeyerdavecheney: Wow, yeah, you've been here for a while :)13:14
niemeyerTheMue: Yo13:14
fwereadeniemeyer, heyhey13:30
niemeyerfwereade: Heya13:30
niemeyerfwereade: Just reviewing the relation units stuff13:30
niemeyerfwereade: Superb so far13:30
fwereadeniemeyer, for some reason I made the make-uniter-work branch depend on that one13:31
fwereadeniemeyer, jolly good, hopefully I won't need to reparent the followup ;)13:31
fwereadeniemeyer, I submitted one trivial this morning btw that was necessary13:31
niemeyerfwereade: No, certainly not.. I think there were a few opportunities to have split the branches, as you noted yourself in the description, but it's alright.. happy to have it in whatever form.13:32
fwereadeniemeyer, cheers13:33
niemeyerfwereade: Super, thanks re. trivial13:33
fwereadeniemeyer, now I come to think of it, the timeout bumps in the followup are surely only necessary because I wasn't using a tmpfs13:34
fwereadeniemeyer, I will adjust them down as seems fit13:34
niemeyerfwereade: Hmm13:35
niemeyerfwereade: The timeouts on the sad cases may be high13:35
fwereadeniemeyer, I was thinking "conservatively", at first, anyway -- just to what they were originally13:35
niemeyerfwereade: Those prevent spurious breaks when the machine happens to get some load or when tests are running on a slow machine13:35
niemeyerfwereade: I haven't seen the branch13:36
niemeyerfwereade: What were they?13:36
fwereadeniemeyer, 5s to 10s is the notable one, in a couple of places13:36
fwereadeniemeyer, and I really don't think it deserves that long13:36
niemeyerfwereade: wow13:36
niemeyerfwereade: Yeah, that's a lot13:36
niemeyerfwereade: How come we're getting such long timeouts? Are we missing a resync?13:37
fwereadeniemeyer, that was pessimistic, in practive it only missed the 5s mark by a few milliseconds even under load13:37
fwereadeniemeyer, but I was in no mood to mess around ;)13:37
fwereadeniemeyer, almost certainly it is because the mongo tests stress the hell out of my machine unless I have a tmpfs13:37
niemeyerfwereade: Hmm13:37
niemeyerfwereade: I wonder why13:38
niemeyerWell, I do have an SSD13:38
fwereadeniemeyer, I think Aram and davecheney have a better developed understanding of it -- the stuff I've been working on has not generally been affected enough to get really worked up about when you're running a few tests at a time13:38
fwereadeniemeyer, that said, it feels *much* nicer now than it ever did before, not sure is this is psychosomatic13:39
fwereadeniemeyer, is anyone working on jujud btw?13:39
niemeyerfwereade: not that I know of13:39
niemeyerfwereade: I was about to ask what else has broken tests atm13:40
fwereadeniemeyer, that seems to be the one remaining eyesore in the test output13:40
niemeyerfwereade: Anything obvious there?13:40
fwereadeniemeyer, barely looked tbh13:40
fwereadeniemeyer, focus has been elsewhere13:40
fwereadeniemeyer, schema error in bootstrap_test is the first13:41
fwereadeniemeyer, the remaining failures can probably be mostly attributed to collateral damage13:41
niemeyerfwereade: That rings a bell somehow13:42
niemeyerfwereade: Review sent13:57
fwereadeniemeyer, cheers13:57
niemeyerAram: ping14:00
Arampong14:00
niemeyerAram: Heya14:01
niemeyerAram: How're things going there?14:01
fwereadeniemeyer, the resyncing is to pick up Alive changes, without which Unit.Status will report "down" regardless of content14:02
Aramniemeyer: yesterday I've taken a swap day and today I'm working on the missing watchers and lifecycle in watchers. but a little bit later, ATM I'm running some rrands.14:02
Aramerrand14:02
Arams14:02
niemeyerfwereade: Sorry, I'm still slow today.. can you cover it a bit more piecemeal?14:03
niemeyerAram: Okay, let's please talk once you're back14:03
fwereadeniemeyer, ah, sorry, ok: I'm actually on crack, that's a different piece of code14:04
fwereadeniemeyer, no reason for the resyncing you correctly complain about14:04
niemeyerfwereade: Is it just a matter of refreshing the unit itself?14:04
fwereadeniemeyer, yeah, that is the sane and easy way14:04
niemeyerfwereade: Super.. I'm really just trying to understand these new patterns and see where/whether they fall short14:05
fwereadeniemeyer, that was almost certainly an unremoved attempt at working around the weirdness in the entity watchers14:05
rogpeppeniemeyer, fwereade: just checking, do you think the provisioner is currently working in trunk?14:11
fwereaderogpeppe, STM to be, just deployed a unit14:11
fwereaderogpeppe, not from trunk, but I haven't touched the provisioner14:12
rogpeppefwereade: hmm, my live tests aren't working14:12
niemeyerrogpeppe: It was yesterday14:12
rogpeppeniemeyer: the live test?14:12
niemeyerrogpeppe: The provisioner14:12
rogpeppeniemeyer: the provisioner test suite runs fine for me locally - just not live14:14
niemeyerrogpeppe: I've used the provisioner live yesterday14:14
niemeyerrogpeppe: Multiple times14:15
rogpeppeniemeyer: i've probably broken the live tests somehow then14:15
niemeyerrogpeppe: Or they are just not working after the state migration14:15
rogpeppeniemeyer: entirely possible. but it's not relying on watchers, so i *thought* it should work ok14:16
rogpeppeniemeyer: did juju status report you the correct agent version for the bootstrap machine?14:19
niemeyerrogpeppe: Yep14:20
niemeyerrogpeppe: I have a paste somewhere, hold on14:21
niemeyerrogpeppe: Sorry, can't find it14:23
niemeyerrogpeppe: I can easily fire a new env, though14:23
rogpeppeniemeyer: i think i saw it actually14:23
rogpeppeniemeyer: i'm trying again, but not in the test this time14:23
niemeyerfwereade: I think we'd benefit from adding back service.CharmURL, btw14:27
niemeyerfwereade: We can probably just revert it from somewhere in history14:27
fwereadeniemeyer, I can only think of one place it's be a real boon... quite often we want the charm itself as well14:28
niemeyerfwereade: In hindsight, it was the SetCharmURL bit that was ill-conceived.. CharmURL is fine14:28
fwereadeniemeyer, but yeah no actual objections14:28
niemeyerfwereade: Yeah, but often we grab the charm and throw it away.. we might grab the charm only if14:28
fwereadeniemeyer, fair enough14:29
niemeyerfwereade: Not an issue by any means.. just sharing brain state :)14:29
fwereadeniemeyer, ok, re MachineUnitsWatcher: what is the mechanism by which it guarantees it does not send events with the same unit both Added and Removed?14:36
niemeyerfwereade: I think there isn't any right now..14:37
niemeyerfwereade: I've pondered about the same thing in the context of the MachinesWatcher14:38
fwereadeniemeyer, I guess that was true both before and after the loop change14:38
niemeyerfwereade: Right14:38
niemeyerfwereade: I've actually made a comment regarding this in the CL14:38
niemeyerfwereade: Dave suggested it wasn't an issue, but I'm not yet sure14:38
niemeyerfwereade: I'm tempted to drop them too14:39
fwereadeniemeyer, it feels to me like it is14:39
niemeyerfwereade: If nothing else, we must handle the situation where it doesn't show up correctly14:39
niemeyerfwereade: Because it is just a perspective of timing14:39
niemeyerfwereade: If we made the same query moments afterwards, we'd see nothing14:39
fwereadeniemeyer, yeah, indeed14:40
fwereadeniemeyer, I guess it's best to use that style though, and fix the watchers so that mergeChanges always does the Right Thing14:40
niemeyerfwereade: +114:41
fwereadeniemeyer, the advantage of the double-loop style in RUW is that I think it *did* allow me to make useful guarantees of that nature14:41
fwereadeniemeyer, anyway, shouldn't be too tricky :)14:41
niemeyerfwereade: I've been doing a few changes, btw: renaming mergeChanges to merge; getInitialEvent to initial, and pass the change itself onto initial; plus the w.out change I've mentioned14:41
niemeyerfwereade: Hmm14:42
fwereadeniemeyer, those all sgtm14:42
niemeyerfwereade: I don't think so14:42
niemeyerfwereade: I mean, I don't think there were any guarantees before either14:42
niemeyerfwereade: Because events were aggregated regardless14:42
fwereadeniemeyer, I *think* that because the loops in which I send and the loops in which I get scope changes are different, it all Just Works14:43
fwereadeniemeyer, I don;t pick up a new scope event until I've sent the change derived from the first one14:43
niemeyerfwereade: I don't see why it makes a difference.. the code that may be executed or not is exactly the same, with the new convention or with the old one14:43
fwereadeniemeyer, that change may have had any number of settings changes merged in but those are safe14:43
niemeyerfwereade: The second loop is exactly a copy with the first one with the send disabled14:43
fwereadeniemeyer, not in RUW14:43
niemeyerfwereade: Which is exactly what we do in the new convention, but with less code14:44
niemeyerfwereade: Oh?14:44
niemeyerfwereade: /me looks again14:44
fwereadeniemeyer, although it is just one more var to track really14:44
niemeyerfwereade: I see.. I think it's actually preferable to teach merge about how to handle the situation14:47
niemeyerfwereade: Otherwise it's unnecessarily buffering changes arbitrarily14:47
fwereadeniemeyer, yeah, sounds sane14:47
rogpeppeniemeyer: ah, i think i *may* have discovered the reason why live tests are failing14:48
niemeyerrogpeppe: Sweet!14:48
rogpeppeniemeyer: just a hunch as yet14:48
rogpeppeniemeyer: but...14:49
rogpeppeniemeyer: what's the name of the public bucket containing the mongo binaries?14:49
niemeyerrogpeppe: juju-dist.. why does it matter?14:49
rogpeppeniemeyer: is it hard-coded?14:50
niemeyerrogpeppe: yes14:50
rogpeppedrat14:50
niemeyerrogpeppe: As of today14:50
niemeyerrogpeppe: It shouldn't be, but this avoids yet another refactoring without all tests green14:50
rogpeppeniemeyer: that's fine. hrmph.14:50
niemeyerfwereade: Follow up reviewed too14:52
TheMueniemeyer: test of removals in firewaller always showed an effect. the fw dislikes the service removal when it is stopped. stopping the service watcher returns an error then.14:52
fwereadeniemeyer, ta14:52
niemeyerTheMue: More details please?14:53
niemeyerTheMue: If the firewaller is stopped, how can it dislike anything?14:54
fwereadeniemeyer, ok, so *that* was the bit with a weird StartSync that I think is justified14:54
niemeyerfwereade: Yeah, I imagined it when reading14:54
fwereadeniemeyer, Unit.Status does an alive check on the UA14:54
niemeyerfwereade: I'm just curious about how it unrolls into it14:54
niemeyerfwereade: Aha, ok.. is that all?14:54
fwereadeniemeyer, Status returns "down" when the pinger is not there14:55
fwereadeniemeyer, yeah, that's it14:55
niemeyerfwereade: So a suggestion: let's move the sync down to right before Status, and call Sync rather than StartSync14:55
fwereadeniemeyer, ah, yeah, sounds sensible14:55
fwereadeniemeyer, cheers14:55
niemeyerfwereade: Thanks!14:56
niemeyerTheMue?14:56
TheMueniemeyer: sorry, my wife called me ;)15:02
TheMueniemeyer: fw.Stop() is expected to return no error15:02
TheMueniemeyer: but if a service is removed it returns a service not found15:02
TheMueniemeyer: because during the stop all internal go routines are stopped, and there the service watchers15:03
TheMueniemeyer: and this stopping does state.Service(name) for the non-existing service15:03
niemeyerTheMue: This is a bug that should be fixed15:03
TheMueniemeyer: indeed15:04
TheMueniemeyer: so you had the right feeling about testing it15:04
niemeyerTheMue: Would you mind to review all fw call sites that grab objects, and consider the appropriate action when the respective entity isn't found?15:05
niemeyerTheMue: Happy to have that done in tiny branches that follow each other so that we have a good way to coordinate as we go15:06
TheMueniemeyer: could you please rephase "fw call sites"? thx.15:06
niemeyerTheMue: call site == a point in the code that calls something15:06
TheMueniemeyer: ah, yes. ok, will do.15:07
niemeyerTheMue: Once you have that first issue fixed, please push for review so we can talk a bit about it with more concrete logic15:07
TheMueniemeyer: ok15:08
rogpeppeniemeyer: hmm, live tests fail even though bootstrapping and deploying live work ok. looks like the provisioner never sees the new machine.15:26
niemeyerrogpeppe: How can the provisioner never see the new machine if it is the one firing off new machines15:27
rogpeppeniemeyer: it's not the one that creates the new Machine though15:28
niemeyerrogpeppe: Exactly.. and if it didn't see that machine, it wouldn't fire an instance fo rit15:28
niemeyerrogpeppe: Also, tests pass15:29
rogpeppeniemeyer: the live deploy tests are currently disabled15:29
niemeyerrogpeppe: Provisioner tests pass15:29
rogpeppeniemeyer: sure. i'm just saying what i see.15:30
niemeyerrogpeppe: Of course, and I'm just explaining that "provisioner never sees the new machine" can't be true on its own15:30
niemeyerrogpeppe: The builddb charm works15:30
niemeyerrogpeppe: Firing new machine15:30
niemeyerrogpeppe: With machiner, uniter, etc15:30
rogpeppeniemeyer: absolutely. i see that working too.15:30
niemeyerrogpeppe: That doesn't happen with a provisioner that never sees a new machine15:30
rogpeppeniemeyer: but my live test that used to work no longer works. so *something* is up.15:31
rogpeppeniemeyer: it might be the fact that the second machine is added before the provisioner comes up15:31
niemeyerrogpeppe: I'm sure..15:31
niemeyerrogpeppe: Again, tests pass..15:32
niemeyerrogpeppe: You seem to argue that the provisioner is completely broken.. I doubt it's as simple as that15:32
rogpeppeniemeyer: i'm not arguing that at all15:32
rogpeppeniemeyer: i'm saying that live tests fail that used to pass, that's all15:32
rogpeppeniemeyer: and i don't see the provisioner see the new machine, which seems to be a symptom15:33
niemeyerrogpeppe: Sorry, okay.. I don't know how to help then15:33
rogpeppeniemeyer: i'm not asking for help, just giving a status update15:33
niemeyerrogpeppe: That live tests are broken, ok :)15:33
rogpeppeniemeyer: yeah, it's weird15:34
niemeyerfwereade, rogpeppe: Regarding https://codereview.appspot.com/6571047, I really want to stop sending entities down the pipe at all15:35
niemeyerEverything is a lot simpler and more correct if we just sent the entity identification15:36
rogpeppeniemeyer: just send a change notification?15:36
niemeyerrogpeppe: Yeah, with the id/name15:36
rogpeppeniemeyer: i tend to agree.15:36
niemeyerThe machines watcher was significantly simpler and more obvious to handle correctly on the other side with it15:36
niemeyerThat said, I've been resisting suggesting this for now, just so we can get it all working as it used to15:37
niemeyerAfter we're comfortable again, I think we should change15:37
fwereadeniemeyer, no strong feelings myself15:37
niemeyerThis also avoids the spurious reads we have nowadays within the watcher itself15:38
niemeyerwhen the entity changes repeatedly without being consumed15:38
niemeyerand it also simplifies the Dead-handling logic..15:38
niemeyerAnyway, lunch time here15:38
niemeyerrogpeppe: If you're still struggling by the time I'm back, let's try to pair on it15:39
rogpeppeniemeyer: i think i might be getting somewhere now. just expressing the problem was helpful.15:39
rogpeppeniemeyer: aaargh!15:39
rogpeppeniemeyer: found it15:39
rogpeppeso frickin simple15:41
platypusfriendGreets16:02
platypusfriendI'd like to suggest that, on the https://juju.ubuntu.com/ page, under the "Try it for yourself" heading, the instructions to install Juju from the PPA don't work out of the box with Ubuntu 12.04.116:03
platypusfriendgregkrsak@brewmaster:~$ add-apt-repository ppa:juju/pkgs16:04
platypusfriendThe program 'add-apt-repository' is currently not installed.  You can install it by typing: sudo apt-get install python-software-properties16:04
platypusfriend(thanks!)16:04
niemeyerplatypusfriend: kthxbye16:18
niemeyerrogpeppe: What was it?16:19
rogpeppeniemeyer: well, one problem was that i was assuming that the machine received from the machine watcher had no information content, so was reading agent tools from the original.16:19
rogpeppeniemeyer: but... that doesn't appear to have fixed the problem. we will see.16:20
rogpeppeniemeyer: am currently running a live test again16:20
rogpeppeniemeyer: hmm, looks like the machine watcher might not be sending an initial event.16:24
niemeyerrogpeppe: Indeed, I don't think it is16:25
rogpeppeniemeyer: i thought we tested for that16:25
niemeyerrogpeppe: I can fix that.. what else is using it?16:27
niemeyerHmm16:28
* rogpeppe checks16:28
niemeyerApparently only used in tests16:28
niemeyerIn two places only, one of them being the live tests16:28
rogpeppeniemeyer: that sounds about right16:28
niemeyerrogpeppe: I'm on it.. will take the chance to simplify the watcher according to the latest conventions16:29
rogpeppeniemeyer: sounds good16:29
niemeyerrogpeppe: Hah, curious16:30
niemeyerrogpeppe: If we send just the id, the initial event becomes a bit silly16:30
rogpeppeniemeyer: i'm not sure16:31
rogpeppeniemeyer: it's actually still useful, even though it carries no info content16:31
rogpeppeniemeyer: because it for a very simple pattern inside various watcher clients16:32
rogpeppes/it/it makes/16:32
niemeyerrogpeppe: Cool, I'm not suggesting we change the convention right now either way, since we're in the middle of a huge transition16:32
rogpeppeniemeyer: +116:32
niemeyerrogpeppe: Let's just observe the changed sites and see how they look once we do this16:32
rogpeppeniemeyer: sounds good16:32
rogpeppeniemeyer: my observation was that in quite a few places, the initial event is not acted upon any differently from a changed event, so it makes sense to handle them both in the same branch of the select statement.16:33
niemeyerrogpeppe: If that's generally the case for the entity watchers, +116:34
rogpeppeniemeyer: so it's nice to guarantee that we get at least one event16:34
niemeyerrogpeppe: It perhaps also conveys useful information, although I'm not entirely sure:16:34
niemeyerrogpeppe: When we get the watch fired, we know we're subscribed16:34
rogpeppeniemeyer: interesting. i wonder if that's ever actually useful to know.16:35
niemeyerrogpeppe: Ah, no, sorry, it doesn't matter16:35
niemeyerrogpeppe: We provide the machine revno when watching, so there are no holes16:35
rogpeppeniemeyer: ah, so in that case the initial event *does* carry useful info16:36
niemeyerrogpeppe: ?16:36
rogpeppeniemeyer: oh, sorry, other way around16:36
niemeyerYeah16:36
rogpeppeniemeyer: i thought you were suggesting the events would contain the revno as well as the id16:36
rogpeppeniemeyer: which may be a good idea, i suppose16:36
niemeyerrogpeppe: Nope.. not suggesting that yet, at least16:37
rogpeppeniemeyer: it kinda makes sense - you give a revno to watch from, then you're handed revnos as it changes.16:37
niemeyerrogpeppe: I'm slightly concerned that we might see code ignoring the initial watch thinking "Oh, but when the initial event arrives, the machine/unit/service hasn't yet changed"16:38
niemeyerrogpeppe: Which is not necessarily true.. let's watch out for that16:38
rogpeppeniemeyer: yeah16:38
niemeyerrogpeppe: The concept of revno is internal pretty much everywhere16:38
niemeyerrogpeppe: I'm not keen on exposing it, if possible16:38
rogpeppeniemeyer: fair enough.16:39
rogpeppeniemeyer: though doesn't the uniter make use of revnos?16:39
niemeyerrogpeppe: That where the "pretty much" comes from. The only exception is the settings version, because we have to persist them to disk.16:39
rogpeppeniemeyer: here's an idea for how an updated watcher API might work:16:43
rogpeppehttp://paste.ubuntu.com/1226959/16:43
rogpeppeniemeyer: i.e. each entity watcher embeds the entity that it's watching16:43
rogpeppeniemeyer: oops, with one crucial addition: http://paste.ubuntu.com/1226963/16:44
niemeyerrogpeppe: I don't understand what this is solving16:45
rogpeppeniemeyer: it's solving, for me at any rate, the fact that i want to watch the same kind of thing on two different kinds of entity16:45
rogpeppeniemeyer: perhaps that's not a problem anywhere else though, i guess16:46
rogpeppeniemeyer: it seems kinda logical to tie the watcher together with the thing it's watching.16:46
niemeyerrogpeppe: What is the MachineUnitsWatcher going to be tied with?16:47
rogpeppeniemeyer: is MachineUnitsWatcher an entity watcher?16:47
rogpeppeniemeyer: i'm only thinking of this for things where currently we just send an instance of the object down the channel16:48
niemeyerrogpeppe: Sorry, seems like a big red-herring16:48
rogpeppeniemeyer: ok fair enough16:48
rogpeppeniemeyer: i wondered if UnitWatcher and MachineWatcher could actually be implemented by the same type, and that led me to think in this direction16:48
rogpeppeniemeyer: looking at TestWatchMachine, it looks as if it *does* test for an initial event16:51
niemeyerrogpeppe: Please leave that with me.. I'll send a branch in a moment16:52
rogpeppeniemeyer: ok16:52
rogpeppeniemeyer: i'm off now. might be able to have a look back in a bit, otherwise see ya tomorrow!17:08
niemeyerrogpeppe: have a good time there17:13
niemeyerrogpeppe: Do live tests work, btw?17:19
rogpeppeniemeyer: no, i'm waiting for your machine watcher CL17:25
niemeyerrogpeppe: Well.. this will just add an extra event17:25
rogpeppeniemeyer: i *think* that's what's stopping them passing17:25
rogpeppeniemeyer: that will be good enough17:25
rogpeppeniemeyer: currently it blocks waiting for that event and never gets it17:26
niemeyerrogpeppe: It's a spurious event.. should be trivial to just not wait for it17:26
niemeyerEither way, too late.. the watcher is ready and you're off.. I'll have a look at it later17:27
rogpeppeniemeyer: i've actually got another hour or so now17:27
niemeyerrogpeppe: Oh, okay, let me push the watcher then17:27
niemeyerrogpeppe: I don't think it's the initial event here, btw17:31
niemeyerrogpeppe: Have you changed the test so it calls Refresh?17:31
rogpeppeniemeyer: ok. i changed the test so it used the Machine that it receives on the channel17:32
niemeyerrogpeppe: That won't work.. the channel contains an id now..17:32
niemeyerrogpeppe: Just Refresh the machine17:32
rogpeppeniemeyer: ok, i'll change as needed when i merge17:32
niemeyerrogpeppe: Ok, I won't touch it17:32
rogpeppeniemeyer: sounds good17:33
niemeyerrogpeppe: You'll see why the original tests were working, btw17:33
rogpeppeniemeyer: cool17:33
niemeyerCommitting & proposing17:33
rogpeppeniemeyer: i'm interested - they looked plausible!17:33
niemeyerrogpeppe: Agreed.  Two bugs coalesced for it to work.17:34
niemeyerrogpeppe:  https://codereview.appspot.com/656404917:37
rogpeppe*click*17:37
rogpeppeniemeyer: so the test was ok, then, and the problem was that the txn-revno was out of date, so it sent an event anyway?17:44
rogpeppeniemeyer: i'm not sure i see the other bug you refer to though17:44
niemeyerrogpeppe: Right17:44
niemeyerrogpeppe: Well, the other bug is the fact it didn't send17:45
niemeyerrogpeppe: The two bugs, together, make the test pass17:45
rogpeppeniemeyer: the watcher didn't send?17:46
niemeyerrogpeppe: The initial event.. :-)17:46
rogpeppeniemeyer: ah of course!17:46
rogpeppeniemeyer: it all becomes blindingly obvious17:46
rogpeppeniemeyer: it would be nice if we could have a test that would have failed with the previous bugs.17:47
niemeyerrogpeppe: The current test fails if we fix the revno issue17:48
niemeyerrogpeppe: But it's not easy to test the fact the revno was wrong, precisely because it causes an initial event to be sent, which is the behavior we want17:49
rogpeppeniemeyer: i wondered about getting a machine from a different source than AddMachine17:49
niemeyerrogpeppe: The bug is in AddMachine17:49
niemeyerwas17:49
rogpeppeniemeyer: given that there are several Machine constructors that can be bad in different ways17:49
rogpeppeniemeyer: indeed.17:49
niemeyerrogpeppe: Nope.. they are all ok, because they grab the db value17:50
rogpeppeniemeyer: if the original hadn't used AddMachine, we'd have found the bug17:50
niemeyerrogpeppe: AddMachine is special because it uses the memory value17:50
rogpeppeniemeyer: yeah, i'm just saying. maybe there should be a test that AddMachine returns exactly the same values as Machine. but that's hard to do externally.17:51
niemeyerrogpeppe: We could abuse DeepEquals for that.. it's generally a bad idea, but we can have a single trivial spot doing that for the entities, at least so we consciously know when we break that rule.17:54
rogpeppeniemeyer: i wondered about that17:58
niemeyerrogpeppe: I'll add a test17:58
rogpeppeniemeyer: one thought: is it really worth sending the machine id down the channel. we're never going to actually use it AFAICS. why not chan struct{} ?18:05
niemeyerrogpeppe: Happy to take it off while we don't care18:09
Aramniemeyer: what is it that you wanted to talk about?18:19
rogpeppeniemeyer: it would make me happy. then MachineWatcher and UnitWatcher can implement the same interface.18:20
niemeyerAram: Isn't it quite late for you already?  If you're taking the day off, we can talk tomorrow..18:20
niemeyerrogpeppe: Cool, I'll drop it before merging18:21
Aramniemeyer: it's late but it's fine, if we talk today I can work on it tomorrow in the morning, when you'll not be here.18:21
rogpeppeniemeyer: in fact, both Machine.Watch and Unit.Watch could return the same interface type. then Machine and Unit are directly compatible for watching.18:22
rogpeppeniemeyer: the MachineWatcher type could be unexported.18:23
niemeyerAram: I don't actually have much to talk about, I think.. I was going to bring up the auth + SSL stuff, but we don't even have the machine units watcher done yet, so that's probably the first thing to work on18:23
niemeyerAram: I think you've seen as well discussion about the latest conventions18:23
Aramniemeyer: aah, yes. so we continue to do full document watchers or just ids?18:24
niemeyerAram: Regarding w.out, nil, dropping the two loops, etc18:24
AramI've seen that18:24
Aramvery nice way of dropping the extra loop18:24
niemeyerAram: Just ids, and with liveness18:24
niemeyerAram: Similar to how the current MachinesWatcher is working18:24
Aramok18:25
niemeyerAram: Dead+Alive rather than added/removed18:25
Aramyeah18:25
niemeyerrogpeppe: Yeah, we can do a lot, but let's hold off a bit.. this is already going quite far18:25
rogpeppeniemeyer: cool. agreed.18:26
niemeyerI'm actually going to split this equivalence stuff in its own branch18:26
rogpeppeniemeyer: that sounds good too18:27
niemeyerI had to do changes for the charm equivalence which is unrelated to the original goal18:27
niemeyerCome on LP18:33
niemeyerrogpeppe: It's in18:38
rogpeppeniemeyer: i saw. thanks!18:38
niemeyerrogpeppe: np, will push the follow up for review onw18:39
niemeyerhttps://codereview.appspot.com/656605018:52
niemeyerrogpeppe: ^18:56
* rogpeppe looks18:56
rogpeppeniemeyer: LGTM18:58
niemeyerrogpeppe: Thanks!18:59
rogpeppeniemeyer: ok, i've updated the live tests for the new interface. now running them live - we'll see what happens.19:15
niemeyerrogpeppe: Fingers crossed!19:15
rogpeppeniemeyer: i've got a bus to catch in 15 minutes so if this doesn't work, it'll have to be tomorrow19:15
* rogpeppe wants a connection with faster upload speed19:16
niemeyerrogpeppe: +119:16
Aramyeah, in Romania I have 100Mbps upload for $9/month.19:17
Aramhere in Austria I pay 50€ for only 10Mbps.19:17
Aramthat's 71 times more expensive upload.19:18
rogpeppeAram: here i have no option for faster upload. it's crappy copper and they've no plans to upgrade.19:19
Aramyeah, in Romania I was lucky to have fiber.19:19
rogpeppestill, it only took 3:10 to upload the tools that time19:20
Aramat some point they forgot to set speed limits for me and I have 1Gbps download/upload for months :-).19:20
rogpeppei should do what dave does and run the live tests on ec2 itself19:21
rogpeppegotta go, or will miss bus19:22
rogpeppetests still waiting mongod19:23
rogpeppeniemeyer, Aram: have fun19:23
Aramcheers.19:23
niemeyerI wonder what "tests still waiting mongod" means.. It's pretty much instantaneous for me nowadays19:31
=== robbiew1 is now known as robbiew
hazmatout of curiosity how big are the tools?20:01
niemeyerhazmat: Each binary is about 5M stripped20:05
hazmatniemeyer, and what's the size with symbol?20:06
niemeyerhazmat: 7MB or so20:06
hazmatniemeyer, cool, thanks20:06
niemeyerhazmat: np20:06
niemeyerStepping out for a while.. back soon21:23
fwereadeniemeyer, discussion in https://codereview.appspot.com/6567044/ ; trivial in https://codereview.appspot.com/6570050 ; it would be awesome if you could take a look at the first, in particular, if you're around at any stage22:56
niemeyerfwereade: I'm here22:57
niemeyerfwereade: Looking22:57
niemeyerfwereade: Hmm22:57
niemeyerfwereade: I've already replied to the first a while ago22:57
fwereadeniemeyer, ah, sorry, missed that22:58
niemeyerfwereade: np22:58
niemeyerfwereade: LGTM on second22:59
fwereadeniemeyer, hmm, ok, I see; LGTM re out = nil22:59
niemeyerfwereade: Super22:59
fwereadeniemeyer, LGTM stands with the change then?23:00
niemeyerfwereade: I'll have some food while another round of live tests run23:00
niemeyerfwereade: Yep!23:00
fwereadeniemeyer, sweet, the tests will look much nicer once the uniter's in23:00
niemeyerfwereade: Btw, I'd like to bring the id on machine watcher bakc23:00
fwereadeniemeyer, sorry, context23:01
niemeyerfwereade: I think it was a mistake to remove it.. the first time I've tried to fix some code, it was using the return :)23:01
niemeyerfwereade: Ah, sorry23:01
niemeyerfwereade: We've dropped the result this afternoon, so it returns struct{}23:01
niemeyerfwereade: It was a candidate change, but it was a mistake.. first code I went to fix in the live tests, it was using the id of the result meaningfully23:01
niemeyerfwereade: I'll send a branch so we can bring it back.. I don't want to hack the tests more at this point23:02
fwereadeniemeyer, cool, I should sleep soon but I'll be around for a few mins at least23:02
fwereadeniemeyer, I'll just treat those failures as deliberate/expected23:04
niemeyerfwereade: Which failures?23:05
fwereadeniemeyer23:05
fwereadecmd/jujud/provisioning_test.go:69: undefined: state23:05
fwereade# launchpad.net/juju-core/environs/jujutest23:05
fwereadeenvirons/jujutest/livetests.go:262: m.AgentTools undefined (type struct {} has no field or method AgentTools)23:05
fwereade# launchpad.net/juju-core/environs/jujutest23:05
fwereadeenvirons/jujutest/livetests.go:262: m.AgentTools undefined (type struct {} has no field or method AgentTools)23:05
fwereadeniemeyer, I was assuming that jujud was broken deliberately to prevent ugly panics dirtying up the test log23:06
niemeyerfwereade: Yeah, this is broken and is expected.. I'm working to fix all of this23:06
fwereadeniemeyer, cool23:06
fwereadeniemeyer, I shall not allow them to trouble me23:06
niemeyerfwereade: https://codereview.appspot.com/657105323:06
niemeyerfwereade: Hehe :)23:06
fwereadeniemeyer, LGTM23:07
niemeyerfwereade: Cheers23:08
niemeyerfwereade: I have quite a few nice trivials on the pipeline, but I'll try to catch up with Dave after dinner23:09
niemeyerfwereade: Thanks, and have a nice sleep there23:09
fwereadeniemeyer, cool, perhaps gently encourage him to fix config-get, because I think that will give us more charms to play with right away23:09
niemeyerfwereade: I think he's on it, but I'll talk to him23:10
fwereadeniemeyer, tyvm23:10
niemeyerfwereade: np23:10
niemeyerDinner time.. biab23:10
fwereadeniemeyer, enjoy23:10

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!