/srv/irclogs.ubuntu.com/2015/01/23/#juju-dev.txt

=== arosales_ is now known as arosales
perrito666wallyworld_: THE amount of things my pr breaks that I had not noticed :p02:00
wallyworld_perrito666: wot? be with you soon, in a meeting02:01
wallyworld_perrito666: so what's broken?02:20
anastasiamacaxw: wallyworld_: PTAL http://reviews.vapour.ws/r/796/04:05
wallyworld_soon, knee deep in writing tests :-(04:05
=== ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Open critical bugs: None
anastasiamacwallyworld_: thnx :D04:13
axwanastasiamac: reviewed04:32
anastasiamacaxw: thnx :) will look04:32
anastasiamacaxw: thnx for review!04:37
axwnp04:37
anastasiamacaxw: from brief look at the cmments it's not far off :)04:37
axwanastasiamac: yes I think so, a few key assumptions to fix but mostly looking good04:38
anastasiamacr u happy for me to change unit name/storage name pair to storage id?04:38
anastasiamacor.... shall we allow show to "be a version of list for unit/storage pair04:38
axwanastasiamac: not sure, it's not exactly a very friendly interface04:38
axwanastasiamac: I guess it does double up on list if that's the case04:38
axwanastasiamac: list should allow you to filter on unit+storage04:39
axwanastasiamac: maybe just have it take storage ID for now04:39
anastasiamacaxw: k.... :D04:39
anastasiamacaxw: id or tag?...04:39
axwanastasiamac: ID at the user level, tag at the API level04:40
axwi.e. convert user-input ID to a StorageTag04:40
axwand pass that to backend04:40
anastasiamacaxw: awesome! will do04:40
menn0wallyworld_or axw: tiny review please: http://reviews.vapour.ws/r/797/05:00
axwlooking05:01
menn0axw: this fixes something that bit me while writing tests around the new envWorkerManager05:01
axwmenn0: reviewed05:03
menn0axw: cheers (agree with the comment. will fix)05:04
axwcool, nps05:04
anastasiamacaxw: made the changes...05:42
axwlooking05:43
axwanastasiamac: replied05:53
anastasiamacaxw: thnx :D05:53
anastasiamacaxw: m so gald to know that I ams ooo close :D05:55
anastasiamacam sooo*05:55
axw:)05:55
anastasiamacaxw: i'll address them now-ish... kids r coming home soon :(05:55
axwno worries05:55
wallyworld_axw: it's all very rushed as i have to disappear for a while, but here's storage-get implementation. the uniter worker factory tests use jujuconnsuite so the implementation works end-end http://reviews.vapour.ws/r/798/07:06
axwwallyworld_: cool, I'm just trying to get storage-attached working atm, will take a look in a bit07:07
wallyworld_no hurry as i'm gone for a few hours07:18
menn0axw: sorry to bug you again. another micro-review pls? http://reviews.vapour.ws/r/799/07:38
axwsure07:38
axwmenn0: LGTM07:40
menn0axw: tyvm07:41
=== fuzzy_ is now known as Fuzai
axwwoo08:20
axwwallyworld_: 2015-01-23 08:19:15 INFO juju.worker.uniter.context runner.go:149 skipped "data-storage-attached" hook (not implemented)08:20
axwfwereade: can you please cast your eyes over http://reviews.vapour.ws/r/800/, specifically the changes in the worker/uniter package. I mostly want feedback on the refactoring of HookSource/HookSender08:47
fwereadeaxw, certainly08:48
fwereadeaxw, from the summary, that's almost completely awesome, because I was planning to extract them myself at some point :)08:50
fwereadeaxw, but I'll take a look at the details ;)08:50
axwfwereade: great, hopefully the implementation lives up to it ;)08:50
dimiternhey axw08:54
axwheya dimitern08:54
dimiternmy new lxc.updateContainerConfig helper landed just now, please have a look when you can, as I designed it to be useful in general (not just networking) and should also help with configuring storage settings for lxc08:55
axwdimitern: awesome, thanks. I'll take a look now08:56
dimiternaxw, cheers08:56
fwereadeaxw, remind me, when exactly do the storage instances get put on the unit?08:57
fwereadeaxw, after the machine's set them up and everything's in place?08:58
axwfwereade: storage instances get created and assigned to a unit when the unit is created (the watcher logic is wrong atm)08:58
axwfwereade: it should be checking to see that the storage instances are provisioned08:58
TheMuemorning08:59
axwahoy08:59
fwereadeTheMue, o/09:00
TheMue;)09:00
dimiternhey TheMue, you've got a review btw :)09:00
fwereadeaxw, is the final intent that the unit only react once they are provisioned? or will the unit be responsible for any part of that?09:00
TheMuedimitern: ah, great, thx. will take a look09:01
dimiternTheMue, I haven't said :ship it: as I'd like to have another look when you implement the suggestions09:01
axwfwereade: the *uniter* will only react to provisioned ones, but there will be another worker in the unit agent that takes care of provisioning *some* storage instances (e.g. tmpfs)09:01
TheMuedimitern: sure09:02
fwereadeaxw, would it be reasonable to have that on the machine agent instead?09:02
axwfwereade: there will also be a storage provisioner on the state server (for IaaS volumes), and one on the machine agent (for disks)09:02
axwfwereade: not for filesystems-type storage instances I think, since they're owned by the unit09:02
fwereadeaxw, hm, I think something may have just crystallized for me09:03
fwereadeaxw, it feels like there's maybe a risk of repeating the mistakes we made with subordinates?09:03
axwfwereade: (btw, I'm not at all happy with the storage model atm, if you have suggestions I'm very happy to hear)09:03
axwfwereade: I'm not sure I know what those mistakes are09:04
fwereadeaxw, so the big one is making subordinates specific to units, not to machines09:04
axwfwereade: ok. so, in fact, storage instances can be owned by services or units, this could be extended to machines09:05
* dimitern is sick of typing "juju" instead of "git"09:05
dimiternit will be nice to be able to do  "juju commit -m "Changes after review" or "juju checkout master"\09:05
axwfwereade: in which case I can look at putting all provisioning on the machine agent09:05
fwereadeaxw, it means the relation scoping rules are weird, and if you have two colocated units of X with subordinate Y you *also* get two colocated Ys09:05
dimitern:)09:05
axwfwereade: for storage, I think that would be expected (placement is disabled for storage right now, though)09:06
fwereadeaxw, agreed on that front09:07
fwereadeaxw, ok, from another angle, I think my primary motivation09:07
fwereadeaxw, is that having more workers in the uniter makes it harder to unify the agents09:08
axwfwereade: yep, fair enough. I think I can deal with having it on the machine agent09:08
fwereadeaxw, there's a strong dose of "the physical disks are definitely the machine's responsibility, and it's weird to have certain storage types handled elsewhere"09:09
fwereadeaxw, but to try to explore the original feeling09:10
fwereadeaxw, machines have units09:10
fwereadeaxw, units have subordinate units09:10
fwereadeaxw, all of those things run together on the same machine09:11
fwereadeaxw, so there's a mismatch09:12
fwereadeaxw, it led to a horrible watcher09:12
fwereadeaxw, because the machine wants to know about the complete set of units that need to be deployed09:12
fwereadeaxw, and we need tolook all over the db to find them ;p09:13
axwah, I see09:13
fwereadeaxw, I'm thinking along the lines of "creating a unit/service adds a record for appropriate storage, somewhere it'll be seen by a suitable provisioner"09:14
fwereadeaxw, similarly, adding storage later does the same09:14
fwereadeaxw, neither of these things need to touch the unit/service docs09:14
axwfwereade: so we have a "storageinstances" collection that holds them09:14
axwfwereade: the docs have an "owner" field which is either a unit or service tag09:15
axwthat's currently how the watcher filters09:15
axwfwereade: possibly I'm doing something dumb, but they do touch the unit/service to add a reference (see my latest email)09:16
fwereadeaxw, right, indeed, that is necessary09:16
fwereadeaxw, yeah, I've been thinking about that and have yet to usefully formulate a response, but part of that is why I'm talking to you now09:16
axwok :)09:16
fwereadeaxw, so, exactly, it's the backreferences that make me uncomfortable09:16
fwereadeaxw, assume everything we have today but without the backreferences09:17
fwereadeaxw, but also associate storageinstances explicitly with the machine (and?, hmm, remote storage provider?)09:19
fwereadeaxw, such that in either case we can have a simple watcher that connects easily with the right storage provisioner worker09:20
axwfwereade: ok. so it's okay to destroy a unit that has active storage instances?09:20
fwereadeaxw, and then (analogously to how we set instancedata once a machine's provisioned) we can put the actual info the unit agent needs to know in another collection somewhere, such that it's simple for the unit agent to watch it and respond once it's there09:21
fwereadeaxw, and, yes, I think it is09:22
fwereadeaxw, so long as they do get cleaned up, it doesn't have to be the unit's responsibility09:22
fwereadeaxw, you could just have a cleanup step in state that finds all storage tagged with the removed unit and sets it to dying09:23
fwereadeaxw, in fact it's quite nice to have it on the machine for that reason as well09:23
axwfwereade: we *would* want to block machine destruction until that's done though right?09:23
fwereadeaxw, machine destruction, yes, I think so09:23
axwok, sounds reasonable09:24
fwereadeaxw, which would maybe imply backreferences on the machine09:24
fwereadeaxw, but I would also say, ideally, *not* on the machine *document*09:24
axwfwereade: right, I will try to avoid doing that09:25
fwereadeaxw, we need to be really careful about adding fields to those docs without carefully considering the impact on existing watchers09:25
fwereadeaxw, basically given the current watcher implementation it's usually sensible to group fields according to their read/write patterns09:26
axwfwereade: I'm going to have to rework the storage model a bit too. because of shared storage, we'll need to have a separate entity that models a unit's (machine's?) attachment to that storage instance09:26
axwlikewise for volumes/block devices09:26
axw(i.e. for multi-attach volumes)09:26
fwereadeaxw, got you09:27
fwereadeaxw, and in fact09:27
fwereadeaxw, that document containing the instancedata-equivalent09:28
fwereadeaxw, which is whatthe unit needs to see and watch09:28
* axw nods09:28
fwereadeaxw, maps pretty much perfectly onto that entity09:28
fwereadeaxw, there may still be a question about shared storage09:29
fwereadeaxw, ah-ha, maybe09:29
axw?09:30
fwereadeaxw, *provisioning* and *accessing* a given storage are fundamentally different responsibilities09:30
axwright09:31
fwereadeaxw, so all the provisioning happens on the machine agent09:31
fwereadeaxw, ie creation/destruction of actual substrate09:33
fwereadeaxw, and once the storage exists, theminimum necessary info to access it is handed over to the unit agent09:34
axwfwereade: I think that sounds sensible. the machine agent will provision it and send that info the the API server, which will update the storage instance *attachment* doc with the location, etc., which the unit will then see09:37
fwereadeaxw, the unit agent is then responsible for turning it into the form the actual unit expects -- possibly even including things like "mount the device" and "create the filesystem"? -- but, crucially, this becomes synchronised with the unit agent, because we can do that work inside operations, and queue suitable hooks for afterwards09:37
fwereadeaxw, the other thing09:38
fwereadeaxw, is that the storage-watching seems like it's targeted at the dynamic storage model and I think the first use case to satisfy is the "run all the storage hooks before the install hook" one09:39
fwereadeaxw, that's not to say it won't become useful09:40
axwfwereade: I was intending to do that next, because it's of less demo value :)09:40
axwfwereade: right now we just want to see the hooks firing when storage is assigned09:41
axwfwereade: so what I was going to do is after the deploy operation has finished, but before the "install" or "upgrade-charm" hooks are run, wait for the required storage to be attached09:42
axwis that the right place to interpose?09:42
fwereadeaxw, yes, I think so09:43
fwereadeaxw, so instead of queueing an install hook post-deploy we instead record and run some attaching-storage mode09:44
fwereadeaxw, forgive dumb questions, haven't read it all yet09:45
fwereadeaxw, local persistent what's-attached storage?09:45
axwfwereade: attached storage is storage that's assigned to the unit and ready for use. i.e. the block device is visible and/or the filesystem is formatted and mounted09:46
fwereadeaxw, we need to bear in mind that we could get bounced at any time, and we'd really like to be able to pick up seamlessly09:46
fwereadeaxw, how do we know we've already run the appropriate storage-attached hook?09:46
fwereadeaxw, I don't think we want to attach all the storage every time we start the agent09:47
fwereadeaxw, it's bad enough doing that with config-changed ;)09:47
axwfwereade: we don't (yet), I will be adding local state persistence09:47
axwa la the relationer09:47
fwereadeaxw, cool09:48
fwereadeaxw, but it brings me to another thing09:48
fwereadeaxw, that storage interface in uniter basically looks good, and the correspondence with relations is good and sane09:48
fwereadeaxw, the trouble is that I'm pretty sure the relationers are in the wrong place09:49
fwereadeaxw, and that they need to be associated more closely with operation state, and not with the uniter itself09:49
fwereadeaxw, are you roughly familiar with any of the uniter/runner code?09:51
axwfwereade: very roughly :)09:51
fwereadeaxw, there's a yucky callback into the uniter when we set up a hook context to find out what relation state currently looks like09:51
fwereadeaxw, but operations themselves are composed of methods that accept a state and return a new state09:52
fwereadeaxw, we could and should be feeding that info along an explicit path09:52
axwI see, so we're going uniter -> operation -> runner and then back to uniter via a callback?09:53
fwereadeaxw, so the state we pass into the operation methods includes what storage there is, what relations there are, etc etc09:53
fwereadeaxw, yeah exactly09:53
fwereadeaxw, I have done a reasonable job of splitting out the types that needed to exist09:54
fwereadeaxw, but now the borders are in place there's still a bunch of moving things to the right place09:54
axwfwereade: ok, I'll bear it in mind when getting to the context bit... which will be very soon09:54
fwereadeaxw, ofc, good point09:55
fwereadeaxw, yes, please make sure it's part of the state you make accessible via the operation executor09:55
fwereadeaxw, (and yes it's a *bit* weird that *that* is responsible for operation state persistence, feel free to massage it towards sanity)09:56
fwereadeaxw, and if you're doing that...09:56
fwereadeaxw, would you just move relations in the same way at the same time please?09:57
fwereadeaxw, you don't have to fix the callback, although it would be cool if you did09:57
fwereadeaxw, just, if you're moving one field please move the other because the same forces apply to both09:57
fwereadeaxw, making sense?09:57
axwfwereade: nope. moving which field?09:58
fwereadesorry09:58
fwereadeaxw, uniter.relations09:58
fwereadeaxw, I think is completely analogous to uniter.storage09:58
axwright09:58
fwereadeaxw, that storage info needs to get to the execution contexts09:58
fwereadeaxw, as does relation info09:58
fwereadeaxw, which currently uses a scary/evil callback09:59
fwereadeaxw, we should not repeat the relations mistake09:59
fwereadeaxw, we should make sure storage state is passed into operations in the same way the other local state is10:00
axwok10:00
fwereadeaxw, (see the uniter/operation.Operation interface)10:00
fwereadeaxw, (and Executor which uses it)10:00
voidspaceTheMue: dimitern: sorry guys - I'll be a few minutes late to standu10:01
voidspace*standup10:01
fwereadeaxw, this likely implies changing something about the Operation/Executor interface (or possibly the operation.State type??)10:01
fwereadeaxw, whatever you do to it to add storage, please also do to add relations10:01
axwfwereade: ok, understood. I'll need to figure that bit out first, but I'll do both at the same time10:02
fwereadeaxw, you can keep the field on the uniter and the callback to it -- just make sure the relations do get to the runner context via an explicit chain of calls, and then it'll be easy to remove the callback and the uniter's reference to relations10:03
axwfwereade: ok. sorry for being dumb, but where would relations and storage live if not on uniter?10:04
axwmodes feeds them...10:04
fwereadeaxw, I think they're part of operation state10:05
fwereadeaxw, not sure you've had a chance to keep up with the most recent uniter stuff?10:05
fwereadeaxw, particularly the operation stuff10:06
fwereadeaxw, wait, you did review 760 I think10:06
fwereadeaxw, so the direction we're currently moving in is10:06
fwereadeaxw, strip uniter down as far as we can, it's got too many responsibilities, and the only one that's *clearly* the uniter's problem is creating (and maintaining) the other components that need to work together10:07
fwereadeaxw, the filter, the juju-run handler, the actual main loop10:08
axwfwereade: ok. so uniter will be responsible for taking things from the filter and passing them to the operation state10:09
axwoperation state will encapsulate the relations and storage bits10:09
axwand ... will have a hook output channel?10:09
fwereadeaxw, to support this, the various tangled skeins of "what actually happens when we X changes" are being extracted into operations10:09
fwereadeaxw, which will ideally operate purely against the state they're given, but are currently supported by alarming numbers of callbacks10:10
fwereadeaxw, which is still better than before because at least we can test them in some detail10:10
fwereadeaxw, I'm not sure about the output channel10:11
fwereadeaxw, did you see relation.Peeker? I think it was 76110:11
axwI didn't look at that one10:11
fwereadeaxw, so the core idea there is that relying on one big select with a bunch of inputs is not actually good enough to get any sane sort of hook ordering behaviour10:12
fwereadeaxw, so relation.Peeker is an alternative to a HookSender for using a HookSource10:12
fwereadeaxw, it has a Peeks channel, which has something to give you if the source is not empty10:13
fwereadeaxw, when yu read from the peeks channel you get a Peek with a hook.Info, and Consume/Reject methods10:13
fwereadeaxw, you have to consume or reject the peek before it'll give you another, or read from the watcher again10:14
fwereadeaxw, but basically you can leave them to run in the background and only interrupt them when you know there's no higher-priority hook to run10:14
fwereadeaxw, so the "make it a HookSource" thing is great10:15
fwereadeaxw, but please make sure it works with Peeker as well as HookSender10:15
fwereadeaxw, all that CL has is the addition of the type, I don't use it yet10:16
axwfwereade: I did update relation/peeker.go, I just didn't look into what it does10:16
axwthanks for the explanation10:16
fwereadeaxw, perfect then :)10:16
fwereadeaxw, maybe non-obvious: this means I intend to do away with the whole starthooks/stophooks malarkey in modeabide10:17
fwereadeaxw, when we know about the relations we can just watch them forever and only check the queues when we need them10:18
axwfwereade: ahhh I see, so they'll just be running watchers (in a goroutine) all the time10:18
fwereadeaxw, yeah, I think it's much less complex10:19
axwyep10:19
axwI thought it was a bit awkward10:19
fwereadeaxw, since you're here and in this area though, another thing to be aware of and feel free to do if I haven't and it helps you10:20
fwereadeaxw, when passing storage state around10:20
fwereadeaxw, the current interface for Operation is wrong : it accepts a State, and returns *State, error, and the executor is responsible for writing out the new state10:21
fwereadeaxw, this is already awkward to some degree and will not make sense at all with relations and storage10:21
fwereadeaxw, it ought to be accepting something a State type that it can modify and then write if it wants to10:22
fwereadeaxw, because certain operations will absolutely want to change that state10:22
fwereadeaxw, attaching storage is absolutely something you want to record having done10:23
fwereadeaxw, as is recording relation hook state10:23
axwfwereade: how does the current interface not handle that?10:24
fwereadeaxw, magic callbacks into the Uniter! if you want a catalogue of my sins, see uniter/op_callbacks.go10:24
fwereadeaxw, hopefully I will get that down to (almost) nothing over time10:25
fwereadeaxw, and it's already paid off because now I can at least test what individual operations actually do in some detail10:25
axwfwereade: oh right, it modifies state but not the relation state10:25
fwereadeaxw, yeah10:25
fwereadeaxw, and the relation state modification happens in CommitHook iirc10:25
axwok10:26
fwereadeaxw, as you have on the Storage interface10:26
axwyup10:26
fwereadeaxw, when it would be much nicer to have the state-to-modify passed in directly in both instances10:26
axw:q10:27
axwoops10:27
fwereadeaxw, anyway, sorry my code led you astray10:27
axwfwereade: no worries, thanks for the lesson :)  this has been very informative10:27
fwereadeaxw, cool10:28
axwnot sure how I'm going to do all that by Tuesday though.. maybe not sleep10:28
fwereadeaxw, as always I am giving you high-level advice, we can't realise the vision all in one go10:33
axw:)10:33
fwereadeaxw, so, for example, so long as you do promise to fix it later10:34
fwereadeaxw, it would be very reasonable to start off by just tacking the storage state onto the existing operation.State10:34
axwfwereade: noted. I will probably have to use that line10:34
axwok10:34
fwereadeaxw, because I think you *do* need persistence of what you've done10:34
fwereadeaxw, and you can at least keep using an existing mechanism (ie executor writing it out for you)10:35
fwereadeaxw, (by you returning a state with whatever changes)10:35
* axw nods10:35
fwereadeaxw, fwiw, the other thing I need to do with uniter.relations10:36
fwereadeaxw, is to turn Update into an operation10:37
fwereadeaxw, so there will be storage ops, and relations ops -- neither of those will run hooks, but they will write out state that directly or indirectly queues other hooks10:37
fwereadeaxw, and uniter will hopefully shrink to almost nothing10:38
fwereadesorry bbs10:38
axwok10:38
fwereadeaxw, ok back10:45
fwereadeaxw, so do you feel usefully guided? :)10:45
axwfwereade: mostly. I'm not really seeing how I can get rid of PrepareHook/CommitHook yet10:46
axwin the callbacks10:46
axwfwereade: I mean, apart from coding relation/storage logic into the operations package10:46
fwereadeaxw, I think that's exactly what we need10:47
axwok10:47
fwereadeaxw, we currently have deploy ops, and these are analogous, I think10:47
fwereadeaxw, I need to do a RelationsChanged operation soon10:47
fwereadeaxw, I still don't have the full picture because of the starthooks/stophooks thing10:48
axwI see, so I'd be adding a StorageAttached operation which queues a <name>-storage-attached hook if it's committed10:48
fwereadeaxw, exactly10:48
fwereadeaxw, (what I might do with start/stop hooks is just make them run in every mode and shut down when the uniter shuts down10:49
fwereadeaxw, and that feels sort of correct10:49
fwereadeaxw, in that it's essentially just another kind of operation filter10:50
fwereadeaxw, and we don't start/stop all that every time uniter state changes10:50
axwsounds logical10:51
fwereadeaxw, I'm wondering whether uniter is eventually going to collapse down into a single worker.Runner constructor :)10:51
axwfwereade: heh, I was thinking that earlier :)10:52
fwereadeaxw, I think there's enough of that stuff going on that it's what we need somewhere10:52
fwereadeaxw, it's a single non-trivial responsibility and it deserves some isolation10:52
fwereadeaxw, we'll get there one day :)10:53
* dimitern steps out for ~1h11:29
fwereadeaxw, reviewed in some detail, hope it's helpful11:56
perrito666morning12:11
axwthanks fwereade, about to eat, I'll take a look later12:31
wallyworld_axw: i was thinking the storage-attached hook might reasonably pass in multiple storageids if several are attached before the hook fires12:48
anastasiamacaxw: updated PR. plugged in bare minimum :D13:06
axwwallyworld_: what's the point though? if you can't guarantee that?13:12
axwanastasiamac: awesome13:12
wallyworld_axw: similar to bulk calls - sure it may only be 1 most times, but why not allow for > 1 at minimal extra cost13:13
axwwallyworld_: I think it's more important to be consistent with other hooks. the most similar we have to compare to is relation hooks, and we don't combine hook calls for different relations13:13
wallyworld_ok, fair point, i'll change it. i'm not overly familiar with the design philosphy behind hooks13:14
axwwallyworld_: I think this is something that would be good to get fwereade's input on, maybe when you're at the sprint13:15
wallyworld_will do, i'll make it one for now - that will also simply the output and remove the need for parsing13:16
wallyworld_if we add an attribute key as you suggested13:16
fwereadewallyworld_, yeah, I think we'd prefer to go for granular and stay consistent13:16
wallyworld_fwereade: the cost is that it il translate into multiple api calls to get the instance details13:17
wallyworld_one api call per hook invocation13:17
fwereadewallyworld_, axw: bulk hooks are absolutely a good idea but one we always held off from in the past (and as you know I favour a something-changed approach for charms that reach a certain threshold of complexity13:17
fwereade)13:17
fwereadewallyworld_, axw: so I'd prefer us to stay consistent with the existing approach for now and have one invocation per storage instance as we have one invocation per remote unit13:18
wallyworld_ok, will do13:18
wallyworld_it's not per remote unit that i'm talking about - it's per storage instance13:19
wallyworld_a unit can require > 1 storage instances13:19
wallyworld_these may become attached and available on the host machine prior to the attached hook firing13:20
wallyworld_hence if we know of the many, we could pass them all into the hook for that unit, and a single api call made to get the storage instance details13:21
wallyworld_but, the preference is for one id per hook13:21
wallyworld_so i'll change it13:21
anastasiamacaxw: the Rb shows 1 issue against my PR but all issues are reolved and 1 dropped :P13:24
anastasiamacaxw: RB lies?... :D13:24
axwanastasiamac: *shrug*  I am reviewing now13:25
anastasiamacaxw: oh Awesome!! thnx :) didn't want to pull u from dina...13:25
axwnah, finished13:25
* dimitern is back13:31
axwanastasiamac: done. almost there, a couple more things (sorry)13:32
anastasiamacaxw: thnx for review. will address it tomorrow..13:34
axwanastasiamac: no worries, get some sleep :)13:34
anastasiamacaxw: sleep? what's that? :P13:35
axwfwereade: thanks for the comments. I'm looking into changing the storage stuff to an operation now, which I think will clean things up a bit in my code. if I do go ahead with that, I'll probably do a followup for the relation code when time's not so tight13:47
fwereadeaxw, yeah, you don't have to do that for relations -- it's just if you're moving the one field please send relations via the same path if and when it's ~trivial to do so13:48
jw4I've noticed a couple review comments in the last week or so about copyright headers - do we have a documented standard way to update copyright headers?14:01
jw42013,2014,2015?  2013-2015?  replace all with 2015? etc.14:02
perrito666jw4: new files get the current year14:03
jw4perrito666: makes sense - how do we update existing files though14:03
perrito666jw4: no clue14:03
perrito666I would say you are right n-m14:04
perrito666meh, vivid broke my skype14:04
axwjw4: first year of publication14:05
axwdocumented... no. there was a juju-dev thread on this a while ago14:05
jw4axw: what is the first year of publication?  the year the file was created, or the year a new function was added, etc. etc. -14:06
jw4axw: was there a conclusion on the mailing list? I'll have to go back and find it I guess14:07
axwjw4: good question. this is the point I say IANAL ;)14:07
axwjw4: *I* just put the year the file was created14:07
axwothers put the range14:07
axwsome put all the years with commas, but I think that is discouraged14:08
jw4axw: heh - I see.  I only ask because I've noticed an uptick on review comments giving different guidance14:08
jw4expected in January I guess14:08
hazmatperrito666, ericsnow minor ux feature bug 1414021 for backup downloads14:14
mupBug #1414021: Send size in download backup to allow for progress indicator <juju-core:New> <https://launchpad.net/bugs/1414021>14:14
perrito666hazmat: tx14:16
hazmatwhat version of juju is it that starts having the /environment/:uuid/endpoints .. trying to do some auto negotiation in the client14:16
=== ChanServ changed the topic of #juju-dev to: https://juju.ubuntu.com | On-call reviewer: see calendar | Open critical bugs: 1414016
sinzuidimitern, sorry I think your last commit broke local provider lxc jobs for trusty, vivid, and utopic.14:19
sinzuidimitern, bug 141401614:20
mupBug #1414016: Local-provider lxc Failed to create lxc_container <ci> <local-provider> <lxc> <regression> <juju-core:Triaged> <https://launchpad.net/bugs/1414016>14:20
dimiternsinzui, oh boy, looking - thanks14:21
TheMuedimitern: thx for review14:22
dimiternsinzui, can I get some more info for that bug? /var/lib/juju/containers/* and /var/lib/juju/removed-containers/*, as well as /var/lib/lxc/juju-*/config and /var/lib/lxc/jenkins-*/config ?14:25
dimiternTheMue, np14:25
sinzuidimitern, not at moment, 1.22-beta1 has started testing14:26
sinzuiI will visit a machine and try to run what was left in place14:26
dimiternsinzui, also these lxc jobs should all be running with logging-config: juju.container=TRACE14:27
dimiternsinzui, ok, that'll work14:27
sinzuidimitern, I sent a email with the logs14:39
dimiternsinzui, thanks!14:39
dimiternsinzui, ok I think I understood the problem and started to work on a fix14:40
sinzuithank you dimitern14:40
hazmathmm.. the charms facade is enabled in trunk, and is returned in login info, but invoking any of the Charms facade methods gets 'Error': u'unknown object type "Charms"'15:05
hazmatanastasiamac, is the charms facade active? feel like i'm missing something15:06
sinzuiperrito666, katco voidspace : I need help triaging this bug. It isn't clear why juju failed or if the issue is in the cloud image or network. https://bugs.launchpad.net/juju-core/+bug/141375215:21
mupBug #1413752: Bootstrapping to Openstack Environment fails with "no instances found" <hyperscale> <openstack-provider> <juju-core:New> <https://launchpad.net/bugs/1413752>15:21
alexisbsinzui, that bug looks like it may need to be looked at by the onyx team who are gone for the weekend16:14
alexisband hazmat anastasiamac should also be on her saturday :)16:15
sinzuialexisb, :/16:15
alexisbsinzui, I can send tim and team a note16:15
sinzuialexisb, I will subscribe tim and ask for him to give an opion16:15
alexisbsinzui, and of course if perrito666 katco voidspace and team can feel free to chime in16:16
cheryljIs there anyone around who can help me with a problem with Review Board?18:03
katcoericsnow: ^^18:22
ericsnowcherylj: I'd be glad to help :)18:22
cheryljthanks, ericsnow18:23
cheryljI just pushed some changes to address some review comments, but I'm not seeing that Review Board picked them up18:23
cheryljI see that it thinks there's another revision18:23
cheryljBut it shows nothing in the diff from this and the previous revision18:24
cheryljhttp://reviews.vapour.ws/r/770/18:24
cheryljif I go to the PR on github, I see the correct changes18:24
ericsnow\me takes a look18:24
katcocherylj: hm that should have happened automatically i think, but you can probably do "rbt post -u" to force the issue18:25
cheryljWell, I saw that it created a new revision18:25
ericsnowcherylj: did you refresh the reviewboard page? :)18:25
cheryljBut it didn't have the changes18:25
cheryljYes :)18:25
ericsnowcherylj: ah, "revision" 4 is the same as 3, right?18:26
cheryljyes18:26
katcocherylj: this was the change? https://github.com/cherylj/juju/commit/b9404581ae177ab7fcd9d3a12505c97405e3cc2818:28
ericsnowcherylj: hmm, as far as I can tell, the blank line you removed in your most recent commit is also gone in reviewboard18:29
katcoericsnow: yeah i was thinking that maybe RB's diff just is incorrectly hiding that18:29
katcoi.e. it doesn't show it if i toggle the whitespace flag on the diff page18:29
ericsnowkatco, cherylj: ah, right; I believe there is a setting in RB to ignore whitespace changes (or something like that)18:30
katcoericsnow: yeah it's in the bottom right of the control panel on the diff page18:30
cheryljHmm, the change was more than that.  Let me see if I can find the commit18:30
katcoericsnow: but it doesn't seem to be working18:30
katcocherylj: possibly? https://github.com/cherylj/juju/commit/03a14eff116a4edc28dcaa398c50141b090788f718:31
ericsnowkatco: yeah, I noticed that too.18:31
cheryljkatco:  yes, that's the one18:31
katcocherylj: ok so you just want to look at 2-4 then18:31
katcocherylj: it picked up that latest revision too which is "3"18:31
katcoi mean 418:31
katco"3" is the one you're interested in18:31
cheryljkatco, 3 doesn't have the changes from the last commit18:32
cherylj(the last one you linked to)18:32
katcocherylj: did you make the changes in rapid succession?18:33
katcothose last 2 commits?18:33
cheryljYes18:33
katcoericsnow: perhaps the github hook only picks the last commit? and if you do many quick ones it won't pick up some?18:33
katcocherylj: you will want to install "review board tools"18:34
katcocherylj: and rub rbt post -u18:34
katcorun even18:34
ericsnowkatco: I'll check18:34
cheryljkatco, thanks, I'll do that18:34
katcocherylj: https://www.reviewboard.org/downloads/rbtools/18:34
katcocd $GOPATH/src/github.com/juju/juju && rbt post -u18:35
ericsnowkatco: well, the hook didn't fail so something else is afoot18:36
katcoericsnow: odd; can you tell if the hook grabbed all PRs, or only the last one?18:36
ericsnowkatco: it simply records the PR event (in this case "synchonize") with all it's info18:37
katcoericsnow: but in this case there were multiple PR events, right?18:38
ericsnowkatco: the hook then (on the RB side) makes a GH API request to pull the current diff for the PR18:38
ericsnowkatco: each PR event would trigger the hook separately18:38
ericsnowkatco: which is what happened18:39
katcohrm. interesting.18:39
ericsnowkatco: and each time the hook did not fail18:39
katcoericsnow: well, the lesson is clear. don't be too productive. ;)18:39
ericsnowcherylj: when did you push those changes?18:40
cheryljericsnow, about an hour ago18:40
ericsnowcherylj: okay, I see one "synchronize" event for you about an hour ago (not two or more)18:42
ericsnowcherylj: so if you did two pushes in rapid succession then it may be that github merged those into one hook event18:42
ericsnowcherylj: and it's conceivable that that situation resulted in some weird behavior on RB18:43
ericsnowcherylj: could you try refreshing your branch somehow (to trigger the GH hook again)?18:44
cheryljericsnow, just did, and just got notification from RB...  let me look at the diff18:47
cheryljericsnow, and it worked!18:48
cheryljthanks ericsnow, katco18:48
katcocherylj: happy coding! ericsnow is the RB master :)18:48
ericsnowcherylj: I'll chalk it up to github doing something weird that RB couldn't handle :)18:48
ericsnowkatco: I wouldn't go that far :P18:49
cheryljhehe :)18:49
katcoericsnow: hehe :)18:49
cheryljI just got a call from day care and my daughter is not feeling well :(18:49
cheryljso, off I go18:49
katcodoh18:49
katcohope she feels better cherylj18:49
cheryljme too, thanks katco18:49
=== kadams54 is now known as kadams54-away
mbruzek1kateco what is the flag for the one-line juju status output again?19:22
katcombruzek1: whoops sorry, your ping didn't register. you can do short, line, or oneline19:40
mbruzek1kateco this is not in juju help status19:40
katcombruzek1: hm what version? it is on mine19:41
voidspaceright, EOW19:41
voidspaceg'night all19:41
katcombruzek1: (also, no e in katco if you want to ping me)19:41
mbruzek1oh sorry19:41
katcombruzek1: no worries! :)19:41
mbruzek11.20.14-trusty-amd6419:42
mbruzek1http://paste.ubuntu.com/9839141/19:42
katcohttps://github.com/juju/juju/blame/master/cmd/juju/status.go#L34-L3519:43
katcombruzek1: i think it will be in 1.21, let me check19:44
katcombruzek1: the "oneline" flavor is in 1.2119:45
katcombruzek1: 1.22 will support all the flavors19:45
mbruzek1katco: Ok I will have to update to get that.  Thanks.19:45
katcombruzek1: yeah looks like. sorry about that19:46
katcoalexisb: ping19:47
katcosinzui: ping19:57
sinzuihi katco19:57
katcosinzui: hey, happy fri :)19:57
katcosinzui: just a heads up, it looks like all of the status related work got missed for the release notes19:57
katcosinzui: i'm adding it in, but i thought i'd let you know in case it's a process issue19:58
sinzuikatco, thank you. dimitern also gave me some revisions. Just update the gdoc. I also made change for the official release next week19:58
katcosinzui: thanks, will do. just didn't know if there was a process issue that we might want to look at for next time. i honestly don't remember what all i worked on for v1.2119:59
sinzuikatco, I read my history of merged branches.19:59
katcosinzui: weird, is it the status stuff not in there?20:01
sinzuikatco, I see your changes that you demoed in Brussels.20:02
sinzuikatco, http://pastebin.ubuntu.com/9839406/20:02
katcosinzui: ah ok, yup that's it :)20:03
katcosinzui: in addition to new filtering methods20:03
katcosinzui: thanks, this is my first involvement with our release notes, so i wasn't sure how this all worked. i've updated the document.20:09
alexisbkatco, pong20:28
alexisbwhats up?20:28
katcoalexisb: hey it was just a question about the release docs20:28
katcoalexisb: i think sinzui got me straightened away (see backlog)20:28
alexisbah I see you and sinzui conversation below that cool20:29
katcoalexisb: ty for responding :) and happy friday to you!20:29
alexisbkatco, cool, sorry for the delay I just got back20:29
katcoalexisb: no worries at all20:29
alexisband happy friday to you too!20:29
sinzuialexisb, I am editing the 1.22-beta1 release notes. I thought MESS would be more complete for 1.22 https://docs.google.com/a/canonical.com/document/d/1IPmXCwujtq8zZs9mlfps7wGcBYYv4MLC_8w2bN2CetQ/edit20:31
sinzuialexisb, I am wondering if the info in this doc is stale20:31
alexisbsinzui, let me go look20:31
alexisbsinzui, that info is correct, lots of it is there but is hidden behind feature flags and/or not exposed to the user20:32
alexisbMESS is definitely not targeted for 1.2220:33
sinzuialexisb, rock. then once I finish these notes, I will continue with the release of 1.22-beta1, which is already queued for release20:36
alexisbsinzui, you da' man! thank you20:36

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