/srv/irclogs.ubuntu.com/2014/10/24/#juju-dev.txt

wallyworld_sinzui: i'll have code using the new stream based tarball directories ready today - are you able upload tarballs to "juju/tools/released" so that sync-tools will work? no urgency, just letting you know00:15
sinzuiwallyworld_, I cannot upload anything to Jerff00:15
sinzuiwallyworld_, I control a script that can get assets from Lp00:15
sinzuiWe have limited powers, but we will be changing this because Lp wont be providing win-agents that we make. We need a new delivery mechanism to Jerff or a better pickup mechanism00:16
wallyworld_ok, no worries. i can still commit the code - it will still find tools using the existing index files; i doubt people will care if sync-tools on trunk is broken for a few days00:17
sinzuiwallyworld_, I misunderstood. we can NEVER replace an agent. We can remove if it is malign. That is why I keep hammer the point about controlling the archives. Alarms will sound and trees will be reverted if a checksum ever changes.00:21
sinzuiwallyworld_, Until juju agent version can state their origin or build or packaging version, we will never be able to fix an agent00:22
wallyworld_true. that's somewhat orthogonal to the current changes though isn't it?00:23
sinzuiwallyworld_, it is. sync-tools cannot be fixed by steal, we require a release00:23
sinzuistealth00:23
sinzuinor ca we fix a broken ppc64el witha  rebuild00:24
wallyworld_sure. it's just that now sync-tools needs to be taught that it needs to look in a different place to find the tarballs00:24
wallyworld_it currently looks in a "releases" dir00:24
wallyworld_it needs to look in a dir named after the stream00:24
sinzuiright00:24
wallyworld_that's the change i'm making and which means sync-tools will be broken until tarballs are placed in "released" on streams.canonical.com00:25
wallyworld_everything else about the changes i'm doing doesn00:25
wallyworld_'t affect any thing00:25
wallyworld_since it's just teaching generate-tools to write the correct metadata00:25
thumperwallyworld_: around?01:34
wallyworld_thumper: hiya, just finished standup01:35
thumperwallyworld_: hangout chat?01:35
wallyworld_sure, use our 1:101:35
thumperkk01:35
niedbalskiwallyworld_, could you check https://github.com/juju/juju/pull/689? I think is not a definitive fix but at least address a potential issue (http://osdir.com/ml/general/2014-06/msg03723.html)02:01
menn0thumper: I'm having second thoughts about the machine-id vs machineid thing02:08
menn0thumper: there's lots of places where machineid is already in use02:08
thumperlike where?02:09
menn0networkinterfaces02:09
thumperugh02:09
menn0unit02:09
thumperok, I'll suffer though with machineid02:09
menn0:)02:10
wallyworld_niedbalski: looking now, sorry just finished meeting02:35
menn0thumper: the machines env uuid branch has merged \o/02:40
thumperw00t02:40
* thumper calls it an early day02:48
thumperlots of extra hours Wed and Thu02:48
thumperhave a good weekend everyone02:48
thumperit is a long weekend here in NZ, so see folks on Tuesday02:48
thumperdavecheney: no standup monday02:48
thumperdavecheney: or 1:1 as it is Labour day here02:48
* thumper goes to delete items from the calendar02:49
davecheneythumper: ack02:49
davecheneyno problem02:49
davecheneynothing really to report anyhow02:49
davecheneyenjoy your 8 hour work day celebration02:49
thumper\o/02:51
menn0davecheney: howdy. I wanted to chat to you about the state / apiserver dependency unpicking you're working on. hangout?02:58
davecheneymenn0: sure03:02
menn0davecheney: standup hangout?03:03
davecheneykk03:03
menn0davecheney: i'm there now03:04
davecheneyhttps://lists.ubuntu.com/archives/juju/2014-October/004434.html06:28
mattywmorning everyone07:50
TheMueaxw: done07:55
TheMuemattyw: morning07:55
mattywTheMue, good morning07:55
axwTheMue: thanks08:13
TheMueaxw: yw08:17
dimiternmorning all08:52
fwereadeso, it turns out small boats can be quite stressful in 50 km/h winds08:53
fwereadedimitern, hey dude08:53
Spadsswallows and amazons forever08:53
TheMuedimitern: morning08:53
dimiternfwereade, TheMue, hey guys08:56
voidspacedimitern: morning08:58
voidspaceTheMue: morning08:58
voidspacefwereade: yow, you made it back safely though...08:58
fwereadevoidspace, yeah, it was really a very short crossing08:58
fwereadevoidspace, still a bit much tbh08:58
voidspacefwereade: are you away from home - or just taking perilous sea crossings in Malta?08:59
dimiternmorning voidspace08:59
fwereadevoidspace, it's laura's half term, we had a couple of days on comino09:00
fwereadevoidspace, tiny island between malta and gozo09:00
voidspacefwereade: ah, but you've been working from there?09:00
voidspaceAt least you've been online...09:00
fwereadevoidspace, yeah09:00
dimiternwe had a great 14.10 release lunch yesterday, worthy of the 10y anniversary :)09:00
fwereadevoidspace, nice to have a change of scene09:00
fwereadedimitern, nice :D09:00
voidspacefwereade: heh, cool - although you should have taken a proper break :-)09:00
fwereadevoidspace, ehh, I've actualy been programming this week09:01
voidspacefwereade: looking it up on wikipedia, looks lovely09:01
fwereadevoidspace, it's tremendously enjoyable and healing and all that :)09:01
voidspacefwereade: :-)09:01
voidspacedimitern: USEast region is now reporting a default vpc09:02
voidspacedimitern: did we request the change?09:02
voidspaceanyway, it's good - makes testing this code less of a pain09:03
dimiternvoidspace, which account is this?09:03
voidspacedimitern: "our" account09:03
dimiternvoidspace, ah :) ok, I'm using my own actually09:03
voidspaceah09:03
dimiternvoidspace, but it's good nonetheless09:03
dimiternvoidspace, I probably should try to use "ours" as well :)09:04
voidspaceyeah, although I was using APSoutheast2 before USEast is easier to type ;-)09:04
voidspacedimitern: yeah, saves making expense claims09:04
voidspacedimitern: balls, I was running the wrong file09:06
voidspacedimitern: the default-vpc is still for APSoutheast209:07
dimiternvoidspace, ah, I've done that yeah09:08
fwereadewallyworld_, if you're around, do you have an opinion on https://github.com/juju/juju/pull/908/files ?09:26
wallyworld_looking09:27
fwereadewallyworld_, I still don't think I'm happy -- strikes me as a scattergun fix-windows-paths-here-and-there approach09:27
fwereadewallyworld_, but much of it is simplestreams related, so maybe you can set my mind at rest?09:27
wallyworld_fwereade: sure, give me a few minutes and i'll look09:28
fwereadewallyworld_, cheers09:28
fwereadewallyworld_, at your leisure09:28
wallyworld_fwereade: so there are 2 issues. 1. the folks who created the simplestreams metadata files on streams.canonical.com chose to use ":" in the file names. juju provides a mechanism to generate metadata  files (used to upload or import metadata) and also uses ":", 2. simplestreams  uses file:// and http:// urls. the file:// urls are easy to create in linux but harder in windows due to drive letters. to solve issue #1, it is essentially a09:50
wallyworld_ change to the filename generation; the file name is arbitrary so use "-" instead of ":", doesn't matter. for issue #2, the various places where file:// urls are generated need to account for windows. most of the places are in tests. regardless, we should be deferring any windows conversion to the system boundaries, at the places where the urls are actually used. and this is only one place i think, in the actual Fetch()  method09:50
fwereadewallyworld_, so I'm a bit concerned about having a Storage implementation that (1) doesn't allow : in paths and (2) doesn't produce sane urls09:52
wallyworld_fwereade: blame windows09:52
wallyworld_it's windows that doesn't allow ":" in urls09:52
wallyworld_un paths09:52
wallyworld_in09:52
wallyworld_we only write out simplestreams metadata in one place09:53
wallyworld_in the generation utility09:53
fwereadewallyworld_, so ISTM that it's simply that FileStorage is (1) failing to properly encode paths such that they can be stored on windows and (2) failing to generate urls that can be used on windows09:53
wallyworld_we read simplestream metadata off disk in only one place - at bootstrap when the user can supply their own (and also in tests)09:54
fwereadewallyworld_, IMO simplestreams issues are completely secondary09:54
fwereadewallyworld_, we can make a point of generating simplestreams dirs that don't have :s in09:54
fwereadewallyworld_, but this is completely separate from the fact that FileStorage doesn't work on windows09:54
fwereadewallyworld_, and we need FileStorage to be able to be a Storage, so we can use it as a reasonablereplacement for the real simplestreams sources09:55
fwereadewallyworld_, but for now there are plenty of simplestreams sources that do include :s09:55
wallyworld_fwereade: yes, that's what i was referring to when i talked about doing the conversion at system boundaries09:56
fwereadewallyworld_, yeah09:56
wallyworld_fwereade: the sources that include ":" don't matter09:56
wallyworld_these are urls09:56
wallyworld_they are fine09:56
fwereadewallyworld_, yeah, exactly09:56
fwereadewallyworld_, the problem is the FileStorage is shite on windows09:56
wallyworld_it is *only* the generation utility09:56
fwereadewallyworld_, and we need to fix that09:56
wallyworld_and the tests09:57
fwereadewallyworld_, and then *separately* we can fix the metadata plugin09:57
wallyworld_there are lots of tests that write out simplestreams files09:57
wallyworld_and then substitute a file:// url for the real http:// url09:57
fwereadewallyworld_, but what we're seeing right now is a broken test framework, because FileStorage doesn't work on win09:57
wallyworld_yes09:57
fwereadewallyworld_, so IMO the only reasonable thing to do is to fix the test framework09:57
wallyworld_i'd look to file the FileStorage abstraction09:58
fwereadewallyworld_, ok, cool, I think we are aligned here09:58
wallyworld_so that we deal with ":" etc internally09:58
wallyworld_fwAH HANG ON A SEC09:59
wallyworld_sorry capslock fail09:59
wallyworld_fwereade: the issue is, that we use http.Get()09:59
wallyworld_and file:// urls09:59
wallyworld_so there's no real file storage abstraction as such. it is an abstraction based on getting froma url09:59
wallyworld_trouble is, on windows, the file:// urls are broken10:00
wallyworld_and so http.Get fails10:00
wallyworld_so we would want to use a helper for the url getter10:00
wallyworld_that converts the file:// urls on windows10:01
wallyworld_the uniform use of http.Get makes the fetching of file content agnostic to file and http urls10:01
fwereadewallyworld_, if FileStorage can't generate URLs that work, it needs to start doing so10:04
fwereadewallyworld_, if that means running an http server, it should do that10:04
fwereadewallyworld_, and then we can drop the foul file://-handler haclk entirely10:04
fwereadewallyworld_, AIUI, it's only agnostic because we register a handler for file:// urls10:05
fwereadewallyworld_, so, yeah, hacking up the file:// handler in windows would be another way to do it10:06
fwereadewallyworld_, but AFAICS it's still all down to FileStorage10:06
fwereadewallyworld_, it doesn't Put properly10:06
fwereadewallyworld_, and it doesn't URL properly10:06
fwereadewallyworld_, and so it's not a Storage10:06
fwereadewallyworld_, and so it needs to be fixed10:07
wallyworld_the Fetch mechanism uses http.Get, that's why file:// urls were introduced, so the simplestream.Fetch() could deal with a url based abstraction10:10
wallyworld_file:// is a valid url schema10:10
wallyworld_but yeah, what follows differs on wndows vs linux10:10
fwereadewallyworld_, sure -- but if we're not capable of generating file:// urls that work, we can't reasonably use them, can we?10:11
wallyworld_we can use a helper - MakeFileURL(path)10:11
wallyworld_different implementaion on windows vs linux10:11
fwereadewallyworld_, that's fine by me, because it stays inside FileStorage10:11
wallyworld_instead of "file://" + path10:12
wallyworld_which is used now10:12
fwereadewallyworld_, what I care about is that FileStorage keeps working like an actual Storage10:12
fwereadewallyworld_, although10:12
fwereadewallyworld_, honestly10:12
fwereadewallyworld_, simplestreams and Storage have an impedance mismatch *anyway*10:12
wallyworld_the file storage part in tests is file, so long as the file names use "-"10:12
fwereadewallyworld_, there's no guarantee that Storage.URL() results have any relationship to the underlyingpaths10:13
fwereadewallyworld_, URLs that are just opaque hashes are perfectly valid10:13
wallyworld_well, for disk based Storage() implementtions the URls do have that correspondence10:13
fwereadewallyworld_, right, but that's not part of the Storage interface10:14
fwereadewallyworld_, it's an invalid assumption made by the simplestreams machinery10:14
wallyworld_sure, but i don't think we use Storage() for simplestreams10:14
fwereadewallyworld_, hmm, I thought the two were more than a little entangled10:15
fwereadewallyworld_, if we don't, why is that CL hitting both storage code and simplestreams code?10:15
wallyworld_we use a simplestreams.DataSource abstraction10:15
fwereadegsamfira, conversation relevant to your interests for about the last 50 mins ^^10:16
wallyworld_and there are file based and http based  implementations10:16
wallyworld_fwereade: so, in effect, the comments still apply - what what we do internally, and convert the urls are the system boundaries10:17
fwereadewallyworld_, which I would say doesn't fit with Storage, but was welded on for convenience's sake, for understandable and defensible but ultimately unhelpful reasons10:17
wallyworld_fwereade: simplestreams doesn't use storage10:17
wallyworld_it uses a different abstraction10:18
wallyworld_99% of it is about streaming data from a url10:18
wallyworld_the other 1% is a utility which can write data10:18
fwereadewallyworld_, that's frequently backed by Storage-based urls10:18
wallyworld_no, mostly by htto urls10:18
wallyworld_only storage based for tests10:18
fwereadewallyworld_, that don't necessarily have the properties required by simplestreams10:18
fwereadewallyworld_, well, when did that change? because for a long time we *were* uploading ss data to Storages, and depending on the properties of the URLs returned by storage10:19
fwereadewallyworld_, my understanding was that we were getting closer to breaking the link, but had not yet done so10:20
fwereadewallyworld_, I haven't seen the state-based catalogues of tools and images...10:20
wallyworld_all we need to do is fix storageSimpleStreamsDataSource10:20
wallyworld_they are there10:20
wallyworld_tools are no longer store in the cloud storage10:20
wallyworld_tools and image metadata go into catalogs in state10:21
wallyworld_the other thing is that the simplestreams.DataSource interface is read only10:22
wallyworld_it streams data from urls10:22
wallyworld_but for tests, and the generation utility, we need to write data10:22
wallyworld_write data to a location on disk that the DataSource can read back10:23
wallyworld_the simlplestreams.Datasource interface uses urls10:23
fwereadewallyworld_, ok, I see, the apiserver/common.Tools stuff is just falling back to simplestreams sometimes?10:23
wallyworld_fwereade: it does if the tools don't exist in the sate database10:24
wallyworld_from memory10:24
fwereadewallyworld_, in that case... shoudl we not be using state-based tool/image catalogues across the board in the tests?10:25
fwereadewallyworld_, this'll leave some bootstrap tests broken, I imagine10:25
fwereadewallyworld_, and ofc the metadata plugin ones10:25
wallyworld_yes, we should i guess. there are lots of tests to fix10:25
fwereadewallyworld_, but they feel like they're real problems that should require code changes10:26
wallyworld_we still need to read and write metadata to/from disk10:26
wallyworld_for the generate plugin and bootstrap10:26
fwereadewallyworld_, understood10:26
wallyworld_bootstrap - read files off disk, store in state server10:26
wallyworld_(if --metadata-source is specified)10:27
fwereadewallyworld_, but what I am fulminating over is that this Storage-based hackery is being proposed as a way to get all the other tests passing10:27
wallyworld_generate - read files off disk, see what's there, merge new metadata, write back out10:27
fwereadewallyworld_, when it's not actually fixing anything10:27
fwereadewallyworld_, it's just torturing the test framework to the point where, yes, the tests kinda pass, but there's basically no connection between reality and the test fixture10:27
wallyworld_in 1.21 yes, in 1.20 no10:28
fwereadewallyworld_, well, 1.21 is what we're currently working on...10:28
wallyworld_yes, agreed10:28
wallyworld_if we didn't want to fix all the tests in one go, we should be able to tweak the urls in the storage data source before they are used i think10:30
wallyworld_and generate filenames with "-", not ":"10:30
wallyworld_the last bit is trivial10:30
fwereadewallyworld_, is it even about fixing all the tests in one go, though?10:31
fwereadewallyworld_, can this not be done piecemeal?10:31
wallyworld_um, don't think so, could be wrong. there are a lot of tests though that fail on windows aren't there?10:31
fwereadewallyworld_, AIUI, yes, there are loads10:32
fwereadewallyworld_, and many of them are failing because FileStorage doesn't work on windows10:32
wallyworld_yes, so we tweak the helper method which writes the files10:32
wallyworld_to fix the storage path on windows10:32
fwereadewallyworld_, but any that aren't bootstrapping, or aren't using the metadata plugin, shouldn't need it anyway, because we now have tool/image catalogues in state anyway10:32
wallyworld_yes, but there are still tests that exercise the simplestreams fetch/filer code10:33
wallyworld_using file based metadata10:33
fwereadewallyworld_, understood -- but aren;t they going to be an absoluteminority?10:33
wallyworld_we still need those tests10:33
fwereadewallyworld_, sure10:33
fwereadewallyworld_, and they're exercising functionality that is currently broken10:33
fwereadewallyworld_, I'm saying that it is moreimportant that we get the tests for working functionality to themselves start working10:34
wallyworld_there are several of them. and bootstrap tests also need the url based data sources10:34
wallyworld_and there are lots of those10:34
wallyworld_so there are 3 types of test 1. simplestreams infrastructre, 2. bootstrap, 3. general juju10:35
wallyworld_the first 2 still need al lthe crap we have now10:35
fwereadewallyworld_, gsamfira: my understanding is that less than 50% of the test suite is passing on windows -- I don't believe that 50% of the test suite needs to depend on bootstrapping or simplestreams10:35
wallyworld_agree (waves arms in air)10:36
fwereadewallyworld_, gsamfira: I want to get the bits that don't depend on those two peiecs working reliably10:36
wallyworld_50% seems way low10:36
wallyworld_i thought it was only several10:36
wallyworld_maybe a package or two plus some other misc tests10:36
fwereadewallyworld_: gsamfira should be able to confirm, but I thought that was what he said the other day10:36
fwereadewallyworld_, I hadn't realised it was that bad myself10:36
wallyworld_doesn't seem right10:37
fwereadewallyworld_, this is a large part of why I am freaking out somewhat indiscriminately10:37
wallyworld_i am surprised myself10:37
wallyworld_i honesty thought a MakeFileURL() or similar at the system boundary would work10:37
fwereadewallyworld_, correct me if I'm wrong10:38
fwereadewallyworld_, actually, no, this is just a pure question10:38
fwereadewallyworld_, in simplestreams, when adding a compenent to a path, does it always pass through the underlying storage's URL() method again?10:38
fwereadewallyworld_, if it doesn't, I don't think there's any expectation that it will work10:39
wallyworld_fwereade: not sure ottomh. i know we use path.Join() to glue together the bits10:39
fwereadewallyworld_, because relative paths in storage are not guaranteed to map to relative storage urls in the first place10:39
wallyworld_there's always a base url10:40
wallyworld_and simplstreams works off relatives paths under that10:40
fwereadewallyworld_, so if there's a path component including a : that gets tacked on10:40
fwereadewallyworld_, that will *never* work as a file url on windows10:40
wallyworld_yes10:40
fwereadewallyworld_, whereas if the path had a : tacked on10:40
wallyworld_that's the issue10:40
fwereadewallyworld_, and that passed through the URL method10:40
fwereadewallyworld_, we'd get a new URL that should work everywhere10:41
wallyworld_but we don't need the ":"10:41
wallyworld_and we also need to strip drive letters10:41
wallyworld_but regardless, we can store internally what we want, and only when it is used, which is via the URL()_ method, do we convert it10:42
fwereadewallyworld_, I am still deeply reluctant to use different filenames in the tests on windows, when we're writing code that needs to work against filenames with :s on remote systems10:42
fwereadewallyworld_, especially when this apparently hits so much of the test suite10:43
wallyworld_fwereade: but on remote systems they are not filenames10:43
wallyworld_they are http urls10:43
wallyworld_and that bit works fine on windows10:43
fwereadewallyworld_, then can we have FileStorage run an http server, and return http urls? for the purpose of the tests, at least, allowing us to isolate the bits that need work in the real code?10:44
wallyworld_http://cloud-images.ubuntu.com/releases/streams/v1/com.ubuntu.cloud:released:aws.json10:44
wallyworld_that wil work fine on windows10:44
fwereadewallyworld_, agreed10:45
fwereadewallyworld_, but I would like our test data to reflect that reality, and not just sub out certain characters because they're inconvenient10:45
wallyworld_we could run an http server, or, we could just 1. not use ":", use "-" instea10:45
wallyworld_the ":" are *totally* arbitrary10:45
wallyworld_the filenames don't matter10:46
fwereadewallyworld_, agreed, but they're also in the live data10:46
wallyworld_we just used ":" because the streams folks did10:46
wallyworld_the image metadata folks have their own utilities for generate image json10:47
fwereadewallyworld_, I agree that we can do that in the metadata plugin, and I think that's fine and great10:47
wallyworld_our QA folks generate the tools metadata, and if we switch to "-", that won't affect anything10:47
fwereadewallyworld_, my concern is all about the unrelated tests, that should be working against data that maps as closely as possible to the stuff in the wild10:47
fwereadewallyworld_, we can generate other data for local usage, and that's all fine10:48
wallyworld_the data *content* is important, not the filenaes10:48
wallyworld_the filenames just don;t matter one iota10:48
wallyworld_there is only one file accessed directly - the index file10:48
wallyworld_the index file contains paths to the product files10:48
wallyworld_we can make those whatever we want10:49
wallyworld_to me that's easier than setting up a http server for storage10:49
fwereadewallyworld_, I see this in the code:10:49
fwereade    ProductMetadataPath = "streams/v1/com.ubuntu.cloud:released:imagemetadata.json"10:49
fwereadewallyworld_, is it unused?10:50
fwereadewallyworld_, or ill changing it suddenly cause us to stop working against the live data?10:50
wallyworld_fwereade: that is *only* for the generate utility10:50
wallyworld_not live data10:50
wallyworld_live data reads the index file, looks in there, and follows the path therein10:51
wallyworld_our generate plugin  makes index files also10:51
wallyworld_and uses what you reference about for the product file path10:51
wallyworld_but we can totally chaneg that10:51
wallyworld_fwereade:  look inside this http://cloud-images.ubuntu.com/releases/streams/v1/index.json10:52
wallyworld_that is live data10:52
wallyworld_and the paths are what they are, we don't care10:52
wallyworld_we just make a url from them10:52
wallyworld_all that has nothing to do with the above const10:52
fwereadewallyworld_, I understand that10:53
fwereadewallyworld_, I am still not convinced that it's sane to arbitrarily change the format of our test data to be different to the live data -- *even if it's just a convention they use* -- for the convenience of the tests on windows10:53
fwereadewallyworld_, am I making sense?10:54
wallyworld_i guess that's where we differ - i see it as an arbitary internal implemenation detail10:54
wallyworld_so long as the external behaviour is correct10:55
wallyworld_ie Fetch works, the datasources work10:55
wallyworld_who cares what the files are called under the covers10:55
fwereadewallyworld_, I don't care what the files on disk are called, but I do care that the urls we create map to the ones used live10:55
fwereadewallyworld_, and using file:// urls causes that correspondence to be important10:56
wallyworld_i disagree :-)10:56
wallyworld_the url content is also totally arbitrary10:56
wallyworld_so long as we can 1. load an index file, 2. parse the data, 3. file and load the correct product file,10:57
wallyworld_it doesn;t matter what the urls are10:57
wallyworld_simplestreams doesn't care10:57
wallyworld_simplestreams doesn;t even parse the urls10:57
wallyworld_it just hands them off to http.Get10:57
fwereadewallyworld_, I think it does matter, because it guards against inappropriate messing around with :s or drive letters in places where we shouldn't have to worry about them10:58
wallyworld_we get rid of ":", problem solved there10:58
fwereadewallyworld_, every time we tweak our test data to be less like the real data, we go another step away from a real test10:59
fwereadewallyworld_, and that's great for the plugin/bootstrap cases10:59
wallyworld_we use a helper MakeFileURL(path) function instead of "file://" + path, problem solved there10:59
fwereadewallyworld_, except that simplestreams will try to create a url by tacking on a filename with a : in it10:59
wallyworld_fwereade: disagree about another step away from real test10:59
fwereadewallyworld_, and that won't work everywhere11:00
wallyworld_you mean for the streams.canonical.com case?11:00
wallyworld_those aren't filenames11:00
wallyworld_they are url paths11:00
fwereadewallyworld_, I know -- but we're apparently using FileStorage all over the shop as our mock for streams.c.c11:00
wallyworld_sure, but simplestreams doesn't know thar11:01
wallyworld_so long as we give it a url which http.Get can use, job done11:01
wallyworld_it doesn't care what the url is11:02
fwereadewallyworld_, so we have simplestreams code that mucks about with :s, and streams.c.c data that contains :s, and we're explicitly avoiding triggering the : cases11:02
wallyworld_it won't muck around with ":" is we use "-" in our file names for the generate plugin11:03
wallyworld_if11:03
wallyworld_the streams.c.c data contains ":" but we don't cares, it's just urls we are dealing with11:04
fwereadewallyworld_, agreed, AFAICS the generate plugin is easy to fix, but IMO it needs to be fixed *after* we get the working code reliably tested11:04
wallyworld_the troube there is the tests and generate plugin use shared code to write out metadata11:05
wallyworld_so it still comes down to those 2 issues. 1. use windows compatible file names "-" instead of ":"11:07
wallyworld_and 2. the way we generate file:// urls11:08
fwereadewallyworld_, ok, circling back, and leaving aside the question of how much work it is:11:08
fwereadewallyworld_, would you agree that it's generally more appropriate to use state-based tool/image catalogues for all tests that are not about bootstrapping and/or the metadata plugin?11:09
wallyworld_yes11:09
wallyworld_but those are in the minority (hand waves)11:09
fwereadewallyworld_, I find that hard to believe (waves hands vigorously and intimidatingly)11:10
fwereadewallyworld_, I guess we'll need input from someone who's actually got a windows to run the tests against here :)11:10
* fwereade waves hands at gsamfira11:10
wallyworld_fwereade: under environs/tools environs/simplestreams, environs/imagemetadata there are mainly pure simplestreams tests11:11
wallyworld_then there are tests in cmd/juju/bootstrap (lots)11:11
wallyworld_then there are the plugins tests11:11
fwereadewallyworld_, anyway, even if they are in the minority, I contend that it's important to fix those first, because they're potentially obscuring other real failures11:11
wallyworld_sure11:12
fwereadewallyworld_, or alternatively eroding confidence in bits that really do work11:12
wallyworld_no issue fixing tests which should be using tools from state but which aren't11:12
wallyworld_but i have my doubts how many there are11:12
fwereadewallyworld_, not to mention obscuring regressions in the bits that should work, that might get introduced by tangentially-related work11:12
fwereadewallyworld_, just a mo11:14
fwereadewallyworld_, WriteMetadata uses the Storage interface anyway11:14
fwereadewallyworld_, it ought to be working with paths not URLs anyway, right?11:14
wallyworld_let me check11:14
fwereadewallyworld_, yeah, stor.Put(filePath, ...)11:15
* fwereade brb11:15
wallyworld_fwereade: that Storage is a file system stor, not an provider cloud stor11:16
wallyworld_it was done to allow metadata to be written to cloud storage as well as file system11:16
wallyworld_but of course, cloud storage not needed anymore11:16
fwereadewallyworld_, well, it's the Storage interface ;p11:19
wallyworld_true, but doesn't need to be now11:20
wallyworld_but yes, WriteMetadata works with paths11:21
wallyworld_not urls11:21
bogdanteleagafwereade, wallyworld_: have you reached some agreement? I disconnected right after I've seen you've started to discuss my pr :)11:24
fwereadebogdanteleaga, well, I remain adamant that we need to get the non-simplestreams and non-bootstrap tests working against state catalogues -- so we can have faith in the parts of the system that do work -- before we start changing up the bits that don't work11:25
fwereadebogdanteleaga, can you estimate the proportions in play?11:25
wallyworld_i agree with that11:25
fwereadebogdanteleaga, my understanding is that there are a *lot* of tests failing, and I find it hard to believe that they're all about simplestreams and botstrap11:26
fwereadebogdanteleaga, do you know what the failing proportion is offhand?11:26
bogdanteleagawell right now we're looking at about 100 tests I think11:26
bogdanteleagawithout counting worker11:26
fwereadebogdanteleaga, hmm, most of juju is in worker, isn't it?11:27
bogdanteleagathe problem with getting non-simplestreams and non-bootstrap things up11:27
bogdanteleagais that some of the stuff depends on it11:27
bogdanteleagathere's not really much else going on11:28
fwereadebogdanteleaga, btw, can you send me the test output on windows?11:28
bogdanteleagathere's some separate package derps11:28
bogdanteleagaand some ssh/charms problems11:28
bogdanteleagasure11:29
marcoceppiwhat is metrics.yaml12:33
mgzmarcoceppi: it's for metering, charms can define what kind of ticks they care about12:43
mgzmattyw/cmars talked a bit about it at the sprint12:44
TheMuemgz: ping13:07
voidspaceso, to assign a new private IP address to a network (amazon ec2), *and* know what ip address is, we have to make 3 calls13:48
voidspacefetch all ips for that network, add a new ip address (which doesn't tell you the new one), fetch the ips for the network again and work out which is the new one13:48
voidspaceat least as far as I can tell13:48
mgzvoidspace: ick13:49
voidspacemgz: yeah, I'm just spelunking the api docs to see if it's really that bad13:49
mgzI guess what you actually care about is if there's any as-yet-unused private ip?13:50
voidspacemgz: this is specifically for adding a new ip address for a new container in an instance13:50
voidspacemgz: so really we do want "the one we just created"13:51
mgzso it's really while True: ip = get_free_addr_from_pool() if addr: break; allocate_new_private_ip()13:51
voidspacemgz: hmmm....13:51
mgzwhich wpuld be maybe one call, but generally the three you mentioned :)13:52
mgzalso, ip==addr, go variable naming13:52
voidspacemgz: there's an api call in goamz AssignPrivateIPAddresses13:52
voidspacemgz: I'm not following you13:53
voidspacemgz: we're not maintaining a pool here, and the abstraction you suggest doesn't really map to what we're doing13:54
voidspaceas far as I can tell :-)13:54
mgzvoidspace: well, I guess my assumption about just having any private ip is wrong, so rest makes no sense13:54
voidspacemgz: hehe13:54
voidspacemgz: yeah, we get ec2 to allocate the address for us13:54
voidspacemgz: but when they allocate it, they don't tell you what they allocated...13:55
mgzbut you don't have to get ec2 to assign it, you can also supply one13:56
voidspacemgz: that's possibly true, and then we'd need to maintain the pool (or similar)13:57
mgzwhich is back to what I was assuming - not sure which is actually better in practice13:57
voidspaceat least for ec213:57
voidspacefor maas I think we really do want maas to allocate it13:57
voidspacebut we don't have to use the same approach for both - so long as we have a consistent abstraction for getting the address13:58
TheMuemgz: could you please drop the actions sync calendar entry? I'll add a new one I've got to change when daylight saving times are over13:59
mgzdrop?14:00
TheMuemgz: remove, delete14:01
TheMuemgz: just took the first word that came into my mind. ;)14:01
mgzI can just make you all have edit rights?14:02
TheMuemgz: that's ok too14:02
mgzdone14:02
TheMuethanks14:03
TheMuewe're changing this weekend, the US next weekend14:03
marcoceppiso, where are the windows charms?14:28
* fwereade has evidently done something dumb with git, anyone free to tell me what I did exactly and how to undo it? can be seen in reviews.vapour.ws/r/258/diff/ and https://github.com/juju/juju/pull/961 which claims to contain changes I already merged in the previous branch15:21
jcw4fwereade: did you update your fork's master branch before making the PR?15:22
jcw4fwereade: dunno if it still applies, but rbt previously required your master branch on your fork to be up to date15:23
TheMuefwereade: had it once too. switch to the false changed branch, do an rbt post -u, then switch back to the correct changed branch and do an rbt post -u there too (afair, will take a look again)15:23
natefinchfwereade: that can happen if you create a new branch from your old branch, without switching back to master first.  I did that yesterday.  The way I fixed it was to just make a new branch off master and cherry-pick the commit.  There's probably a better way to fix the current branch, but I don't know it offhand.15:26
fwereadecheers guys, I'll hack at it a bit and see if it gets better :)15:27
fwereadeah, looks happier now after merging master (again) and pushing (again)15:28
voidspacefwereade: Jonathan is looking for work and we have an open position...16:32
voidspacefwereade: I've emailed him...16:32
fwereadevoidspace, awesome, the collection grows...16:44
voidspacefwereade: hopefully16:45
voidspacefwereade: although I suspect it's a juju-gui position from the description16:45
voidspaceright, have a happy weekend everyone17:08
voidspaceg'night all17:08
jcw4happy weekend voidspace17:08
voidspaceo/17:08
=== urulama is now known as urulama___
=== tvansteenburgh is now known as tvan|lunch
jogmgz, or natefinch, could I get a quick review here: https://github.com/juju/juju/pull/96317:51
natefinchsure17:51
mgzjog: lgtm17:53
natefinchlaziness pays off again17:53
jcw4:)17:57
=== tvan|lunch is now known as tvansteenburgh
=== tdc_ is now known as tdc
jcw4fwereade: do you happen to be online at 9:30 pm on a Friday evening?19:34
fwereadejcw4, kinda, for a bit :)19:36
fwereadejcw4, what can I do for you?19:37
jcw4I'm feeling like the watcher mechanism for handling actions is creaking at the seams19:37
jcw4fwereade: per niemeyer 's comments I think it's a fairly sizeable refactor to enforce ordering of action execution19:38
jcw4fwereade: right now the watcher uses set.Strings to collect the id's in the watcher, which is a set without any ordering mechanism (afaik)19:40
fwereadejcw4, so, that was not the idea, they were meant to produce ordered events19:40
fwereadejcw4, but that's not that hard to enforce, is it?19:40
jcw4fwereade: I think you're right19:41
fwereadejcw4, worst case I can see is that two people sending actions at *almost* the same time might not get them in the db in quite the order they sent them19:41
jcw4fwereade: I just get nervous relying on the watcher for ordering; but I suppose it's as good a queuing mechanism as any19:42
jcw4fwereade: also, when the watcher is first created it gets a list of the id's already enqueued in the actions collection19:42
jcw4fwereade: and in that query we're depending on the order that mongo gives them back to us in19:43
fwereadejcw4, hmm, I thought we were sorting them19:44
jcw4fwereade: I guess I'm beginning to prevaricate about the sequence id's -- they may not be a guarantee of ordering between two different clients, but I can't imagine them not being ordered for one client19:44
fwereadejcw4, that was one of the reasons to have the sequence number in the id19:44
jcw4fwereade: yeah - I can make sure we sort19:44
jcw4fwereade: but niemeyer 's point was that the sequence mechanism isn't reliable for two different clients19:45
jcw4fwereade: although if we allow that ordering between two clients is undetermined then the only issue left is if action-3 from client 1 runs before action-2 from client 219:46
niemeyerjcw4: That wans't the point, actually19:46
jcw4I misunderstood then... :(19:46
niemeyerjcw4: If two people send actions concurrently, there's no pre-defined order between them by definition19:47
jcw4niemeyer: yes, that makes sense19:47
fwereadeniemeyer, o/19:47
niemeyerjcw4: My point is that you should not allow that to be observable as order 103 goes before 102 if it comes from different clients19:48
niemeyerfwereade: Yo19:48
jcw4niemeyer: I thought that the problem was advertising sequence number that may not reflect reality19:48
niemeyerjcw4: Isn't that what I just said?19:48
jcw4niemeyer: yes exactly19:48
jcw4I was just still typing19:48
niemeyerjcw4: Okay19:48
niemeyerjcw4: and my other point is that if one client sends two actions, the order should be respected19:49
jcw4niemeyer: okay - which we can do using the sequence numbers right?19:49
niemeyerjcw4: Can you? I don't know19:49
niemeyerjcw4: You implied that sequence numbers were being generated out of the transaction19:49
jcw4niemeyer: ah, I tried to clarify that it was in a separate transaction before the action was created19:50
jcw4niemeyer: but you indicated that was even worse19:50
jcw4:)19:50
niemeyerjcw4: No, I just said it was a proof that you cannot trust the numbers alone if you are using a queue19:51
niemeyerjcw4: Because client 1 might get action 103 committed before client 2 gets action 102 committed19:51
niemeyerjcw4: and that's confusing19:51
jcw4niemeyer: okay so far everything is consistent with my understanding from the emails19:51
fwereadeniemeyer, IIRC it's the sequence() thing we've had in state since forever -- downside is very rare out-of-order effects, upside is less unnecessary overlap in the txns19:52
niemeyerfwereade: I don't see how that's relevant in this case19:52
niemeyerfwereade: It doesn't matter how it's been used before, does it?19:52
niemeyerfwereade: Actions are queued.. having a queue with out-of-order sequence numbers feels obviously bogus19:53
fwereadeniemeyer, yeah, wouldn't be hard to tweak -- the tradeoff in play is having lots of subtly-different code paths for doing almost identical things19:53
jcw4niemeyer: is there a better queueing mechanism?  I don't know how to order actions other than by some generated sequence19:54
niemeyerfwereade: I don't quite understand why this is not a trivial problem, with zero code duplication19:54
niemeyerfwereade: If the sequence numbers are not sequential, use anything else, such as a random id19:54
jcw4niemeyer: that implies to me that we can't use mongo collections as the queue because we have no way of sorting the items in the collection without a sequence?19:55
niemeyerjcw4: a timestamp, a list field, a sequence number that is not exposed to the user, etc19:55
jcw4niemeyer: okay - so timestamp is fine with me19:56
niemeyerjcw4: That's a surreal statement :)19:56
jcw4niemeyer: :)19:56
niemeyerjcw4: You can order any data at all.. even a pair of random bytes19:57
jcw4niemeyer: in my surreal statement a timestamp is a suitable sequence so I'm happy19:57
jcw4niemeyer: sure - it's finding meaningful sorting that seems to be the trick here19:57
niemeyerjcw4: Not even that.. the only thing I pointed out is that you should not have bogus sequence numbers exposed to the user19:58
jcw4niemeyer: I keep coming back to the fundamental point that this is just an issue of representation to the end user right?19:58
jcw4niemeyer: what you just said19:58
niemeyerjcw4: The ordering was not the problem19:58
niemeyerjcw4: Unless, of course, you use the actions completely unsorted, as you suggested in the email thread19:59
jcw4niemeyer: so internally I'll fix the bug and sort actions by timestamp19:59
jcw4niemeyer: and externally we'll represent action id's without implied ordering19:59
niemeyerjcw4: Watch out for timestamp issues19:59
niemeyer(clocks changing, machines in a cluster with unmatching clocks, etc)20:00
jcw4fwereade: and sorting by timestamp, I think, introduces pulling the entire document instead of just the _id20:00
jcw4niemeyer: is that mitigated by having the queuing done on the state server (i.e. only one machine)20:00
jcw4niemeyer: esp. if we use UTC rather than some local representation of time20:01
niemeyerjcw4: In principle the id with a sequence was fine for ordering20:01
jcw4niemeyer: just not representing to the user?20:01
niemeyerjcw4: As long as you're not exposing it to the user as means for defining the order in which events took place20:01
fwereadejcw4, I'd be more inclined to pull the sequence generation into the txn if you want to expose the internal sequence20:01
niemeyerfwereade: Hah, yep.. the txn-revno has a sequence20:02
niemeyerEither way, I need to step out20:02
niemeyerBack later20:02
jcw4thanks niemeyer20:02
jcw4fwereade: so use txn-revno instead of sequence() ?20:02
jcw4fwereade: right now state.sequence() encapsulates its own transaction.20:03
fwereadejcw4, hmm, that would work for ordering, and we have it available in the watcher20:04
jcw4yeah20:04
jcw4fwereade: does txn-revno guarantee uniqueness though?20:05
fwereadejcw4, so long as we guarantee a single write to the doc inquestion, yes, I think so20:05
jcw4fwereade: i.e. will dozens of new actions across different clients produce a steadily increasing txn-revno?  Yeah only one write.20:06
fwereadewell, so long as there's some document touched by all those transaction, yes20:06
fwereadejcw4, so in practice, without changes, actually... no20:06
fwereadejcw4, so20:06
jcw4fwereade: so include a write to a master doc?20:07
fwereadejcw4, well20:07
fwereadejcw4, just putting the sequence-getting inside the txn might be the easiest way?20:07
jcw4fwereade: duplicating the existing sequence() code?20:07
jcw4fwereade: or factoring lines 19-24 of state/sequence.go into a re-usable block?20:09
fwereadejcw4, I would need to look at it, but I would favour the latter on general principles20:09
jcw4fwereade: +120:09
fwereadejcw4, would you take an hour or so to figure out the actual impact of pulling all sequence-generation into txns?20:09
jcw4fwereade: sure... you mean every use of sequence() not just actions right?20:10
fwereadejcw4, yeah, please figure out the larger picture20:11
jcw4fwereade: +120:11
fwereadejcw<320:11
jcw4haha20:11
fwereadewwitzel3, are you still working?22:14
fwereadeor katco maybe?22:14
jcw4fwereade: 0 for 222:16
fwereadejcw4, seems that way22:17
jcw4fwereade: gotta look for us west coast dudes22:17
jcw4:)22:17
fwereadejcw4, don't suppose I can induce you to review http://reviews.vapour.ws/r/258/ can I?22:17
jcw4or whatever the gender neutral version of dude is22:17
jcw4sure sure22:17
fwereadejcw4, be harsh22:17
jcw4hehe22:17
fwereadejcw4, but bear in mind that I think it's a *bit* less bad than the current state22:17
* jcw4 rubs his hands evilly22:17
fwereadedon'tforget to twirl your mustachios22:18
fwereadejcw4, http://www.themarysue.com/ibm-black-team/22:19
jcw4amost exactly what I pictured when you said mustacios22:19
wwitzel3fwereade: yep22:33
fwereadewwitzel3, so, I landed most of that stuff that'll mess with you, I'm afraid22:33
wwitzel3fwereade: ok, great22:33
fwereadewwitzel3, jcw4 is currently looking at the next one that'll hurt22:34
fwereadewwitzel3, but the more reviews I get on that one the better22:34
fwereadewwitzel3, http://reviews.vapour.ws/r/258/22:34
jcw4wwitzel3, fwereade hehehe22:34
wwitzel3fwereade: ok, I will take a pass of it in a bit? or you trying to land it before the weekend?22:34
wwitzel3fwereade: I'm right in the middle of a completely different thought :)22:35
fwereadewwitzel3, I'd *love* to land it22:35
fwereadewwitzel3, but just put it on the stack22:35
fwereadewwitzel3, I am going to either finish the next refactoring or pass out22:35
fwereadewwitzel3, which is to say "finish"22:35
wwitzel3right :)22:35
fwereadewwitzel3, in that it'll need a sober pass before I even try to propose it22:35
fwereadewwitzel3, but I don't have the courage to start it unfortified22:36
fwereadewwitzel3, and hey it's friday, I'm already fortified, and everyone else is asleep22:36
wwitzel3fwereade: no one should be subjected to starting a refactor sober22:37
jcw4*thats* my problem22:37
wwitzel3fwereade: how else will you get the courage to start?22:37
fwereadewwitzel3, I've been putting this one off for almost two years now :/22:37
* jcw4 yells "honey: where's my petit syrah!?"22:37
wwitzel3fwereade: I'm glad it is happening :) .. I am sure it is doubtful, but it any of it can be worked on async, let me know.22:39
wwitzel3fwereade: refactoring is always one of those things where I wish there was five of me with the same overall vision at the same time22:39
wwitzel3under most conditions five of me would be a horrible thing22:39
fwereadewwitzel3, yeah, I worry that I'd just argue with myself even more than usual22:40
* fwereade wishes he hadn't started by renaming a package, it's really not helping22:43
wwitzel3:)22:44
fwereadenah, actually, that's *nothing* compared to the errors I'm suddenly seeing in totally unrelated packages :/22:45
* fwereade runs godeps and hopes22:45
* fwereade feels unjustifiably smug22:45
wwitzel3fwereade: I played a game of Dominion where I won doing nothing but stacking my buys and getting as many actions, coppers, and vineyards (+1 VP per 3 action points)22:47
wwitzel3fwereade: I thought of you22:47
fwereadewwitzel3, lol, nice :)22:48
fwereadewwitzel3, don't think I've ever played with vineyards22:48
fwereadewwitzel3, is that cornucopia?22:48
wwitzel3http://wiki.dominionstrategy.com/index.php/Vineyard22:48
wwitzel3Alchemy22:48
fwereadewwitzel3, very nice22:49
fwereadefuck, knew I should have done that other step first :/22:55
fwereade...and didn't even realise that *other* step I should also have done first22:57
fwereadebah22:57
jcw4I thought you said you were fortified fwereade22:58
fwereadejcw4, I didn't say I'm not pressing on, did I :)22:59
jcw4hehe22:59
fwereadejcw4, just means I've got to split it up more before I can land it ;p22:59
jcw4fwereade: LGTM, plus minor comments23:05
* fwereade cheers heartily at jcw423:06
jcw4:)23:06
* fwereade wishes jc<tab> autocompleted23:06
jcw4well three tabs means you might as well just type it out23:07
jcw4I need a longer nick to justify the multiple tabs23:07
=== jcw4 is now known as jw4
jw4fwereade: there... jw<tab> ?23:18
fwereadejw4, man, now I need to rewire my muscle memory ;p23:18
jw4haha23:18
fwereadejw4, but it *is* nice all the same23:19
fwereadejw4, you wouldn't think that "jc" would be such a common prefix23:19
fwereadeomfg uniter tests passing23:19
jw4haha23:19
fwereadethis might have actually worked23:20
* fwereade is coder, hear me roar23:23
wwitzel3it either worked, or we have no coverage for what you just changed .. but really, they might as well be the same thing ;)23:37

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