[00:17] hi davecheney [00:17] thumper: ack [00:17] davecheney: unsurprisingly I suppose my branch has conflicts with trunk [00:17] just fixing now [00:17] then it may be worth proposing [00:17] kk [00:18] +1 [00:18] * thumper sighs [00:18] go get lbox thingy still running [00:18] you may find those improvements also apply to jujuc, the hooks [00:18] I'm so going to prepare some slides for the sprint about this [00:18] * thumper nods [00:18] thumper: GTFO, you're going to prepare an agenda [00:18] that is rocket surgery shit [00:18] it is the merging of jujuc and jujud that conflicts mostly [00:19] yeah, that doesn't surprise me [00:19] davecheney: we fly by the seat of our pants? [00:19] * davecheney has no comment [00:19] thumper: also got word by the grape vine, book your tickets to ATL [00:19] ack [00:20] waiting for them to get back to me about flights [00:20] mine were much cheeper than I thought [00:20] 1200 EUR [00:20] I was expecting to have my pants pulled down [00:20] :) [00:20] no word on where we are staying [00:20] but _that_ is par for the course [00:21] mine are around 1800 - 1900 [00:21] flying delta, which is unfortunate [00:23] DL is delta? [00:23] yup [00:23] me too, at least for one part [00:23] DL16/17 [00:23] I'm going to be arriving late saturday night [00:23] that was one of my options [00:24] but nope [00:24] it's funny [00:24] but if I go "go test ./..." [00:24] go tells me to run "go test -i ./..." to make stuff go faster [00:24] but when I try that [00:24] it barfs [00:25] paste ? [00:25] it is way off the screen [00:25] something about there being no files there [00:28] davecheney: so... how does lbox propose work then? [00:29] it creates the merge proposal on LP, the makes a call to rietveld and sends the diff there [00:29] I don't really know how it works under the hood apart from automating a few bits and duplicate the code under review [00:31] davecheney: here is a work in progress proposal I created already https://code.launchpad.net/~thumper/juju-core/command-set-flags/+merge/149183 [00:31] (using normal LP tools) [00:32] mainly so I could get a good look at the diff [00:32] thumper: understood, a diff -u is the most useful thing for me [00:33] also, it seems that lbox gets the description and commit message all bungled up [00:33] for me, the description should describe the what and why you did something [00:33] the commit message is normally much more terse [00:37] ok, lets manage the hoop jumping then... [00:37] I can delete that merge proposal now I know it looks ok [00:37] and 'lbox propose'... what other bits to I need there? [00:39] thumper: make sure you do a go fmt ./... before proposing [00:39] or people will freak out [00:39] davecheney: I have go fmt as a pre-save hook in emacs [00:39] noice [00:39] if you like you can run the .lbox.check precommit hook [00:39] it might work [00:39] probably needs environment vars from BZR [00:40] work for what? [00:42] that is the checks that lbox runs [00:44] it seems that lbox tries to do too much [00:44] I already push my work [00:44] with a default location as defined by ~/.bazaar/locations.conf [00:44] so I just go "bzr push" [00:44] on a new branch, and it just works™ [00:47] * thumper tries to understand lbox [00:48] thumper: i wrote the README and CONTRIBUTINGs [00:48] please let me know what is missing or unclear [00:49] davecheney: how does lbox infer the branch source? [00:49] I don't like blindly running things I don't understand [00:49] it probably assumes cobzr was used [00:50] thumper: when you say source, do you mean -for=lp:juju-core [00:51] davecheney: that is what I'm checking, because I don't do that [00:51] it seems to run 'bzr info' in a shell, and looks for push location [00:51] which will work for me [00:52] gah, parent is going to be an issue though... [00:52] unless I use -for [00:53] well... lets see what happens [00:53] * thumper goes for it [00:59] * davecheney checks. water still wet, world, still turning [00:59] it seemed to infer the correct branches [00:59] so that is good [00:59] edited a nice description (or at least I thought so) [01:00] davecheney: why is this command wanting me to type in my google credentials? [01:00] and what does it do with them? [01:01] how can I be sure it isn't being stupid with my password? [01:02] because rietveld is a google app engine product [01:02] it is probably using some form of oauth [01:03] I don't feel comfortable typing that into a terminal there [01:03] :(( [01:04] thumper: then I thikn you need to stop and escalate at this point [01:04] or make a throw away google account [01:04] I did type in the pwd [01:05] but wasn't happy doing it [01:05] will bitch more later [01:05] * thumper is saving it all up [01:05] oh, if you use 2FA [01:05] davecheney: https://codereview.appspot.com/7338048 [01:05] it'll probably be a complete pain in the arse [01:05] from what I hear, not even googlers use rietveld with their 2FA accounts [01:07] davecheney: why does the appspot thing say (do not edit description out of merge proposal) [01:07] ? [01:08] because it's a one way transfer, LP -> Rietveld [01:09] the MP is on the reciepient list, so as you make comments in rietveld, they get cc'ed to the MP [01:09] davecheney: how the hell does this tool work? [01:09] thumper: lots of rest calls [01:09] go get -v launchpad.net/lbox [01:10] ^ get source [01:10] I have it [01:10] ok [01:10] how do I see the whole diff through rietveld? [01:10] i suspect it does it client side, then rams the whole thing into rietveld [01:11] i haven't looked [01:11] maybe rietveld takes the who before and after, and doe sthe diff itself [01:11] it appears to work at a file level, not a diff level (if that matters) [01:11] iirc it submits the diff to rietveld [01:12] so, can you see the whole diff in one go? [01:12] hi sidnei [01:12] sidnei: long time, no talk [01:12] sidnei: at least I think we have talked before [01:12] indeed [01:13] good, at least I'm not that crazy yet [01:13] probably when complete-fail sinzui a couple times *wink* [01:14] sidnei: what are you doing these days? [01:15] thumper: untangling ubuntuone oopses, and polishing tu^H charms. lots of fun. [01:16] we're pretty close of moving all (well, like 80% of) the frontends for u1 into juju-managed services [01:16] nice [01:18] davecheney: I have noticed that my tollerance for repeated code seems to be a lot less than others [01:18] thumper: you? squading away? [01:18] davecheney: if something is repeated more than twice, refactor [01:18] sidnei: moved from product strategy -> juju-core a few weeks back [01:18] sidnei: was unity engineering manager [01:18] sidnei: and other manager type things for a while [01:18] back to real coding now [01:19] thumper: oh, yeah, last comment from you i recall you were enjoying your c++ i think [01:19] sidnei: yeah, was hacking on unity, then managed it for a while [01:19] thumper: +1 [01:21] alright. /me goes back to sip some mate. cheers [01:22] sidnei: caio [01:24] davecheney: with all that proposed, I suppose I should go back to my help command :) [01:24] thumper: just reviewing now [01:24] looks pretty good too me [01:24] davecheney: cool [01:24] just a few style comments [01:24] how many +1's do we need? [01:24] 2 [01:28] * thumper nods [01:32] thumper: I think there is a little more refactoring that can be done for some of the simpler commands [01:32] but that should be done in a followup branch [01:32] I'm sure there is [01:32] but I tried to limit it for my first branch :) [01:32] still came in at almost 2k lines [01:36] thumper: ignore the ping, that wasn't intended for you [01:37] * thumper didn't get a ping [01:37] via email [01:37] ah [01:38] gonna keep pinging till something goes pong [01:42] :) [01:46] davecheney: I'm off briefly to get the daughter and move home [01:46] thumper: understood, nearly lunch time here [03:50] damn you python and your acceptance of both ' and " for strings [04:00] davecheney: how do I store a pointer to a function in a struct? [04:01] davecheney: Also, can I stick a closure in there? [04:01] * thumper thinks some more... [04:02] * thumper goes to read the language spec part again [04:04] * thumper thinks some more... [04:06] thumper: i think you can declare a variable of type func() [04:06] wallyworld: yeah got that bit [04:06] eg var f func() [04:06] but I now want to have a bound method [04:06] so object.Method [04:07] perhaps I need to make a closure? [04:07] that seems stupid [04:07] but perhaps needed [04:07] i think you *may* need to pass it a closure which calls that method? [04:07] that's how i'd currently do it in my ignorance [04:07] not knowing any better [04:07] yeah... [04:07] it is [04:08] * thumper goes to rewrite some code [04:09] thumper: yeah, type S struct { f func() } [04:09] where func() can be anything, so func(bool, bool, bool) int [04:09] etc [04:09] davecheney: however I can't assign obj.Method to the func [04:09] without a closure [04:09] no, that may be resolved by 1.1, but you currently cannot do that [04:10] * thumper nods [04:10] found that out :) [04:10] passing a closure would essentially be what the compiler would do behind your back [04:10] it would be nice if a closure was created automagically for you [04:10] right [04:10] * thumper is using magic for help topics [04:10] FSVO magic [04:11] thumper: that will probably be done for 1.1 [04:11] function types will become a two word structure, so we can stash the receiver there [04:11] davecheney: obviously I'm not the only one wanting to do this then :) [04:12] https://groups.google.com/d/topic/golang-dev/x328N8hiN5k/discussion [04:12] thumper: there's lots in Go I'm finding is lacking :-) maybe by 2.0..... [04:13] wallyworld: 2.0 is a long way off [04:13] a long, long, long way off [04:13] * thumper smacks wallyworld around a bit [04:13] i was attemptinh humour [04:13] ouch! [04:13] thumper: why smack me around? [04:13] wallyworld: why not? [04:13] fair point [04:22] is the easiest way to create a long string to use a bytes.Buffer? [04:22] how to I get a string from that? [04:23] buffer.String() [04:23] bytes.Buffer is both an io.Reader and an io.Writer [04:24] you can write to it with fmt.Fprintf [04:24] and copy it to stdout/stderr with io.Copy [04:24] if that is of use [04:24] ta [04:24] probably a few ways to skin that cat [04:34] * thumper nods [04:34] hmm... now I'm causing a panic... [04:34] found it... [04:44] * thumper goes swimming [07:02] morning all [07:06] rogpeppe, heyhey [07:49] Morning [07:56] TheMue: good morning [07:56] jam: Hiya [07:56] TheMue, fwereade, rogpeppe, dimitern, wallyworld, mgz, w7z: https://plus.google.com/hangouts/_/3054ca9e05632bb677f4a136cc956486d9aac90f [07:56] jam: cheers [07:57] jam: Thx [07:57] different from the invite? [07:57] wallyworld: should be the same [07:57] but often the direct link helps people [08:03] fwereade: ping [08:04] mgz: poke [08:04] was just doing the hangout dance :) [08:10] mgz: just some chewing noises from you [08:11] dimitern: your non-headset mic is picking up the surrounding noise [08:42] none of us can hear anything, I think [08:43] "The hangout ended because of a server error" [08:55] i should have mentioned that i'll be on holiday thurs and fri this week [09:49] dimitern: poke about some tests in environs/openstack/local_test.go [09:55] i'd much appreciate a review or two of the following branches, if possible: https://codereview.appspot.com/7354044/ https://codereview.appspot.com/7327050/ https://codereview.appspot.com/7314116/ [10:16] Hi [10:16] I wrote a quick blueprint about git based deployment of user applications: https://blueprints.launchpad.net/juju/+spec/juju-charm-app-git-deployment [10:16] Does anyone have any comments? [10:24] jam: sorry, just saw that [10:25] rogpeppe: review up on the first one [10:25] jam: thanks [10:25] dimitern: np, so TestInstancesGathering fails if you run it by itself. [10:25] cd environs/openstack; go test -gocheck.v -gocheck.f InstancesGathering [10:25] I think the issue is that it doesn't call s.BootstrapOnce() and it relied on other tests doing that step. [10:25] jam: i suspect it' because of the need to bootstrap first in the local tests [10:26] jam: oh, this could be it yeah [10:26] It is also the test that has failed for me a couple of times with http://past.ubuntu.com/1681193/ [10:27] jam: you're correct about your supposition about that CL. it's so that i could generate a not-found error for the third branch in that series. [10:27] dimitern: which the error message is a bit hard to parse, but it looks to be the "Server "185" alreayd [10:27] already belongs to group "1"" [10:28] jam: the problem is a bit more obscure i think [10:28] jam: stupidly, i posted those links in the wrong order - the second is actually a prereq for the first [10:28] jam: we're creating more than one environ it seems [10:29] rogpeppe: https://codereview.appspot.com/7327050/patch/2001/3009 I don't see other ones that return a bool. PasswordValid does, because it is answering a question, similarly AgentAlive but AgentAlive returns both a bool and an error. [10:30] jam: who's the head of our business unit? robbiew? I'm asked by the travel agent [10:30] dimitern: Deryck is above me, then probably Robbie above that, yes. [10:30] jam: examples: Unit.DeployerName, Unit.PublicAddress, Unit.PrivateAddress [10:31] rogpeppe: none of which are on Machine, but I'll go look [10:31] rogpeppe: my immediate feeling is that you lose the ability to describe what the problem is by just having a bool [10:31] so an err is actually better. [10:31] jam: the thing is that there is only one possible problem here [10:32] jam: and lots of the other code was testing specifically for NotFound, and then another test for other errors (in some cases buggily) which could never happen [10:32] rogpeppe: but instead of having the code that is checking what the problem is generating the error, you have the code that is asking for the info creating the error. [10:32] jam: there are only two places that create an error as a result, AFAIR [10:33] jam: FWIW me and fwereade have been wanting to make this change for ages [10:34] rogpeppe: so in the first location cmd/juju/ssh.go it seems to always silently ignore failures, which seems odd. [10:34] (I can't say it is *wrong* because I don't really know the code, but it seems strange) [10:34] See https://bugs.launchpad.net/juju/+bug/891868 for a blocker to accomplish it [10:34] <_mup_> Bug #891868: juju cli api should be invokable outside of units/hooks < https://launchpad.net/bugs/891868 > [10:35] jam: it waits for the instance id to become available [10:35] jam: actually though, i think that code *is* probably wrong (and was wrong before) [10:36] jam: because InstanceId only looks at the local machine state, which isn't changing in that loop [10:37] rogpeppe: is Changes() a channel? Or is it just a slice of changes that its found? [10:37] jam: it's a channel [10:38] (Is that loop "while things are still changing, handle the next change"? [10:38] jam: all watchers return a channel from the Changes method [10:38] jam: it should be fixed, but it's unlikely to be a problem in practice as no-one wants to ssh to a machine to which no units have ever been assigned. [10:39] rogpeppe: so you do explicitly trade one place for 2 places having the same formatting string of "instance id for machine %v not found" [10:39] in https://codereview.appspot.com/7327050/patch/2001/3013 [10:39] but the rest do all treat the error as essentially a boolean [10:39] jam: yeah, as suggested by dave cheney, i'll change it to return state.NotFoundf(...) [10:40] jam: (i can't do it in this CL because it's dependent on this one) [10:40] rogpeppe: you still have to have 2 copies of the error string, and make sure you don't mess up the formatting, and deal with updating both if you decide to change the message to users, etc. [10:41] rogpeppe: anyway, I won't block it, but it seems like you're pushing the "this is an error" up a level, when really it was at the correct level to start with. [10:41] jam: it's not really an error. it's more an indicator of availability. [10:41] jam: an error return says to me "anything can happen here" [10:41] jam: but that's not the case here [10:42] jam: to be honest, i'd be happy if it just returned a blank string when the instance id isn't assigned [10:43] rogpeppe: when you pointed me at the other examples where 'bool' is used, it did seem to make a lot more sense to just return the empty string, rather than having the callers check that the bool really does say the empty string is invalid. [10:44] (bool wasn't adding any information that the caller didn't already know) [10:44] unless there are other situations where the value could be invalid, that we just hadn't codified yet. [10:44] jam: yeah. niemeyer didn't like it though, so we added the extra return value. [10:45] rogpeppe: did you understand his rationale at the time? [10:45] jam: not really :-) [10:45] jam: but i come from a place where it's ok to use -1 to signal an error :) [10:47] rogpeppe: well that all depends if -1 is in the valid set :) [10:48] jam: indeed. assume it's not. [10:53] dimitern: so any idea about how we would still have a Server attached to a group at the time the test is starting up? [10:54] jam: not at the moment, have to think about it a bit - it's been a while [11:03] jam: [11:03] ? [11:03] oops :) I found it [11:03] so indeed, bootstrapping once before is enough [11:04] but not for the other tests [11:05] I'll propose a patch that fixes that now [11:11] jam: PTAL https://codereview.appspot.com/7303101 [11:12] dimitern: right, I have that change in the queue, but I was trying to find the isolation stuff. But I'll go ahead and approve it. [11:12] jam: the issue was a clash between the test bootstrap fails without public ip and test instance gathering [11:12] dimitern: LGTM trivial, though I don't think you want the extra whitespace. [11:13] jam: ok, i'll remove it [11:15] I wish bzr was more clever wrt command aliases, like hg [11:15] dimitern: in what sense? [11:15] i'm used to have things like "pul" or "sw", etc. [11:15] unambiguous prefixes [11:15] dimitern: you can 'bzr alias' them, but it does have a few (bzr di, bzr st, etc) [11:16] yeah, st and ci i use all the time - didn't even check - it just worked [11:16] ok cool, I'll set some aliases myself then :) [11:23] jam: are there global bazaar.conf, used by /usr/bin/bzr ? in addition to ~/.bazaar/bazaar.conf i mean [11:23] dimitern: no [11:23] no /etc conf [11:23] hmm cobzr doesn't play nicely with bzr aliases it seems [11:32] jam: standup? [11:34] dimitern: ah, I think cobzr re-implements the front-end and has to re-implement all the commands. [11:51] small branch to change the api to be able to log messages: https://codereview.appspot.com/7358045 [11:53] mgz: http://paste.ubuntu.com/1681193/ [11:57] rogpeppe: You've got a review. [11:58] rogpeppe: another review [11:58] TheMue, dimitern: thanks [11:59] TheMue: i started by using "read" and "write" but actually the -> and <- stand out much better in the log. [12:06] TheMue: you've got a review too [12:06] rogpeppe: ok, can live with it. ;) [12:06] dimitern: Great, thx. [12:10] dimitern: The storage test is so far a copy of the according part of environ/jujutest. [12:10] dimitern: It is intended to be later removed, when everything is integrated. [12:10] TheMue: yeah, i was wondering why copy that instead of just use it? [12:11] dimitern: This way I had a chance to check the behavior before the rest is done. [12:11] TheMue: ah, ok [12:11] dimitern: So I'll remove it later. ;) [12:11] TheMue: cool, so comment about it please, that there'll be a follow-up [12:12] dimitern: Detected a not expected behavior that way, when listing files. [12:12] TheMue: with ordering? [12:12] dimitern: Will do it, when I cover the rest of your hints. [12:13] dimitern: No, the handling of directories when the passed pattern matches. [12:13] TheMue: i see [12:41] lunch [14:30] looks like the "juju set" tests are crack *sigh* === wedgwood_away is now known as wedgwood === TheRealMue is now known as TheMue [14:56] as is juju get *deeper sigh* [15:02] https://bugs.launchpad.net/juju-core/+bug/1130149 [15:02] <_mup_> Bug #1130149: juju get does not print default values correctly < https://launchpad.net/bugs/1130149 > [15:04] rogpeppe: Hangout? [15:05] TheMue: ah thanks [15:17] Hi all. I am trying to bootstrap using EC2 and it apparently works (the instance shows up in the EC2 console) but when I run "juju status" [15:18] ... I get this error: "panic: runtime error: invalid memory address or nil pointer dereference" plus a lot more. (I'm using go juju.) [15:19] and i am seeing the same using r908 of juju-core [15:20] benji: was that with bootstrap --upload-tools ? [15:20] rogpeppe: yep [15:21] benji: hmm, can you paste the "lot more", please? [15:21] heh, sure [15:22] benji: (i haven't ever seen that problem, FWIW) [15:22] rogpeppe: http://paste.ubuntu.com/1682852/ [15:23] rogpeppe: another data point: the api server doesn't seem to have started on the EC2 instance because if I point a websocket client at it I get connection refused [15:24] benji: i'll see if i can replicate the problem [15:36] benji: what do you see if you do juju status --debug ? [15:37] benji: (i think it's likely that the original bootstrap failed for some reason, and the dial has timed out after 10 minutes, and there's a bug which means that error isn't checked so ends up panicing) [15:38] benji: in fact, it might be useful to see what went on on the bootstrap machine. [15:38] rogpeppe: it looks that way [15:39] lots and lots of "2013/02/19 15:37:05 JUJU state: connection failed: dial tcp 50.19.23.159:37017: connection refused" [15:39] benji: you can do that by ssh'ing to it and catting the log file [15:39] benji: the log file in question being /var/log/cloud-init-output.log [15:40] benji: i use the PEM file from $HOME/.ec2 to do the ssh - presumably you have something similar [15:40] rogpeppe: let me try that... [15:40] benji: my "ec2ssh" script is something like this: ssh -i $HOME/.ec2/rog.pem ubuntu@$1 [15:41] benji: and you can find the dns name from the aws console [15:41] rogpeppe: no .pem files there for me; is that something I need to get from EC2? [15:42] benji: hmm, i can't remember at all! [15:43] benji: ah, i think i probably added the key to my aws account [15:44] benji: yeah, here: https://portal.aws.amazon.com/gp/aws/securityCredentials#access_credentials [15:44] benji: that might mean you can't get ssh access [15:45] benji: although... you could just try ssh'ing in and see what happens [15:45] rogpeppe: I tried, it refuses me [15:45] benji: as ubuntu@ ? [15:45] rogpeppe: oh! nope, let me try that [15:46] rogpeppe: it worked! [15:46] benji: yay [15:47] rogpeppe: I'm on a call at the moment, but I will dig into this in a couple of minutes. [15:47] benji: ok, cool. i suspect it's an amazon transient failure that we should work harder to be more resilient to. [15:48] benji: in particular, the metadata service doesn't work reliably [16:02] trivial CL to review anyone? https://codereview.appspot.com/7359044 [16:02] benji: that fixes the panic you saw, at any rate [16:03] rogpeppe: /var/log/juju/machine-0.log on the bootstrap node contains lots of "2013/02/19 15:07:57 JUJU state: connection failed: dial tcp 127.0.0.1:37017: connection refused" [16:03] benji: what does the cloud-init log say? [16:05] benji: (that one has all the messages printed by the commands run when bootstrapping) [16:05] rogpeppe: no obvious errors and it ends with "cloud-init[DEBUG]: Ran 9 modules with 0 failures" [16:05] benji: hmm. could you paste the last 100 lines or so of it? [16:06] benji: it looks like mongodb isn't running, but i'm not sure why [16:06] rogpeppe: http://paste.ubuntu.com/1683016/ [16:06] benji: ah, sorry, wrong log [16:06] benji: you want cloud-init-output.log [16:07] benji: that's the one that juju produces [16:07] rogpeppe: lots of "2013/02/19 15:07:53 JUJU state: connection failed: dial tcp 127.0.0.1:37017: connection refused" and then a panic [16:07] benji: could you paste the 50 lines *before* it started printing "connection failed" ? [16:08] "ps aux | grep mongo" does not show any mongo process running [16:08] k [16:08] benji: yeah, i'm pretty sure mongo never started - probably the download failed, but i'm interested to find out why, to add to the collection of transient errors we've seen [16:09] rogpeppe: yep: [16:09] http://juju-dist.s3.amazonaws.com/tools/mongo-2.2.0-quantal-i386.tgz: [16:09] 2013-02-19 14:57:53 ERROR 404: Not Found. [16:09] benji: ah! [16:09] should I be using something other than quantal? [16:09] benji: you should be using amd64 [16:09] mmm [16:10] benji: i don't think anyone's build the mongo version we need for 386 [16:10] s/build/built/ [16:10] how do I specify that in .juju/environments.yaml? [16:10] benji: it's a pity that the failure mode is so darned obtuse. we'll have to think how to make that better. [16:11] benji: if you're using --upload-tools, you can only use your current architecture [16:11] benji: because that's the arch that the tools are built for [16:11] hmm, so step 1) upgrade my development machine [16:12] benji: yeah. sorry we don't have a better story here. step 1 could be "compile mongo db with ssl enabled for i386"... [16:13] benji: hmm, maybe i'll have a go at doing that. it might have finished by morning. [16:14] it would be good, but realistically it won't be smart for me to be an outlier here, I need to match as closely as possible how you guys work so we don't continually run into these kinds of issues [16:14] benji: hmm, maybe it's too much distraction for now, sorry. [16:14] no worries [16:18] benji: somewhat surprisingly, there wasn't an outstanding bug, so here it is: https://bugs.launchpad.net/juju-core/+bug/1130209 [16:18] <_mup_> Bug #1130209: we need a mongodb compiled for i386 < https://launchpad.net/bugs/1130209 > [16:22] A bit late, but hello all! :) [16:23] niemeyer: hiya [16:24] niemeyer: william's sick today - can i bend your ear for a sanity check, by any chance? [16:25] rogpeppe: Yeah, I'm just busy sorting something out ATM [16:25] niemeyer: np [16:25] rogpeppe: and have to had to lunch in a second [16:25] rogpeppe: Meeting at 16, in 3h.. I think we can do something between lunch and that [16:25] niemeyer: give us a ping when you have a mo, thanks! [16:49] review anyone? https://codereview.appspot.com/7326052 [16:49] rogpeppe: i got it [16:49] dimitern: thanks! [17:09] rogpeppe: i'm using this build of mongo+ssl from julian's PPA: https://launchpad.net/~julian-edwards/+archive/mongodb [17:09] bac: ok. presumably that doesn't help with bootstrap, because that binary isn't in the public bucket [17:10] ah [17:10] bac: i did have the credentials once.... i'll have a look and see if i kept them. [17:11] bac: ha, i think i might just be able to do it [17:12] rogpeppe: reviewed [17:12] dimitern: tyvm [17:14] rogpeppe: ym [17:14] i'm off, good night guys [17:14] dimitern: g'night [17:25] rogpeppe: that would be great if you could [17:25] bac: i'm just trying to work out which of those packages has the files i'm after [17:26] bac: and fumbling my way through unarchiving .deb files (i've managed to avoid delving into all the ppa stuff before) [17:30] rogpeppe: Hey, what's up? [17:30] niemeyer: yo! [17:30] niemeyer: just came across severe crackness in juju set/get and just wanted to make sure it *is* crack and that i'm going to do the right thing [17:32] rogpeppe: Ok [17:33] niemeyer: currently, the code in juju set does an explicit remove when a value is set to "" [17:33] niemeyer: but if you set it with a yaml file, the value just gets set to "" (and probably fails as a result) [17:33] niemeyer: i *think* that we probably want to have the two things be equivalent [17:34] rogpeppe: how would it fail? [17:34] niemeyer: it would fail, i think, because the config validation would expect an integer, but see a blank string === deryck is now known as deryck[lunch] [17:36] rogpeppe: Agreed, they should be the same [17:36] rogpeppe: An empty value should mean removal [17:36] niemeyer: so i'm thinking that juju set service --config config-file where config-file contains {foo=""} should be the same as juju set service 'foo=' [17:36] niemeyer: yeah [17:36] niemeyer: good [17:36] niemeyer: the other crackful thing (i think) is that juju get never shows default values unless they've been explicitly set [17:37] niemeyer: it shows 'em all as null [17:38] rogpeppe: OTOH, it seems awkward to have a setting in a configuration file [17:38] rogpeppe: with an empty string, on an integer field [17:38] * rogpeppe swithers [17:39] niemeyer: perhaps we shouldn't allow settings to be reset to their default from a conf file without explicitly setting them to their default values. [17:40] niemeyer: i dunno [17:40] niemeyer: i like the simplicity of having the yaml exactly equivalent to the command line [17:40] rogpeppe: I actually think failing in that case is fine [17:41] niemeyer: and i did quick probe into #juju and found general agreement. [17:41] rogpeppe: Actually.. hmm [17:41] rogpeppe: There is no integer type.. [17:41] rogpeppe: It can't fail [17:41] rogpeppe: Oh, nevermind [17:41] rogpeppe: I was thinking of relation-set [17:41] niemeyer: ah yes [17:41] rogpeppe: Yeah [17:42] rogpeppe: I'd prefer to see "" checked, and null meaning remove [17:43] rogpeppe: They are inherently different formats.. we can't make them match precisely [17:43] niemeyer: the issue was brought home to me particular because the API provides access to yaml-format setting (to allow GUI clients to type in yaml settings and avoid js yaml parsing), and the difference seemed odd. [17:44] niemeyer: random opinion from #juju: [17:44] [12:24:03] null = None = "" = nonexistent IMO :_ [17:46] niemeyer: hmm, you're probably right about null being the right thing in yaml. but that means the yaml is strictly more expressive than setting string options (it can make a blank string explictly override a default), and i'm not sure that's right either. [17:47] rogpeppe: Random opinions without reasoning are hard to evaluate [17:47] rogpeppe: yaml *is* more expressive [17:47] niemeyer: here's the context: http://paste.ubuntu.com/1683371/ [17:48] niemeyer: yeah, but do we want it to be in this case? [17:53] niemeyer: thanks for the input anyway, it's very helpful [17:56] rogpeppe: np === wedgwood is now known as wedgwood_away === wedgwood_away is now known as wedgwood [18:45] i'm off for the day now, have a good r.o.d. all [18:45] a new CL in case anyone fancies it: https://codereview.appspot.com/7305101 (and its prereq) [18:45] fwereade: hope you're feeling a bit better [18:46] fwereade: see ya tomorrow if so :-) [18:46] rogpeppe, somewhat iffy tbh [18:46] fwereade: well, don't push it [18:47] fwereade: i've got a fair few reviews out, nothing too taxing, if you want something not too hard to do :-) [18:47] rogpeppe, don't count on it, I'm afraid, I'm only on for a call [18:47] fwereade: np [18:48] fwereade: see ya when i see ya :-) [18:48] rogpeppe, cheers, enjoy your evening === deryck[lunch] is now known as deryck [20:37] morning [20:55] hi thumper [20:55] hi bac [20:56] bac: I see that I'll see you in Atlanta [20:56] and more ex-launchpadders [20:56] I'm looking forward to it [20:57] thumper: oh, good. hadn't seen you on the list [20:57] bac: just added myself [20:57] bac: and my OCD took over [20:57] bac: I had to put the attendees in alphabetical order [20:57] it drove me spare [20:57] oh, i did that yesterday [20:57] :) [20:57] it was partially sorted [20:57] yes, the top is where i left off [20:57] but people were obviously just appending to the end [20:58] or CDO as jeff-blue-hair-guy said [20:59] * bac is sure that made no sense to anyone [20:59] i've just brought up a new VM and am trying to get juju-core installed and working again. i get this when trying to install: [21:00] bac@quantal64:~$ go install -v launchpad.net/juju-core/... [21:00] work/src/launchpad.net/juju-core/state/api/apiserver.go:4:2: import "code.google.com/p/go.net/websocket": cannot find package [21:00] that appears to be the right way to import websocket, and i'm working with a fresh copy of trunk... [21:01] fwereade: any ideas about ^^^ ? [21:02] bac, sorry, that is new to me [21:02] * fwereade pokes around [21:03] bac, yeah, happen for me as well when I move the installed one out of the way [21:04] fwereade: this is a fresh vm. did i forget to grab something? [21:05] bac, hey, wait, did you go get it? [21:06] bac, if you go getted juju-core it would have done it I think [21:06] fwereade: i did [21:06] i go got it and then i tried to go install it [21:07] fwereade: i assume the imports from google get installed locally somewhere. should they be in my GOPATH too? [21:07] bac, yeah, they should have been [21:08] yeah i have GOPATH/src/code.google.com/p but it is empty [21:08] hmm [21:09] fwereade: i think i found it. i didn't install hg... [21:09] bac, ah! [21:09] or git [21:09] bac, it's a bit crap that they don't warn clearly about that though [21:09] that's what i get for working from memory [21:10] bac, that should surely be an error on go get [21:10] yeah [21:13] * thumper was getting confused by the review dates shown [21:13] as the review comments were from before it was sumbitted [21:13] or submitted even [21:45] * thumper is pleased he ran the tests first... [21:46] fwereade: to update the diff in the special review tool, to I have to lbox propose again? [21:46] normally I just push [21:46] * thumper takes a stab that unary negation is ! [21:47] thumper, yeah, lbox propose again -- it will take the opportunity to publish all your review responses at the same time [21:47] I already did that [21:48] thumper, sorry, is it not working? [21:48] fwereade: style question [21:48] fwereade: is_super_command or isSuperCommand (for a variable) [21:48] fwereade: what I meant was that I had already published my review responses [21:48] and then I ran the tests before committing [21:49] thumper, underscores don't seem to be popular anywhere really except maybe ALL_CAPS_CONSTANTS [21:49] and found I had a backwards bool expression [21:49] * thumper has been doing python forever [21:49] and they are PEP8 [21:49] I notice most local variables are not multiple words though [21:49] I prefer to show intent [21:50] to me, isSuperCommand is harder to read than is_super_command [21:50] but that's just me [21:50] thumper: yeah, go style is camelCase [21:50] or issupercommand [21:50] it is what it is [21:50] * thumper understands [21:50] * thumper kicks the camel [21:50] it sort of falls out of the export rules [21:51] why? [21:51] that's fine for functions [21:51] but what about variables, why the same? [21:52] the export rule applies to all symbols [21:52] thumper, I do know where you're coming from but I guess I was lucky -- I found it relatively easy to dust off the camelCaseReading part of my brain [21:52] I can get used to anything [21:52] I was just wondering on the rationale [21:52] * fwereade had never thought of it that way but it makes sense, thanks davecheney [21:54] fwereade: I find it hard to work out what the state of the review is... [21:54] fwereade: https://codereview.appspot.com/7338048/ [21:54] fwereade: had two people look [21:54] I've replied to the comments, making changes [21:54] one bit was a non-trivial change [21:55] what's the situation now? [21:55] also, if I set the commit message on the merge proposal, will lbox merge use it? [21:55] thumper, you've replied to the stuff in patch set 1 and it's now waiting for further review if required [21:56] fwereade: but how do I know when it's all good? [21:56] There were two lots of comments on rietveld, but only one on the merge proposal [21:56] since I tend to drive from email, it is confusing [21:56] thumper, you have already got two LGTMs, indicating that the reviewers trust your taste/judgment enough to handle the suggestions appropriately and land it [21:57] thumper, yeah, launchpad rather fades into the background with lbox [21:57] wow, trust on the first merge proposal [21:57] that is something new to me :) [21:59] thumper: try something more audatious next time [22:00] davecheney: heh [22:03] hmm... [22:03] just merged trunk [22:03] and getting failures with openstack environ tests [22:03] local_test.go line 271 [22:04] I may hit timing issues differently to others [22:04] I have a fast newish i7 with a fast SSD [22:04] I hit issues booting the damn machine [22:04] hitting a race condition in X initialisation [22:05] the test seems to pass the second time through [22:07] fwereade: so lbox merge is the way to go? [22:08] * thumper takes a stab [22:09] the answer to the "does it use the commit message" is no, no it doesn't [22:14] thumper, sorry, lbox submit [22:14] fwereade: I've dont it already :) [22:14] and it says done. [22:14] so I guess it is done [22:14] * thumper looks at the trunk branch on lp [22:15] yep [22:15] \o/ [22:15] first commit into trunk [22:15] * thumper does a little dance [22:16] * fwereade cheers at thumper [22:16] thumper, I thought it was a really nice change btw, thank you [22:16] fwereade: np, I have the help command lined up next [22:16] thumper, it seems to have the log message from the description? [22:16] it is coming along really nicely [22:16] thumper, excellent [22:17] * davecheney loves how 'software updater' doesn't actually update softeware, just segfaults [22:19] fwereade: I overrode the message that the 'lbox submit' popped up with what I had typed into the commit message [22:19] that is why it looks the same [22:34] davecheney: for the Assert methods... [22:34] is there an AssertTrue and AssertFalse? [22:34] and does Assert(value, IsNotNil) work? [22:36] thumper: no, there is no AssertTrue or AssertFalse in gocheck [22:37] davecheney: so Assert(value, Equals, true) ? [22:37] thumper: that is correct [22:37] also [22:37] c.Assert(err, NotNil) [22:37] so, can we add it? [22:37] ta [22:37] there is also the more verbose [22:37] c.Assert(err, Not(Equal), nil) [22:37] have you seen the matchers concept? [22:37] whihc problably won't work first time [22:37] i just guessed [22:38] this is used by testtools (the python module) [22:38] so... [22:38] can we add it [22:38] the project is owned by niemeyer on his private brnch [22:38] assertThat(some_value, Equals(10)) [22:38] i have a few patches waiting in the queue to land there that fix some data races [22:38] assertThat(some_value, IsNil()) [22:38] etc [22:39] I always found the matchers a really nice way to write readable tests [22:44] matchers are awesome [22:44] porting testtools to Go would make Go a lot nicer to use [22:45] agreed [22:57] davecheney: Still on my queue, and shouldn't take long now. Sorry for the delay. [22:58] NotNil exists, btw [22:58] Ah, you said so [22:59] AssertTrue vs. Equals, true is pretty much the same.. we don't need aliases to that, IMO