/srv/irclogs.ubuntu.com/2013/05/29/#juju-dev.txt

wallyworld_thumper: i have to go to the hardware store - bit of a bathroom issue, back soon hopefully01:20
thumperwallyworld_: ok.. ping me when you're back01:33
wallyworld_thumper: ping02:40
thumperwallyworld_: hi02:40
thumperwallyworld_: hangout?02:40
wallyworld_yep02:40
wallyworld_https://plus.google.com/hangouts/_/d3f48db1cccf0d24b0573a02f3a46f709af109a602:41
kyhwanahey thumper, do yo know cucumbererror?03:51
thumperkyhwana: sorry, no03:56
kyhwanaahh ok, he's dunners too, works at some educational instution in IT or helldesk03:58
thumperkyhwana: oh, I assumed you were talking about errors from the python library cucumber L(04:00
thumperL( should have been :)04:01
thumperbut still, no04:01
kyhwanahehe04:01
kyhwanaah right, at UO. oh well04:04
thumperkyhwana: what it their real name, I may know them but not their irc nick04:09
kyhwanaOh, darryl someone04:09
thumperkyhwana: doesn't ring any bells04:56
kyhwanaah well, you probably know someone that knows him04:58
=== tasdomas_afk is now known as tasdomas
thumperkyhwana: almost certainly05:07
kyhwanathumper: Do you drink of the beers?05:07
thumperkyhwana: sometimes05:08
kyhwanahmm, do you goto Beervana in wellington?05:08
thumperno05:09
thumpernot that keen05:09
thumperI know some who do05:09
kyhwanaahh ok05:09
kyhwanaI think that's my only trips to wellington this year, Nethui, beervana and Kiwicon :P05:10
thumperkyhwana: I do kiwipycon05:15
thumpernot going to nethui05:15
thumperalthough Unfocused is05:15
thumperwallyworld_: email sent to dev list re: opaque keys and natural business keys05:16
kyhwanaahh ok05:16
thumperwallyworld_: I mentioned that you feel stronger than I do in the email, so no additional rant needed05:16
thumperwallyworld_: but feel free to +1 it with a non-ranty additional info05:17
TheMuemorning07:09
fwereadeTheMue, heyhey07:36
TheMuefwereade: heya07:38
TheMuefwereade: where i just see you, could you tell me more about the background of nonce (e.g. used in StartInstance() )?07:39
fwereadeTheMue, it's to deal with provisioner failures after starting an instance but before recording that fact in state07:39
fwereadeTheMue, if that happens, we get a rogue instance starting up, thinking it's running machine (say) 707:40
fwereadeTheMue, but state being unaware of that07:40
fwereadeTheMue, so when we start up a machine agent, the first thing we do is check that the nonce matches the one recorded in state07:41
fwereadeTheMue, if it doesn't, or there's no nonce in state, the MA does nothing and just sits back and waits for its host instance to be trashed07:41
TheMuefwereade: ah, ok, thx, that makes it more clear.07:42
TheMuefwereade: my dict translates nonce as sex offender, esp. paedophile. strange.07:43
fwereadeTheMue, when it's a container being provisioned, this is potentially less of a problem -- we *could* arrange matters so that "instance" ids are predictable based on machine ids -- but I'd prefer to just keep the nonce mechanism so we aren't forced to do that07:43
fwereadeTheMue, and so that we have the same code path in all cases07:44
TheMuefwereade: +1 on that, yes07:44
fwereadeTheMue, cool07:44
fwereadeTheMue, (yeah, it's one of those interestingly overloaded terms, I knew that meaning before I was aware of the technical one)07:45
TheMuefwereade: i never heard it before07:46
TheMuefwereade: but wikipedia knows the correct meaning07:46
=== wedgwood_away is now known as wedgwood
dimiternfwereade: hey08:48
fwereadedimitern, hey dude08:48
dimiternfwereade: sorry, yesterday i suddenly felt tired and decided to lie down for a while and was midnight when I woke up :)08:49
dimiternfwereade: saw your msg too late08:49
fwereadedimitern, haha, no worris08:49
dimiternfwereade: I have a proof-of-concept proposal of the bulk-ops: https://codereview.appspot.com/984704408:50
fwereadedimitern, awesome08:51
fwereadedimitern, btw, cath and I were pondering a cuba lunch today, feel like joining us?08:52
dimiternfwereade: i was thinking I can just get rid of srvUnit altogether08:52
dimiternfwereade: sgtm, although i'll bring my apples :)08:52
fwereadedimitern, haha, ok -- what time works for you?08:52
dimiternfwereade: either before standup at 13:30 or after 1408:53
fwereadedimitern, maybe 12 or 12:15 then?08:53
dimiternfwereade: ok08:53
* dimitern brb08:54
TheMuefwereade, dimitern: shall i join too? ;)08:54
* TheMue orders his jet08:54
dimiternTheMue: :) if you manage, by all means08:59
TheMuedimitern: don't think so, my wife just took it for a short trip to new york09:00
dimiternfwereade: so what do you think of the approach ^^ ?09:00
fwereadedimitern, looks ideal09:00
dimiternfwereade: haven't figured out a way to test is server-side yet, i'm afraid09:01
fwereadedimitern, I was about to say "I think it's time to introduce direct server testing" ;p09:01
dimiternfwereade: and also, if we need bulk ops exposed at client-side how do you picture it? having st.AllUnits? or something like that09:02
fwereadedimitern, I was vaguely expecting st.Units([]string)09:02
fwereadedimitern, I think AllUnits is potentially problematic09:02
dimiternfwereade: ah, ok can do that09:02
dimiternfwereade: will this be the only entry point?09:03
fwereadedimitern, and I would rather not implement either until there's a need -- so, for now, yes, the st.Unit will remain the only entry point in state/api09:03
dimiternfwereade: maybe if we need it later, we could have st.UnitsStatus(names) perhaps09:03
dimiternfwereade: s/UnitsStatus/Units.Status(names)/09:04
fwereadedimitern, I have a small part of my brain wondering whether a type that wraps a list of unit ids will be justifiable/handy at some point09:04
fwereadedimitern, but yeah, exactly09:04
dimiternfwereade: although if st.Units takes names, then .Status() is redundant, unless you don't want all the other info over the wire09:05
dimiternfwereade: in which case, we'll need separate top-level methods - st.UnitsStatus(names)09:05
fwereadedimitern, Status doesn't get sent over in the unit data does it?09:06
dimiternfwereade: anyway, I'm glad I got you finally :) i'm afraid i was being stupid last couple of days09:07
dimiternfwereade: well, no actually - only stuff accessible from the u.doc directly09:07
fwereadedimitern, fwiw I don't think you have been09:07
fwereadedimitern, the jujud agent stuff is not much fun to play with09:08
dimiternfwereade: agreed!09:08
fwereadedimitern, and the number of layers involved in the api stuff makes it very hard to communicate precise instructions09:08
fwereadedimitern, the blocker was in clearly explaining the precise scope of the problem09:09
dimiternfwereade: so to emulate Unit(name).Status() with bulk ops, i'll need to do srvUnits().Status(names) and call that09:09
fwereadedimitern, yep, sgtm09:09
fwereadedimitern, just one thing to bear in mind09:09
dimiternfwereade: ok, so my plan is to get rid of srvUnit and replace it with bulk-only ops, while keeping the client-side the same first, then think how to test it09:10
fwereadedimitern, returning a map potentially bumps up against the json key-type restriction; consider the tradeoffs in returning an []params.Unit instead09:10
dimiternfwereade: and add api.Units(names) as well09:10
fwereadedimitern, I'm not 100% sure it's smarter but my gut leads me that way09:11
dimiternfwereade: what are these restrictions, elaborate pls?09:11
fwereadedimitern, no int keys09:11
dimiternfwereade: well, we'll make them strings throughout :)09:11
fwereadedimitern, and there is at least one situation in which we need to retrieve relations by int key09:11
dimiternfwereade: or only return a map for string keys proper, so that lookups are fast client-side09:12
fwereadedimitern, suggestion: preserve order of input names09:12
dimiternfwereade: can do; that'll actually save some bytes over the wire09:13
fwereadedimitern, that way we can loop in a defined order if necessary, and otherwise don't have to mind09:13
fwereadedimitern, great09:13
dimiternfwereade: can you please comment on the CL, so it doesn't look like i'm pulling stuff from my ass there :)09:21
fwereadedimitern, ofc, sorry09:21
dimiternfwereade: cheers09:22
fwereadedimitern, sorry sent it a few mins ago09:36
dimiternfwereade: saw it, thanks09:37
fwereadedimitern, I've noticed something else in the api, that you had no way of knowing about... we really shouldn't be sending data down from the environ config watcher... we should be consistent with the other watchers and just send notifications09:38
fwereadeTheMue, ^^09:38
fwereadeTheMue, since you'll be working on the provisioner, please ensure you fix that end keep the API up to date09:38
jamfwereade, dimitern: anyone have insight into the state_test.go TestOpenDoesNotDelayOnHandShakeFailure test? I think it was written by davecheney09:39
jamIt succeeds for me locally, but fails reliably on go-bot09:39
dimiternjam: not really09:39
jamIt seems to do 3 TLS Handshake failures locally09:39
jambut on gobot I get maybe 6 ofthem09:39
fwereadejam, it *looks* like it's intended to test that we fail out immediately on handshake failure09:40
fwereadejam, I seem to get 4 locally09:40
fwereade(can you tell I've written no code since I got back? :/)09:41
TheMuefwereade: yep, will keep in mind09:41
jamfwereade: well, it is slightly indeterministic if you get the failure before the last log message (if I force the test to fail on an otherwise working system)09:41
jamI think I see 4 as well09:41
jamI'm slightly worried that it is a timing based test and the go-bot is just slow09:41
fwereadejam, from local behaviour it STM to be an actual problem09:42
fwereadeTheMue, dimitern: are you getting that test passing?09:42
jamfwereade: as in, it should be only trying 1 time?09:42
fwereadejam, that's how I read the test name09:42
jamit passes for me locally09:42
jam(maybe the issue is that locally it is too fast?)09:43
fwereadejam, interesting09:43
fwereadejam, could be09:43
dimiternfwereade: let me check09:43
jamfwereade: it fails for you?09:43
fwereadejam, did just now, don't know whether it's consistent09:43
jamfwereade: so I believe the code it cares about is in open.go around line 9309:43
dimiternfwereade, jam: it passes for me - tried 3 times09:44
jamwhich has a time.Sleep if you have a connection failure09:44
jambut no time.sleep if you connect but fail to TLS handshake09:44
fwereadejam, ah, but the TLS bit below *does* retry but does not delay09:44
fwereadejam, yeah, ok, I suspect I misread intent09:44
fwereadejam, sounds timingy then :/09:44
jamfwereade: that is what I get from the "DoesNotDelay"09:45
fwereadejam, seems to consistently take 1.5s for me09:45
jamfwereade: that is what it was taking me as well on go-bot09:45
jamso it *sounds* a *lot* like an actual sleep somewhere09:45
fwereadejam, hmm, go version related perhaps?09:46
fwereadejam, go version go1.1 linux/amd6409:46
jamfwereade: it failed on gobot with 1.0.2, so I upgraded to 1.0.3 and still failed09:46
jamfwereade: the fact that you and I both get 1.5s on very different hardware09:46
jammeans I'm pretty confident there is a hidden sleep09:47
jamor timeout09:47
fwereadejam, (I thought we'd standardized on go1.1?)09:47
fwereadejam, yeah09:47
jamfwereade: there will be no 1.1 in precise09:47
jamthat we can use for building09:47
jamso use 1.1 when we can, but our syntax needs to stay 1.0.3 compatible09:47
fwereadejam, oh balls -- I suppose we can't use a PPA?09:47
fwereadejam, forget it, derail, anyway09:47
jamfwereade: there are issues with dependent builds09:47
jamat least for backports09:48
jamyou can get go 1.1 into backports09:48
fwereadejam, heh, fair enough09:48
jambut a backport of juju-core can't use debs from other backports to build itself09:48
jamlimitations of the builders09:48
fwereadejam, blarg, ok09:48
fwereadejam, good to know then09:48
jamand we can get 1.0.3 into an SRU (which builders *can* use)09:48
jambut not a 1.1 sort of change09:48
jamfwereade: especially given dfc just mentioned there is a bug in 1.1 and we should actually wait for 1.1.109:49
fwereadejam, sounds worth investigating... sorry I can't help more :(09:49
fwereadejam, ah, yeah, dimitern found some gc-related panic?09:49
dimiternfwereade: yeah, let me find the issue link09:49
dimiternfwereade: https://code.google.com/p/go/issues/detail?id=555409:50
fwereadedimitern, (fwiw, wrt 10 mins ago, please ping me before you implements any watchers that send actual data, rather than notifications... they're not all necessarily invalid, but they deserve discussion)09:50
fwereadedimitern, cheers09:50
dimiternfwereade: not planning to implement any today :) but might have to change what's already implemented09:51
fwereadedimitern, if it's just EnvironConfigWatcher I've kicked that over to frank, he's making provisioner changes09:52
dimiternfwereade: ah, cool09:52
dimiternTheMue: ping me if you need help around the api/watchers - it's not pleasant :)09:52
TheMuejam: test failed here with 1.0.3 too09:52
fwereadedimitern, (and should thus be the best person to coordinate keeping that precise bit in sync)09:53
TheMuedimitern: will do09:53
dimiternfwereade: meet you in 10-15m @cuba?09:54
jamTheMue: so the real question is why is it passing locally for me :)09:54
jamon go-bot, I actually see it retrying maybe 6 times09:55
jamfound it, I think09:56
jamfails locally now09:56
jamthe issue is that mgo driver09:56
jamchanged09:56
TheMuejam: indeed, a good question09:56
jamit now sleeps09:56
jamit didn't as of the earlier rev I was using09:56
jamTheMue: I think: https://groups.google.com/forum/#!msg/mgo-users/DU5pXpIxCg8/cAXAGWaOl0sJ09:57
jam" A short delay was introduced at09:57
jam  this point to minimize the impact of these retries"09:57
fwereadejam, ahhhh09:57
fwereadedimitern, sgtm, just about to leave09:57
dimiternfwereade: omw in 509:58
jamfwereade, TheMue: 'time.Sleep(500 * time.Millisecond)' was added to the retry code in mgo09:59
jamhence, 3 retries (4 total tries), always equals 1.5s for everyone09:59
fwereadejam, hmm, maybe the answer is to drop the delay in state.open regardless, and suck up the wait?10:01
fwereadenot sure10:01
* fwereade -> lunch10:01
* dimitern lunch as well10:06
TheMuefwereade, dimitern: enjoy10:06
TheMuejam: I updated mgo yesterday, so that change may be the reason, yes10:08
jamTheMue: I'm pretty confident about it. 3 retries * 500ms = 1.5s, which is what we are all seeing.10:12
jamTheMue: https://bugs.launchpad.net/juju-core/+bug/118332010:13
_mup_Bug #1183320: TestOpenDoesNotDelayOnHandshakeFailure fails with updated MGO <test> <juju-core:Confirmed> <https://launchpad.net/bugs/1183320>10:13
jamTheMue: so right now mgo allows you to specify a custom Dial (which is how we inject TLS support)10:13
jamdoes it sound like we should be able to inject a retry delay?10:14
jamor just punt10:14
jamand remove the test.10:14
jamI would think that locally for testing we'd *really* like to set the retry delay to something really low, because we aren't dealing with network partitions while running the test suite.10:14
jamso sleeping 500ms in a test suite is a bit silyy10:14
TheMuejam: sgtm10:15
jamI feel like waiting for a patch to land in mgo so that we can use the Tarmac bot for juju-core and goose is a bit of a *long* way around the problem... :(10:15
TheMuejam: niemeyer should be available soon10:19
jamdimitern: for the Units api that you're working on.10:20
jamDoes the individual Unit objects you are returning have 'name' in them?10:20
jam(I'm guessing they do)10:21
jamFor something like an RPC, I would like to avoid depending on the order being identical to the request order.10:21
TheMuejam: dimitern is at lunch10:21
jamalso, I don't think we want 1 bad name to fail the rest of the requests because of potentially stale data.10:21
jamTheMue, fwereade: In go, if you close a channel, then a pending <- on the channel returns, right? And it returns the zero value for the type?10:42
jamWhich means that technically the code in state/presence/presence.go which is waiting on "case <- done:" is actually getting false, but since it is just using it as a block10:43
jamit doesn't actually care that the result is 'false'10:43
TheMuejam: one moment10:46
jamTheMue: I *think* I sorted out that the logic is it wants a channel that returns a bool, but all the inner code does is close the channel it has pending10:46
jamit never sends something on that channel10:46
TheMuejam: just looking at the code10:47
jamit is a bit convoluted :)10:47
jamI was trying to understand TestSync10:48
jamas to why it thinks one call to Sync blocks10:48
jam(for at least 200ms)10:48
jambut it will be done after a later change.10:48
TheMuejam: so far it seems you're correct, it's just closing the collected syncs10:51
TheMuejam: wife called me for lunch, biab10:51
jamTheMue: enjoy10:51
jamfwereade, wallyworld_: I just sent an email to the list that is intended to roughly summarize what I got out of our chat last night about API. It would be nice if you could read over it and see where you agree/disagree/have more notes, etc.11:24
* dimitern is back11:25
wallyworld_ok11:25
dimiternjam: what's up?11:25
jamdimitern: I ended up just commenting on your merge proposal11:31
danilosjam: hi, trouble connecting to mumble server (connection times out :/)11:36
danilosthis seems to be the weird problem I've been seeing since quantal where my internet just stops working for any new connections but IRC keeps ticking along11:38
* danilos reboots11:38
=== wedgwood is now known as wedgwood_away
fwereadeaw hell12:12
fwereadedimitern, I think LifecycleWatcher is broken... ISTM that we trash intermediate results if the client doesn't pull from out before a new value arrives from in12:14
fwereadedimitern, also (and this is nothing to do with you) this style completely invalidates the assumptions rog made when he did the original always-call-Next model12:15
fwereadedimitern, do I recall you saying he was involved in its implementation?12:15
dimiternfwereade: standup still, will get back to you12:16
fwereadedimitern, np12:16
TheMue*hmpf*12:57
fwereadeTheMue, encountering pain?12:57
TheMuefwereade: only effort. ;)12:57
TheMuefwereade: agent.Conf and upstart are so self-aware about their location (used in Write() and Install())12:58
fwereadeTheMue, relative to DataDir, right?12:58
TheMuefwereade: yes, but they also write references to the DataDir as far as I can see12:59
TheMuefwereade: so using the container dir full qualified here would later to an illegal dir when used from inside the container12:59
fwereadeTheMue, gaah, code reference?13:00
TheMuefwereade: I have to check, it has been an assumption as it is a field in each struct. but maybe you're right. that would be great.13:01
fwereadeTheMue, I think you just write a conf to the full path, and start the agent with the container-relative path, and you're done13:02
TheMuefwereade: oh, in agent conf the read value from the file is overwritten by the passed one which is an arg of the jujud13:02
TheMuefwereade: nice13:02
fwereadeTheMue, oh, we write it out? damn, that's stupid13:02
dimiternfwereade: just finished, but have to dash out quickly, sorry13:02
fwereadedimitern, no worries13:03
fwereadedimitern, ping me when you're back13:03
TheMuefwereade: we write it, but then, when reading the file in ReadConf(dir, tag), that dir is used.13:03
TheMuefwereade: so the right one is used later, only in the conf file the full qualified path is written13:04
fwereadeTheMue, it is more than somewhat insane that we write the file's path into the file though, feel free to fix that (or at least comment it, because it's seriously misleading)13:05
fwereadeTheMue, or hell just leave it13:05
TheMuefwereade: so it only would confuse somebody debugging and reading that file inside a container wondering where this dir comes from13:05
fwereadeTheMue, agnt.Conf is ludicrous anyway :/13:05
TheMuefwereade: hehe13:06
fwereadeTheMue, it's absurdly overloaded13:06
TheMuefwereade: absolutely. hmm, wouldn't omit the writing of that field be enough? if it is set each time after reading the file?13:08
fwereadeTheMue, it'd probably be slightly better13:08
fwereadeTheMue, better still to actually *separate* the ancillary in-memory data from the stuff we serialize rather than smooshing it all together13:08
TheMuefwereade: yes, but it's always so convenient to use a field instead of passing an argument through all nested methods. ;)13:11
fwereadeTheMue, heh :(13:13
TheMuefwereade: hehe13:13
TheMuefwereade: *hmpf* again, there are so many references to that DataDir. thankfully most simply reading the field13:16
dimiternfwereade: back13:39
=== wedgwood_away is now known as wedgwood
fwereadedimitern, hey, sorry I missed you13:53
fwereadedimitern, 5 min chat in the hangout before kanban?13:53
dimiternfwereade: oops, too late i think13:58
dimiternfwereade: i'm in the kanban g+ now13:59
fwereadeffs14:02
=== mramm2 is now known as mramm
MakyoRunning into the following problem, would appreciate input: a test is setup with a service (riak), but when running, the assert fails that the service "riak"doesn't exist.  if I deploy riak as the first step of the test, I get "cannot add service \"riak\": service already exists" - any ideas?16:04
MakyoHere: http://bazaar.launchpad.net/~makyo/juju-core/upgrade-charm2-1171548/view/head:/state/statecmd/upgradecharm_test.go#L8016:09
dimiternfwereade: mail sent16:14
=== tasdomas is now known as tasdomas_afk
FunnyLookinHatlet's say I wanted to disable the security ( nova / quantum ) group stuff - where would I look to start commenting stuff out in src / trunk ?17:14
=== deryck is now known as deryck[lunch]
=== wedgwood is now known as wedgwood_away
fwereadeFunnyLookinHat, driveby answer: environs/openstack/provider.go:809; and consider stubbing out all the methods with names like OpenPort, ClosePort, etc18:19
FunnyLookinHatfwereade, perfect - thanks!18:19
=== deryck[lunch] is now known as deryck
=== BradCrittenden is now known as bac________
=== bac________ is now known as bac
wallyworld_fwereade: hi, if you have a chance, can you take another look at https://codereview.appspot.com/9662048. tim had a question about the --series param and non-ubuntu deployments. i can change the flag's description text to something more generic. perhaps that's all we need for now21:02
thumpermorning21:05
thumperhi wallyworld_23:45
thumperwallyworld_: how are you doing today?23:45
wallyworld_hi, was going to ping you soon. getting through some mechanical changes to clean up some aspects of our errors23:45
wallyworld_a bit noisy here - guys trashing our bathroom23:46
thumperhah23:46
wallyworld_:-(23:46
wallyworld_$$$$$$$23:46
thumperexpected trashing?23:46
wallyworld_well, the shower has been rooted for weeks, big leak :-(23:46
thumperhopefully only one of them and not all at once23:46
thumper:(23:47
wallyworld_so they need to pull apart the entire room23:47
thumperwallyworld_: I've been trying to get loggo working23:47
wallyworld_cool23:47
thumperwallyworld_: however there are so many issues with our logging in the tests23:47
thumperthat makes it hard23:47
thumpertime consuming23:47
thumperand energy sapping23:47
thumperI need something enervating to do23:47
wallyworld_yeah, this is my surprised face, not23:47
wallyworld_we can discuss surrogate ids :-)23:48
bigjoolsg'day23:48
thumperhi bigjools23:48
wallyworld_bigjools: fuck off23:48
thumperbigjools: how are you feeling these days?23:48
* thumper slaps wallyworld_23:48
thumpernone of that here23:48
thumperplay nice23:48
wallyworld_thumper: he knows i'm joking23:48
thumperwallyworld_: but others reading here don't23:48
wallyworld_it's the way we say hello in australa23:48
bigjoolsit's his standard greeting.  If he doesn't say it I know he hates me :)23:49
thumperlovely jubbley, say it on the private channels then :)23:49
bigjoolsconsider yourself bitchslapped wallyworld_23:49
wallyworld_sigh23:49
bigjoolsheh23:49
wallyworld_everything is so politically correct nowadays23:49
thumpersarcasm also doesn't come across well on irc23:49
thumperwallyworld_: be non-pc on private channels, not public logged ones23:50
thumpersad but true23:50
thumperaspect of online life23:50
wallyworld_yeah i know23:50
* thumper sighs23:51
* wallyworld_ sighs again23:51
* thumper looks to bigjools for the next sigh23:51
bigjoolsmeh23:52
bigjoolstired of sighing lately23:52
bigjoolsthumper: anyway to answer your question, I am slightly better than I was thanks.  Had a torrid time last week but seem to be relatively ok at the mo. (fingers crossed)23:52
thumpercool23:55

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