/srv/irclogs.ubuntu.com/2013/10/07/#juju-dev.txt

jpdsAnyone awake?05:41
axwjpds: I am awake, something I can help with?05:56
achandrahello. I appear to be having the toughest time trying to connect to my swift object-store on devstack via juju06:05
achandraive pulled up the url of the object-store via keystone catalog06:05
achandrahowever, once i create the juju-dist and upload the meta-data06:06
achandrai still get an un-authorised connection06:06
achandraideas?06:06
rogpeppemornin' all07:16
rogpeppehmm, i left juju running the local provider over friday and saturday and ended up with a 2.1GB log file07:18
rogpeppeha, it's all my fault07:20
rogpeppeit panicked 47717 times before i killed it yesterday07:21
axwmorning rogpeppe07:22
axwheh :)07:22
rogpeppeaxw: hiya07:22
rogpeppeaxw: i was just glancing at  https://codereview.appspot.com/14465045/07:26
rogpeppeaxw: where are the sftp urls coming from?07:26
axwrogpeppe: environs/sshstorage07:26
axwits URL method returns sftp:// URLs07:26
rogpeppeaxw: ah, because the URLs were only expected to be used from a shell script?07:26
axwrogpeppe: I was expecting them to not be used at all (or only for logging)07:26
rogpeppeaxw: ah, i see07:26
axwbut yeah, they get used by wget or http.Get in some cases07:26
rogpeppeaxw: also, not quite sure what you mean by "problematic for the trunk implementation"07:26
rogpeppeaxw: do you just mean the trunk branch of juju?07:26
axwrogpeppe: yeah, sorry, badly worded07:26
axwI just mean that the current code is broken07:26
axwand this change fixes it by wrapping it in httpstorage07:26
rogpeppeaxw: np, i *thought* so, but i wasn't sure07:26
axwthus hiding the invalid URL method away07:26
rogpeppeaxw: right, now i think i have enough info to review the change properly :-)07:27
axw:) thanks07:27
rogpeppeaxw: hmm, i'm getting a chunk mismatch error07:28
rogpeppeaxw: could you repropose please?07:28
axwyup, just a moment07:28
axwrogpeppe: do you think it'd be worthwhile using gotype instead of "go build" in .lbox.check? might speed things up a bit ... can you think of any downsides?07:34
axwmaybe it's just my crappy laptop's the problem07:34
rogpeppeaxw: is there a gotype command?07:34
axw(repropose is still chugging along)07:34
axwrogpeppe: yeah, somewhere in go.tools07:34
rogpeppeaxw: you're running go tip then, right?07:35
axwcode.google.com/p/go.tools/cmd/gotype07:35
axwrogpeppe: nope, why?07:35
axwgo/types works on 1.107:35
axwit didn't for a bit, but rsc fixed that07:35
rogpeppeaxw: hmm, what go version are you using?07:35
axwrogpeppe: 1.1.107:35
rogpeppeaxw: axw: i'm pretty sure it's not go build that takes all the time07:35
rogpeppeaxw: hmm07:35
rogpeppeaxw: on my machine it's go vet that takes forever07:36
axwrogpeppe: I didn't even verify. okay, probably not worthwhile then07:36
rogpeppeaxw: but...07:37
rogpeppeaxw: i thought that was only since go vet became external (since go 1.1.1) and started using go types07:37
rogpeppeaxw: it takes about 30s to run on my machine07:37
axwrogpeppe: minutes here, but I have a crappy laptop07:38
axwrogpeppe: propose finished07:38
rogpeppeaxw: i mean "go vet" takes 30s07:38
rogpeppeaxw: propose can take minutes for me too07:38
axwhmmk07:38
axwI suppose it doesn't matter too much, forces me to think a bit harder before proposing junk ;)07:39
rogpeppeaxw: i really wish it was faster07:44
rogpeppeaxw: BTW i'm *still* seeing a chunk mismatch :-|07:44
axwack07:45
axw:(07:45
axwhmm07:45
TheMuemorning07:45
axwrogpeppe: where does this chunk mismatch show up?07:45
axwmorning TheMue07:46
rogpeppeaxw: https://codereview.appspot.com/14465045/diff/1/provider/null/environ.go07:46
rogpeppeaxw: one mo, maybe i didn't reload the main CL page07:46
rogpeppeaxw: ignore me07:46
axwrogpeppe: I think so07:46
axwnps07:46
rogpeppeaxw: it works fine07:46
rogpeppeaxw: does anything use sshstorage other than the null provider?07:47
axwrogpeppe: nope07:47
axwonly the null provider, only for bootstrap07:47
rogpeppeaxw: oh yes, one thing that's been niggling at me for a while: how do you ensure that the bootstrap storage object is eventually closed?07:51
rogpeppeaxw: as doesn't it contain a live ssh connection?07:51
axwrogpeppe: you don't/can't  at the moment07:51
axwyep07:51
rogpeppeaxw: ah, so it just leaks07:52
axwrogpeppe: yes, but this is only ever done from the command line07:52
rogpeppeaxw: currently...07:52
axwhmm07:53
rogpeppeaxw: we shouldn't assume that though - it's ok for people to use this stuff directly from Go.07:53
axwrogpeppe: if this is moved to something non-interactive, I think we'll have bigger problems07:53
axwlike, how to input sudo passwords07:53
rogpeppeaxw: ha, yes07:53
axwbut yeah I understand07:53
rogpeppeaxw: although that's not a problem if it's already running as root, i guess07:53
axwtrue07:54
axwactually07:54
axwnot true07:54
axwit's the target machine that matters07:54
axwand you typically wouldn't allow root ssh07:54
rogpeppeaxw: how does the target machine know you're running as root?07:55
axwrogpeppe: anyway, I guess this would be solved by adding a Close method to Environ07:55
axwrogpeppe: ?07:55
rogpeppeaxw: yes, but that's actually a very big change07:55
axwrogpeppe: null provider bootstrap takes two parameters: host, and login user07:56
rogpeppeaxw: well, actually, it would probably need a close method on both Environ and Storage07:56
axwrogpeppe: login user is the current user on the source machine by default, but you'd probably need to change that to something non-root07:56
rogpeppeaxw: sure07:57
rogpeppeaxw: we could probably use a comment in the code just to let people know that this has been thought about07:59
axwrogpeppe: okey dokey, will add one08:00
mattywmorning folks, any reason why the maximum length of a summary using lbox is so low?08:05
rogpeppemattyw: i think it's an lp restriction08:06
rogpeppemattyw: ridiculous, ain't it?08:06
rogpeppeaxw: just to clarify: what code is actually using the storage URL?08:07
axwrogpeppe: I didn't follow all the way to the end, but it's related to generating simplestreams metadata08:08
axwif the tools exist on the target, but the metadata doesn't, it grabs the tools off the target and generates the metadata from them08:08
rogpeppeaxw: ah! so it uses the URLs inside the metadata08:09
axwrogpeppe: it uses them to obtain the tools, to generate the metadata08:10
rogpeppeaxw: probably the other way around, no? it doesn't need to obtain the tools to generate the metadata, but the metadata will contain URLs which need to point to the tools08:10
rogpeppeaxw: (but i haven't looked at the code...)08:10
axwrogpeppe: I think the juju CLI is fetching them off the target, generating the metadata at the CLI end, then uploading the metadata08:11
axwbecause there's nothing running on the target necessarily08:11
axw(in this case there isn't)08:11
axwthe metadata includes information about the tools like file size and SHA256 sums08:11
axwso the tools need to be obtained to generate it08:11
rogpeppeaxw: hmm, so how can tools exist on the target without metadata? i thought we'd moved away from legacy tools storage...08:14
axwrogpeppe: I could only surmise that it was a botched bootstrap08:15
axwit got part way through downloading the tools, but didn't get as far as generating/uploading the metadata08:16
axwrogpeppe: then a second bootstrap found the tools on the remote machine, but no metadata08:16
axwso it decided to fetch them and generate the metadata then (and failed)08:16
rogpeppeaxw: hmm08:16
rogpeppeaxw: perhaps that's the logic that needs to be fixed08:17
axwrogpeppe: perhaps, though I think it's prudent to hide invalid URLs away anyway08:17
axwsomething else may come along wanting to use it08:18
rogpeppeaxw: well, the difficulty i have with this is that URLs are supposed to be usable from other machines08:18
axwthough TBH, it's still flawed - they're only valid for the lifetime of the current process08:18
rogpeppeaxw: and this only makes sense if the URL is only used locally08:18
* axw nods08:18
mattywfwereade, I'm about to set that mp as needing review, are there any bugs or blueprints I should link it to?08:37
fwereademattyw, nothing for that work specifically -- IIRC there's an "identity" blueprint somewhere that the followups will probably apply to though08:38
fwereademattyw, if you'd like to capture your requirements as a bug and link that it can't hurt though08:39
fwereademattyw, always nice to be able to look back and figure out why we write the code in the first place ;)08:39
mattywfwereade, ok will do08:40
rogpeppeaxw: i'm having difficulty finding the logic that fetches the tools off the target, generating the metadata at the CLI end08:41
rogpeppeaxw: istm that to do that it would need to List the storage, but there are very few places that do that08:42
axwrogpeppe: I'll have a hunt08:43
axwrogpeppe: in the mean time, https://codereview.appspot.com/1448304308:43
rogpeppeaxw: argh, darn chunk mismatch again08:44
axwah wtf08:44
axwrogpeppe: the copying/listing/etc. is in environs/sync08:45
axwbrb08:45
mattywfwereade, https://codereview.appspot.com/14389043/ thanks :)08:51
axwrogpeppe: in environs/tools/simplestreams.go, generateMetadata08:51
axw"        if fetch && t.Size == 0 {"08:51
rogpeppeaxw: yeah, i'm seeing it now08:52
rogpeppeaxw: in sync.SyncTools08:52
fwereademattyw, tyvm08:53
mattywfwereade, no, thank you08:53
axwrogpeppe: ideally that code should use the Storage08:53
axwrogpeppe: but that would require a means of getting from a URL back to a storage name08:53
rogpeppeaxw: hmm, yeah08:54
rogpeppeaxw: unless a tools.List contained an expanded version on Tools which also held the original name, i guess08:55
axwyeah, or that08:56
axwrogpeppe: I reproposed that CL08:57
* fwereade breakfast08:57
rogpeppeaxw: istm that part of the problem is that we're in a half-way house between two schemes - we've got two forms of metadata (the simple streams stuff and the storage list) and the latter doesn't have enough information to fulfil the former's requirements09:11
rogpeppeaxw: that is, the real problem here is that toosl.ReadList isn't returning information on the hashes & sizes of the contents of the storage09:12
axwrogpeppe: yeah, because that would incur quite a lot of overhead for the usual case where the metadata already exists09:13
axwbut yes, there's information loss there09:13
axwthe storage names in particular09:14
rogpeppeaxw: what would happen if we just passed in fetch==false ?09:18
axwrogpeppe: the metadata would be written out with Size=0, and no hash. I *think* jujud gets unhappy about that09:20
rogpeppeaxw: that's what i was wondering09:20
rogpeppeaxw: it's good to think through stuff in this area, i think, especially because we want to solve lp:#121958209:23
_mup_Bug #1219582: bootstrap is slow, lookups tools multiple times <canonistack> <juju-core:Triaged> <https://launchpad.net/bugs/1219582>09:23
rogpeppeit's kind of ironic that s3 does actually provide hash and size info, although i think it's only the md5 hash09:25
rogpeppeaxw: does it actually make a difference if the metadata exists on the target machine?09:30
rogpeppeaxw: it looks to me as if the logic in SyncTools ignores any metadata in the target09:31
axw_rogpeppe: it ignores it for copying the tools over, but it's used to decide which tools tarball to install into an instance... not sure what happens if it's not there09:32
rogpeppeaxw: which means that we'll always read all the tools in both the target and source storage; i may have missed something though.09:32
* axw_ tries09:32
=== axw_ is now known as axw
axwrogpeppe: that doesn't sound right, let me check09:32
mattywfwereade, ping?09:35
axwrogpeppe: SyncTools only does a storage.List on the source and target, and copies across what's missing from source. It grabs metadata from target if it exists, then generates metadata for what's missing by fetching the tools back off the target09:35
rogpeppeaxw: ah, no WriteMetadata does it, i see09:35
rogpeppeaxw: we really need some sort of local storage cache09:35
fwereademattyw, pong, sorry, got distrcted half way through09:36
axwrogpeppe: yeah, that could certainly help09:36
mattywfwereade, no problem, just going through the next stage of the id stuff you said about adding the owner as an argument to AddService09:36
fwereademattyw, ah, yes09:37
mattywfwereade, that seems to break A LOT of stuff (all just mechanical changes because now there's a new argument) so I just wanted to check that this was what you wanted09:37
fwereademattyw, I can't think of another way to do it, I'm afraid09:39
mattywfwereade, ok no problem, just wanted to check we had the right idea before we fix all the things we broke09:39
fwereademattyw, yeah, thanks for checking :)09:39
mattywfwereade, I guess this is one reason for it being the next step - the number of lines in the diff is likely to be huge09:40
fwereademattyw, indeed, probably best to do as little as possible beyond that09:41
rogpeppemattyw, fwereade: this may be a silly idea, but i just thought i'd mention the possibility:09:48
rogpeppemattyw, fwereade: rather than add "owner" arguments to lots of methods in State, we could potentially have a facade in front of State that knows the current owner09:48
fwereaderogpeppe, we're not planning to give anything except services owners at the moment09:49
rogpeppefwereade: even still - i just wonder if it might be a more economical approach, given that any given API client will be acting on  behalf of a particular user09:50
fwereaderogpeppe, and fwiw that facade is really the api server, anyway, isn't it?09:51
rogpeppefwereade: sure, but we're about to change many many calls into state.State.09:51
fwereaderogpeppe, expand a little maybe? ISTM that it's going to be even harder to do that09:51
rogpeppefwereade: type StateWithOwner {*state.State; User string}09:52
rogpeppefwereade: then StateWithOwner.AddService calls State.AddServiceOwnedBy09:53
fwereaderogpeppe, so we s/State/StateWithOwner/ everywhere?09:53
fwereaderogpeppe, not 100% sure that wins us anything09:54
rogpeppefwereade: i'm not sure either; worth thinking through though, i think.09:54
fwereaderogpeppe, ISTM that the only benefit of what you propose is that we need to make fewer test changes09:55
fwereaderogpeppe, but that each of those tests gets a bit more abstracted from what it's testing09:55
rogpeppefwereade: test changes are a big cause of churn and time taken09:55
fwereaderogpeppe, I think that's an argument for a better way to define test fixtures, not an argument for messing with the code itself09:57
rogpeppefwereade: there are 231 calls to AddService09:57
fwereaderogpeppe, how many places is AddService really used? once? twice?09:57
rogpeppefwereade: once09:58
rogpeppe:-)09:58
fwereaderogpeppe, ensuckening the code to accommodate shitty tests is not a win IMO09:58
fwereaderogpeppe, I think the actual answer is in an AddService params struct10:00
mgzjam: HEY10:00
mgzer, caps10:00
jamhey mgz10:00
mgzmumble?10:01
fwereaderogpeppe, because I don't think this will be the only change like this10:01
fwereaderogpeppe, eg it's crazy that we create a service and set its config in different txns10:01
fwereademattyw, ^^ - since you have to hit them all anyway, a params struct might not be a bad idea10:02
mattywfwereade, yeah just thinking about that, most of the changes seem to be in tests that don't need to know about an owner, this would be one way of getting around that10:02
rogpeppefwereade: a params struct seems reasonable10:06
fwereademattyw, mmmmm I worry a little that we actually *do* want an owner on every service10:06
fwereademattyw, the other possibility is to replace all of those with a helper in state/testing that adds a service with an implicit user-admin owner10:06
mattywfwereade, but in the tests where we don't need to test against an owner it seems odd to pass one in10:06
rogpeppefwereade: i'm thinking along those lines10:07
rogpeppefwereade: i'm wondering about something like testing.Deploy10:07
rogpeppefwereade: which would do the AddTestingCharm, add some number of units and return the results.10:07
rogpeppefwereade: which would hopefully match reasonably well to the requirements of lots of tests10:08
TheMuefwereade: you pushed the ec2 and openstack Prepare() in. shall i continue now with the others?10:08
fwereademattyw, rogpeppe: I'd really not like to use the Deploy terminology anywhere we don't have to, it's pretty much crack10:08
fwereadeTheMue, that would be awesome, yes please10:09
rogpeppefwereade: really?10:09
TheMuefwereade: ok10:09
fwereaderogpeppe, yeah -- AddService and AddUnit are sane, promoting AddService+AddUnits to a primitive of its own is just silly at the model level10:09
fwereaderogpeppe, fine, it's nice at the UI level10:10
rogpeppefwereade: istm that it's one of the best know juju commands and has reasonably well known semantics, so when we see it in a test we know what's happening10:10
fwereaderogpeppe, but the command itself is about the user experience, not the underlying model10:10
fwereaderogpeppe, when we're testing the model I would prefer that we not mix in concepts from higher levels10:11
rogpeppefwereade: i'm interested in making our test code smaller here10:11
rogpeppefwereade: how many testing AddService calls are *not* followed by an AddUnit ?10:11
rogpeppefwereade: and how many are not preceded by an AddTestingCharm call?10:12
fwereaderogpeppe, the charm case is somewhat stronger than the unit one, I think10:13
rogpeppefwereade: i sometimes toy with the idea of allowing tests to set up stuff with some kind of textual DSL10:14
fwereaderogpeppe, and I would prefer that mattyw implement a small step in a helpful direction than that he get lumbered with the burden of analysing and fixing additional context 230 tims10:14
rogpeppefwereade: sure, sorry, i've diverted here10:14
fwereaderogpeppe, something like that would be great, I agree10:14
rogpeppeaxw: how have you been reproducing lp#1235717 ?10:17
_mup_Bug #1235717: null provider bootstrap fails with error about sftp scheme <juju-core:In Progress by axwalk> <https://launchpad.net/bugs/1235717>10:17
mattywfwereade, rogpeppe sorry - internet went down10:18
fwereademattyw, no worries10:19
mattyw(maybe not the whole thing - but certainly my view of it)10:19
rogpeppemattyw: np - you only missed my ramblin10:19
rogpeppeg10:19
rogpeppemattyw: i think the conclusion is: add a params struct10:19
fwereaderogpeppe, mattyw: wait a mo10:19
fwereaderogpeppe, mattyw: a params struct is, independently a somewhat good idea, but I think I'd rather see a trivial AddService helper in state/testing, that takes the same args and just sets user-admin10:20
rogpeppefwereade: seems reasonable - then we can make the call itself panic if it gets an empty owner, perhaps10:21
fwereaderogpeppe, mattyw: I wouldn't say no to a params struct as well ofc10:21
fwereaderogpeppe, yeah, something like that10:21
fwereaderogpeppe, mattyw: we *will* need to make sure juju still works on services with empty owner fields10:21
fwereaderogpeppe, mattyw: but the StateSuite(?) has references to all those collections anyway, so we can mess them up in the DB and check they still work10:22
fwereaderogpeppe, mattyw: however once service owners are part of the model I think it would be foolish to allow them to remain unset in normal use10:22
fwereaderogpeppe, matty: probably not a panic though, this stuff will be happening in the api server10:23
rogpeppefwereade: unless, for backward compatibility purposes, we say that blank means admin10:23
fwereaderogpeppe, internally we do10:23
fwereaderogpeppe, no excuse for muddying up the interface10:23
rogpeppefwereade: agree10:24
mattywfwereade, rogpeppe ok, just want to make sure I understand this right: First step is to make a helper in state/testing for addservice, this will call the addservice function as is but also set the admin user inside the service?10:27
rogpeppemattyw: i think so, yes10:27
mattywand all the calls to addservice in the tests should use this new helper? or only the ones that need the owner set?10:28
rogpeppemattyw: all the calls, i think10:34
rogpeppefwereade: looking at the null provider, it's a pity that "null" needs to be quoted in environments.yaml. i wonder if we should've gone with the "nil" provider instead...10:35
axwrogpeppe: sorry, was afk10:39
axwyes, I have reproduced10:39
rogpeppefwereade: do you think we should print admin-secret in the output of juju init?10:39
fwereaderogpeppe, ha, we should be dropping those really, shouldn't we10:39
rogpeppeaxw: i wanted to reproduce for myself - was wondering how you did10:40
axw1. bootstrap. 2. stop juju processes; remove /etc/init/juju*, everything in /var/lib/juju *except* storage/tools/releases/*; bootstrap again10:40
rogpeppefwereade: well, it's potentially useful10:40
fwereaderogpeppe, who for?>10:40
rogpeppefwereade: but then again there are probably other sources for info on provider settings10:40
axwrogpeppe: going to make/have dinner, I'll write down the steps properly a bit later10:40
rogpeppefwereade: anyone that wants to have a known admin secret login10:40
rogpeppeaxw: thanks10:40
rogpeppefwereade: for example if i want to use the web GUI interface on one of my environments currently, i have to type in something like c1c4cb509044b524b35585f0fb259646 which isn't ideal10:42
fwereaderogpeppe, pasting it in isn't so hard though :)10:44
jamdimitern: TheMue: standup?10:45
jamhttps://plus.google.com/hangouts/_/calendar/am9obi5tZWluZWxAY2Fub25pY2FsLmNvbQ.mf0d8r5pfb44m16v9b2n5i29ig10:45
mattywrogpeppe, fwereade does the helper want to go in state/testing or in juju/testing in the JujuConnSuite (alongside addtestingcharm for example)11:02
rogpeppemattyw: the latter11:03
mattywrogpeppe, make more sense, ok thanks11:03
dimiternfwereade, rogpeppe: https://codereview.appspot.com/1448604311:07
* TheMue => lunch11:15
natefinchso, are the dev releases of juju released to the public or are they internal only?11:16
jamnatefinch: dev releases are public11:16
jamnatefinch: 1.15.1 is in the public s3 bucket, the hp storage container, tec.11:17
jametc11:17
natefinchjam: interesting.... I haven't built a windows installer for it, so I'm assuming the installer on the website is still 1.1411:17
dimiternnatefinch, that's still the "stable" release11:18
natefinchdimitern: ahh, ok, so the dev releases are public, but don't replace the latest stable release11:19
dimiternnatefinch, I think so yeah11:19
natefinchdimitern: basically wanted to make sure I wasn't falling down on the job by not creating an installer for 1.15.11:20
dimiternnatefinch, I think there still should be an installer for every release, even dev ones11:20
dimiternjam, fwereade ? ^^11:20
natefinchdimitern: that would seem to make sense.11:20
jamnatefinch: we would still want a 1.15 installer, otherwise we can't test that it is suitable for being a stable release.11:27
jamideally it would just be part of the release process11:28
jambut the need for a Windows machine makes it slightly tricky11:28
jamnatefinch: if you could easily set it up with an automated "ec2" sort of script, then someone like curtis could kick it off after cutting the tarball11:28
natefinchjam: You mean a script to create the installer?  I certainly could, but I don't know about "easily" :)  It's sort of an 8 step process if you 're starting from a bare machine and need to build both the juju client and the installer from it.11:31
jamnatefinch: so the idea would be you *could* do a Windows ec2 instance so that anyone on the team could have access to it.11:31
jamIt would be possible to bundle the final image11:31
jamso you don't have to do all the setup yet-again11:31
jamI used that in the past for other projects and it was ~ok, not great, but reasonable11:32
natefinchjam: ahh, yeah that would certainly be easier than scripting the install of Go and all that :)11:32
natefinchjam: dang, I was thinking I should just write a charm to do it... but of course that won't work on windows :)11:34
rogpeppehmm,11:43
rogpeppeaxw: one problem is: tools.WriteMetadata actually ignores any metadata that it finds that corresponds with tools already in the target storage11:44
rogpeppeaxw: if we fixed that, the problem would disappear for almost all the time11:45
rogpeppeaxw: and make sync tools faster too11:45
dimiternrogpeppe, fwereade, review poke11:50
rogpeppedimitern: sorry, looking11:51
axwrogpeppe: hmm yeah, I guess it should check if size/sha256 are initialised or not, and use that to decide to blat over the top12:06
rogpeppeaxw: it only appends to toolsList12:07
dimiternaxw, size/sha256 are never initialized if you upgrade from 1.14 btw12:07
rogpeppeaxw: whereas it actually want to update it if there are some entries in existingMetadata that are also in toolsList already12:08
rogpeppes/want/wants/12:08
rogpeppeaxw: "Merge in existing records" is a bit of an overstatement12:09
rogpeppeaxw: i wonder if things might work fine if we just ignored the List entirely.12:12
rogpeppeaxw: and just merged the metadata12:12
axwrogpeppe: I don't really get it. In the scenario I've been investigating, len(existingMetadata) == 012:13
rogpeppeaxw: really? interesting.12:13
axwrogpeppe: i.e. the tools tarballs are in storage, but no the metadata json12:14
axwnot*12:14
rogpeppeaxw: i tried a scenario where there *is* existing metadata, but we still have the same problem12:14
axwah12:14
axwrogpeppe: can you please describe it?12:14
rogpeppeaxw: i bootstrapped with the null provider (to localhost)12:15
rogpeppeaxw: (the bootstrap failed because i'm already running the local provider, but it doesn't matter in this case)12:15
rogpeppeaxw: then i tried bootstrapping again, and saw the "sftp:" problem12:15
rogpeppeaxw: and i can verify that the metadata is all there12:16
axwah ok12:16
axwrogpeppe: that's probably a more plausible explanation for what Bjorn reported :)12:16
rogpeppeaxw: and looking at WriteMetadata, i can't see how any hash/size metadata for existing tools in the target storage would get into the metadata without re-reading them12:17
rogpeppeaxw: because the toolsList argument won't have that metadata and the "Merge in existing records" loop doesn't change any entries in that argument12:18
rogpeppeaxw: yes - it'll happen every time12:18
axwrogpeppe: ahh, because it's appending, not replacing...12:18
rogpeppeaxw: so i'm wondering whether a better approach is just to ignore tools in the target bucket if they don't have metadata12:18
rogpeppeaxw: yes12:19
axwok12:19
axwI understand now, thanks12:19
rogpeppeaxw: it appends only if it doesn't find any existing entries12:19
rogpeppeaxw: the only down side i can currently see about ignoring tools with no metadata is that we may redo work, re-copying tools that were already copied12:20
rogpeppeaxw: which will happen if the upload process was aborted half way through12:20
hazmatg'morning (relatively) i think the  recent simplestreams/tools rejigger broke what used to be a  correct stackoverflow answer that's still being referenced/used, if anyone has a minute it would be worth correcting http://askubuntu.com/questions/327177/cannot-bootstrap-due-to-precise-images-in-regionone-with-arches-amd64-i38612:23
rogpeppedimitern: reviewed12:29
dimiternrogpeppe, cheers12:29
dimiternfwereade, poke12:29
dimiternrogpeppe, I wouldn't mix tags into state - they're an api concept12:31
axwrogpeppe: seems to me that SyncTools should be calling WriteMetadata with only "missing", not targetTools+missing12:40
axwand whatever's where already should be assumed to be correct already12:41
axws/where/there/12:41
axwi.e. only update metadata for things that are copied12:41
=== gary_poster|away is now known as gary_poster
rogpeppedimitern: Tag is implemented on State objects12:45
dimiternrogpeppe, but not used otherwise for queries and such12:45
rogpeppedimitern: does that matter here? this an error message for users12:46
rogpeppedimitern: i guess users don't really see tags either though12:46
dimiternrogpeppe, well12:48
dimiternrogpeppe, yeah I suppose it'll reduce the code a bit12:48
rogpeppedimitern: yeah, i think just a simple list of agents would work just as well12:49
rogpeppeaxw: i've been wondering about the "abort half way through problem" and perhaps this is a stupid idea, but what if we took the metadata as primary, and always copied that *first*?12:50
rogpeppeaxw: and avoid the use of Storage.List entirely12:51
rogpeppeaxw: well, we couldn't avoid it entirely12:51
rogpeppeaxw: but we'd only use it to find tools that the metadata mentions that don't show up in the list12:51
* dimitern => lunch12:51
rogpeppeaxw: if we do things that way, the first thing SyncTools would do would be to merge the metadata12:52
rogpeppeaxw: and then it would copy across the actual tools data as necessary12:53
axwrogpeppe: if it then fails while copying tools, we're going to have a bad time, no?12:53
axwnext time we do a sync12:54
axwit'll think the target has everything12:54
rogpeppeaxw: no, because we make sync actually check the List12:54
rogpeppeaxw: at least, i *think* it could work ok12:57
rogpeppeaxw: it'll potentially be a problem if we *haven't* done the sync12:57
axwrogpeppe: it sounds viable to me. I'd probably want to talk to wallyworld before doing it tho13:00
rogpeppeaxw: for the time being, i think we should just ignore the target tools list13:01
rogpeppeaxw: i'm really not very keen on the localhost storage wrapper solution13:01
axwrogpeppe: I'm not keen on the fact that URL() is there at all13:02
rogpeppeaxw: it's there because we need it13:02
rogpeppeaxw: it's our way of telling a remote cloud-init shell script how to get the juju tools13:03
axwrogpeppe: yeah I know the general use case, but I mean, it doesn't make sense for sshstorage13:03
axwsince it's transient13:03
rogpeppeaxw: perhaps you could make the method return an error?13:03
axwso I suppose you're right13:04
axwyeah13:04
axwit should return an error, and we should change this stuff to never call it13:04
rogpeppeaxw: yeah13:04
rogpeppefwereade: do you know if there's still a case where we do any kind of "best-fit" matching to the available tools? even juju bootstrap now picks an exact match, no?13:06
axwrogpeppe: by "ignore the target tools list", do you mean only update metadata for copied tools?13:08
rogpeppeaxw: i mean that we make our copy decisions based on the source and target metadata only13:09
rogpeppes/we make/we should make/13:09
rogpeppeaxw: that way we ensure that we always have the hash and size metadata13:10
=== gary_poster is now known as gary_poster|away
fwereaderogpeppe, I don't think there's any ore guessing,no13:15
rogpeppefwereade: eh?13:16
rogpeppefwereade: ah, i see13:16
rogpeppemore13:16
fwereaderogpeppe, ah, yeah, sorry13:16
rogpeppefwereade: i'm just pondering the implications of the change i was discussing with axw above13:16
axwrogpeppe: I'm clearly missing something (possibly wine related). I think we should just make this change: in SyncTools, in the call to WriteMetadata, pass "missing" instead of "targetTools"13:16
rogpeppefwereade: to copy metadata *first*, then the tools themselves13:17
fwereaderogpeppe, that sounds bad?13:17
axwrogpeppe: because WriteMetadata seems to expect toolsList to contain only changed tools13:17
axwrogpeppe: as in, "newToolsVersions" being one-to-one with toolsList13:18
rogpeppeaxw: looking again13:18
fwereaderogpeppe, offhand it seems that we'd be able to read metadata for missing tools if we did that13:18
rogpeppefwereade: we would, but i'm not *sure* that's a bad thing13:18
rogpeppefwereade: i'll just look for axw, back in a bit13:19
* fwereade is becoming vexed by these blasted daywalking mosquitos13:20
rogpeppeaxw: i don't think that works13:22
rogpeppeaxw: because missing is derived from Storage.List, and hence contains no metadata13:23
rogpeppeaxw: i mean, no hash/size metadata13:23
axwrogpeppe: no, missing is copied, and the copy generates the size/hash13:24
rogpeppeaxw: oh, that's sneaky and underdocumented :-)13:25
axw;)13:25
rogpeppeaxw: hmm, that *might* have the effect i'm after; still thinking13:26
rogpeppeaxw: it means the argument to WriteMetadata now means something quite different13:27
axwrogpeppe: I'm not so sure - WriteMetadata seems to treat it as "changed" tools13:27
axwI think the name is just a bit generic13:27
rogpeppeaxw: "The metadata from toolsList is already present"13:27
rogpeppeaxw: hmm, but i guess it is present *now*13:28
rogpeppeaxw: um, no13:28
rogpeppeaxw: it's *some* of what's present now13:28
axwrogpeppe: yeah, some is present, some is new13:28
rogpeppeaxw: it's what we've just copied, but none of what was there originally13:29
axwbut going down the function, it then treats the whole lot as being new?13:29
axwrogpeppe: it currently includes what's there already13:29
axwSyncTools calls WriteMetadata(targetTools+missing)13:29
rogpeppeaxw: yes - and that's very deliberate13:29
=== gary_poster|away is now known as gary_poster
rogpeppeaxw: the logic is trying to create a metadata file that includes both what we've just copied *and* what was in the bucket before13:30
rogpeppeaxw: and our problem is that it can't know what was in the bucket before without reading it13:30
rogpeppeaxw: rather, it can't know the metadata for previous bucket contents without reading them13:31
rogpeppeaxw: heh, istm that WriteMetadata could pass metadataStore to generateMetadata and then we wouldn't have any of this problem13:34
rogpeppeaxw: you said earlier that we don't know the tools storage name given the Tools struct13:35
rogpeppeaxw: but of course that's not true - we do!13:35
axwrogpeppe: assuming the URLs are all relative to the same tools dir we do13:35
rogpeppeaxw: we don't need to use the URL13:36
axwah13:36
axwright13:36
axwit's statically defined13:36
axw:)13:36
rogpeppeaxw: it's tools.StorageName(tools.Version)13:36
axwStorageName13:36
axwforgot about that13:36
axwrogpeppe: I'm still convinced that WriteMetadata should only be called with missing. "The metadata from toolsList is already present" means, to me, size/sha256 is precomputed for the tools in the list13:37
axwwhich is clearly not the case for the existing tools13:37
rogpeppeaxw: and we should probably change sync.copyTools to avoid using URL too13:38
rogpeppeaxw: if that's the case, then the current logic ignores any tools that are present before sync-tools is called, AFAICS13:39
rogpeppeaxw: the question is "already present"... where?13:39
axwrogpeppe: howso? newToolsVersions will only contain things that were copied; existingMetadata may contain additional things13:40
rogpeppeaxw: i'm thinking about the case where we've aborted a bootstrap half way through13:40
axwrogpeppe: that currently won't copy over again on the second sync, right?13:41
rogpeppeaxw: (and i've also just realised why it's a really bad idea to re-read the target storage to work out its hash and size, but that's another story)13:41
rogpeppeaxw: currently it won't copy over again on the second sync, but it *will* generate metadata for the files it copied across last time13:42
axwyeah. if "missing" were passed through, that'll still happen due to the "fetch"13:42
rogpeppeaxw: really?13:43
* rogpeppe looks again13:43
rogpeppeaxw: istm that fetch will only affect stuff that's in toolsList already13:44
axwrogpeppe: but toolsList is appended to13:44
axwwith things in existingMetadata13:44
rogpeppeaxw: yes, but i was talking about tools that do not currently exist in the target storage metadata13:45
rogpeppeaxw: because we copied the tools but didn't get around to updating the metadata13:45
rogpeppeaxw: and currently we *will* generate metadata for those tools, even though they don't have metadata, i think13:45
axwrogpeppe: yes, we do13:46
axwrogpeppe: in the copy13:46
rogpeppeaxw: sorry, we do what?13:46
axwrogpeppe: we do generate metadata for them13:46
axwas you said13:46
rogpeppeaxw: and changing to use missing will mean that we don't, right?13:48
axwrogpeppe: it will if it's not in the target storage's metadata13:48
rogpeppeaxw: really?13:48
axwah wait13:49
axwno13:49
axwI get it now13:49
* axw sighs13:49
rogpeppeaxw: i think part of the difficulty with analysing this is that WriteMetadata mixes concerns quite a bit13:50
rogpeppeaxw: did you just lose contact?13:54
axw_rogpeppe: I think, instead, we should change newToolsVersions to map[string]*tools.Tools, and store each item from toolsList in that13:54
axw_yeah13:54
rogpeppeaxw_: last thing i saw from you was "axw sighs"13:54
axw_rogpeppe: then replace any item in it if Size==013:54
axw_<rogpeppe> axw: i think part of the difficulty with analysing this is that WriteMetadata mixes concerns quite a bit13:55
axw_<axw> rogpeppe: and the wine13:55
axw_<axw> but yes13:55
rogpeppelol13:55
=== axw_ is now known as axw
axwrogpeppe: something like this: http://paste.ubuntu.com/6205035/14:02
rogpeppeaxw: BTW it's fine to use a version.Binary as a map key14:04
rogpeppeaxw: (i know the original didn't, but just saying)14:04
axwrogpeppe: thanks, will keep it in mind14:05
rogpeppeaxw: that looks plausible, but i had in mind a slightly more radical solution; one mo14:06
rogpeppeaxw: something like this (as primitives) http://paste.ubuntu.com/6205057/14:08
rogpeppeaxw: then most of the awkward logic in WriteMetadata could be abstracted out to where it belongs, in SyncTools14:09
rogpeppeaxw: because there is no reason AFAICS why WriteMetadata should be so bound up with merging stuff14:10
axwrogpeppe: that sounds like a good idea to me14:12
axwit's a little complicated at the moment14:13
rogpeppeaxw: here's a version with some doc comments, to give a slightly better idea of what i'm thinking of: http://paste.ubuntu.com/6205080/14:14
rogpeppeaxw: FromList could probably be MetadataFromList14:16
natefinchjam, rogpeppe, mgz, fwereade, dimitern, TheRealMue: anyone up for an easy one?  https://codereview.appspot.com/14326044/14:16
rogpeppenatefinch: looking14:17
natefincharosales: ping14:18
rogpeppeaxw: would you mind going forward with that? i know it's a serious diversion from your original fix :-)14:19
axwrogpeppe: yep, I'm happy with that14:20
axwgetting pretty late now, I'll pick it up in the morning14:20
rogpeppefwereade: i'd appreciate it if you took a glance at my above paste, as applied to tools.WriteMetadata14:20
rogpeppeaxw: thanks14:20
rogpeppeaxw: it was useful you were able to stay on14:20
axwrogpeppe: thanks for enduring my nonsense :)14:21
rogpeppeaxw: not at all14:21
rogpeppeaxw: i was nonsensical too14:21
arosalesnatefinch, pong14:22
axwalrighty, I'm off to prod llgo a bit. ttyl14:22
natefincharosales: it has come to my attention that's there.s a 1.15.1 release for Juju but no one has asked me for a windows installer for it... that seems like something we should fix14:23
natefinchrogpeppe: I actually should update dependencies.tsv as well, since that change to ec2 requires a change to goamz (which is already in goamz)14:25
rogpeppenatefinch: you should :-)14:25
natefinchrogpeppe: done, committed, proposed14:26
arosalesnatefinch, I think we are only doing osx and windows installs for stable releases14:27
arosaless/installs/clients/14:27
natefincharosales: as jam pointed out to me this morning, we can't know if it's stable if we don't test the dev release :)14:27
arosalesnatefinch, good point :-)14:28
arosalesnatefinch, could you sync with sinzui on the process for creating windows clients and testing them?14:29
natefincharosales: sure thing14:29
arosalesnatefinch, thanks.14:29
sinzuinatefinch, we can talk later today. I know how you build it.14:30
natefinchsinzui: sure thing.  Just wanted to make sure it didn't fall through the cracks, especially given we've occasionally had windows-only problems.14:30
arosalesnatefinch, sinzui I expect it to be a little ad hoc atm until sinzui's team can get some time to build out the testing matrix with tooling.14:31
rogpeppenatefinch: reviewed14:32
sinzuiarosales, I got Lion + xcode 5 + 1.14.0 to install on my mac, but I cannot get 1.14.1 to install. I do reproduce the same error seen in my untested pull request. We need to look at vars.go and learn what changed between 1.14.0 and 1.14.1 I also confirm 1.15.1 fails the same way for me: https://github.com/mxcl/homebrew/pull/2276214:33
sinzuinatefinch, I did test azure deploys and upgrades. That is why the release went out at 3AM my time14:34
arosalessinzui, thanks for working on  osx.  are you able to build locally?14:35
arosalesjuju-core devs any hint on the error, "src/launchpad.net/juju-core/juju/osenv/vars.go:40: undefined: Home"14:36
arosaleswhen building juju-core14:36
=== amithkk_ is now known as amithkk
sinzuiarosales, 1.14.0 can. 1.14.1+ cannot.14:37
=== amithkk is now known as Guest99228
arosalessinzui, same error when building locally?14:37
fwereaderogpeppe, sorry, is that paste just about primitives with which to rewrite WriteMetadata?14:37
mgzarosales: you need vars_linux.go in that directory?14:37
rogpeppefwereade: yes, pretty much14:37
rogpeppefwereade: and in the process fix a current problem with it14:38
mgzarosales: should have a func Home() in it14:38
rogpeppefwereade: (as well as the fact that it's very hard to reason about currently, because it does about 4 different things at once)14:38
fwereaderogpeppe, yeah, I am having that problem as I try to parse exactly how they'd be used14:39
fwereaderogpeppe, they do look sensible at first blush though :)14:39
rogpeppefwereade: they'd be called from SyncTools, which would use MergeMetadata as appropriate14:40
rogpeppefwereade: at the moment a significant portion of WriteMetadata is really about syncing tools14:40
fwereaderogpeppe, that sounds like a good way to go offhand14:41
rogpeppefwereade: thanks. i think it's preferable to papering over the problem, cf. https://codereview.appspot.com/14465045/14:42
fwereaderogpeppe, heh, the description there surely raises an eyebrow or two14:43
fwereaderogpeppe, don't we have a filesystem storage implementation anyway if we're just on localhost?14:43
rogpeppefwereade: indeed14:43
rogpeppefwereade: my brain hurts14:44
rogpeppefwereade: erm, no we don't have a filesystem storage implementation for the bootstrap storage on the remote machine14:46
rogpeppefwereade: that CL uses a local HTTP listener to talk to the remote storage via ssh14:47
fwereaderogpeppe, heh, so presumably we don't have one for the local provider either?14:47
rogpeppefwereade: i think we do14:48
fwereaderogpeppe, we should probably be using that where it makes sense then tbh14:48
rogpeppefwereade: this is only an issue when bootstrapping the null provider, i think14:48
fwereaderogpeppe, hmm, I could have sworn we added file:// url handling for exactly that case14:49
rogpeppefwereade: sorry, not quite sure where you're coming from here14:49
rogpeppefwereade: how would that help when the files we're referring to are the other end of an ssh connection with no juju binaries at the other end?14:49
rogpeppes/are the/are at the/14:50
mattywfwereade, I'm wondering If I should track the juju id stuff as a blueprint to help us keep track of it?14:50
mattyw(sorry to interupt)14:50
fwereaderogpeppe, I was just thinking of what happens purely at the far end -- so we do surely need the SSH storage to write to it, but unless it's actively *easier* we should probably just be using the filesystem to get them when we're actually running on the remote machine14:51
rogpeppefwereade: that's what we do, i think14:51
fwereademattyw, just a sec let me have a quick look, I couldhave sworn there wasone already14:51
fwereaderogpeppe, ok, then I completely misunderstood something14:52
rogpeppefwereade: the URL in this case is only used locally as a result of WriteMetadata and SyncTools being a bit crackful14:52
rogpeppefwereade: my suggestion is to make SSHStorage.URL return an error14:53
rogpeppefwereade: (to make it clear that there really is no URL)14:53
rogpeppefwereade: and to change the SyncTools logic so it never uses the storage URL (it really doesn't need to)14:53
fwereaderogpeppe, ah, ok, if getting URLs out of SyncTools solves the problem I'm 100% behind that14:54
rogpeppefwereade: i'm pretty sure it does, yes14:54
fwereaderogpeppe, and indeed it seems there really is no sensible URL14:54
fwereaderogpeppe, great, thanks14:55
rogpeppefwereade: hence the refactoring suggestion above. axw had a suggestion for tweaking the existing logic, but i really would prefer to clean things up in this area14:55
rogpeppefwereade: as it's taken both of us about a day to understand the problem, and i know that i won't understand the code when i go back to look at it again tomorrow14:56
fwereaderogpeppe, that sounds smart to me -- I guess axw will be looking into it tonight?14:56
rogpeppefwereade: yes, he said he'd take it forward14:57
sinzuiDoes anyone have a  1.14.1 and 1.15.1+ setup that they can test upgrade-juju on openstack. My testing of this always fails14:58
arosalesmgz, thanks for the suggestion. Is this a manual add or something we are missing in out builds (re vars_linux.go)15:04
mgzno. I'm just trying to help you diagnose why your tree is broken15:04
jamespagesinzui, I'm trying to test that; but I'm getting confused about how 'juju-tools' endpoint should be configured in our keystone instance15:07
jamespage1.14.1 works with a juju-tools URL "http://10.98.191.34:8080/v1/AUTH_79699f6f71e245b186720f1e2bc03cf0"15:08
jamespage1.15.1 does not like that15:08
sinzuijamespage, I tried tools-url: https://swift.canonistack.canonical.com/v1/AUTH_526ad877f3e3464589dc1145dfeaac60/juju-dist/tools15:09
sinzui^ that is per wallyworld.15:09
sinzuiI can see the released tools are found on canonistack and hp by appending juju-dist/tools to the public-bucket url15:10
jamespagehmm15:10
natefinchmgz, arosales: about the broken code.... he's talking about building on OSX - which I think we don't have an implementation of Home for15:11
jamespagesinzui, nope15:11
arosalesmgz, ah gotcha15:11
jamespagejuju fails to find them and tries to revert back to s315:11
jamespagewhich is not accesible in my env15:12
mgznatefinch: seems unlikely, unless there's some weird build stuff, the logic is just if "windows" else linux15:12
arosalesnatefinch, mgz, I thought sinzui said he also saw the error locally . .  .15:12
arosalesmgz, natefinch I would have to defer to sinzui on the error, but sinzui may be busy atm with juju-tools15:13
natefinchmgz: There's a vars_windows.go and a vars_linux.go .... there's no var_darwin.go15:13
mgzthere's no reason it should just use linux though15:14
natefinchmgz: the implementation is the same, yes.  It's a bug in the code15:14
arosalesmgz, sorry for losing the context15:14
arosalesmgz, here is the background https://github.com/mxcl/homebrew/pull/2276215:14
arosalesmgz, roughly trying to build on osx via brew.15:15
mgzseems like that just needs fixing then15:15
arosalesnatefinch, do you see a similar error for windows client builds?15:15
sinzuijamespage, Does this look like a sane listing? I think it is. https://pastebin.canonical.com/98610/15:15
mgzeasy enough for anyone with a mac to test on15:15
natefincharosales: no, it's OSX-only15:15
arosaleshuh that is interesting15:16
jamespagesinzui, yeah - thats what mine looks like15:16
natefincharosales: it's a very clear cut problem... we have code for this Home function that compile sfor Windows and for OSX, but we forgot about OSX15:16
arosalesnatefinch, ah15:16
natefincharosales: where we == me15:16
arosales:-)15:17
sinzuijamespage, I places the tools there with "juju sync-tools -e public-tools-canonistack --dev"15:17
arosalesnatefinch, mgz sinzui or myself can test on osx if you have a something you would like us to try15:17
sinzuijamespage, maybe we need a trailing / in the tools url?15:17
natefincharosales: I can make a fix... should I make it based on 1.14?  Or should I just make it based on 1.15 and we can make sure it gets into 1.16?15:19
arosalesnatefinch, my preference would be 1.15.1 based so we can target 1.1615:20
natefincharosales: mine too :)15:20
* arosales guesses it would need to fit trunk and then also be applied to the 1.15.1 branch15:20
sinzuimgz, sorry, just caught up to want you are looking at . I just annotated the module. I can test, but I need to reboot :( The change does explain why 1.14.1+ is broken, though why osx/darwin/bsd/posix doesn't behave like gnu/posix is puzzling15:21
arosalessinzui, I think natefinch is going to work on a fix15:25
natefinchsinzui: it's just a build tag on one of the files that says "compile this file only for linux" when it should have said "compile this file for any OS that isn't Windows"15:26
sinzuinatefinch, fab, I am schooled.15:27
natefinchsinzui: I managed to add support for windows while simultaneously effectively removing support for OSX ;)15:27
natefinchmgz: is there magic I need to do to rename a file so bzr keeps the revision history?15:28
sinzuinatefinch, I suspected that since win is the main difference between 1.14.0 and 1.14.1.15:28
mgznatefinch: `bzr mv`?15:28
natefinchmgz: ahh of course15:30
natefinchmgz: https://codereview.appspot.com/1449604315:33
mgzlooking15:34
mgzwhat is that magic...15:35
mgznatefinch: so, why was it failing, given the two files didn't have build constraints before15:37
natefinchmgz: the _<os>.go is effectively a build tag... so before we had _linux and _windows15:38
natefinchmgz: now I replaces the _linux one with an in-file build tag that specifies !windows15:38
mgzthat's all to magic15:38
mgzI am not liking the build package docs I'm reading...15:38
mgz*too15:39
natefinchmgz: standard go way of doing build tags ... I actually really like the _<os>.go because it makes it very clear from just the name of the file where it'll build15:39
natefinchmgz: like _test.go15:39
natefinchnatefinch: I sorta wish _!windows.go  would work15:39
mgzugh15:40
natefinchmgz: ^^ heh, tagging myself15:40
natefinchmgz: not really... but almost15:40
natefinchmgz: it would also be more clear if rietveld made the name change more obvious15:44
mgzthe launchpad diff is clear enough15:45
mgz(I checked that)15:45
natefinchmgz: yeah, that one's much better in this case15:45
sinzuirogpeppe, Is the status of this issue correct? Are we committing to fix it by 1.16.0? I think the landing implies it is no longer critical https://bugs.launchpad.net/juju-core/+bug/123327815:59
_mup_Bug #1233278: juju test suite is not isolated <juju-core:In Progress by rogpeppe> <https://launchpad.net/bugs/1233278>15:59
rogpeppesinzui: i don't think we're committing to fix it by 1.16 - it no longer seems to be causing quite so many problems16:00
rogpeppesinzui: i think we can lower the pri to High, but please check with fwereade16:00
sinzui^ fwereade what say you? ^16:01
mattywrogpeppe, fwereade I'm nowhere near done but is this the kind of thing you guys had in mind for the addservice helper? https://code.launchpad.net/~mattyw/juju-core/add-owner-to-service/+merge/18965416:18
rogpeppemattyw: yeah, looks reasonable. i *think* i'd be happier with the owner last in the params, as it seems the least important thing, but that's all16:21
mattywrogpeppe, in the actual call to addservice?16:21
rogpeppemattyw: yeah16:21
mattywrogpeppe, probably a good idea, I've just shoved it there at the moment so I can get the compiler to generate a list of things I need to fix :)16:22
rogpeppemattyw: i think it would do that anyway16:23
rogpeppemattyw: as you're adding an extra arg16:23
mattywrogpeppe, I just meant I just put it anywhere in the list without thinking about order16:24
rogpeppemattyw: ah, no probs16:24
jamespagesinzui, http://paste.ubuntu.com/6205614/16:26
jamespageI can't get my tools to pickup using tools-url16:26
jamespagesinzui, I can't get the tools-url to override anything afaict16:33
sinzuijamespage, thank you for confirming it sin't just me. I reported a bug and will continue to look for a configuration that is accepted16:33
jamespagesinzui, the other problem is that a keystone juju-tools entry that was compat with 1.14.1 is not compat with 1.15.116:33
jamespageand vica versa16:34
sinzuijamespage, When I tested this *before* release. I uploaded tools to a testing area. There were no aws tools at the time. I could deploy using the deb I built. You can still see my testing files at https://region-a.geo-1.objects.hpcloudsvc.com/v1/60502529753910/juju-dist16:35
jamespagesinzui, I'm wondering if because there is a juju-tools in my keystone catalog, the local client won't use the tools-url in the environments.yaml16:36
* sinzui ponders :443 as a factor16:36
jamespagesinzui, yeah - I don't use https for swift for this openstack deployment16:36
jamespagesinzui, actually my streams data looks like fud one second16:39
jamespagesinzui, hmm16:41
jamespagesinzui, well thats interesting16:44
jamespagesinzui, I juju destroy-environment'ed again16:44
jamespageand it was OK16:44
jamespageodd16:44
sinzuijamespage, you can upgrade-juju on an openstack?16:44
jamespagesinzui, I'll have to rollback to confirm that - one second16:45
jamespagesinzui, I can upgrade a bootstrap node16:48
jamespagemy bug from the other day is back where the bootstrap node does not start any more units...16:49
jamespagestill don't know how exactly that resolved itself16:49
sinzuijamespage, I have seen just the bootstrap node upgrade. The agents failed though.16:49
* sinzui looks for log and updated bug about that16:50
natefinchfwereade: care to talk about your comments on my rootdisk branch?16:54
natefinchdimitern, rogpeppe, mgz, fwereade: just got what looks to be a sporadic test failure on the bot - FilterSuite.TestUnitRemoval  from inside the uniter17:00
mgznatefinch: can you file a bug and requeue?17:00
natefinchwill do17:00
dimiternnatefinch, I think I've seen that before, please make sure there's no existing bug about it17:08
natefinchdimitern: I saw another bug about a sporadic failure in uniter, but the tests and logs seemed different, so I filed a new bug.17:18
dimiternnatefinch, ok, thanks17:19
natefinchAnyone know if we're allowed to expense parking fees at the airport for travel to the sprint?17:20
rogpeppefwereade, natefinch, dimitern: https://codereview.appspot.com/1439504318:07
rogpeppenatefinch: sorry, i don't know18:08
rogpeppethat's me for the night18:08
rogpeppeg'night all18:08
natefinchrogpeppe: I'll take a look.  g'night18:08
rogpeppenatefinch: thanks18:51
=== hatch is now known as lbox
=== lbox is now known as hatch
fwereadenatefinch, heyhey20:03
natefinchfwereade: howdy20:05
fwereadenatefinch, about root-disk20:06
fwereadenatefinch, it's not a problem with your branch per se, just a problem I noticed while I was looking at it ;)20:06
natefinchfwereade: I gathered as much. I'm fine with fixing it, was just unclear what the fix was20:07
fwereadenatefinch, I *think* it's just to drop the fields that aren't always set, and move the hardwareCharacteristics method out into a func that acceptsinstanceType, rootDisk, (more?)20:08
fwereadenatefinch, just so it doesn't look like hardwareCharacteristics is a meaningful operation on ec2Instance20:08
fwereadenatefinch, the only place we create them is in StartInstance anyway, so it shouldn't be onerous20:09
* fwereade waits to hear what he's missed :)20:09
fwereadenatefinch, am I blithering?20:10
natefinchfwereade: ha, I missed the fact that hardwareCharacteristics is only called from inside StartInstance. You're right, it's crack to store that data on the ec2Instance only to return it one line down in the same function20:10
fwereadenatefinch, I think it's a hangover from when we thought it would be reasonable to ask an instance for the details of its hardware, but it's fiddlier than one might hoe20:11
fwereadeer, hope20:12
natefinchfwereade: totally makes sense.20:13
natefinchfwereade: well that's an easy fix20:13
fwereadenatefinch, cool, consider that LGTM with the change then20:13
natefinchfwereade: cool20:14
fwereadenatefinch, oh, a thought20:14
fwereadenatefinch, possibly we should keep the existing minimum size in play?20:14
natefinchfwereade: like don't let people set disk less than 8G?20:15
fwereadenatefinch, I'm in no way wedded to the idea, but I'm a bit worried people might use =0 as shorthand for "I don't really care" without meaning "I *really* don;t care"20:15
fwereadeiyswim20:15
fwereadenatefinch, we guarantee we'll do at least as well as they ask20:16
fwereadenatefinch, so an 8G result does match anything less than that20:16
fwereadenatefinch, but actively giving them much less might cause avoidable problems20:17
natefinchfwereade: I can see someone wanting to keep their root disk as small as possible and then using the spare for a different partition (or something... ).. The image itself only uses like 1.5G or so from what I've seen20:17
fwereadenatefinch, OTOH, if someone *does* ask for 4G they probably mean it20:17
fwereadeindeed20:17
natefinchfwereade: I think treating 0 as 8G is fine20:18
fwereadenatefinch, great, sgtm20:18
fwereadethanks20:18
natefinchfwereade: but if they ask for 1G... we should do our best and fall over if that turns out to be impossible20:18
natefinchfwereade: cool20:18
fwereade+120:18
* fwereade is happy about the new place... it has a CRT TV,and it emerges that my dreamcast still works, as does the lightgun20:19
natefinchhaha awesome.  Loved the dreamcast :)20:19
fwereadehouse of the dead 2 remains flat-out awesome :)20:20
fwereadesometime I will see if MSR really is better than any of the project gotham games20:21
fwereadeI'm a bit afraid in case it isn't20:21
natefinchI don't think I ever played it.  Played one of the gotham ones... forget which20:22
fwereadebasically the same deal20:22
fwereadeexcept they left the traffic islands in where they took them out of the gotham games20:22
natefinchhuh funny20:23
fwereadeI thought they were great, wasn't the same without them20:24
natefinchwe played a ton of NHL2k*, NFL2k* and soul calibur20:27
natefinchwhich is sorta funny, since I don't even particularly like watching sports20:28
fwereadenatefinch, the only sports game I ever really got into was... nhlpa on the megadrive maybe?20:52
natefinchfwereade: nice.20:53
natefinch fwereade: that was pretty much the last time I played sports games.  American Football is surprisingly interesting to play, though in video games it often comes down to "give the ball to the guy who can run faster than anyone else"20:55
natefinchfwereade: though probably games have come a long way in the past decade ;)20:55
fwereadenatefinch, heh, I am always a little bit embarrassed that I've never remotely figured out american football20:56
fwereadenatefinch, probably just takes the right videogame though20:56
natefinchfwereade: there's a ton to it, but most of it is "Get the ball past the other line of guys and dance around in their home base"20:57
fwereadenatefinch, clear goals are important ;)20:57
natefinchfwereade: I'm getting a problem with livetests.go .. can't tell if it's my fault or something external:20:58
natefinch[LOG] 85.45774 DEBUG juju.environs.simplestreams fetchData failed for "http://127.0.0.1:56349/test-bucket/tools/streams/v1/index.sjson?AWSAccessKeyId=x&Expires=1696711806&Signature=6T43LEGnZYvE04zTygifGAi5uxA%3D": The specified key does not exist.20:58
natefinch[LOG] 85.45776 DEBUG juju.environs.simplestreams cannot load index "http://127.0.0.1:56349/test-bucket/tools/streams/v1/index.sjson?AWSAccessKeyId=x&Expires=1696711806&Signature=6T43LEGnZYvE04zTygifGAi5uxA%3D": invalid URL "http://127.0.0.1:56349/test-bucket/tools/streams/v1/index.sjson?AWSAccessKeyId=x&Expires=1696711806&Signature=6T43LEGnZYvE04zTygifGAi5uxA%3D" not found20:58
natefinch/home/nate/code/src/launchpad.net/juju-core/environs/jujutest/livetests.go:874:20:58
natefinch    c.Assert(err, gc.ErrorMatches, ".*missing machine nonce")20:58
natefinch... error string = "no \"raring\" images in test with arches [amd64]"20:58
natefinch... regex string = ".*missing machine nonce"20:58
natefinchOOPS: 36 passed, 6 skipped, 1 FAILED20:58
natefinch--- FAIL: TestEC2 (8.01 seconds)20:58
fwereadenatefinch, heh, I have a horrible feeling that those were a casualty of the simplestreams change... are they all doing UploadFakeTools?20:59
fwereadenatefinch, except waitno20:59
fwereadenatefinch, they still ought to "work" with fake tools, they'll just go wrong on the instances21:00
fwereadenatefinch, regardless I'm a bit surprised it's looking for raring... does the test specify that explicitly?21:01
natefinchfwereade: trunk works, must be something my change broke21:03
fwereadenatefinch, ok, so,  those log messages shouldn't be the problem21:04
fwereadenatefinch, we don't expect .sjson in this context21:04
fwereadenatefinch, yeah, some confirmation: ec2.TestImagesData does indeed lack raring-amd6421:10
fwereadenatefinch, but I am growing more and more confused about where raring is coming from21:13
natefinchfwereade: merging code in from trunk fixes the problem21:13
fwereadenatefinch, ah cool :)21:13
fwereadenatefinch, bbs21:13
natefinchfwereade: interesting: ./juju bootstrap --constraints root-disk=4G21:21
natefinchERROR cannot start bootstrap instance: cannot run instances: Volume of size 4GB is smaller than  snapshot 'snap-5c0cb05f', expect size >= 8GB (InvalidBlockDeviceMapping)21:21
fwereadenatefinch, ha21:22
natefinchfwereade: I guess that answers that21:23
* fwereade pretends he was all foresighted and clever earlier21:23
natefinchhaha21:23
adam_ghi.. the release notes for 1.15.0.1 WRT logging are a bit unclear.   where is the correct place to look for logs on a unit now?  or are hooks no longer logged locally if no log config has been set pre-deploy?21:45
natefinchadam_g: you're on at an awkward time for Juju devs. Our New Zealand guy who is usually on now is on vacation this week. I'm about to head out, and I'm not sure about the answer to your question.  There's a couple Australian guys that should come on in the next few hours to answer your question - axw and davecheney21:58
natefinchadam_g: fwereade is european time, so it's pretty late for him, but he might be able to answer that question... he was afk last I knew, though21:59
adam_gnatefinch, thanks. found this: https://lists.ubuntu.com/archives/juju/2013-September/002998.html which explained it well. might be worth linking that from any release notes out there21:59
natefinchadam_g: ahh, cool21:59
natefinchadam_g: heh, that's from the New Zealand guy who is on vacation.  I must have missed that email.22:00
adam_gright22:01
adam_gme too :)22:01
natefinchGotta run, dinner's ready.  Glad you found the answer to the question.22:04
bigjoolsmorning!22:26
davecheneyyay end of daylight savings22:51
davecheneynow we get a sensible crossover with the US22:51

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