/srv/irclogs.ubuntu.com/2013/06/20/#juju-dev.txt

wallyworld__gary_poster: ping00:19
* thumper wonders why his branch isn't being picked up by tarmc00:32
thumperhi wallyworld__00:32
wallyworld__hi00:32
thumperwallyworld__: would be good if you could take another look at https://codereview.appspot.com/10370044/00:34
wallyworld__ok00:34
thumperalso, I think that https://codereview.appspot.com/10361045/ is missing a prereq00:35
wallyworld__thumper: when we start a container via StartContainer(), do we really need to pass in tools and environ config? Why do containers need these and StartInstance in the provisioner doesn't?00:55
thumperwallyworld__: yes, in order to create the cloud-init file00:56
thumperand the provisioner does00:56
thumperwell...00:56
wallyworld__StartInstance(machineId, machineNonce string, series string, cons constraints.Value, info *state.Info, apiInfo *api.Info) (instance.Instance, error)00:56
thumperthe environ provisioner has the environement00:56
wallyworld__that's from the orker interface00:56
thumpercontainers don't00:56
thumperand tool selection for environment machines is done based on what you ask for00:57
thumperfor the container, it is got from the parent machine00:57
wallyworld__ok, that makes sense, thanks00:57
wallyworld__when we have so many params, i sort of like to do a struct to hold them00:58
wallyworld__but no biggie00:58
* thumper shurgs00:59
* thumper calls bikeshed00:59
thumperbut I can understand where you are coming from00:59
wallyworld__lots of other places in the code do it. i'm not saying it's a blocker or needs to be fixed, just thinking out loud01:00
wallyworld__thumper: i can't see the container manager New() implementation01:05
wallyworld__am i going blind?01:05
thumperwallyworld__: is golxc ContainerManager method01:05
thumperyou said to embed it01:06
wallyworld__ok, thanks, makes sense01:07
wallyworld__thumper: so when we stop a container, why to we call manager.New() to get a container reference. why don't we ask for the existing container by id or something01:07
wallyworld__New() just seem counterintuitive to get an existing container01:08
thumperwallyworld__: New just gives an object that wraps a name01:08
thumperNew returns a new container object01:08
thumperdoesn't create the container01:08
wallyworld__very confusing01:08
wallyworld__New normally implies a new entity that is managed by the manager is created01:09
wallyworld__ie the underlying foo didn;t exist before but does exist after New is called01:10
wallyworld__so i read that code and expect a whole new container to be created01:10
wallyworld__and once created, we shouldn't call New again just to get a reference to it01:11
wallyworld__surely some other method can be used, like Get()01:11
thumperwallyworld__: https://bugs.launchpad.net/juju-core/+bug/1174778 can you comment on this?01:27
_mup_Bug #1174778: generate-config needs to be updated for new HP Cloud images <juju-core:New> <https://launchpad.net/bugs/1174778>01:27
thumperwallyworld__: also, this one https://bugs.launchpad.net/juju-core/+bug/118344601:31
_mup_Bug #1183446: Error uploading tools into openstack: 401 Unauth <juju-core:New> <https://launchpad.net/bugs/1183446>01:31
wallyworld__thumper: looking now, had to talk to tiler01:51
bigjoolsI am told that trying to share symbols in _test.go files between packages doesn't work, is that right?02:27
thumperbigjools: whazzup?02:36
thumperbigjools: but the answer is yes if you are asking what I think you are asking02:36
bigjoolsthumper: I want to export test features from one package so another can use them02:36
thumpergeneral practice is to move useful functions into juju-core/testing02:37
bigjoolsnot gonna happen here, because it's a function in gwacl02:37
bigjoolswe want to expose something that creates a test object in the library02:39
thumperwhat is gwacl?02:44
bigjoolsthumper: azure library03:04
bigjoolsI guess the question can be re-phrased as, does exporting symbols in test files actually do anything?03:04
thumperbigjools: no, don't think so03:12
thumperbigjools: make a testing package inside gwacl?03:12
bigjoolsthumper: we thought of that but it presents more problems03:12
thumperwhy?03:13
bigjoolsthe same exporting problem in reverse mainly03:13
thumperwat?03:14
bigjoolswe have test code that pokes around in package structs and what not03:14
thumperoh, internal testing03:14
bigjoolsyeah03:14
thumperwe don't do that (on the whole)03:14
thumperif we need to poke internals03:15
thumperwe add functions to export_test.go03:15
thumperwhich is i the main package03:15
thumpernot the _test package03:15
thumperthat way they are only exported for the test03:15
thumperbut generally not03:15
bigjoolswhat does exporting mean in a test?03:15
thumperbigjools: as in:03:16
thumperfunc SomeTestFunc(c *C, some value)03:16
thumperso it is accessible from the test file03:16
bigjoolsin a different package?03:16
thumperno, just in the tests for that package03:16
* bigjools is confused now03:17
thumperbecause that is the only time the _test files are used03:17
thumperok, example time...03:17
bigjoolsI realise that - but I don't understand the need to export for use in the same package03:17
thumperbigjools: hangout?03:17
bigjoolssure03:17
thumperbigjools: you start?03:17
bigjoolshead or bunny? (can never remember)03:17
thumperhead03:18
thumperhttps://code.launchpad.net/juju-core/+activereviews03:44
thumperbigjools: can you add ~juju-core to ~maas-maintainers?03:47
bigjoolsthumper: why would I want to do that?03:48
thumperbigjools: do you want to maintain the project? or do you want core to?03:48
bigjoolsit's me for now03:48
thumperI know it is03:49
thumperthat's why I asked you03:49
bigjools:) it's not really anything to do with juju core though03:49
thumperif you are happy to keep it, that's fine with me03:49
thumperwas an action item for me to chase from our last meeting03:49
bigjoolsoh really?03:50
thumperaye03:50
bigjoolsgomaasapi now belongs to ~juju03:55
bigjoolsmaas-maintainers are down as driver though, feel free to change03:55
bigjoolsthumper: got a sec to help with a compile error?04:02
thumpersure04:02
thumperjam: ping04:02
* bigjools assembles pastebin04:02
bigjoolsthumper: http://paste.ubuntu.com/5782476/04:04
* thumper clicks04:05
bigjoolsmissing this:04:05
bigjoolsfunc (t *TestTransport2) RoundTrip(req *http.Request) (resp *http.Response, err error) {04:05
bigjoolsforgot to paste it04:05
thumperbigjools: you need an &04:06
bigjoolswhere?04:06
thumpertransport := &TestTransport2{}04:06
thumperTestTransport2 doesn't implement the interface04:06
bigjoolsok god this is the pointer vs non-pointer interface stuff04:06
thumper*TestTransport2 does04:06
thumperaye04:06
bigjools:(04:06
bigjoolsthanks04:07
thumperwallyworld__: ping04:16
wallyworld__hello04:16
thumperwallyworld__: does machine.Destroy take containers into consideration?04:17
wallyworld__think so, let me check04:17
wallyworld__yes, it won't allow a machine to be destroyed if it has containers04:17
thumpercool04:18
* thumper stopping for a bit, back for meetings tonight04:28
=== thumper is now known as thumper-afk
=== tasdomas_afk is now known as tasdomas
TheMuemorning06:14
jamTheMue: morning06:14
TheMuejam: hiya, thanks for review. will change to caps for abbrevs, yes06:18
TheMuejam: regarding the location of the test server I have thought for some time. I need it in the ec2 package to test the reader but also in  the synctools to test there. *sigh*06:19
jam TheMue: can you put it into the testing/ locations ?06:19
jamTheMue: I can live with it, but it would be nice to be clearly test-only code that doesn't have to end up in the juju and jujud binaries06:20
TheMuejam: thought about testing too. in this case i would have to duplicate the structs for the xml marshalling/unmarshalling06:21
TheMuejam: but maybe that price is worth it, yes06:21
jamTheMue: fair enough.06:21
jamId probably say not06:21
jamTheMue: I think you've already found a reasonable balance.06:21
jamI didn't know about all the complexities. so LGTM where it si.06:22
jamis06:22
TheMuejam: thx06:22
=== TheRealMue is now known as TheMue
rogpeppemornin' all07:06
TheMuerogpeppe: heyhey07:14
rogpeppeTheMue: hiya07:14
jamgreetings wallyworld_07:41
wallyworld_hi07:41
jtvjam: hi there!  Did you see how my test-for-proper-locking helper worked out, in the separate branch?08:09
jamjtv: I did, and I posted a comment on it.08:09
jamlooks pretty good.08:09
jtvAh, thanks!08:09
jamit doesn't quite match what you originally requested, but it does assert that the function doesn't return until after you've unlocked.08:10
jtvjam: thumper suggested making it a checker.  Would love to, but right now I've got to get the basics out of the way, and they're blocking the team.  Funny how each improvement leads to a new one.  :)08:13
=== thumper-afk is now known as thumper
jtvjam: I meant this, newer proposal: https://code.launchpad.net/~jtv/juju-core/generic-locking-test/+merge/17047708:42
jtvBased on yours but pared down to something very simple & reusable.08:42
jamjtv: I did review it, but I forgot to submit my inline comments.08:47
jamjtv: sorry about that. 2-step review process and all08:48
jamjtv: go-bot rejected your change because you added a new depdency. I imagine we need lp:gwacl installed on the machine?08:59
jtvjam: argh!  Thanks for pointing that out.  Yes, we do.09:05
jamjtv: done09:05
jamyou can resubmit09:05
jtvThanks very much.  :)09:05
jtvHadn't realized we hadn't had the dependency operational yet.09:05
jtvjam: blast.  Now we also need gwacl's dependencies.  For starters, it needs github.com/andelf/go-curl09:09
jtv(Looking for any other dependencies)09:09
jamjtv: curl ?09:09
jtvjam: yes, the built-in http library doesn't support tls renegotiation.09:10
jtv(That set us back a bit!  Requests just failed with the words "no renegotiation," and the rest we had to figure out from source)09:10
jamjtv: so do we need 'libcurl-dev' ? do you know what package?09:11
jam(libcurl is one of those that has 20 different versions based on what SSL lib you use, etc)09:11
rvbaWe need libcurl4-openssl-dev.09:11
jtvWhat Raphaël said.  :)09:11
jamrvba: wow, that brings in a lot09:12
jamkrb5, ldap2, gpg-errror, gcrypt11, etc, etc.09:12
jtvThere are also some packages *inside* gwacl that we need: launchpad.net/gwacl/dedent, launchpad.net/gwacl/logging09:13
jamjtv: isn't that provided by 'bzr branch lp:gwacl' ?09:13
jamjtv: 'go get launchpad.net/gwacl/...' succeeded09:13
jtvI imagine it is... just wanted to save you later roundtrips if it came to that.09:14
jtvThat's it.  No other dependencies that I can see.09:14
jtvShall I retry?09:15
jamjtv: you can retry as much as you like :)09:15
jammay not *work*, but hopefully it will this time.09:15
jamjtv: go-curl brings in a cgo dependency, which I think we were trying to avoid?09:20
jamjtv: can you at least send an email to juju-dev bringing it up09:20
jtvjam: I have no idea what the issue is that you're talking about...  could you elaborate about what dependency you mean, and why we're trying to avoid it?09:27
jamjtv: go-curl has .c code in it. Which  means it isn't pure go code. We just changed goyaml to be pure go, and we implemented 'golxc' in terms of shell calls rather than lib calls because of not wanting to use cgo.09:29
jamjtv: It is something that sounds like it needs a juju-dev conversation, but maybe I'm better to bring it up. I'm just in a call now and didn't want to forget about it.09:29
jamjtv: test suite failed, not sure why09:30
jamshould be on the MP shortly09:30
jtv /o\09:30
jamjtv: ffs, that looks like the mgo stuff that I thought I had fixed09:31
jtvYup.09:31
jamjtv: ah, subtly different09:33
jtv:(09:34
jamjtv: this is 1 connection "InUse" the old failure was 1 connection "Alive"09:34
jamjtv: 2 columns in the output, the 1 moved from the right to the left.09:34
jtvI can't imagine it being related to my branch, but that may be a lack of imagination on my part.09:34
jtvThe universe of possible failures tends to defy imagination.09:35
jamjtv: well, the same test is failing09:35
jtvSame test as with that problem you worked on?09:35
jtvMaybe it's one of those random failures?09:35
jtvPasses sometimes, fails sometimes?09:36
jtvIf so, I guess I could just retry landing mine.  But then we'd better be damned sure my branch isn't to blame.  :)09:36
jamjtv: I'm running the test directly right now09:36
jamjtv: So far I've run it 12 times and it hasn't failed without your branch. Will try it with your branch09:41
* jtv hopes for success09:41
jamjtv: run in isolation it passes with your change. We have to figure out where this 'InUse" connection is from.09:45
jtvShall I give my landing another go then?09:46
jamjtv: right now I have the lander blocked while I'm testing09:46
wallyworld_rogpeppe: hi, if you are free at some point i have a watcher question10:31
TheMuefwereade_: ping10:40
rogpeppe1wallyworld_: ask away10:43
rogpeppe1wallyworld_: sorry i didn't see your ping10:44
=== rogpeppe1 is now known as rogpeppe
wallyworld_rogpeppe: i have a watcher and a test. if i comment out the SetProvisioned() line in the test, there should be no event but the watcher still gets a change and i can't see why. if i println inside the watcher, i see an empty change come through and i don't know why. here's a pastebin of some code snippets https://pastebin.canonical.com/93139/10:45
rogpeppewallyworld_: watchers always provide one initial event10:46
wallyworld_oh. why?10:46
jamwallyworld_: to give you a starting point10:46
rogpeppewallyworld_: so that you know you're in sync10:46
wallyworld_ok. and that initial event is empty?10:47
rogpeppewallyworld_: that initial event gives you the current state of the world10:47
rogpeppewallyworld_: as the watcher sees it10:47
wallyworld_ok, thanks.10:47
wallyworld_rogpeppe: also10:47
wallyworld_do you know about the mega watchwr?10:47
rogpeppewallyworld_: i do10:47
rogpeppewallyworld_: at least, i really *should* do :-)10:47
wallyworld_rogpeppe: long story, but i have moved the InstanceId and Nonce attrs off machineDoc and int a separate instanceMetadata doc where other machine instance things like mem, cpu cores etc are now stored10:48
wallyworld_the mega watcher tests expect to listen to machine and see instanceids10:49
rogpeppewallyworld_: ah, you'll need to add another collection to the megawatcher stuff10:49
wallyworld_rogpeppe: sure. but i'm worried about what uses the mega watcher to listen to instance ids. does anything?10:49
rogpeppewallyworld_: yeah, the GUI does10:49
wallyworld_what does it use InstanceId for? I will need to coordinate the changes then since when i land this, the ui stuff will break10:50
rogpeppewallyworld_: is the instanceMetadata collection already watched by the megawatcher?10:50
wallyworld_not yet10:50
wallyworld_that doc is new10:50
wallyworld_it holds instance related things10:50
wallyworld_like mem, cores, id, nonce etc10:51
wallyworld_it's Id is the same as the machine to which it is related10:51
wallyworld_its10:51
wallyworld_when i say mem, id; i mean mem, instanceid10:51
wallyworld_when I say Id, I mean _id aka primary key10:52
rogpeppewallyworld_: look at the backingStatus in megawatcher.go for a pattern to follow to update the megawatcher10:53
wallyworld_rogpeppe: so why does the gui need to know the InstanceId? can't it just send requests using the machine.Id?10:53
wallyworld_rogpeppe: i'll look at the backinfStatus, thanks. luckily there's only 3 failing tests out of the entire test run10:54
rogpeppewallyworld_: it can, but we maintain the invariant that the properties you see when asking for an entity are the same things the you see changing with the AllWatcher10:54
rogpeppewallyworld_: i think that's a good thing to maintain10:55
rogpeppewallyworld_: and we provide that information currently, so i don't think we should break backward compatibility10:55
wallyworld_so if InstanceId is not longer a property on machine.....10:55
rogpeppewallyworld_: it is as far as the client is concerned10:56
rogpeppewallyworld_: even if it's not held in the database that way10:56
wallyworld_what business reason does the gui have for needing the instanceid?10:56
rogpeppewallyworld_: so we watch the metadata collection and update the machine entity in the megawatcher store when the metadata changes10:57
gary_posterwallyworld_, hi10:57
wallyworld_gary_poster: hi10:57
rogpeppewallyworld_: it's actually a little simpler than for the statuses, because instanceMetadata can only apply to a machine, i assume10:57
wallyworld_gary_poster: can i fill you in on the current conversation?10:57
rogpeppewallyworld_: where statuses can apply to several different kinds of entity10:57
wallyworld_rogpeppe: yes, 1-110:57
gary_posterhave a call in 3 wallyworld_ .  I *thinjk* the answer is "we need it as a key"10:58
wallyworld_gary_poster: would love to chat perhaps after your call10:58
gary_posterwallyworld_, you'll still be around in 1 hr?10:58
wallyworld_yep10:58
gary_posterok will ping wallyworld_10:58
wallyworld_thanks10:58
wallyworld_rogpeppe: in the meantime, i'll look into making the current megawatcher tests pass10:58
wallyworld_by adding a new collection etc10:59
rogpeppewallyworld_: cool10:59
wallyworld_wish me luck10:59
wallyworld_i've not done anything with this bit of the codebase before10:59
rogpeppewallyworld_: sorry for the extra work - that's the down side of using different collections for attributes with the same primary key10:59
rogpeppewallyworld_: feel free to ping me at any time10:59
wallyworld_rogpeppe: no need to apologise. when the data model changes, there are always consequences11:00
rogpeppewallyworld_: i'm not sure that anyone else has added stuff to that particular part of the code base before11:00
* wallyworld_ straps on the headlamp and goes diving in11:01
rogpeppewallyworld_: the basic model is that a multiwatcher maintains a store of information on all the entities that are currently being watched11:01
wallyworld_the *entire* data model?11:01
wallyworld_what if we have 1000000 machines11:01
rogpeppewallyworld_: that's indeed a current problem with having a watcher that watches for all changes11:02
rogpeppewallyworld_: in the future, we'll probably move to a model where clients only watch for some summary of the state11:03
wallyworld_rogpeppe: so am i right in assuming the store of info on the client mirrors exactly the persistent model?11:03
rogpeppewallyworld_: so we won't need to keep all info in mmeory11:03
wallyworld_same classes etc11:03
rogpeppewallyworld_: not really11:03
rogpeppewallyworld_: it's exactly derived from it11:03
rogpeppewallyworld_: but it holds the entities that are observed by the client11:04
rogpeppewallyworld_: which don't necessarily map directly to the entities stored in the database11:04
wallyworld_ok, so if there's a machineDoc with A,B attriutes, there'll be a clientMachine with A,B also etc11:04
rogpeppewallyworld_: status being a good example11:04
rogpeppewallyworld_: not necessarily11:04
rogpeppewallyworld_: we don't provide all attributes to the client11:04
rogpeppewallyworld_: and we provide extra attributes in some cases (for instance the machine status)11:05
wallyworld_ok. will look at the code with that in mind11:05
rogpeppewallyworld_: the indirection is implemented by the    Backing.Changed(all *Store, change watcher.Change) error method11:05
wallyworld_rogpeppe: so if gary just uses InstanceId as a key, he could also use Machine.Id right?11:05
rogpeppewallyworld_: i wouldn't dare to guess11:05
rogpeppewallyworld_: and i definitely think we should provide the instance id through the AllWatcher, so i think the point is moot11:06
wallyworld_i'm not across what AllWatcher does11:06
wallyworld_ie how it differs from mega watcher11:07
rogpeppewallyworld_: megawatcher.go implements the AllWatcher11:07
rogpeppewallyworld_: they're the same thing - just the AllWatcher is the "official" name11:07
wallyworld_when you say provide InstanceId, does it have to be attached to a Machine object?11:07
wallyworld_or can we expect code to listen to instanceMetadata to get it?11:08
jamwallyworld_, mgz, danilos: The Juju team manager meeting is going to overlap with our standup, if it is done in time, I'll be there, but I might miss it.11:08
rogpeppewallyworld_: it must be attached to the params.MachineInfo object11:08
rogpeppewallyworld_: no, i don't think the client should need to know that there are two collections underneath11:08
wallyworld_so the watcher listens to both and merges the data into MachineInfo?11:09
rogpeppewallyworld_: in the future, we might provide a multiwatcher that can watch a limited subset of the state, but that's not where we are now.11:09
rogpeppewallyworld_: yes11:09
wallyworld_i'd still like to know what the business case is for needing InstanceId though11:09
wallyworld_InstanceId is now just one bit of info that becomes available when a machine is provisioned - we now also have mem, cores etc11:10
wallyworld_we didn't have all this previously11:10
rogpeppewallyworld_: we did provide the instance id through the AllWatcher11:11
wallyworld_if InstanceId is just being used as a key, the Id will do fine11:11
rogpeppewallyworld_: InstanceId is also shown to the user11:11
wallyworld_we did provide it, but do we need to continue prviding it if there's no business reason for it11:11
mgzjam, wallyworld, danilos: if we could mumble the standup, that would save me various bother (and jam could be on mumble and hangouts at the same time :P)11:11
rogpeppewallyworld_: (it's an important piece of info, after all)11:11
rogpeppewallyworld_: I think that's probably the only way that the GUI finds out about instance ids11:12
rogpeppewallyworld_: and i think backwards compatibility is worth preserving11:12
rogpeppewallyworld_: there are other people using the API too11:12
rogpeppewallyworld_: outside of juju-core11:12
wallyworld_backwards compatibility is good if the cost is not too great and/or the business reason is high11:13
rogpeppewallyworld_: i don't think the cost is too great here; and the benefits are significant11:13
rogpeppewallyworld_: you can use the AllWatcher as a way to show a dynamically updated system status11:14
jammgz: if only I could split the headphones so I listen to you with my right ear, and the managers with my left :)11:14
wallyworld_ok, i'll look at the code. i'm still wondering why it's such an important piece of info. just curious as to why it's needed11:14
jammgz: and you *can* be on 2 hangouts at once, I believe.11:14
wallyworld_what benefit do users get from seeing it?11:14
rogpeppewallyworld_: it's the only way a user can cross-correlate juju instances with instances in the ec2 management console, for example11:15
wallyworld_ah ok, that makes sense11:15
wallyworld_and i guess the same would hold for openstack11:15
rogpeppewallyworld_: indeed11:15
wallyworld_if there is a management console11:16
rogpeppewallyworld_: there are presumably non-juju tools for managing openstack11:16
wallyworld_yes11:16
rogpeppewallyworld_: there y'go then :-)11:16
wallyworld_rogpeppe: it's still all a bit abstract - i'll look at the status stuff and try and understand what's being done and apply that to this case. thanks for the input.11:17
rogpeppewallyworld_: np11:17
mgzfwereade_: have reproposed dimiter's machiner watcher branch as https://codereview.appspot.com/10439043 - can you give me a few more details on how to test watcher id validity?11:17
rogpeppewallyworld_: again feel free to ask about specific bits of code or anything else11:17
wallyworld_rogpeppe: will do for sure. it's way past my EOD so i'll take a proper look tomorrow11:18
rogpeppemgz: if you want to test invalid watcher ids, you can always make raw api calls directly as necessary.11:18
jammgz: I also need to find out what is going on with co-installability with go-juju and py-juju.11:19
mgzit's less that I want to test invalid ones, and more that I want to verify what I get is valid.11:19
mgzjam: we need to update how we do the ppa11:19
mgzbecause it's diverged from the fixed packaging11:19
mgzthe backporting to 12.04 is also much requested, but pretty much just ubuntu-process (we can basically take the existing raring packages for both pyjuju and gojujuju)11:20
mgztooju11:20
wallyworld_fwereade_: fyi, i put up a mp to refactor the instance metadata api. i did it as a pre-req to the branch storing the metadata in state because the latter branch needs the allwatcher stuff modified and i want to get the api tweak in trunk asap https://codereview.appspot.com/10384049/11:22
fwereade_wallyworld_, tyvm, sorry meeting now11:23
wallyworld_np, just a heads up11:23
mgzwallyworld_: hm, I approve of that idea in principle, looking at the branch now11:24
wallyworld_ty11:25
mgzdanilos, jam, wallyworld: I'm on mumble11:30
danilosmgz, coming11:30
danilosjam: I don't think you can do two hangouts, last I tried (for on-air stuff), it complained11:30
rogpeppei'd appreciate a review or two of these CLs, if anyones feels inclined to:11:41
rogpeppehttps://codereview.appspot.com/10364046/11:41
rogpeppehttps://codereview.appspot.com/10437043/11:41
rogpeppeanyone11:41
jamrogpeppe: I *think* I figured out why my 'hack' patch worked, and the actual one that landed didn't.11:53
gary_posterwallyworld_, you still want to talk?11:53
rogpeppejam: oh yes?11:53
jamIt seems that socket.Close *doesn't* remove the socket from the alive counts.11:53
jamSo when I returned a Closed socket.11:53
jamIt was calling socket.Release() on it11:53
rogpeppejam: ah!11:53
jamnow that I return an Err11:53
jamnobody is Releasing it11:54
jamso the code needs to be 'if server.closed: socket.Release(), socket.Close() return err"11:54
rogpeppejam: i should have looked deeper, sorry for slack code review!11:54
jamrogpeppe: well, the test suite was passing11:54
jamand I didn't do quite enough rigor testing of the juju-core test suite with the updated patch11:54
wallyworld_gary_poster: hi, i think i'm ok now. the db model is changing to support instance metadata (ram, cores etc) for provisioned machines. part of the change is moving InstanceId from machine to a new entity. but i think i can still keep the watcher interface the same for your stuff11:54
rogpeppejam: Release doesn't do a Close then?11:54
jambecause it takes 10s for each run, and only fails once in a while when there is a release.11:55
jamrogpeppe: Release is "put this back in the available queue" vs "Close" is don't let anyone talk on this anymore.11:55
jamI would have thought Close would do a Release, but it doesn't11:55
rogpeppejam: so they're entirely orthogonal?11:55
jamRelease shouldn't clase.11:55
wallyworld_gary_poster: i just wanted to find out how much you depended on InstanceId - i think you display it to the users11:55
gary_postercool thanks wallyworld_ .  FWIW, backwards incompatible changes without a transition period make me concerned generally11:55
jamrogpeppe: not in *my* head :)11:55
rogpeppejam: neither mine :-)11:55
jamClose calls kill11:55
jamwhich makes the socket unusable11:55
jambut it doesn't mark it as not InUse11:56
jamjust NotAlive11:56
fwereade_mgz, sorry, just out of meetings -- I guess that successfuly using the watcher id is the clearest demonstration of its being valid11:56
rogpeppejam: a subtle distinction...11:56
jamrogpeppe: well that is the 2 columns11:56
jamand why the count moved from one into the otherc11:56
jambut my old patch worked11:56
wallyworld_gary_poster: yeah, understood. i wasn't sure how your stuff used the attribute ie the impact of any change, hence i wanted to find out before doing too much on it11:56
jambecause it happened to still call release11:56
gary_posterwallyworld_, not sure but we might also need it as a key.  would have to look through code but won't since you are not changing now11:56
jambecause it used the 'send a request even if it is closed'11:56
rogpeppejam: presumably because it was relying on the usual code patch for cleaning things up11:56
gary_postercool thanks wallyworld_11:56
rogpeppes/patch/path/11:56
jamrogpeppe: yep11:56
jamand the test I wrote11:57
jamjust was testing that it noticed the server was closed11:57
jamwhich it did11:57
gary_posterhave a good night wallyworld_ :-)11:57
wallyworld_gary_poster: thanks also11:57
rogpeppejam: ha. gustavo was right about that test11:57
wallyworld_will do11:57
rogpeppejam: too embedded in implementation detail11:57
jamrogpeppe: but it also gave precise injection of concurrency11:57
jamwhich is usually the tradeoff11:57
rogpeppejam: agreed11:57
jam"run this 100 times and maybe it fails once"11:57
jamvs "this will always fail if you got it wrong"11:58
jamrogpeppe: it wouldn't be hard to have had my test case also check that all sockets had been fully cleaned up.11:58
rogpeppejam: but it would be nicer still to have a test that didn't delve so much into the implementation11:59
rogpeppejam: though i appreciate that might be hard...11:59
jamrogpeppe: precise injection of concurrency is usually very white-box testy12:00
jamotherwise it is in the "well maybe they happened at the same time"12:00
jamor "maybe the scheduler did them in an order that always passes"12:00
rogpeppejam: sometimes just having a slow test that runs things in a loop, failing probabilistically isn't a bad approach12:01
niemeyerAnd very white-box tests that exercise precise scenarios of concurrency are generally a drag. In practice, it's trivial to introduce race conditions that go uncovered.12:01
jamrogpeppe: right now, juju-core test suite almost always fails when run in practice, but if you run just the test, it almost always passes12:01
niemeyerGood morning/afternoon, by the way :)12:01
rogpeppeniemeyer: yo!12:01
jamniemeyer: that is true, but you can also add those cases as you find them. The main issue is without adding those cases12:03
jamall you know is that you probablistically made things better.12:03
niemeyerjam: If you Release the socket and it's injected back onto a closed server, the socket is immediately closed.12:03
niemeyerjam: Sure, but I don't consider it a good tradeoff. You're testing an extremely specific race condition, not the next one12:04
jamniemeyer: RecycleSocket doesn't add it to unused, but *doesn't* call socket.Close()12:04
jamniemeyer: unless I'm missing something, you must call both Release and Close on the socket.12:05
niemeyerjam: Indeed, you're right, because Server.Close already closed htem12:05
jamOne to unset the IsAlive flag, and one to unset the InUse flag.12:06
niemeyerjam: As long as we don't allow new sockets to be created (as the old code was doing) or left open, it should be okay12:07
jamniemeyer: by the time server.Connect has returned, it has created a new socket that has been acquired, so it needs both.12:07
niemeyerjam: On a meta level, for race-prone logic, what I appreciate doing is punching the code with concurrency and checking that it survives in a consistent way12:08
niemeyerjam: That's actually useful, because it's covering the past and future cases of uncovered races.12:08
niemeyerjam: It's what mgo/txn does, for example12:08
rogpeppei find it interesting, given what people say about Go's memory non-safety, that almost none of the race conditions we've discovered have resulted from memory races12:10
rogpeppeand would probably have been possible to occur in any of the so-called "concurrent-safe" languages12:10
niemeyerrogpeppe: Sure, I don't think anyone expects code that is not memory-racy to bug-free12:11
niemeyerrogpeppe: If that wasn't the case, every Python application would be bug-free :)12:12
rogpeppethis particular issue is a good example - it could easily have occurred in haskell with STM12:12
rogpeppeniemeyer: sure12:12
rogpeppeniemeyer: i just think it's an interesting thing to observe12:12
niemeyerrogpeppe: I agree12:12
niemeyerrogpeppe: Reminds me of The Rubber Boots post12:12
rogpeppeniemeyer: what post is that?12:12
niemeyerrogpeppe: https://plus.google.com/u/0/107994348420168435683/posts/993U42yVbfk12:13
* rogpeppe sees the dark clouds gather above and wonders if it might be a good moment to go inside12:13
rogpeppeniemeyer: thanks - i vaguely remember that now12:14
TheMuerogpeppe: we had a kind of apocalypse yesterday evening12:15
rogpeppeTheMue: lots of rain?12:15
rogpeppeTheMue: or angels of darkness and death?12:15
TheMuerogpeppe: heavy thunderstorms12:15
TheMuerogpeppe: thankfully the center has been more south of us, so here not much rain. but around my hometown ...12:16
* rogpeppe can't decide if this particular large black cloud might not produce rain and have sun following it, or if i might have to run for it12:17
ahasenackhi guys, just wanted a quick assessment of https://bugs.launchpad.net/juju-core/+bug/119272812:19
_mup_Bug #1192728: differing behavior with pyjuju: config-get all json <juju-core:Confirmed for themue> <https://launchpad.net/bugs/1192728>12:19
ahasenackif you agree it's a bug, or not, etc12:19
TheMueahasenack: it is, i'm just working on it12:20
ahasenackbasically config-get with no key returns all keys. In pyjuju, it only returns keys that were set (manually or via default values)12:20
ahasenackin juju-core it returns all12:20
ahasenackTheMue: ah, ok, thanks12:20
TheMuerogpeppe: ask www.nsa.gov/prism, they know if it'll rain12:20
rogpeppeTheMue: only because they bug the Met Office :-)12:21
jamniemeyer: so with my "patch" to widen the concurrency hole (set pingerDelay to 5s and add a 10ms delay in newSocket). I can get the juju-core test suite to fail 8-in-10 times, and adding a line 'socket.Release()' before socket.Close() in AcquireSocket, it passes 10-in-10.12:21
jamniemeyer: do you want a branch for that, or you can do the change yourself?12:21
rogpeppeahasenack: have you encountered a problem with that behaviour?12:22
rogpeppeahasenack: (the Go-juju behaviour, that is)12:22
niemeyerjam: I can do the one-liner quickly.. I'm actually just trying to write a high-level test that exposes that logic to concurrency in a black-box fashion12:22
ahasenackrogpeppe: yes, one charm of ours basically dumped all juju config values into the config file12:22
rogpeppeahasenack: i'm wondering if there's another way to see all possible config options without looking directly at the charm config metadata12:22
ahasenackrogpeppe: in gojuju we started getting "url = None"12:23
ahasenackrogpeppe: in pyjuju we didn't get that key, because it wasn't set12:23
jamniemeyer: you can have a goroutine calling AcquireSocket and closing it, and another closing the server at some random point in time. But you need real hardware concurrency, rather than single-threaded 'maybe the scheduler decided to switch goroutines'.12:23
jam(i think)12:23
rogpeppeahasenack: interesting, thanks12:23
ahasenackrogpeppe: honestly, I'm surprised with both12:24
rogpeppeahasenack: what behaviour would you expect?12:24
jamniemeyer: the problem is that the test suite *I* have, without the changes to delay, passes 10-in-10, and really only fails under direct test about 1-in-50 or so.12:24
ahasenackrogpeppe: one can argue both ways, that both behaviours are correct I think12:24
jam(it fails when running the whole test suite about 3-in-4, I'm guessing because of extra load/memory/timing changes/etc.)12:24
ahasenack"config-get" will return all config keys. The ones that weren't set will have a value of None12:24
ahasenackor12:24
ahasenack"config-get" will return all config keys that have a value set either manually or via a default value12:24
rogpeppeahasenack: the former is the current Go behaviour, right?12:25
ahasenackrogpeppe: right, and I'm slightly in favor of it12:25
ahasenackrogpeppe: at this point I guess it's more a question of maintaining backwards compatibility12:25
rogpeppeahasenack: yeah12:25
rogpeppeahasenack: maybe we could add a "-a" flag12:25
rogpeppeahasenack: so that the current Go behaviour is still available ('cos it's useful) but backward-compatibility is preserved12:26
ahasenackhm12:26
ahasenackso the go behaviour that we have now would only happen if you added "-a", for "all"?12:26
TheMuerogpeppe: -a or --all?12:28
rogpeppeTheMue: maybe both, meaning the same thing12:28
rogpeppeahasenack: yes12:28
TheMuerogpeppe: as an option like --format12:28
ahasenackseems nice12:29
ahasenackthe docs would say something like this12:29
ahasenack"config-get with no key specified will return all keys that have a value, either set manually or via a default value"12:30
ahasenack"if -a is provided, then all keys, regardless of their value, will be returned"12:30
rogpeppeahasenack: "config-get with no key specified will return all keys that have a value that is not None" ?12:31
ahasenackwhat if I set "None" in the config? Is there an equivalent yaml value for python's None?12:32
rogpeppeahasenack: because i think it might be possible to manually set a config setting to its original unset value12:32
rogpeppeahasenack: it's a good question, i'm not sure12:32
rogpeppeahasenack: i *think* that "" is always unset, but fwereade_ has poked at this a lot more recently than me12:33
ahasenackI find myself reading your version several times over to understand it12:33
rogpeppeahasenack: yeah, double negatives are never good12:33
rogpeppeahasenack: "config-get with no key specified will return all keys that have a value"12:33
rogpeppeis probably good enough12:33
rogpeppes/that have/with/12:33
ahasenack+1, but I prefer that have12:34
fwereade_ahasenack, rogpeppe: I have a lurking feeling that it will actually include those without values12:34
rogpeppefwereade_: indeed12:34
rogpeppefwereade_: that's the bug12:34
fwereade_ahasenack, rogpeppe: (independent of default substitution for missing values ofc)12:34
rogpeppefwereade_: https://bugs.launchpad.net/juju-core/+bug/119272812:34
_mup_Bug #1192728: differing behavior with pyjuju: config-get all json <juju-core:Confirmed for themue> <https://launchpad.net/bugs/1192728>12:34
fwereade_ahasenack, rogpeppe: ah-ha, ok, thank you12:35
rogpeppefwereade_: but we think the current go behaviour is actually useful, so the proposal is to add a -a (and/or a --all) flag12:35
rogpeppefwereade_: with which you'd get the current behaviour12:36
ahasenack--include-unset?12:36
ahasenackwe have two "all"s in here12:36
ahasenackconfig-get with no key returns "all" keys (with values set)12:36
fwereade_rogpeppe, ahasenack: --full? --complete?12:36
ahasenackand -a returns all keys again (regardless of value)12:36
rogpeppefwereade_: i think -a has quite a bit of historical precedent12:37
fwereade_rogpeppe, fair enough, don't let me bikeshed it :)12:37
fwereade_rogpeppe, ahasenack: I'm +1 on this then12:37
fwereade_TheMue, I see you're assigned to it12:37
TheMuefwereade_: yep12:37
fwereade_TheMue, it should just be a trivial tweak in jujuc I think12:38
TheMuefwereade_: already working on config-get, there is another issue12:38
ahasenackrogpeppe: "config-get with no key specified will return all keys that have a value" s/all//12:38
TheMuefwereade_: looks like, yes12:38
fwereade_TheMue, ah, what's the other issue?12:38
rogpeppeahasenack: or s/all/any/ ?12:38
TheMuefwereade_: https://bugs.launchpad.net/juju-core/+bug/119270612:38
_mup_Bug #1192706: config: empty strings return null with --format=json <bitesize> <cmdline> <jujud> <juju-core:In Progress by themue> <https://launchpad.net/bugs/1192706>12:38
ahasenackrogpeppe: works too12:38
fwereade_TheMue, hmm, when was an empty string ever a valid value for anything?12:40
fwereade_TheMue, it's not settable12:40
TheMuefwereade_: as i understood default is no empty string but the string '""'12:41
TheMuefwereade_: two double quotes in the yaml12:41
niemeyerjam, rogpeppe: Waiting for sockets to die: 451 in use, 46 alive12:41
fwereade_TheMue, that's an empty string, try unmarshalling that yaml12:43
rogpeppefwereade_: is it possible to explicitly set an empty string for a string-typed config value?12:43
fwereade_rogpeppe, it never was before, empty strings were always converted to "delete" internally12:43
niemeyerjam, rogpeppe: http://paste.ubuntu.com/5783538/12:43
rogpeppefwereade_: yeah. it does seem a bit wrong though. sometimes i might *want* an empty string even though the charm default is non-empty.12:43
fwereade_rogpeppe, ok, but thus far it has been impossible except apparently via this default backdoor12:44
rogpeppeniemeyer: that's more the kind of test i was imagining12:44
rogpeppeniemeyer: +112:44
TheMuefwereade_: if i've seen it right we currently don't handle a default value if a key is missing12:45
fwereade_TheMue, sorry, restate please12:46
TheMuefwereade_: in the example of the issue a default: is used12:47
jamfwereade_: I just sent an email to juju-dev trying to summarize the API for Upgrader as I see it. Can you at least skim it and see that it matches what you got out of our conversation?12:47
fwereade_jam, I'll try, I'm rather backlogged today :)12:47
TheMuefwereade_: maybe i'm not yet deep enough in our code, but i haven't seen where we handle it12:48
fwereade_TheMue, default is handled at ReadConfig time12:48
jamfwereade_: I'm not working on it till Sunday anyway12:48
jamno rush12:48
jamniemeyer: pingDelay*10 seems a bit funny. can you make the const pingDelay 20 instead ? (so you get a feeling for the range from the const at the top)12:49
TheMuefwereade_: ah, ic, so looked at the wrong place12:49
TheMuefwereade_: thx for the hint12:49
jamah, I guess I see why it is separate.12:49
fwereade_TheMue, and hits the ""-becomes-nil logic when figuring out the actual default12:49
niemeyerjam: It's not the same thing, but sure.. it'll probably hit the bug either way12:50
TheMuefwereade_: just started to take a look into config-get, but it's earlier. good to know12:50
fwereade_TheMue, I am a bit nervous about having separate validation paths for default settings and normal settings12:50
TheMuefwereade_: will have to look at it first12:51
TheMuefwereade_: but a small different topic before12:52
TheMuefwereade_: would like to merge the moved ec2 http storage reader12:52
jamniemeyer: so nm, because you use pingDelay as s12:52
TheMuefwereade_: it has two lgtms but i would like to discuss the location of the test server with you12:52
jamI would say you probably want pingDelay +/- randomTime12:53
jamas the time.Sleep part12:53
jam(possibly only - ?012:53
niemeyerjam: Nah.. it's simpler.. taking the ping delay down to 1 already triggers it12:53
niemeyerjam: Just letting them fight a little bit is enough12:53
TheMuefwereade_: i made it public iin the same package, as i have to use it their for the test and in synctools for the test. other location would be testing, but in this case i would have to duplicate the xml marshaling structs12:54
niemeyer(even without random)12:54
TheMuefwereade_: so both solutions have their downsides12:54
TheMuefwereade_: what do you say, keep it  in ec2 or move it to testing?12:54
fwereade_TheMue, ok, cool, I will see if I can figure it out quickly12:55
TheMuefwereade_: thx12:56
fwereade_TheMue, ah, ok, it's a full-fledged server, not just canned data?12:57
TheMuefwereade_: it's the same one like before, a faked one but handling the requests of the http reader12:59
TheMuefwereade_: delivering the index xml and the files (simplified ones out of a map)13:00
niemeyerjam, rogpeppe1 : It's fixed and up13:02
niemeyerbbl13:03
rogpeppe1niemeyer: thanks13:03
niemeyerrogpeppe1: np13:03
fwereade_TheMue, ISTM that it's a bit wrong to reuse the same structs... it renders the tests somewhat tautological13:05
fwereade_TheMue, how about cutting the internal structs down to just the fields we care about, and using the full structs (ideally with some actual values filled in) in the testing server?13:05
TheMuefwereade_: would be possible, yes. we don't use very much of the structure.13:07
fwereade_TheMue, if it's not too much hassle I think that would be ideal13:07
TheMuefwereade_: and also move the server to testing then?13:08
fwereade_TheMue, yes please13:08
TheMuefwereade_: no, should be simple and feels even better for me13:08
fwereade_TheMue, awesome news13:31
TheMuefwereade_: just re-proposed it13:33
fwereade_TheMue, cool, ty13:33
rogpeppe1mgz: you have a review13:37
mgzrogpeppe1: ta13:40
TheMueargh, missed the change in synctools test, but now a (hopefully) final propose13:43
jtvjam: I guess you figured out the problem with that test?13:46
fwereade_rogpeppe2, TheMue, kanban14:02
rogpeppe2fwereade_: trying14:03
rogpeppe2fwereade_: it doesn't seem to like me currently14:04
fwereade_rogpeppe2, it's been a bit picky with me lately too14:04
fwereade_rogpeppe2, let's give it a minute14:04
rogpeppe2fwereade_: it's just not loading the page14:04
rogpeppe2fwereade_: other connectivity seems ok14:05
rogpeppe2fwereade_: same problem trying to connect to plus.google.com14:05
fwereade_rogpeppe2, I have had that too14:05
fwereade_rogpeppe2, rebooting my router seems to help, but it's probably superstition14:05
rogpeppe2fwereade_: google.com just fine14:05
=== wedgwood_away is now known as wedgwood
jamjtv: yeah, I sorted it out14:20
jammgz: Can you go to the cross-team meeting again today14:20
jam?14:20
mgzjam: can if I reboot, it's now, right?14:31
mgzcan someone invite me on g+?14:33
benjirogpeppe2: here's your syntax: juju set option=∅14:41
benji;)14:41
ahasenackhi guys, I got myself in a dying loop: http://pastebin.ubuntu.com/5783889/14:48
ahasenackI will try to reproduce it, but basically it's a ceph unit, with a subordinate, and I ran "juju destroy-unit ceph/3"14:48
ahasenackand all hell broke lose :)14:48
ahasenackthat pastebin is happening in a loop14:48
FunnyLookinHatWow - my crash course in GoLang has made me more frustrated with it than anything...  apparently it can't handle null values in JSON responses.  :-/14:53
mgzFunnyLookinHat: it can, but probably not in the way you expect14:54
FunnyLookinHatmgz, well - all I know is that juju-core can't bootstrap to my devstack because it's failing on a null value14:55
mgzyou can unserialised to a pointer type in the struct, or use an intermeduary form14:55
FunnyLookinHathttp://hastebin.com/rokukasixi14:55
mgzFunnyLookinHat: file a bug (and then probably just fill in the description in your devstack config)14:55
FunnyLookinHatYeah I'll do that - going to make sure it's not some patch I applied to Goose inadvertently14:55
mgzyou don't even need to file a bug, just +affectsmetoo bug 118882514:57
_mup_Bug #1188825: If description is unset, goose doesn't understand 'null' value <serverstack> <Go OpenStack Exchange:Confirmed> <https://launchpad.net/bugs/1188825>14:57
FunnyLookinHatPerfect14:57
mgzyou can just that in devstack14:57
mgzI haven't got a step-by-step for it though14:57
=== tasdomas is now known as tasdomas_afk
FunnyLookinHatright right - I can figure that much out - thanks for the bug ref14:58
mgzdpb1: ^see the above, do you remember off-hand what keystone config you needed to set for that?14:58
dpb1mgz: jamespage actually worked-around it. I'm not sure what he set.  james?15:02
jamespagemgz, you need to have an empty description in the tenant/project15:03
mgzah, so when you create it via the keystone api?15:04
mgzrather than in a conf file?15:04
jtvAny reviewers available?  I had to make this a native Launchpad review, because there was an unlanded prerequisite branch: https://code.launchpad.net/~jtv/juju-core/session-certificate/+merge/17061115:24
mgzlooks reasonable to me jtv, though haven't read the prereq yet15:29
jtvThanks mgz — the prereq has landed by now15:30
mgz..prereq does seem to be merged? or did the bot blow up again15:30
jtvIt wasn't landed at the time I wrote that, but it s now.  :)15:30
mgzjtv: you can just run `lbox propose -cr -v` in the branch now for the normal method then?15:30
* jtv decodes15:31
jtvIt's proposing...15:33
mgznewTempCertFile is surprisingly manual, doesn't go help you with any of that?15:36
* mgz just looked up the implementation out of curiosity, as hadn't looked at the original mp for it15:36
jamespagemgz, yes15:38
jamespage(I'm lazy and did not specify one when setting up tenants for serverstack)15:38
mgzjtv: hm, seems the rietveld proposal is still confused about something15:38
mgzjamespage: thanks15:39
jtvmgz: I was just updating the LP MP because it didn't get the link to the Rietveld MP.15:39
jtvmgz: ouch...  lots and lots of diff!15:40
jtvMaybe we can just stick with the native MP?15:41
jtvI'm not too worried about the final merge, because that's going to be based on the LP diff not the Rietveld diff.15:42
mgzI'd expect it to be correct, indeed15:46
mgzjam/bot smarter than goetveld15:46
jtvgoetveld...  "goodfield"?15:48
mgzdon't expect the non-dutch to make sense when squidging dutch and english together :)15:53
jtvWhy on Earth not?15:56
jtvAny backup reviewer for this branch?  The Rietveld MP got a little messed up, but the Launchpad one is good: https://code.launchpad.net/~jtv/juju-core/session-certificate/+merge/17061115:57
jtvrogpeppe2 maybe?   ^15:58
jtv(And thanks mgz for the first review :)15:59
rogpeppe2jtv: if you merge trunk into the prereq and push it, then re-propose, it might sort out the rietveld problem16:00
rogpeppe2jtv: obviously you'd need to pump the pipeline too16:00
jtvI don't have a pipeline there actually.16:00
jtvThe prereq is already landed.  I had hoped that would make things simpler.16:01
mgzmerging trunk would probably work, though shouldn't really be needed again...16:01
jtvI'll give it a go...16:01
mgzI think the issue is basically goetveld doesn't understand three-way merges, at all16:01
jtvTurns out there was a conflict, too.16:03
jtvmgz, rogpeppe2: re-proposing updated version of my branch...  Fingers crossed!16:06
rogpeppe2jtv: you've merged and pushed the prereq too, presumably?16:06
jtvThat was already landed.16:07
jtvSo implicitly that happened as well, yes.16:07
rogpeppe2jtv: it doesn't matter16:07
rogpeppe2jtv: lbox diffs against the branch that it finds in launchpad16:07
rogpeppe2jtv: which won't have had trunk merged into it unless you did so explictly16:07
jtvAhhh16:07
rogpeppe2jtv: despite the fact that it was merged *into* trunk itself16:08
jtvGotcha.16:08
jtvI have a new Rietveld MP now, and it updated my Launchpad LP but kept the old (broken) Rietveld link.  So I updated manually.16:10
jtvBut get this: the two Rietveld MP ids are near-identical, with just one digit somewhere in the middle being different!16:11
jtvThanks mgz & rogpeppe2 for helping me out of this.  I'll have to leave now, but I'm in a better state.  :)16:12
rogpeppe2jtv: that's much more common than you might think16:12
rogpeppe2jtv: due to the way that rietveld allocates ids16:12
rogpeppe2jtv: have you got a link?16:12
jtvhttps://codereview.appspot.com/1044704316:13
jtv(While I triple-check that I have the right one here :)16:13
rogpeppe2jtv: that's much more like it! :-)16:15
jtvYup, much more modest size.16:16
jtvI think I'll just delete the old one, before some poor passer-by tries to review it.16:17
jtv(Very courageous of the Rietveld MP to have a Delete button with no Undo and no confirmation dialog! :)16:18
rogpeppe2jtv: you have a review BTW16:46
jtvThanks!16:46
jtv(Yes I know I said I was gone for the evening...  No backbone :)16:46
ahasenackguys, is there some sort of timeout involved in this error?17:42
ahasenackerror: cannot put charm: cannot make Swift control container: failed to create container: juju-51e360f7f9cbfdf5d24fdb84aa0d411217:42
ahasenackcaused by: failed executing the request https://swift.canonistack.canonical.com/v1/AUTH_850578306acb4f1baeaceae75ff7ada1/juju-51e360f7f9cbfdf5d24fdb84aa0d411217:42
ahasenackcaused by: unexpected EOF17:42
ahasenackI'm wondering because that particular charm has a big'ish tarball inside it, something like 6Mb17:43
ahasenackI wonder if that is uploaded to the swift container17:43
ahasenack(and I changed my control bucket id already, don't worry)17:44
rogpeppe2yay, live test with machine agent connecting via the API worked!17:50
rogpeppe2ahasenack: sorry, not sure i can help there without more info17:51
rogpeppe2ahasenack: and it's eod for me17:51
rogpeppe2see y'all tomorrow!17:51
ahasenackrogpeppe2: ok, I'm looking through the code trying to find out where it defines timeouts for this connection17:52
rogpeppe2ahasenack: it seems a little unlikely to be a timeout, but y'never know17:52
rogpeppe2ahasenack: it might just be the underlying TCP connection failing17:52
rogpeppe2ahasenack: i mean - unlikely to be a timeout that we've built in17:53
ahasenackI'm getting that a lot recently17:53
ahasenackI'll resort to tcpdump soon17:53
=== hatch_ is now known as hatch
fwereade_.20:57
thumpermorning21:11
thumperfwereade_: would love a quick chat if you are up and bored22:29
fwereade_thumper, hey, I'm really sorry, I am hyperfocused22:29
thumpernp22:29
fwereade_thumper, and I haven't done any reviews :/22:29
* thumper is just reproposing the broker one with the right pre-req22:30
fwereade_thumper, but I'm *this* close to nailing the destroy-services-quicker bug, and I think we can do it backward compatibly22:31
thumperawesome22:32
thumperfwereade_: quick question, I'm adding a job type for JobEnvironProvisioner, should I add one for JobFirewaller at the same time?22:38
fwereade_thumper, those two are JobManageEnviron22:39
thumperI know, now...22:39
thumperdo we want to keep them like that?22:39
fwereade_thumper, task is more granular than job22:39
thumperor break them out22:39
fwereade_thumper, is the idea22:39
thumperI could just shelve this bit and just use JobManageEnviron22:40
thumperis that your suggestion?22:40
fwereade_thumper, yeah, I think JobManageEnviron implies run-an-environment-provisioner22:40
thumperkk22:40
* thumper removes pipe22:40
fwereade_thumper, I guess that's one of the things that causes me to lean towards having more than one top-level task in play22:41
thumperhmm...22:41
fwereade_thumper, the task implementation is shared which is great22:41
fwereade_thumper, but they're being run for different reasons22:42
thumperfwereade_: you thinking that we rename provisioner to environ-provisioner22:42
thumperand add one for lxc?22:42
thumperif they are managed by the outer task runner22:42
thumperit is certainly simpler22:42
fwereade_thumper, I'm not 100% sure we'll need extra types for the lxc-provisioner22:43
fwereade_thumper, I think that's just a task primed with the right watcher and broker22:43
fwereade_thumper, the environ casehas extra funky watching so the actual provisioner is wrapped there22:44
* thumper nods...22:44
thumperlet me see if I can get this working22:44
thumperI'll keep the multi-task runner the jujud bit itself22:44
fwereade_cool22:44
fwereade_I think it might work out quite neat22:45
* thumper goes to see what a machiner actually does22:46
thumperarse22:47
* thumper needs to go back to refactoring the state info getter22:48
=== wedgwood is now known as wedgwood_away
* thumper will test this version in ec2 to make sure the provisioner still works23:11
* thumper sighs23:25
thumperforgot to upload tools23:25
thumperat least my client works with 1.11.0 tools23:25
arosalesDave C. around?23:48

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