/srv/irclogs.ubuntu.com/2013/04/08/#juju-dev.txt

thumperdavecheney: yeah00:01
davecheneythumper: merged your packaging fixes00:03
davecheneythank you very much00:03
thumperdavecheney: awesome, ta00:03
thumperdavecheney: lp hasn't noticed, have you pushed your packaging branch back up?00:03
davecheneyit has00:03
davecheneyit's sending me all sorts of email00:03
davecheneysppokey00:04
thumperdavecheney: ah, I see it now, the MP is marked as merged.00:05
thumperdavecheney: I wrote that magic :)00:05
davecheneyhow does it work ?00:06
davecheneysmell your branch in my push ?00:06
davecheney(ewww)00:06
thumperkinda...00:07
thumperit notices a push from your branch.00:07
thumperit then looks for any pending merge proposals targetting your branch00:07
thumperit then looks at the tip revision id for each of those merge proposals00:07
thumperand if the tip revision of the source branch is in your branches ancestry, it gets marked merged00:07
thumperand it also works out which revision number on your branch it was merged at and saves that too00:08
davecheneyvery nice00:16
* bigjools appreciates thumper's work there too00:20
thumperthe branch also gets its state changed to "merged" too00:21
thumperso it drops off the various branch listing pages00:21
* thumper fires off the can of worms email before going to lunch00:21
thumperso... lunch00:26
* davecheney reads00:26
thumperdavecheney: did you say that there were bugs around this pipe closing behaviour?00:27
thumperdavecheney: or were you referring to the hook serialisation bugs?00:27
davecheneyoh, that00:27
davecheneythat is fine00:27
davecheneyyou are sending EOF to stdin on the child process00:27
davecheneythen waiting for it to exit00:27
davecheneythe race is actaully the line after that00:27
davecheneywere we close the logger00:27
thumperah... no, I don't think that is write00:28
thumperwe aren't closing stdin of the child00:28
thumperthe outWriter is only set for stdout and stderr00:28
thumperso the process writes to the pipe00:29
davecheneythat is crack, if you close the stdout of a child process, it'll get EPIPE00:29
davecheneythis code is really subtle00:29
* davecheney goes to reread00:29
* thumper goes to lunch, and to drop stuff in at the 2nd hand shop00:31
bigjoolsI've got juju core tests passing on a new raring VM, but when I try locally I get loads of failures (I mean LOADS) like this:00:38
bigjools[LOG] 24.71999 ERROR api: error receiving request: read tcp 127.0.0.1:57535: use of closed network connection00:38
bigjoolsI've no idea what's different locally, how can I work this out?00:38
bigjoolsalso, constraints_test.go:283: is failing on raring, it claims that lp:1132537 is fixed00:41
davecheneybigjools: i think that isn't the error00:42
davecheneyjust a symptom of the TearDownTest running after a failure00:42
bigjoolsalmost certainly00:42
davecheneybigjools: got a larger paste ?00:42
bigjoolsI'll re-run, the output is massive00:43
bigjoolsgive it its due - this is the first test suite that brought my 4-core to its knees00:44
davecheneythat we do00:45
bigjoolsthe disk is gettng hammered00:46
davecheneyblame mongo00:46
davecheneyi put /tmp on a /tmpfs00:46
bigjoolsheh00:47
bigjoolsI used to do that for Launchpad tests00:47
bigjoolsdidn't make a lot of difference00:48
bigjoolson the bright side, the mongo in raring works out of the box with juju-core00:48
davecheneyexcellent00:50
davecheneythat is good news00:50
bigjoolsdavecheney: http://paste.ubuntu.com/5688064/00:50
davecheneybigjools: turns out00:51
davecheneyit doens't00:51
davecheneyPANIC: addrelation.go:0: ConstraintsCommandsSuite.TearDownTest00:51
davecheney... Panic: local error: bad record MAC (PC=0x4117A4)00:51
davecheney/build/buildd/golang-1.0.2/src/pkg/runtime/proc.c:1443 in panic00:51
davecheney/home/ed/canonical/GO/src/launchpad.net/juju-core/testing/mgo.go:17800:51
davecheney^ your mongo does not speak TLS00:51
bigjoolsdavecheney: wtf, the same mongo is installed on the VM, which works00:52
davecheneyldd $(which mongod)00:52
davecheney(from memory)00:52
bigjoolsyeah00:52
bigjoolsssl is linked00:52
bigjoolsbetter, mongod -h00:52
bigjoolsshows ssl options at bottom00:52
* bigjools is stumped00:58
davecheneygot several mongos installed ?01:00
bigjoolsnot that I can see01:00
bigjoolsbut looking for stray ones as we speak01:00
bigjoolswell, waiting for updatedb :)01:00
thumperbigjools: I'm running raring, and tests passing01:06
thumperbigjools: apart from an intermittant one this morning01:06
bigjoolsthumper: ta01:13
bigjoolsgo fmt is great and all, but it creates extra lines of diff (and buggers bzr blame) lining up struct items if I add a new long one :(01:49
davecheneyseroiusly fellas, can you please create a new channel for bitching about Go01:51
bigjoolswill that make Go better?01:55
davecheneyit'll make me feel better02:00
davecheneyGo is what it is02:00
davecheneyit's not going to change02:00
davecheneynot in a timeframe that is relevent to the problem at hand02:00
davecheneyso all this bitching just gives me heartburn02:01
bigjools"it's not going to change" ... then it'll die02:02
thumperdavecheney: can you remind me what it means to do a case <- some_channel in a select?02:02
thumperdavecheney: under what situations does it wait?02:02
thumperdavecheney: if it is a closed channel, it skips it?02:02
thumperbigjools: not everyone cares about whitespace changes02:03
davecheneyit will wait only in the case that there is no default: clause in a select, and none of the other cases are rady02:03
thumperbigjools: better tools can help that02:03
davecheneyready02:03
bigjoolsthumper: that's my point02:03
thumperbigjools: what I mean is that it is not necessarily gofmt that is at fault, but the diff checking tools02:03
bigjoolsthumper: arguably, yes. Although whitespace is important in some places of course (Python)02:04
thumperdavecheney: so for example: cmd/jujud/machine.go:80 will wait for both channels to close before moving on02:04
thumperbigjools: sure, but not really go02:05
davecheneyyes, that will block until one of those conditions is true02:05
thumpergot I hate the name tomb02:05
thumperit doesn't explain what it does at all02:06
davecheneythumper: the trick is that it then nils out the channel reference, so it can never be satisfyable again02:06
thumperdavecheney: sure, but it looks like if either one fails, the tomb sets to dying02:06
davecheneyyes, then it loops agian02:07
thumperdavecheney: so <-nil is valid?02:07
davecheneyfrom a quick reading, it's waiting for both of those things to finish02:07
davecheneythen keeping the more important error of the two02:07
davecheneymoreImportant(err, err) may be a subjective judgement02:08
davecheneyWHO THE FUCK CHANGED THIS !!!02:33
davecheney2013/04/08 12:33:09 INFO JUJU:juju:bootstrap environs: searching for tools compatible with version: 1.9.13-precise-amd6402:33
davecheney2013/04/08 12:33:09 DEBUG JUJU:juju:bootstrap listing tools in dir: tools/juju-1.02:33
davecheney2013/04/08 12:33:14 DEBUG JUJU:juju:bootstrap listing tools in dir: tools/juju-1.02:33
davecheney2013/04/08 12:33:15 ERROR JUJU:juju:bootstrap juju bootstrap command failed: cannot find tools: use of closed network connection02:33
davecheneythe directory that we look for public tools has changed02:33
thumperhuh?02:34
davecheneyit should be tools/02:34
davecheneynot tools/juju-1.02:34
thumperhmm...02:35
thumperI thought that listed tools starting with that, so only listed version 1 tools02:36
davecheneymaybe the listing hasn't change02:36
davecheneychanged02:36
davecheneyit just never failed before02:36
davecheneyodd, it works with the source version, even without using upload tools02:36
davecheneymaybe ec2 is having a lie down02:37
thumpermaybe02:37
davecheneyyup, now it works02:37
thumper:)02:37
thumperpanic over?02:38
davecheneyit's justifyable02:38
davecheneyalmost every day I go to test the tool02:38
thumperpanic expected?02:38
davecheneyit's borken02:38
* thumper sighs...02:54
thumperwhy does go make me have a return statement at the end of the function if it just says "return"02:54
thumperthat's dumb02:54
bigjoolsthumper: do you get FAIL: constraints_test.go:276: ConstraintsSuite.TestGoyamlRoundtripBug113253702:54
bigjools on raring?02:54
thumperbigjools: nope02:54
thumperbigjools: tests pass for me on raring02:54
bigjoolsthat's the only one I see failing02:55
bigjoolsdid you update goyaml lately?02:55
thumpernope02:56
bigjoolsI am on revno 3902:56
* thumper looks02:57
thumper3602:57
bigjoolsthat'll be it then02:57
* bigjools lunches, ttyl02:58
thumpermaybe...02:58
* thumper wonders where kapil's tool is to get the reproducible builds...02:58
* thumper goes to get girls from school02:58
thumperbbs02:58
thumperback03:19
* thumper wondered why juju boostrap failed so often with error: cannot find tools: use of closed network connection04:19
thumperand then it suddenly worked04:19
thumper?!04:19
* thumper away, probably back later04:28
rogpeppemornin' all06:30
rogpeppedimitern: ping07:07
dimiternrogpeppe: hey07:08
rogpeppedimitern: ho!07:08
rogpeppedimitern: i was just looking at status watching for the allWatcher07:08
dimiternrogpeppe: yeah?07:08
rogpeppedimitern: and realised that there's no statusDoc - we have a different doc type for units and machines07:09
rogpeppedimitern: that makes things more awkward, and i was wondering if there's a compelling reason for it07:09
dimiternrogpeppe: that's right07:09
dimiternrogpeppe: because they're potentially different types of status information (units/machines)07:10
rogpeppedimitern: i'm considering two alternatives: 1) just define the status as a string for each, and type-convert the result when returning Status. 2) have a different field name for each, and omit the other one when empty07:11
rogpeppedimitern: because it makes my code considerably simpler if i can assume that each collection has a uniform schema07:12
dimiternrogpeppe: what's the complication now?07:13
rogpeppedimitern: the code is simpler if i assume that there's a single type for a collection that can know how to marshal itself from the collection and how to update the allInfo when it changes07:15
rogpeppedimitern: and i think that the rest of the code becomes no more complex, to be honest07:15
rogpeppedimitern: in fact, it probably becomes a bit less magic07:15
dimiternrogpeppe: i'm not convinced getting rid of typed UnitStatus + constants (and for machines as well) is a better solution07:16
rogpeppedimitern: i'm not suggesting that07:17
rogpeppedimitern: the external interface (Status and GetStatus) would remain exactly as is07:17
dimiternrogpeppe: you're saying to save them in a single doc, casted as strings07:18
rogpeppedimitern: that's option 1, yes.07:18
rogpeppedimitern: it's statically type safe07:18
rogpeppedimitern: which the current scheme is not07:18
dimiternrogpeppe: and the 2nd option? how's the field names important?07:18
rogpeppedimitern: you'd have type statusDoc struct {UnitStatus params.UnitStatus `bson:",omitempty"; MachineStatus params.MachineStatus `bson:"omitempty"`; Info string}07:19
dimiternrogpeppe: so it's like a union07:20
rogpeppedimitern: yeah07:20
rogpeppedimitern: which is kinda what's happening now anyway07:21
dimiternrogpeppe: hmm... yeah, although it's explicit07:21
dimiternrogpeppe: so what about the field names?07:22
rogpeppedimitern: what about them?07:22
dimiternrogpeppe: ah, sorry - I though using the same names for the 2 different docs was confusing07:23
rogpeppedimitern: the point is i'd like there to be only one doc, same as we've got for every other collection07:23
dimiternrogpeppe: both options seem fair enough07:24
dimiternrogpeppe: i'd like to pass this through fwereade as well07:24
rogpeppedimitern: yeah07:24
dimiternrogpeppe: I might be missing some subtleties07:24
rogpeppedimitern: the second is more versatile (if we wanted to change UnitStatus to be more than a string, that would be ok); but that would be a major-version change in the current scheme too.07:26
rogpeppedimitern: i'm leaning towards option 1 currently. it's the simplest approach, and not hard to change in a backwardly compatible way.07:27
rogpeppedimitern: thanks for the discussion. i'll pass it by william when he comes online07:27
dimiternfwereade: hey07:31
fwereadedimitern, hey dude07:31
dimiternfwereade: having a bit of discussion with rogpeppe here, about having a single statusDoc to simplify the allwatcher07:32
rogpeppefwereade: morning!07:32
fwereaderogpeppe, heyhey07:32
* fwereade raises at least half an eyebrow but would like to hear more07:32
rogpeppefwereade: yeah - status is the only place (i think!) where we have more than one schema doc for a collection07:32
fwereaderogpeppe, ah, yes07:33
rogpeppefwereade: it doesn't look like the gains are worth that much to me07:33
rogpeppefwereade: and if it was consistent, it would make my code simpler (and probably the existing code would be a little simpler too)07:33
fwereaderogpeppe, well, it's really down to "are the unit status constants the same as the machine ones"07:33
fwereaderogpeppe, I am not unsympathetic to arguments that, yes, they are07:34
rogpeppefwereade: in my mind it's down to "can they both be represented by a string?"07:34
rogpeppefwereade: but there's an alternative approach if we think they might grow bigger07:34
* fwereade is listening07:35
rogpeppefwereade: we could have a different field for the different kinds of status07:35
rogpeppefwereade: type statusDoc struct {UnitStatus params.UnitStatus `bson:",omitempty"; MachineStatus params.MachineStatus `bson:"omitempty"`; Info string}07:35
fwereaderogpeppe, mm, not so awfully keen there07:35
rogpeppefwereade: (which is actually the go standard approach to "unions" when marshalling)07:35
fwereaderogpeppe, interesting07:35
rogpeppefwereade: but tbh at the moment i'm leaning towards type statusDoc struct {Status string; Info string}07:36
rogpeppefwereade: and (static) type-convert when returning from the Status function and calling SetStatus07:37
TheMuemoin07:38
rogpeppeTheMue: hiya!07:38
fwereaderogpeppe, that does sound reasonable, I think07:38
rogpeppefwereade: cool07:38
fwereadeTheMue, heyhey07:40
dimiternrogpeppe: I have to finish nonced provisioning branches first, then I'll propose the change to status07:46
rogpeppedimitern: i'm happy to do it if you like07:46
rogpeppedimitern: it's on the critical path for me07:46
dimiternrogpeppe: that'll be awesome07:46
dimiternrogpeppe: thanks07:46
dimiternfwereade: did we agree not to make MachineNonce required in the first CL (agent.Conf / MachineConfig)?08:10
fwereadedimitern, I think we planned to require it and pass a non-empty fake08:11
fwereadedimitern, but as you prefer08:11
dimiternfwereade: yeah, so I recall correctly08:11
rogpeppedimitern: i'm just trying to understand this comment, that the _id in the status doc is omitted "to allow direct use of the document in both create and update transactions."08:13
dimiternfwereade: hmm.. no actually - see here: https://codereview.appspot.com/8247045/diff/1/environs/agent/agent_test.go#newcode22608:13
rogpeppedimitern: how does omitting _id allow that?08:13
dimiternrogpeppe: it allows you to do statusDoc{status, info}, rather than statusDoc{x.globalKey(), status, info}08:14
rogpeppedimitern: and if that's true, how do the other docs get away with having that field and using the same doc for both create and update transactions08:14
rogpeppe?08:14
rogpeppedimitern: so we're just trying to save one function call?08:14
dimiternrogpeppe: no, we're still calling it, when we need to pass Id: of the txn.Op08:15
rogpeppedimitern: so is the comment misleading?08:15
rogpeppedimitern: is it actually "allowing" something, or is it just a convenience?08:15
dimiternrogpeppe: maybe it should've been "allows you to avoid specifying an explicit key for the document" or something08:16
rogpeppedimitern: i'm only saying because i'd find it useful to have it there08:16
rogpeppedimitern: and i'm wondering if there's a particular reason to avoid it08:16
dimiternrogpeppe: have the _id key?08:16
rogpeppedimitern: yeah08:16
rogpeppedimitern: it means a status doc can know its own id08:17
dimiternrogpeppe: well, for settingsRefDoc{1} works better than for the statusDoc{x, y} perhaps08:17
dimiternrogpeppe: is this that useful?08:18
fwereaderogpeppe, sorry, which docs with _ids do we use in updates?08:18
fwereaderogpeppe, I see a statusDoc as a dumb transport mechanism essentially -- to get one, you have to have a globalKey08:18
dimiternfwereade: looking at the comment link I posted above, istm for that test to be valid, nonce shouldn't be required08:19
fwereaderogpeppe, but in your case I can see how it would be useful08:19
fwereadedimitern, ah, sorry08:20
fwereadedimitern, we agreed required in MachineConfig08:20
dimiternrogpeppe: but not it agent.Conf?08:20
fwereadedimitern, every MC refers to a machine; not every Conf does08:20
rogpeppefwereade: yeah, the only other place is constraintsDoc, i see08:20
rogpeppefwereade: which equally doesn't have an id field08:20
dimiternfwereade: ok08:20
fwereaderogpeppe, I was asking about the otherway round actually08:21
rogpeppedimitern: yeah, agent.Conf is used by all agents08:21
fwereaderogpeppe, how often do we update whole docs?08:21
rogpeppedimitern: but the nonce is only used by the machine agent08:21
rogpeppefwereade: constraints is the only place08:22
dimiternhey guys, meet danilos - newest member of blue squad!08:23
rogpeppefwereade: and i'm going to have the same issue there08:23
rogpeppedanilos: welcome!08:23
fwereadedanilos, heyhey08:24
fwereaderogpeppe, I am having trouble figuring out the problem though08:24
fwereaderogpeppe, you get events which have the _id of the changed document08:24
fwereaderogpeppe, that tells you everything you need to know, right?08:24
rogpeppefwereade: yeah, you're right, there's no problem.08:25
fwereaderogpeppe, what's the situation where you need an _id and don;t have one available?08:25
fwereaderogpeppe, ah ok08:25
rogpeppefwereade: i now understand that comment :-)08:26
dimiternrogpeppe: care to explain what you understood for me? :)08:27
rogpeppedimitern: i'd thought that other docs were used in update transactions08:27
rogpeppedimitern: but actually they're not (and presumably you'll get an error if you do)08:28
fwereaderogpeppe, yeah, IIRC it complains about setting _id even if it matches08:28
dimiternrogpeppe: what other docs? they're only 2 of them08:28
rogpeppedimitern: unitDoc, machineDoc, etc08:28
dimiternrogpeppe: ah, right!08:28
rogpeppefwereade: you could probably use omitempty, but yeah.08:28
* dimitern needs to dash to the bank before it closes, bbiab08:36
danilosrogpeppe, fwereade: hi, thanks :)08:37
mattywrogpeppe, if I wanted to call the api from a unit, is there anything special I need to do? compared to calling it from local machine?08:45
rogpeppemattyw: you'll need to know the address of the api server08:48
mattywrogpeppe, ok, we can grab that from a file - the same as the gui does08:48
rogpeppemattyw: and... it might be best if you don't give that unit the keys to the whole environment08:49
rogpeppemattyw: but it'll be ok for the time being if you do08:49
rogpeppemattyw: actually, you don't use that anyway, so there's no problem08:50
rogpeppemattyw: you'll have to store the admin secret in a file too08:51
rogpeppemattyw: rather than grabbing it from environments.yaml08:51
rogpeppemattyw: or... you could just do exactly the same thing and put bogus provider keys in the environments.yaml file08:52
rogpeppemattyw: although tbh it would be better not to - that way your unit can be portable across providers08:52
mattywrogpeppe, at the moment we can probably just send the admin-secret up to the uint via config setting in the charm08:55
rogpeppemattyw: seems reasonable08:56
rogpeppemattyw: not very "secret" though :-)08:56
mattywrogpeppe, yeah - it's not very long term08:57
TheMuefwereade: ping09:12
fwereadeTheMue, pong09:12
TheMuefwereade: i'm a bit trapped ;)09:12
fwereadeTheMue, I'm sorry about that, how can I help?09:13
TheMuefwereade: i changed the doc to be embedded, i've missed that before. but that i run on a mgo bug returning the error "slice of unaddressable array".09:13
rogpeppedimitern: https://codereview.appspot.com/851004309:14
TheMuefwereade: so i changed, just for testing, uuid back into a slice instead an array. and hey, it works.09:14
fwereadeTheMue, then the complications of the array are too much hassle, I guess09:14
fwereadeTheMue, although, embedded?09:14
TheMuefwereade: so next step, set bson:_id on the uuid field. and oh no, it is not hashable. *sigh*09:14
fwereadeTheMue, I meant to say a "doc" field09:15
rogpeppeTheMue: i'd use string for the uuid09:15
TheMuefwereade: eh, not embedded, as a regular field, like in the other entities. wrong word, sorry.09:15
rogpeppeTheMue: simpler all round09:15
fwereaderogpeppe, +109:15
fwereadeTheMue, cool, just checking09:15
fwereaderogpeppe, TheMue, I would be fine even if trivial.NewUUID returned a string09:16
rogpeppefwereade: sounds good to me09:16
fwereaderogpeppe, TheMue, we don't really seem to get a lot of value out of the type itself09:16
TheMuefwereade: ook, will do so, but only due to technological reasons, which i dislike. a uuid is a 16 octed array, and it has a string representation.09:16
TheMuefwereade: but it shall be ok here.09:17
fwereadeTheMue, understood, but I'm fine with and data representation which is (1) unambiguous and (2) convenient09:17
rogpeppeTheMue: i think there's no good reason why we need to tie ourselves to UUID "standards"09:17
TheMuerogpeppe: i would prefer a database client not having troubles with it. ;)09:19
rogpeppeTheMue: i'm not sure what you mean09:19
rogpeppeTheMue: what db client is going to have a problem with an arbitrary string key?09:20
TheMuerogpeppe: and it's no "standards", it's an OSF/DCE standard.09:20
TheMuerogpeppe: not with a string, but the client should be able to handle a simple array of bytes.09:21
TheMuerogpeppe: using the string representation here is just a compromise, but hey, it's ok.09:21
rogpeppeTheMue: can you name a single advantage that we get from adhering to the OSF/DCE standard?09:21
rogpeppeTheMue: there's at least one disadvantage that i can think of09:23
TheMuerogpeppe: currently none, but the consequence is to ask for each standard why do you follow it. later, e.g. when having more integration aspects or new people coming into the team, have to maintain the code and ask themselves why here a standard hasn't been used is not good.09:24
TheMuerogpeppe: and we also have no real reason to not follow the standard, only the problem of mgo.09:26
rogpeppeTheMue: AFAICS the standard here just makes things a little more complex for no gain and some loss. in particular, you can't tell by seeing the UUID that it actually refers to a juju environment or which juju environment it might refer to.09:26
rogpeppeTheMue: if i'm seeing lots of juju env UUIDs flying around, that's very useful information09:26
TheMuerogpeppe: so you don't talk about a UUID anymore. you talk about an environment identifier and the decision how it has to look like.09:27
rogpeppeTheMue: yes09:27
rogpeppeTheMue: that's what we need09:27
TheMuerogpeppe: that's a totally different discussion, even it is a fine one :)09:27
rogpeppeTheMue: a universally unique environment identifier09:27
TheMuerogpeppe: hehe09:27
TheMuerogpeppe: would not have any problem with it. how would you ensure that it "speaks" and is also unique?09:28
TheMuefwereade: what do you say about it? don't use a UUID but an own invention?09:29
rogpeppeTheMue: "speaks"?09:29
rogpeppeTheMue: we ensure that it's unique in exactly the same way as you're doing currently - by using random bytes.09:30
fwereadeTheMue, is there some problem with using a string representation of a UUID as you've already implemented it?09:30
TheMuerogpeppe: yeah, i don't have a better word. just a direct translation. ;) an identifier that contains useful informations.09:30
rogpeppefwereade: see my comments above. i think it would be nice if our environment identifiers at least identified themselves as environments09:31
TheMuefwereade: please see the discussion above. not technologically, but rogpeppe correctly mentioned, that a regular one doesn't contain helpful informations.09:31
rogpeppefwereade: BTW it would be wrong, i think to use the UUID as the key in the environment collection.09:32
fwereade rogpeppe, TheMue: (1) we need to supply JUJU_ENV_UUID (2) if we're calling it a UUID, we should make it resemble one (3) it's convenient to represent it as a string, both in the data layer and when communicating it to hooks (4) make it a string :)09:33
fwereade(5) that came from a UUID in the "standard" way09:33
fwereade(6) unless there's some concern about ambiguity09:33
fwereaderogpeppe, expand please09:33
rogpeppefwereade: it means that only way to find out the uuid is by listing all items in that collection.09:34
rogpeppefwereade: which may in the future contain more items09:34
TheMuefwereade: reasonable. where does somebody as a user has a direct contact with it? or is it just a pure technical reference to identify an environment?09:34
fwereaderogpeppe, if it contains more items, you'll be accessing it via an environment-specific state connection, won't you?09:34
fwereadeTheMue, some charms want to use it, I'm afraid I don't know the detailed use case09:35
rogpeppefwereade: it seems odd to use a key that you can't know in advance.09:35
fwereadeTheMue, also, landscape wants to be able to identify environments09:35
TheMuefwereade: ok, and today it is a v4 uuid (in th epy code).09:36
fwereadeTheMue, and that is a fine thing, and it's convenient to represent it as a string in our case09:36
fwereadeTheMue, do they not store it as a string in python?09:36
fwereadeTheMue, *surely* that's the convenient representation for yaml-in-zk?09:36
rogpeppei think a string is the right representation, and leaves us open to changing the representation easily in the future if we should choose to do so09:37
TheMuefwereade: have to look, the generate it with an external package imho.09:37
fwereadeTheMue, python is irrelevant really anyway09:37
rogpeppefwereade: i think an "environment uuid" can reasonably look different from other kinds of uuid09:37
rogpeppefwereade: i'm thinking of places where we've got something as-yet-to-be-invented that's dealing with lots of environments09:38
TheMuefwereade: but i have no problem with the uuid as string, i'm only coming from a world where the types are used as long as possible and the conversion into a representation (string, xml, json etc) is done when needed. ;)09:38
rogpeppefwereade: and that an env-uuid would be a very useful thing to see in log files.09:39
fwereadeTheMue, ISTM that we are doing it when needed ;)09:39
TheMuefwereade: due to database client reasons, but ok. :D09:40
rogpeppefwereade: it's really an *environment id* we're talking about here09:40
fwereaderogpeppe, agreed -- but the UUID is unique, and no other aspect of an environment necessarily is09:40
rogpeppefwereade: which we need to be globally unique09:40
TheMuefwereade: eh, btw, as slice there's no problem. really strange.09:40
rogpeppeTheMue: your Copy and Raw code is a bit dubious BTW09:40
rogpeppeTheMue: both of them do exactly the same thing09:41
fwereaderogpeppe, if we're dealing with lots of environments, we'll be identifying them by uuid09:41
fwereaderogpeppe, surely?09:41
rogpeppefwereade: yes, but if there are lots of uuids flying around, it would be nice to know which ones refer to juju environments09:41
rogpeppefwereade: surely what?09:42
TheMuerogpeppe: only different return types.09:42
rogpeppeTheMue: Copy is redundant.09:42
rogpeppeTheMue: uuid1 := uuid09:42
rogpeppeTheMue: does the same09:42
fwereaderogpeppe, ha, hadn't spotted that09:42
rogpeppeTheMue: Raw can be just return [16]byte(uuid)09:42
TheMuerogpeppe: came from a uuid being a slice first and indeed has to be changed, yes. thanks.09:43
fwereaderogpeppe, TheMue: weren't we just going to drop the type and return a string?09:43
rogpeppefwereade: yeah, just saying for future reference.09:43
fwereaderogpeppe, TheMue: heh, I didn't know you could just "cat /proc/sys/kernel/random/uuid"09:44
TheMuefwereade: any problem with keeping the type but adding a function NewUUIDString() string?09:44
rogpeppei'd prefer to see something like juju-24e5f4675309:44
rogpeppefwereade: cool09:44
TheMuefwereade: there are many ways.09:44
rogpeppefwereade: that's a bit bigger than our 16 bytes :-)09:45
fwereaderogpeppe, what sort of context are you concerned about?09:45
TheMuerogpeppe: how would the juju-prefix help?09:45
rogpeppeTheMue: it would say "this string of random hex bytes means something in the context of juju"09:45
fwereaderogpeppe, huh? it just gives you a string representation, like we're discussing09:46
fwereaderogpeppe, I don't see the use case there09:46
* TheMue neither09:46
rogpeppefwereade: we're talking about a name for something09:46
rogpeppefwereade: it's nice if names have some meaningful information in them, i think09:46
TheMuerogpeppe: no, the name is the name, the uuid is simply an identifier.09:47
fwereaderogpeppe, what TheMue says09:47
rogpeppeTheMue: what is an identifier if not a name?09:47
fwereaderogpeppe, I don't want to denormalize name out into the uuid -- what if names become changeable?09:47
fwereaderogpeppe, a name is a property of an environment identifies by a UUID09:48
TheMuerogpeppe: it's a simple reference for something identifying it in a given context and not especially used by human beings.09:48
rogpeppefwereade: we already use the name as a key into the user's environment09:48
rogpeppeTheMue: human beings will see these things all the time09:48
TheMuerogpeppe: they will see the name of the environment, not the id09:49
rogpeppefwereade: i think there are probably sound reasons for not including the environment name actually (in particular it's nice to have a fixed-length key)09:49
rogpeppefwereade: but i still think our string representation should identify itself as a juju environment identifier09:50
fwereaderogpeppe, yeah, and using plainly non-unique things as keys is rarely very sensible, it's going to be a problem for us09:50
rogpeppefwereade: it's a level of sanity checking apart from anything else09:50
rogpeppefwereade: it's only part of a key. uuids often contain non-unique sequence numbers too09:51
fwereaderogpeppe, obviously not every bit of a uuid has a unique value :/09:51
fwereaderogpeppe, look, it's a UUID09:51
rogpeppefwereade: indeed.09:51
fwereaderogpeppe, a UUID looks like X09:51
* TheMue just references http://en.wikipedia.org/wiki/Universally_unique_identifier09:51
fwereaderogpeppe, not like juju-X09:52
fwereaderogpeppe, I'm not going to tell people "we decided to improve on UUIDs"09:52
fwereaderogpeppe, even if they need improvement, now is not the time09:52
rogpeppefwereade: it's not "improving on". it's adding some more information so we can easily say "this cannot possibly be a juju uuid"09:53
rogpeppefwereade: there is absolutely nothing special about a UUID09:53
TheMuerogpeppe: where do you expect we need to answer this question?09:53
rogpeppeTheMue: UUIDs come from outside. whenever they do, we ask this question.09:53
fwereaderogpeppe, why do we care about the answer?09:54
TheMuerogpeppe: where do they come from outside?09:54
fwereaderogpeppe, "here's the env" or "env not found"09:54
rogpeppefwereade: or "bogus environment identifier" - would be more helpful.09:54
TheMuerogpeppe: if the code asks the db "hey, i wonna have the env with the id 1234" and it finds it it's ok.09:55
rogpeppefwereade: if UUIDs were so special, there wouldn't be so many different versions of them.09:55
fwereaderogpeppe, how so? who to? in what way does it pay for 3 engineers at $X/hr when there's a clear implementation out there already that we can just match?09:55
TheMuerogpeppe: only 509:55
fwereaderogpeppe, so, you're saying we should improve on them...09:55
rogpeppefwereade: i'm saying they're just 16 random bytes in hex. job done.09:56
TheMuerogpeppe: and those 5 version differen in the way they are generated09:56
TheMuerogpeppe: nothing else09:56
rogpeppeTheMue: and in their string representations09:56
TheMuerogpeppe: that may be identifiers, but they aren't uuids.09:56
rogpeppeTheMue: why not?09:56
rogpeppeTheMue: they're ids and they're universally unique.09:57
fwereaderogpeppe, that is not the same thing as a UUID09:57
TheMuerogpeppe: there is only one standard in represent those 16 octets as string, no more09:57
fwereaderogpeppe, we need a UUID09:57
dimiternlooking for a second review on https://codereview.appspot.com/8247045/09:57
fwereaderogpeppe, that is what we will be implementing09:57
fwereaderogpeppe, not an I-decided-this-was-better-than-a-UUID09:58
TheMuefwereade: +109:58
rogpeppefwereade: it's trivially *exactly the same* as a UUID09:58
fwereaderogpeppe, the bikeshade is puce, and I'm sticking to it09:58
fwereaderogpeppe, words have meanings09:58
TheMuerogpeppe: not the same, only similar09:58
TheMuerogpeppe: and JUJ_ENV_UUID contains the term UUID where people expect it to be one09:59
* rogpeppe never understood why the form of a set of random bytes mattered09:59
dimiternrogpeppe: maybe due to parsing something expected10:00
rogpeppedimitern: it's a string...10:00
TheMuerogpeppe: you're discussing a design decision has been done a long time ago. would the variable has been introduced as JUJU_ENV_ID it would be more open.10:00
TheMuerogpeppe: but the decision has already been made.10:00
dimiternrogpeppe: btw and easy quick review? https://codereview.appspot.com/8247045/10:01
rogpeppedimitern: i'll swap you https://codereview.appspot.com/8510043/10:01
dimiternrogpeppe: already did yours ;)10:01
* rogpeppe refreshes his mail and sees it10:02
rogpeppedimitern: ta!10:02
rogpeppedimitern: "what happens if somehow an invalid value ends up here?"10:03
rogpeppedimitern: isn't it just the same as it was before?10:03
rogpeppedimitern: i'm not sure i see how things are any different now.10:04
dimiternrogpeppe: well, before Status was typed, now it isn't10:04
rogpeppedimitern: i don't think that makes any difference10:04
rogpeppedimitern: each one could be read into the other before, as now10:04
dimiternrogpeppe: it does until you cast it explictly i guess10:05
rogpeppedimitern: if you used a machine id to fetch a unit status doc before, you'd get exactly the same results as you get now10:05
dimiternrogpeppe: but anyway it's internally accessible only, so it'll be all right10:05
rogpeppedimitern: yeah10:05
rogpeppedimitern: we do no checking of valid statuses currently10:06
rogpeppedimitern: anyone could do m.SetStatus("fdvdsfvfdsvfdsv", "")10:06
rogpeppedimitern: with no repercussions10:06
dimiternrogpeppe: not sure - it must be params.MachineStatus value, isn't it?10:07
rogpeppedimitern: no10:07
rogpeppedimitern: a constant string is assignable to a typed string10:07
rogpeppedimitern: you even do it yourself10:07
dimiternrogpeppe: ha! didn't know that10:07
rogpeppedimitern: in Status you return "" for MachineStatus10:07
rogpeppedimitern: constants in Go are untyped10:08
dimiternrogpeppe: :) cool, point taken10:08
dimiterncan someone tell what do I need to setup to run ec2 live tests?10:21
danilosheya, anybody seen this problem with juju-core and golang from raring: http://pastebin.ubuntu.com/5688989/? I am sure I am doing something wrong, but I wonder what (and I couldn't find any reference web page for the package net/http/cookiejar)10:23
mgzdimitern: just source your ec2 creds and run in the environ/ec2 dir with -live I think10:24
mgzthough you may also have some other flags now as well10:24
dimiternmgz: I don't have the same creds file as novarc for canonistack10:24
dimiterndanilos: you need to call "go build ./..." and then possibly "go test ./..." (note the dot and the slash)10:25
danilosdimitern, ah, lovely syntax, thanks :)10:25
mgzyou don't? I'm pretty sure john or I emailed you the bzr creds10:26
dimiternmgz: ha! let me look10:30
mgzlook for gpg encrypted junk :)10:30
dimiternmgz: can't seem to find them; anyway I just created an account with aws anyway10:32
dimiternmgz: is there a wiki page with a similar setup for ec2, like for canonistack?10:33
mgzthere's a docs page10:33
mgzbut, I didn't re-edit the ec2 one, so it might not be as useful as the openstack one.... but you should work it out10:34
mgzI think there's a wrinkle with juju-core in that it doesn't look for the ecuatools form of the envvars10:34
dimiternso do I need anything else beside AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY env vars?10:36
mgz...I really want to have a session with evilnick at some point about what we need to make the docs sane for juju-core10:37
mgzdimitern: only the other normal bits. you can set some things like the region to something other than us east in your environment if you want10:38
dimiternmgz: ok10:39
rogpeppedimitern: you have a review https://codereview.appspot.com/8247045/10:41
dimiternrogpeppe: cheers!10:41
rogpeppefwereade: any chance of a second opinion? https://codereview.appspot.com/8510043/10:41
dimiternrogpeppe: any idea why i'm getting this error http://paste.ubuntu.com/5689043/ while running the ec2 live tests?10:52
rogpeppedimitern: are you getting it every time?10:54
dimiternrogpeppe: that was the first run, but then I got "your account is being verified for the next 2h...", weird though - some tests pass, I can see instances running in the dashboard10:55
dimiternrogpeppe: will try later, I just registered the account 30m ago10:55
rogpeppedimitern: with this kind of problem, i recommend ssh'ing to the machine as it's bootstrapping (as soon as the test logging prints its DNS name) and tail -f the cloud-init-output.log on the machine10:55
dimiternrogpeppe: will do, thanks10:56
rogpeppedimitern: it looks like you've started the machine ok, but the mongo init has failed10:56
jamespagebigjools, (or anyone else): are you still seeing SSL issues with the MongoDB in raring? I upload 2.2.4 on Friday which contained some SSL related fixes10:57
dimiternrogpeppe: maybe it's something related to the account being not fully verified yet10:57
rogpeppedimitern: there is a race between the connecting client and the init process, but the code logic *should* deal with that10:57
rogpeppedimitern: i don't see anything ec2-related there10:57
rogpeppedimitern: unauthorizedError comes from mongo, i think10:57
dimiternrogpeppe: I didn't paste the whole thing10:57
rogpeppedimitern: it managed to make the connection to the mongo on the new machine10:58
rogpeppedimitern: which indicates that your ec2 credentials worked fine10:58
dimiternrogpeppe: that error was reported a few times: http://paste.ubuntu.com/5689057/10:58
rogpeppedimitern: that's different10:58
dimiternprobably only 1 instance at a time is allowed during these 2h11:00
rogpeppedimitern: perhaps11:00
rogpeppedimitern: i don't think your problem that you pasted first is to do with that though11:00
TheMuelunchtime11:00
rogpeppedimitern: have you still got an instance running from that account?11:01
dimiternrogpeppe: how can I pause the test to inspect the log before it shuts down the instance/11:01
dimiternrogpeppe: not anymore after the tests11:01
rogpeppedimitern: i generally ssh in while the test is running11:01
rogpeppedimitern: so you can see the log as it's being produced11:01
rogpeppedimitern: alternatively, just ^C the test11:02
dimiternrogpeppe: I'll try just that test again, while sshing11:02
rogpeppedimitern: good plan11:02
rogpeppedimitern: one other thing11:02
dimiternFAIL: live_test.go:136: LiveTests.TestInstanceGroups - that's the one11:02
rogpeppedimitern: i'd add a log statement11:02
rogpeppedimitern: in juju.NewConn11:02
rogpeppedimitern: after the "if state.IsUnauthorizedError" test11:03
rogpeppedimitern: so that we can be sure that logic is being triggered11:03
rogpeppedimitern: (if it gets an unauthorized error, it should continue trying to connect for a minute)11:03
rogpeppedimitern: and i recommend running only TestBootstrapAndDeploy to start with11:04
dimiternrogpeppe: now it passed11:04
dimiternrogpeppe: ok, I'll add the log stmt11:04
rogpeppedimitern: i don't think TestInstanceGroups was the one that failed for you, BTW11:05
dimiternrogpeppe: but for the bootstrap+deploy to work, i need to be able to run more than 1 instance, right?11:05
rogpeppedimitern: yeah, but you'll see that error when it tries to initially connect to the state11:05
dimiternrogpeppe: add log.Warningf("juju: unauthorized error while connecting to state server; retrying") ?11:08
rogpeppedimitern: sounds good11:08
dimiternrogpeppe: in the "if IsUnauth()" block?11:08
rogpeppedimitern: actually, i think it's more a Notice11:08
rogpeppedimitern: because it can happen in the normal course of events11:08
rogpeppedimitern: yeah11:09
rogpeppedimitern: i'm just wondering about name of the newly factored-out allWatcher11:11
rogpeppedimitern: it's no longer inherently an all-watcher - it just watches a collection of stuff11:11
rogpeppedimitern: i'm wondering about "combiWatcher" as a name11:11
rogpeppefwereade: thoughts? ^11:11
dimiternrogpeppe: combinedWatcher?11:12
* fwereade reads back11:12
rogpeppedimitern: i'd really like something shorter11:12
rogpeppefwereade: i've factored the allWatcher code into its own package11:13
fwereaderogpeppe, maybe multiWatcher?11:13
rogpeppefwereade: i wondered about that11:13
fwereaderogpeppe, panopticon ;)11:13
fwereaderogpeppe, (ok, not "pan")11:13
rogpeppefwereade: but several other things are actually "multi-watchers"11:13
dimiternrogpeppe: bootstrap and deploy failed again, this time the notice is there11:13
rogpeppedimitern: did you ssh to the instance when it was bootstrapping?11:13
fwereaderogpeppe, no more so than other things are combi-watchers, surely?11:14
rogpeppefwereade: yeah, i was thinking that11:14
dimiternrogpeppe: no, because i'm figuring out how to setup my .ssh/config to allow me to use my newly generated keypair11:14
rogpeppedimitern: i do: ssh -i $home/.ec2/rog.pem ubuntu@$111:14
rogpeppedimitern: in a script that i call "ec2ssh"11:15
rogpeppedimitern: is this against trunk?11:15
fwereadedimitern, just `ssh ubuntu@` seems to work for me, I just have a standard id_rsa in ~/.ssh11:15
rogpeppefwereade: it depends if you generated an ssh key pair or not11:16
fwereaderogpeppe, it was to having done that that I was alluding11:16
dimiternI added Host *.amazonaws.com + the key11:17
rogpeppefwereade: ah yes, that will probably work with the usual authorized keys logic11:17
dimiternrogpeppe: ssh-ing and tailing cloud-init-output.log shows no errors (just host key generated; cloudinit finished)11:23
rogpeppedimitern: hmm11:23
dimiternrunning again11:24
rogpeppedimitern: can you bootstrap and run status ok?11:24
rogpeppedimitern: could you paste the log of the test run?11:24
dimiternstill running11:26
rogpeppedimitern: i mean the one that just failed11:26
rogpeppefwereade: i'm also looking for another name11:27
rogpeppefwereade: there are two types exported by multiwatcher11:27
rogpeppefwereade: one is the actual watcher used by clients11:27
rogpeppefwereade: which was called StateWatcher, but now is (provisionally) multiwatcher.Watcher11:28
rogpeppefwereade: the other is the type that's shared between several Watcher instances, that holds the record of everything that's currently around11:28
rogpeppefwereade: it's only there to be used by state11:29
rogpeppefwereade: i'm thinking multiwatcher.Store11:29
rogpeppefwereade: but i dunno11:29
dimiternrogpeppe: cloud-init-output.log: http://paste.ubuntu.com/5689114/11:29
dimiternrogpeppe: test log: http://paste.ubuntu.com/5689116/11:29
dimiternrogpeppe: that's the one11:29
fwereaderogpeppe, Store sgtm11:30
rogpeppedimitern: ah, so it did fail11:30
rogpeppedimitern: see line 131 of the cloud-init output11:30
rogpeppedimitern: it failed to download the tools11:30
dimiternrogpeppe: yeah, I saw that - when I was tailing it before it was too late probably11:31
rogpeppedimitern: perhaps you're not authorized to push to s311:31
dimiternrogpeppe: could be, that's why I'll try in an hour or so, after verification11:32
rogpeppedimitern: i'd be interested in exploring this failure mode actually11:32
rogpeppedimitern, fwereade: i wonder if we shouldn't pipeline wget straight into tar xz11:33
rogpeppewe should probably download the tools, check the sha1sum and *then* untar them11:34
fwereaderogpeppe, +1 in spirit although I would prefer that they were actually signed11:35
rogpeppefwereade: what would signing give us that an sha1sum doesn't?11:35
rogpeppefwereade: (after all, signing is usually just signing a hash of the content anyway, right?)11:35
fwereaderogpeppe, requires compromise of the actual key used to sign, rather than just compromise of the hash and binary delivery channels11:36
rogpeppefwereade: really?11:37
fwereaderogpeppe, isn't that the difference? what it takes to fake it?11:37
rogpeppefwereade: isn't the key delivered through the same channel?11:37
rogpeppefwereade: if someone can compromise your cloudinit, it doesn't matter what key you used to sign11:37
fwereaderogpeppe, I'm just talking about how the binaries/hashes get to juju11:38
rogpeppefwereade: yeah - through cloudinit, right?11:38
rogpeppefwereade: well, the hashes anyway11:38
rogpeppefwereade: i think we have no choice but to trust the integrity of the cloud-init script11:39
fwereaderogpeppe, I wasn't concerned about cloud-init11:39
rogpeppefwereade: in which case, a secure hash is as good as a signed binary, i think11:39
rogpeppefwereade: it's a different matter for the mongo binary though11:39
fwereaderogpeppe, who generates the hash, and how do we trust them?11:39
rogpeppefwereade: Bootstrap generates the hash11:40
rogpeppefwereade: ah... doh!11:40
rogpeppefwereade: public tools, sorry11:40
rogpeppefwereade: i was thinking of upload-tools11:40
fwereaderogpeppe, yeah, I had the same realisation just now11:40
rogpeppefwereade: yeah, we need signing11:40
rogpeppefwereade: and for the public key to be embedded in the juju source.11:41
fwereaderogpeppe, exactly11:41
fwereaderogpeppe, ah, hmm11:41
rogpeppefwereade: well, possibly with an override11:41
fwereaderogpeppe,  we can't let a potentially-evil binary verify its own integrity11:42
rogpeppefwereade: i'm sure there's any alternative11:43
fwereaderogpeppe, the pubkey goes in the client, pushed up to cloudinit, verify signature of downloaded tools inside cloudinit11:43
fwereaderogpeppe, untrusted client = game over anyway11:43
rogpeppefwereade: exactly11:43
rogpeppefwereade: we do need an override though, so that sync-tools can work11:44
rogpeppesync-tools --public, that is11:44
fwereaderogpeppe, upload-tools?11:44
rogpeppefwereade: that too11:44
fwereaderogpeppe, for sync-tools they're just the same files in a different location, though, right?11:44
fwereaderogpeppe, upload-tools involves either overriding or just disabling the checks in development mode11:45
fwereaderogpeppe, however I would rather have the override just so we're always exercising that code path11:45
rogpeppefwereade: sync-tools --public is different, because other juju environments will use that public bucket11:51
fwereaderogpeppe, I'm not following11:51
rogpeppefwereade: so we need to provide a env config way of specifying the tools/mongo(/either?) public key, i think11:51
fwereaderogpeppe, I agree that's the way to do it11:52
rogpeppefwereade: bootstrap --upload-tools is {generate key; generate binaries; upload binaries signed with new key; bootstrap with cloudinit holding new key}11:52
rogpeppefwereade: normal bootstrap is {get key from somewhere (defaulting to our public key); bootstrap with cloudinit holding that key}11:53
fwereaderogpeppe, yeah, sgtm11:53
rogpeppes/somewhere/environment config/11:53
fwereaderogpeppe, yep11:53
rogpeppefwereade: i guess we want to allow sync-tools to generate a key too11:54
mgzfwereade: have we got any good starter bugs for danilo in juju-core?12:05
=== gary_poster|away is now known as gary_poster
fwereademgz, ooh, let me take a look, just a sec12:14
fwereademgz, hmm, how about keyauth support for goose? you'd know better than I12:16
fwereademgz, it's the card that looks most obviously bitesize to me12:16
mgzah, that would be good12:17
fwereademgz, alternatively, if he wants to hit core, then "hook execution serialization" might be a good one -- it should be relatively simple code in a single location12:18
mgzdanilo: bug 113533512:18
_mup_Bug #1135335: Keyauth support not available for Openstack providers <Go OpenStack Exchange:Triaged> <juju-core:New> < https://launchpad.net/bugs/1135335 >12:18
fwereadedanilos, sorry, don;t know why I'm talking about you instead of to you12:18
danilosfwereade, hi, let me read up :)12:18
fwereadedanilos, keyauth for openstack is probably better because it demands a bit less context, I think12:18
danilosmgz, fwereade: ok, I'll start with the keyauth and then after I am done I'll take a look at hook execution serialization (I assume that's bug 1121968)12:20
_mup_Bug #1121968: hook serialization per-system <juju-core:New> < https://launchpad.net/bugs/1121968 >12:20
fwereadedanilos, perfect, thanks12:20
fwereadedanilos, I'm going to eat in a mo but feel free to ping me if yu have any questions, I shouldn't be long12:21
mgzso, the trick with keyauth is to look at the current docs, and python implementation, then fixup the goose code12:21
mgzhttps://juju.ubuntu.com/docs/provider-configuration-openstack.html12:21
danilosfwereade, thanks, sounds good12:21
mgzlp:juju juju/provider/openstack/credentials.py and ./client.py and tests12:22
mgzthen lp:goose identity/12:23
fwereadedanilos, incidentally, before you do work on core, you might find it helpful to read the developer docs (most of the doc/ dir)12:23
mgzI'm happy to be bugged with questions or pair if you'd find that helpful12:23
danilosfwereade, yeah, started on that already, thanks12:23
mgzand yeah, the docs directory in juju-core is very useful for background on the design and implementation12:24
fwereadedanilos, and I would be most grateful for criticisms from your POV, if there's anything unclear12:24
danilosmgz, sure, I'll take a look around first and will ping you as needed12:24
danilosfwereade, ack12:25
TheMuefwereade: another ping12:30
dimitern fwereade: updated https://codereview.appspot.com/8429044/ PTAL12:34
dimiternrogpeppe: also you please? ^^12:34
TheMuedimitern: MachineNonce, my translator tells me that a nonce is a paedophile. i hope there are other meanings too. ;)12:36
dimiternTheMue: :D - see here http://en.wikipedia.org/wiki/Cryptographic_nonce12:37
* dimitern bbi30m12:37
TheMuedimitern: ah, not http://en.wikipedia.org/wiki/Nonce_(slang)12:38
rogpeppedimitern: why do we need a special value for the bootstrap nonce?12:42
rogpeppeTheMue: that's new to me. the other meaning i know for nonce is "homosexual".12:43
=== teknico_ is now known as teknico
TheMuerogpeppe: reminds me of the Mitsubishi Pajero, a word with a special meaning in South America :)12:45
TheMuerogpeppe: always interesting when terms have so different or multiple meanings12:46
rogpeppedimitern: you have a review12:46
=== marcoceppi_ is now known as marcoceppi
* dimitern is back13:19
dimiternrogpeppe: tyvm13:19
dimiternrogpeppe: because it's not generated by the provisioner13:20
dimiternfwereade: ping13:21
fwereadedimitern, pong13:21
dimiternfwereade: https://codereview.appspot.com/8429044/ :)13:21
fwereadedimitern, cool13:21
rogpeppedimitern: that's true, but i'm not sure i see what it needs to be a particular special value13:21
dimiternrogpeppe: well, it has to have some value, and it's already special, so why not?13:22
rogpeppedimitern: giving it a special constant makes it seems like it *has* to be that value13:23
dimiternrogpeppe: i don't understand what's your point, sorry, expand a bit more on why this is a bad idea?13:24
rogpeppedimitern: i'm not sure it is.13:24
TheMuefwereade: a ping by me too ;)13:24
dimiternrogpeppe: what you rather have there instead?13:25
rogpeppedimitern: i'd probably just have the provisioners pass in ""13:25
fwereaderogpeppe, it does have to be that value13:26
dimiternrogpeppe: the provisioner will never see that13:27
dimiternrogpeppe: it'll be already there at bootstrap time13:27
rogpeppedimitern: oops, i meant the provider13:27
rogpeppefwereade: oh?13:27
fwereaderogpeppe, that will be done in jujud bootstrap-state, I think, by passing it into InjectMachine (IIRC)?13:27
dimiternrogpeppe: ah, well I don't like "", it could be generated at bootstrap time, like in the provisioner though, so it's not fixed13:28
rogpeppedimitern: i don't think that would help13:28
fwereadedimitern, I don't think there's much payoff to making it configurable13:28
TheMuefwereade: may i reserve the next ping-timeslot? ;)13:28
fwereadeTheMue, sorry, pong13:29
* rogpeppe quite likes the zero value as a default13:29
TheMuefwereade: hehe13:29
TheMuefwereade: e'thing is now green, only one thing is open13:29
dimiternrogpeppe: well, what's not to like about "user-admin:bootstrap" ? :)13:29
rogpeppedimitern: it makes it look like there's more structure there than there actually is13:29
TheMuefwereade: i changed the operation order when creating the env and co after Dimiters review.13:29
fwereadeTheMue, yeah, you changed it the wrong way, it was right before13:30
dimiternrogpeppe: that's because you don't yet know the format what the PA will generate13:30
TheMuefwereade: you say that this order is wrong. could you explain why and which kind of error you expect here?13:30
fwereadeTheMue, if a settings document exists without a matching entity, no big deal13:30
dimiternrogpeppe: it'll be similar "machine-<id>:<random hex token of (possibly) fixed length>13:31
rogpeppedimitern: why not just a uuid? :-)13:31
benjiI can't bootstrap, I'm getting "error: cannot log in to admin database: auth fails"13:31
fwereaderogpeppe, because the story is not specified to require a UUID?13:31
dimiternrogpeppe: it's too heavy perhaps..13:32
TheMuefwereade: but doesn't the txn ensures that all is created or nothing?13:32
rogpeppefwereade: i'd have thought that just a random hex token would be enough13:32
rogpeppefwereade: but if we think we want an extra prefix, then who am i to argue? :-)13:32
dimiternrogpeppe: it has to be unique across the environment13:32
rogpeppedimitern: sure. that's what randomness gives you.13:32
fwereadeTheMue, yes, but with some subtleties13:33
dimiternrogpeppe: so even a counter should do13:33
benjiI have run go get -u launchpad.net/... and done a build -a ./... and still have the problem.  I have also switched S3 buckets (which has fixes similar issues in the past)13:33
rogpeppedimitern: sure.13:33
fwereadeTheMue, txn execution might be interrupted and not resumed for a while13:34
TheMuefwereade: ok, that's an argument13:34
dimiternbenji: ec2?13:34
fwereadeTheMue, we would like to use the existence of the entity documents as guarantees that certain other documents exist13:34
benjidimitern: yep13:34
rogpeppedimitern: i just like the simplicity of "bootstrap" - it suggests a simple starting point.13:34
* TheMue likes real dbms transactions ;)13:34
dimiternbenji: I had the same issue - are you using a newly created ec2 account?13:34
* fwereade has become quite fond of mgo/txn13:34
TheMuefwereade: so the order is constraints, settings, environment13:35
benjinope; this one has been active for a few years13:35
rogpeppedimitern: and it's a really special value, so it doesn't matter that it's a different format. in fact that might even be better.13:35
rogpeppedimitern: anyway, i don't wanna push any more. i just wanted to raise the question.13:35
fwereadeTheMue, there's no relationship between constraints and settings, but both must come before the environment doc itself13:35
TheMuefwereade: ok, then the CL will flow in in a few seconds13:35
dimiternrogpeppe: well, I think we should keep it simple and use a const, what exact value  to choose doesn't bother me that much13:35
dimiternfwereade: perhaps you can chip in on your idea behind "user-admin:bootstrap" meaning?13:36
fwereadebenji, would you try pointing your public-bucket to an empty one?13:36
benjifwereade: control-bucket?13:37
dimiternfwereade: I had the same issue earlier, with a new bucket (well, haven't created it, just picked juju-askfjasljgfjgljfg)13:37
fwereadebenji, public-bucket13:38
dimiternbut I did set control-bucket, no public13:38
benjifwereade: I don't have a config setting with that name.  Should I add one?13:38
fwereadebenji, actually, simpler: would you check the current version number in version/version.go?13:38
benjifwereade: const version = "1.9.14"13:39
fwereadebenji, if you were to add one we could eliminate the possibility of inappropriate tools being picked up for some reason13:40
dimiternfwereade, rogpeppe: I got it - bootstrap nonce is badged with the tag of the responsible entity13:40
benjifwereade: will do13:40
fwereadebenji, we have surprising fallback behaviour across buckets that I'm working on13:40
fwereadebenji, it's not certain to be the cause but at least it eliminates one avenue of ugliness13:40
benjifwereade: do I need to make that bucket public in S3?13:46
fwereadebenji, not at all13:46
benjik13:46
fwereadebenji, it defaults to "juju-dist" and gets the released tools13:46
fwereadebenji, but if you point it somewhere empty, it'll work fine so long as you have sensible tools in the control-bucket13:47
fwereadebenji, (well, maybe it will: there may be more going on, but that's how to get a definitely-clean environment)13:47
benjifwereade: I'm bootstrapping now with new public and control buckets13:48
fwereadebenji, thanks -- if it's weird again, please paste me /var/log/cloud-init-output.log13:48
benjik13:49
TheMueSh**, forgot to remove a comment.13:49
rogpeppefwereade: here's an interesting thing13:49
rogpeppefwereade: the API server does need to use JujuHomePath13:49
rogpeppefwereade: because it gets charms13:49
rogpeppefwereade: and therefore needs a charm cache13:49
rogpeppefwereade: and that's how the charm cache works13:50
fwereaderogpeppe, that's an argument for parameterising the charm cache, I think13:50
rogpeppefwereade: perhaps we should divorce the charm cache from JUJU_HOME13:50
fwereaderogpeppe, +113:50
rogpeppedimitern: here's your allwatcher refactoring branch. it's a lot of lines but no logic changes: https://codereview.appspot.com/8458044/13:52
dimiternrogpeppe: cheers, will look shortly13:53
rogpeppedimitern: thanks13:53
* dimitern hates this error already! => 2013/04/08 15:53:59 ERROR JUJU:juju:status state: connection failed, paused for 2s: dial tcp 23.21.7.175:37017: connection refused13:53
dimiternit's arguably even an error13:53
dimiternso, practically I cannot do anything live on ec2, because there are no charms for quantal and no tools can be found without --upload-tools (or they fail to unpack during cloudinit)13:55
rogpeppedimitern: yup13:58
rogpeppedimitern: you can always download charms and rename them to quantal :-)13:58
rogpeppedimitern: it's not an error13:58
dimiternI had to resort to juju deploy cs:~charmers/quantal/glance-4 as the easiest :)13:58
rogpeppedimitern: it's a Notice13:58
rogpeppedimitern: oh, hold on!13:59
rogpeppedimitern: you can use fake-tools13:59
rogpeppedimitern: or whatever it's called13:59
dimiternrogpeppe: eh?13:59
dimiternrogpeppe: --upload-tools --fake-tools ?13:59
rogpeppedimitern: juju bootstrap --upload-tools -fake-series precise14:00
rogpeppedimitern: it's in trunk14:00
rogpeppefwereade: the help message should say that the series are comma-separate (assuming they are)14:00
niemeyerHullah14:00
rogpeppeniemeyer: yo!14:01
rogpeppeniemeyer: good news, eh?!14:01
niemeyerrogpeppe: indeed!14:01
dimiternrogpeppe: cool, i'll try that next14:01
rogpeppeniemeyer: hopefully it'll be ultra-stable now :-)14:01
niemeyerrogpeppe: Let's hope so :)14:02
dimiternmramm: you around?14:02
* dimitern yes! fake_nonce and provisioner works still14:03
benjifwereade: same error; however, I don't see my new public bucket listed in S3; is the config setting simply "public-bucket" under the environment name?  like so:14:05
benjienvironments:14:05
benji  ec2:14:05
benji    type: ec214:05
benji    public-bucket: foo14:05
fwereadebenji, yeah14:06
benjiI wonder why it isn't listed in s3 then14:06
* dimitern lunch, finally14:06
fwereadebenji, ok, I guess that wasn't it14:06
fwereadebenji, we don't try to create it14:06
benjioh!  I'll create it and try again14:07
fwereaderogpeppe, offhand, will we list an empty bucket without error? I *think* we do14:07
rogpeppefwereade: i think so too14:07
fwereadebenji, that shouldn't matter14:07
fwereaderogpeppe, I have been up to the elbows in a not-quite-up-to-date branch, haven't actually run tip lately14:08
fwereaderogpeppe, have you?14:08
rogpeppefwereade: i think so.14:08
rogpeppefwereade: actually, maybe not14:08
rogpeppefwereade: i'll check again14:08
dimiternfwereade: it does create it, just tried14:09
fwereadedimitern, all the better then14:09
mattywwhere do all the charm files in a unit get installed under juju-core? In pyju it was /var/juju/....14:10
benjifwereade: I get the same error with a newly-created public-bucket14:16
fwereadebenji, sorry, I clearly didn't communicate that it wouldn't make any difference -- would you paste me cloud-init-output.log please?14:17
benjifwereade: you communicated fine; I tried it anyway ;)14:17
rvbafwereade: Hi… in MAAS we don't have a shared storage to upload the tools once and for all… would it be reasonnable to get the provider to always upload the tools as part of the Bootstrap process?14:22
fwereadervba, I'd recommend that people sync-tools before bootstrap14:23
mattywmattyw, ^^ I'm an idiot :(14:23
rvbafwereade: so we don't do anything special in the provider itself, but we encourage people to use 'juju --upload-tools' ?14:23
fwereadervba, I'd prefer to avoid that14:24
rvbafwereade: you mean avoid uploading the tools in the provider when Bootstrap() is called?14:25
fwereadervba, jam recently added the juju sync-tools command14:25
rvbaOk, seems sane to me to keep the providers as similar as possible.14:26
fwereadervba, if you have ec2 credentials in your env it will copy the latest ones form the official juju-dist bucket14:26
fwereadervba, it's an extra step but not too painful14:27
fwereadervba, I hope14:27
rvbafwereade: sounds good to me.14:27
rvbaI'll cleanup the MAAS' provider code now.14:27
rvbafwereade: thanks!14:27
mattywrogpeppe, ping?14:38
benjifwereade: I had to re-bootstrap so it took a while, but now I am confused as to how to fetch cloud-init-output.log if I can't ssh into the machine14:47
fwereadebenji, can you not just ssh ubuntu@dns-name?14:47
benjifwereade: I'll try that14:48
benjifwereade: https://pastebin.canonical.com/88664/14:51
fwereadebenji, hmm, how about /var/lib/juju/... um, poke around for an agent.conf somewhere inside a dir called "bootstrap"?14:54
rogpeppemattyw: pong14:54
rogpeppemattyw: (sorry, was in a call)14:54
mattywrogpeppe, no problem? can I borrow you in cloud-green?14:55
rogpeppemattyw: sure14:55
benjifwereade: /var/lib/juju/agents/machine-0/agent.conf perhaps?14:55
fwereadebenji, damn, sorry, I got completely distracted by test failures15:38
fwereadebenji, I *think* there should be another one for bootstrap stuff15:39
fwereaderogpeppe, can you confirm how that one works ^^15:39
rogpeppefwereade: sorry, how what works?15:39
benjifailing tests can have that effect on people :)15:39
fwereaderogpeppe, the agent conf for bootstrap-state15:40
fwereaderogpeppe, does it get it by pretending to be an agent called "bootstrap" or something?15:40
rogpeppefwereade: something like that, yes15:40
rogpeppefwereade: and the agent conf gets removed immediately15:40
benjifwereade: I have completely rebuilt the world (as best I understand how in go) and it seems to be working now.15:40
rogpeppefwereade: after bootstrap-state has run15:40
benjiboundless confidence15:41
fwereaderogpeppe, ah, ok -- funny, it seemed like benji was seeing bootstrap-state falling over15:41
rogpeppefwereade: it's a very short-lived agent :-)15:41
fwereaderogpeppe, I'd expect the conf to be somewhere still around15:41
rogpeppefwereade: no, i'm fairly sure it gets removed after use15:41
fwereaderogpeppe, that's a bit annoying if it happens even on failure15:41
fwereadebenji, heh :(15:42
rogpeppefwereade: yeah. tbh, we should probably do a set -e at the top of cloudinit15:42
fwereadebenji, my current intention is not to leave this desk until I have sane tools15:42
rogpeppefwereade: i've thought that a few times before but never actually done it15:42
niemeyerI'm getting a failure on CmdSuite.TestDestroyEnvironmentCommand15:42
niemeyerIs that known?15:42
fwereadeniemeyer, no, I don't think so; bug please :)15:43
niemeyer[LOG] 51.40394 DEBUG api: <- error: read tcp 127.0.0.1:59023: use of closed network connection15:43
niemeyer[LOG] 51.40395 ERROR api: error receiving request: read tcp 127.0.0.1:59023: use of closed network connection15:43
niemeyer[LOG] 51.41987 ERROR rpc: client protocol error: unexpected EOF15:43
niemeyerfwereade: Cool15:43
benjifwereade: stay hydrated15:43
fwereadeniemeyer, it's usually the bit just above that's important15:43
fwereadebenji, cheers :)15:43
niemeyerfwereade: I don't see anything obvious15:44
fwereadeniemeyer, but if nothing failed before that rogpeppe will be interested ;)15:44
rogpeppehe will indeed :-)15:44
niemeyer:)15:45
niemeyerOpening a ubg15:45
niemeyerbug15:45
niemeyerAh, hold on15:45
niemeyer... Panic: unauthorized (PC=0x42ED71)15:45
rogpeppeniemeyer: trunk tests pass for me15:45
niemeyerThat's the issue15:46
rogpeppeniemeyer: that *might* have something to do with it :-)15:46
niemeyer/home/niemeyer/src/launchpad.net/juju-core/testing/mgo.go:20515:46
niemeyer  in MgoReset15:46
rogpeppeniemeyer: ah, i think i know what the issue is15:46
rogpeppeniemeyer: i've been thinking i could put it off, as it didn't seem to raise its head in normal tests15:46
rogpeppeniemeyer: the problem, i *think*, is that in the tests the API server runs as the same mongo user that the client connects as15:47
rogpeppeniemeyer: and the client changes its password immediately after connecting15:48
rogpeppeniemeyer: which invalidates the API server connection15:48
niemeyerrogpeppe: I see15:49
rogpeppeniemeyer: the answer is to have the API server connect as a different user (for instance, by creating machine 0 and setting the mongo password for the machine-0 entity)15:49
rogpeppeniemeyer: but that buggers up lots of tests15:49
rogpeppeniemeyer: so i left it on the back burner until i had a bit more time15:49
niemeyerrogpeppe: So a race.. okay15:50
rogpeppeniemeyer: yeah15:50
rogpeppeniemeyer: i saw the issue when i lowered the state/watcher refresh interval15:50
niemeyerfwereade: Done your suggestions15:50
niemeyerfwereade: On the publish command15:50
niemeyerfwereade: I also ended up just fixing InferURL so it handles the no-series case properly15:51
fwereadeniemeyer, lovely, thanks, I'll try to take a look tonight15:51
fwereadeniemeyer, <315:51
niemeyerfwereade: Rather than risking a change in behavior later15:51
niemeyerfwereade: Thanks15:51
fwereadeniemeyer, yeah, +115:51
rogpeppefwereade: there's one time that i don't have the _id to hand16:09
fwereaderogpeppe, oh yes?16:10
rogpeppefwereade: which is when i fetch everything at the beginning16:10
rogpeppefwereade: i guess i'll just duplicate the entity docs to give myself an id16:10
fwereaderogpeppe, can't you just fetch all the other stuff after fetching the entities that use them?16:11
rogpeppefwereade: i'd prefer to avoid n round trips16:12
rogpeppefwereade: although actually, now you come to mention it16:12
rogpeppefwereade: hmm no16:13
rogpeppefwereade: we really *should* avoid all those round trips if we can16:13
rogpeppefwereade: i guess i'll just leave it as a todo16:13
fwereaderogpeppe, ah! yes, I see... sorry about that then16:13
fwereaderogpeppe, embed  the doc in a wrapper with _id?16:13
fwereaderogpeppe, when getting all at once I mean16:13
rogpeppefwereade: depends whether bson embedded types work properly or not, i suppose16:14
rogpeppefwereade: unfortunately it doesn't work16:19
fwereaderogpeppe, bah16:19
fwereaderogpeppe, very well, do as you must16:20
rogpeppefwereade: i'll go with the round trips for now16:20
TheMueAnyone interested in spending me a second LGTM: https://codereview.appspot.com/832204316:29
fwereadeniemeyer, does http://paste.ubuntu.com/5689862/ look like something you'd know about?16:31
niemeyerfwereade: Looking17:00
niemeyerfwereade: Hmm17:01
niemeyerfwereade: I can see the issue, but I don't know why it's happening17:02
niemeyerfwereade: If I run "bzr log -v --long" here17:02
niemeyerfwereade: i get stuff like this:   bzr/bzr.go                     bzr.go-20130403210030-zt48wpftmd160ox3-217:02
niemeyerfwereade: IOW, there's a digest after the filename17:03
niemeyerfwereade: The output you're observing doesn't have the digest17:03
niemeyerfwereade: It's easy to fix the test by dropping the empty space17:03
niemeyerfwereade: Slightly curious about why bzr is showing different results for that, though17:04
fwereadeniemeyer, it's what I see when I do `bzr log -v --long` here17:04
niemeyerfwereade: It doesn't matter in this specific test, either way17:04
fwereadeniemeyer, cool17:04
niemeyerfwereade: Right, so it's a mystery why the output string in that test doesn't show it17:04
niemeyerfwereade: But again, it doesn't matter.. the test is juts checking that the given file was added17:05
fwereadeniemeyer, no, the weird version is what I see17:05
niemeyerfwereade: To verify that the commit behavior was basically sane17:05
fwereadeniemeyer, yeah -- the other bits of the test look like they do that ok17:05
niemeyerfwereade: I suggest just dropping the space, on the basis that we don' care17:05
niemeyerdon't17:05
fwereadeniemeyer, ok, I'll bug it and assign it to myself, I don't want to get myself too distracted :)17:06
niemeyerfwereade: Btw, these multiple line outputs are handy.. I haven't seen it working in practice very often :)17:06
niemeyerfwereade: I can quickly shoot a one-liner17:06
niemeyerfwereade: Hold on17:06
fwereadeniemeyer, tyvm17:07
fwereadeniemeyer, I've found them pretty hendy in general17:07
fwereadeniemeyer, er, handy17:07
niemeyerfwereade: https://codereview.appspot.com/8521043/17:24
fwereadeniemeyer, sorry, but I don't see the revision-id in that output17:25
fwereadeniemeyer, that's also a (surprising) part of the problem17:26
niemeyerfwereade: Oh, indeed.. I missed that17:26
fwereadeniemeyer, maybe I have a hideously outdated bzr?17:26
niemeyerfwereade: I have no idea then17:26
niemeyerfwereade: It looks like --long was ignored entirely17:26
niemeyerfwereade: Oh, hold on17:26
niemeyerfwereade: I probably mixed the options.. I may some defaults locally.. just a sec17:27
niemeyerfwereade: Yep17:27
niemeyerfwereade: --show-ids17:27
niemeyerfwereade: Can you please run log with --show-ids there and see if it helps?17:27
fwereadeniemeyer, bingo17:27
niemeyerfwereade: Okay, so..17:28
fwereadeniemeyer, revision-id: fwereade@gmail.com-20130408082602-zu4ypfo9xoexns3317:28
niemeyerfwereade: The test already had --show-ids.. :)17:28
=== deryck is now known as deryck[afk]
niemeyerfwereade: Does it show the id next to the file as well?17:28
fwereadeniemeyer, yeah17:28
niemeyerfwereade: So there's something funny going on there17:29
niemeyerfwereade: Why isn't that working in the test?17:29
niemeyerfwereade: It already uses -v --long --show-ids17:29
fwereadeniemeyer, oh crap, my branch isn't up to date17:30
niemeyerfwereade: Hah. Tim fixed it17:30
niemeyerfwereade: Mystery solved17:30
fwereadeniemeyer, heh17:30
fwereadeniemeyer, thanks, sorry to distract17:30
niemeyerfwereade: np17:31
rogpeppenext CL in pipeline, if anyone cares to have a look: https://codereview.appspot.com/8487044/17:38
=== BradCrittenden is now known as bac
rogpeppefwereade: ping18:57
fwereaderogpeppe, pong19:20
rogpeppefwereade: i just noticed that the testing charm name contained the series, and wondered why19:20
rogpeppefwereade: like cs:series/series-wordpress19:20
rogpeppefwereade: it looked redundant, but i imagine there's a good reason19:21
rogpeppefwereade: it confused me for a while - i thought i'd mucked something up19:21
fwereaderogpeppe, convenience somewhere... possibly getting an easy and unique ident string?19:21
rogpeppefwereade: i'd've thought the charm name would be enough19:21
rogpeppefwereade: (within the series, of course)19:22
fwereaderogpeppe, IIRC it came up when we were adding series support somewhere19:22
fwereaderogpeppe, exact provenance blurs slightly19:22
rogpeppefwereade: yeah, it's quite a recent change, so i thought you might remember19:22
rogpeppefwereade: (bzr ascribes credit to you :-])19:23
fwereaderogpeppe, that's as close as I can get without hunting down the revision19:23
rogpeppefwereade: ok, np19:23
bachi rogpeppe, i know its late for you but can i bug you for a second?20:10
rogpeppebac: sure20:10
bacrogpeppe: cool.  so i've had to change one of the API return structs to change one of the existing entry names and to add another field.  tests all updated and pass.20:11
rogpeppefwereade: if you're still around, i could really do with a second review of https://codereview.appspot.com/8510043/ (i'm about to need it as a second dependency). it's pretty trivial.20:11
rogpeppebac: ok20:11
bacrogpeppe: i rebuilt and reinstalled everything.  multiple times20:11
rogpeppebac: ok20:11
bacrogpeppe: but when i get the data back on the client side it looks like the old version20:12
bacrogpeppe: i've blown away $GOPATH/bin and pkg.  rebuilt, reinstalled, killed my S3 bucket20:12
rogpeppebac: you are bootstrapping with --upload-tools --fake-series precise, right?20:12
baci'm at wits end20:12
bacno20:12
bacjust --upload-tools20:12
bacjuju bootstrap --upload-tools20:12
rogpeppebac: what series are you deploying from?20:12
bacprecise20:13
bacer, wait20:13
bacrogpeppe: my host is quantal.  default-series in environments.yaml is precise20:13
rogpeppebac: what API field have you changed?20:14
bacrogpeppe:  ServiceGetResults s20:14
rogpeppebac: perhaps you could push the branch, and i'll have a look20:15
bacrogpeppe: here's a diff: http://paste.ubuntu.com/5690437/20:15
rogpeppebac: in general though, it's *really* worthwhile bootstrapping with --fake-series precise --upload-tools20:16
=== deryck[afk] is now known as deryck
rogpeppebac: otherwise when you deploy a precise charm, it will fall back to using the old version of the tools20:16
bacrogpeppe: i'll try that.  it smells environmental20:16
bacrogpeppe: ok, but like i said i changed buckets20:16
rogpeppebac: yeah, but this is *within* an environment20:17
bacrogpeppe: right, but where would it get an old version of the tools if not from the bucket?20:17
bacunless i misunderstand20:17
rogpeppebac: from the public bucket20:17
bacer20:18
rogpeppebac: the one that gets used even if you don't use --upload-tools20:18
bacoh20:18
rogpeppebac: that shouldn't be used on the bootstrap node though20:18
rogpeppebac: but will be used on any other nodes that don't match the bootstrapped node's series20:19
bacrogpeppe: ok, i'm trying again with fake-seriese20:19
rogpeppebac: ok, crossed fingers :-)20:19
fwereaderogpeppe, LGTM20:26
rogpeppefwereade: ta!20:26
bacrogpeppe: --fake-series worked.  thanks.20:32
rogpeppebac: yay20:32
rogpeppe!20:32
bacrogpeppe: is that indicative of a problem that should be investigated?20:32
rogpeppebac: no20:33
rogpeppebac: it's the solution to a problem that was :-)20:33
rogpeppebac: and fwereade is working on a way to make it less easy to muck up that way20:33
rogpeppebac: please share in juju-gui the fact that everyone should use --fake-series20:34
bacrogpeppe: your comments above made it sound like it shouldn't be required.  fine by me...i can proceed!20:34
* thumper settles down to read email21:05
fwereadethumper, hell, I have not yet done my self-promised email burst today21:22
thumper:)21:22
* thumper is replying to the placement thread...21:22
rogpeppethumper: hiya21:35
thumperhi rogpeppe21:35
thumperrogpeppe: still up I see21:35
rogpeppethumper: yeah, trying to unblock the gui folks21:36
fwereaderogpeppe, I'm thinking I really should rename that -- we may be faking it up now, but cross-compiling should not actually be too far out of reach21:42
rogpeppefwereade: i'm not sure. it might be an elusive goal unfortunately21:42
fwereaderogpeppe, meh, probably not worth it then21:44
rogpeppefwereade: i'd prefer to have a wildcard tools fallback actually21:44
rogpeppefwereade: if matching against the series directly fails, try "linux"21:44
rogpeppefwereade: then make upload-tools upload to series==linux21:45
rogpeppefwereade: i mean, we do have cross-compilation currently *almost*21:46
fwereaderogpeppe, it is just a dev tool anyway, I guess, we can be a bit freer about changing things21:51
rogpeppefwereade: yeah21:51
thumperwhat is the purpose of the machine nonce?21:53
fwereadethumper, there's a window between provisioning a machine and recording it as provisioned in state21:54
fwereadethumper, if the provisioner goes down in that window, it will start a new machine21:55
fwereadethumper, and we'll end up with two instances running the "same" machine agent21:55
fwereadethumper, the nonce allows the machine agent to be sure that it's the official one before it starts messing around changing passwords and deploying units and stuff21:56
thumperso what happens when it isn't the official one/21:56
thumper?21:56
fwereadethumper, it stops immediately and waits for the provisioner to reap the instance21:58
* thumper nods21:58
* thumper still thinks there is a problem with the hook logger21:58
thumperrogpeppe: did you want to talk about it, or should I just keep it on the list21:59
* fwereade is not entirely comfortable with it but doesn't quite have the headspace21:59
* fwereade will watch conversations with interest though21:59
rogpeppethumper: let's talk about it21:59
thumperrogpeppe: ok, hangout?22:00
rogpeppethumper: ok22:00
thumperit'll make it hard for fwereade to watch :)22:00
* thumper starts one22:00
rogpeppefwereade: feel free to join the fun22:00
thumperhttps://plus.google.com/hangouts/_/8078c0dcc36c791886bcd025be7df7b497f49c00?authuser=0&hl=en22:00
rogpeppethumper: one little question, if i'm using bzr pipes, can i rename a branch in the pipeline without breaking the pipe links?22:37
thumperrogpeppe: not really22:37
rogpeppethumper: ok, thought so, but thought i'd check.22:37
rogpeppethumper: another thing: how can i link an existing branch into a pipeline?22:38
thumperrogpeppe: add-pipe referencing the existing branch22:38
rogpeppethumper: ah, ok22:38
rogpepperight that's me done for the day22:46
rogpeppei've got quite a few reviews out if anyone cares to look22:47
rogpeppeg'night all22:48

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