/srv/irclogs.ubuntu.com/2015/06/18/#juju-dev.txt

waiganiwallyworld: can you cast your eyes over this when you have a moment: http://reviews.vapour.ws/r/1955 (ignoring unknown tools)00:03
wallyworldalready looking00:03
waiganithanks :)00:05
thumperdavecheney: got a minute?00:16
thumperdavecheney: nm...00:17
wallyworldthumper: free now00:17
thumperwallyworld: let me try something first...00:17
wallyworldok00:18
mwhudsondavecheney: do you know why this happens? http://paste.ubuntu.com/11733285/00:18
mwhudson(trivial is a GOARCH=arm binary)00:19
davecheneythumper: whats up00:39
thumperdavecheney: I was going to talk to you about dumping the logs on timeouts, but I have another approach right now00:39
* thumper is deep in it00:39
davecheneymwhudson: first guess, alignment00:39
davecheneyhmm, not that, that's aligned properly00:40
mwhudsonmm00:40
mwhudsonyeah, no functions that have the same alignment get disassembled ok00:41
mwhudsonbah grammer00:41
mwhudsonit seems everything before main.main gets disassembled ok00:41
mwhudsonmaybe thumb/arm confusion?00:41
mwhudsonhttp://paste.ubuntu.com/11733349/ <- i wonder what that ... is hiding00:42
* mwhudson reads binutils, is not enlightened00:46
davecheneythat never helps00:47
thumperFFFAAAAARRRRRKKKKKK00:48
thumper (╯°□°)╯︵ ┻━┻00:48
davecheney??00:48
thumperI think I have found the cause of the deadlock test00:48
thumperand it harks back to a worker not created properly00:48
thumpernot using the agent config for the logdir00:48
* mwhudson has a super bad feeling00:48
thumperdamnit...00:49
thumperperhaps not...00:50
* thumper digs some mroe00:50
davecheneythumper: surely we don't need the rsyslog worker churning in the background all the time00:50
mwhudsondavecheney: i think it's 'marker symbols'00:50
mwhudsonto indicate thumb, data or arm00:50
davecheneymwhudson: O_O00:50
thumperno...00:51
mwhudson$a/$t/$d00:51
davecheneyoh those buggers00:51
thumperdavecheney: while that sucks, it isn't the cause of this problem00:51
mwhudsondavecheney: they end up in the stuff from runtime/cgo00:51
davecheneyand their friends $f and $t00:51
thumperdavecheney: this is a naked channel write00:51
mwhudsonand the last one is a $d i guess?00:51
axwthumper: I'm here now00:53
thumperok this is definitely the problem00:53
thumperaxw: that's ok, don't need you now :)00:53
axwexcellent00:54
mwhudsondavecheney: yes, that's the problem00:56
thumperI'm pretty sure I can make the tests pass and not block, but I have a feeling the blocking may still happen in the wild00:56
mwhudsoni guess i can use objcopy to remove them all...00:56
davecheneymwhudson: what do marker symbosl do ?00:59
davecheneyshift obdump into another 'mode' or something ?00:59
mwhudsonyes, exactly00:59
mwhudson$a == what follows is arm insns00:59
mwhudson$d == what follows is data01:00
mwhudson$t == what follows is thumb01:00
mwhudsoni don't know if anything other than objdump cares about them01:00
mwhudsongiven that GOARCH=arm uses constant pools after the insns, would be nice to generate them01:02
mwhudsoni'll file a bug and see what minux says :-)01:03
davecheneyi think we already go to some length to strip them out01:04
mwhudsonah!01:05
mwhudsonthis is external linking only i bet01:05
mwhudsonyeah, ldelf ignores them01:06
mwhudsonwell not $t, that's a bug i guess01:06
mwhudsonalternatively, i wonder if we can stop gcc making them01:07
axwwallyworld: hey sorry I missed the standup. I'll set aside volume destruction today and work on that relation-set bug for 1.24.101:07
wallyworldaxw: np, ty. just reviewing the last branch so you could land those also in the background01:08
thumperdamn...01:08
thumperthat isn't it01:08
axwwallyworld: cool, thanks01:08
axwwallyworld: shouldn't be too far off now. need to update state to mark entities as Dead (possibly another big branch), and then the last big piece will be adding the lifespan binding01:09
axwthen a couple of bits and pieces01:09
wallyworldand CLI for persistent volume mgmt01:09
axwwallyworld: oh yeah, UI should be fairly trivial I think.01:11
wallyworldi think so too01:11
davecheneythumper: how do I turn up the logging output fora tes01:13
davecheneyi tried -gocheck.v01:13
davecheneyhow do I get the debug output thta we get when a test fails ?01:13
thumper-gocheck.vv01:13
thumpertwo v's means send it straight out01:13
thumperthis is what I'm going through now01:13
natefinchyou need test.v too, or check.v doesn't do anything01:14
thumpernatefinch: wrong01:20
thumpernatefinch: it does do stuff, just perhaps also different with test.v01:21
natefinchthumper: hrmph... I've definitely had test.v be the difference between no output and some output, when specifying check.vv    ..but maybe it was a different scenario01:23
natefinchthumper: I was t hinking about proposing adding something like the hookLogger directly to loggo, since I want to do the same thing for the workload process plugins (i.e. redirect stdout to a loggo log).  What do you think?  Here's the hookLogger for reference: https://github.com/juju/juju/blob/master/worker/uniter/runner/logger.go#L2301:30
thumpernatefinch:  I'm kinda deep in debugging right now01:30
natefinchthumper: np01:31
axwwallyworld: in your review you said "update the CI tests" -- are they in already?01:42
wallyworldaxw: no yet but soon. i should have added "when they're done"01:42
axwwallyworld: ok01:42
wallyworldwe'll create a card for next week01:42
axwwallyworld: can't do a feature test until we have the last two big pieces done. I'll make a card for it01:43
wallyworldnp, ty. i expected we may need to wait01:43
mupBug #1466269 opened: bootstrap instance started but did not change to Deployed <bootstrap> <maas> <windows> <juju-core:New> <https://launchpad.net/bugs/1466269>01:51
mupBug #1466272 opened: Remove{Volume,Filesystem} etc. should behave like other Remove methods w.r.t. NotFound <storage> <tech-debt> <juju-core:Triaged> <https://launchpad.net/bugs/1466272>01:51
davecheneythumper: fix coming for 146601102:00
davecheneyit's a problem with the test suite helper that sets up the apiserver and creates a mock api.Info02:01
wallyworldaxw: so with that worker loop log change - won't that mean we log twice in production?02:13
axwwallyworld: yes. I can remove it, I'll just add it back in if I need to when testing02:14
wallyworldty02:14
wallyworldmaybe we can change test setup to show error02:14
axwwallyworld: with rootfs's DestroyFilesystems, it could be made into a no-op but I don't know if we should. it could remove the directory we create in the agent's storage dir. I think sabdfl wanted stuff to be left behind though, for post-mortems02:15
wallyworldaxw: won't unmount be sad though if you try and use it against a dir that is not mounted?02:16
davecheneythumper: https://github.com/juju/juju/pull/259002:16
davecheneymenn0: https://github.com/juju/juju/pull/259002:16
axwwallyworld: I don't understand your question. I'm not talking about Detach (which does umount), I'm talking about Destroy. currently Destroy does nothing.02:17
wallyworldaxw: oh sorry, thought we were taling about detach02:17
axwwallyworld: bad segue :)02:17
axwwallyworld: Create will create a directory in the agent's storage dir. Attach will bind-mount (if possible). Detach will umount. Destroy does nothing atm02:18
wallyworldthat sounds reasonable for rootfs02:18
axwwallyworld: only risk with that is that people will fill up their rootfs with crap, and it'll never get cleaned up even if they destroy the storage02:19
wallyworldaxw: bind-mount is used to map to different user specified location. but what if they don't ask for that mapping, then they acess the dir on rootfs directly right?02:19
axwwallyworld: we create something like "/var/lib/juju/agent/<x>/storage/<backing>", then "mount --bind" that into the location specified in the charm, or the path that juju generates02:21
axwwallyworld: if mount --bind fails (e.g. strict LXC/AppArmor), then we just give them the latter location if (a) it's on the rootfs, and (b) it's empty02:22
wallyworldaxw: right, so my question is if there's no locaton specified in the charm, we just hand that created dir straight to the charm i think don't we02:22
axwwallyworld: we do the bind-mount-or-else regardless of whether hte location is specified02:22
axwwallyworld: we could probably skip it if the location is unspecified, but the code's a bit simpler this way02:23
wallyworldok, that i couldn't recall off hand. i was worried about if we didn't bind mount, then detach would fail when we tried to unmount02:23
axwwallyworld: that's why we check whether the location has the same mount-point as its parent dir. if it does, then it's not a bind mount02:24
axwwallyworld: and in that case detach is a no-op02:24
wallyworldsounds good02:24
axwwallyworld: that also covers the case where we *did* bind mount, but we already detached; i.e. detach is idempotent02:24
wallyworldand that's all tested?02:24
wallyworldyep02:24
axwwallyworld: I have tested that in the past. the latest code is only tested in unit tests. I'll test it more rigorously when the bits are in place to mark things as dying etc.02:25
wallyworldsure, ok02:25
axwwallyworld: oops, I already merged the log message. I'll do another branch to take it out02:27
wallyworldaxw: just do it as a driveby02:28
wallyworldnot that critical02:28
axwwallyworld: ok, I'll do it when I update the code to destroy filesystems02:28
wallyworldsounds good02:28
axwwallyworld: would you mind also reviewing http://reviews.vapour.ws/r/1952? pretty straight forward one02:31
wallyworldsure02:31
menn0davecheney: looking02:32
wallyworldaxw: why remove environmanager = true?02:33
axwwallyworld: it's set by default in SetUpTest02:33
wallyworldok02:34
wallyworldaxw: done02:36
axwwallyworld: thanks02:37
thumperdavecheney: I think since you referenced a previos reviewboard thingy, it didn't add a new one02:44
thumperdavecheney: reviewing on GH02:44
thumperdavecheney: shipit02:44
davecheneythumper: sorry lost contex02:45
davecheneymy machine rebooted02:45
thumperdavecheney:  https://github.com/juju/juju/pull/259002:46
davecheneythumper: please review the comments here http://reviews.vapour.ws/r/1962/02:46
davecheneyspecifically my claims that we never write a bind all address into the jenv files02:48
thumperah fuckit02:50
* thumper is a dumb arse02:50
davecheney?02:50
thumperthe blocking02:50
thumperthat I thought I fixed02:50
thumperI realised why my fix didn't02:50
thumperdavecheney: yes we never write bind all addresses to teh jenv02:51
jw4waigani: thanks :)02:55
davecheneythumper: that's what I though02:55
davecheneythe test had caused the code to change to accomodate it02:55
waiganijw4: np02:55
thumperdavecheney: am I right in recalling there is no way to see if a channel is closed before trying to send stuff down it?02:57
davecheneythumper: that is correct02:57
davecheneybut the cororraly is only the sender should close a channel02:57
davecheneyif you have a channel, which you don't own (don' thave the rights to close), then that is the bug02:58
thumperthe tests are hanging because the cert updater is trying to tell the api server that the cert has changed02:59
thumperbut I don't think the apiserver is listening any more02:59
thumperit is a buffered channel, with 1 entry02:59
thumperand this is the second change event...02:59
thumperso it blocks02:59
thumperwhich means the certupdater worker doesn't finish03:00
thumperwhich means the agent doesn't finish03:00
davecheneythumper: if a channle is closed the sender will panic03:02
davecheneydo you want a non blockgin send ?03:02
thumperno, I want to work out why the apiserver isn't consuming the change event03:03
thumperI can make the tests pass by not running the cert change worker03:03
thumperwhich a number of other tests do03:03
davecheneyfair03:03
thumperbut I want to know why, because this may happen in the real world03:03
davecheneythumper: can I press you for a review of http://reviews.vapour.ws/r/1962/03:03
davecheneysorry menn0, no offence03:03
menn0davecheney: i've just responded to and dropped those issues.03:04
menn0davecheney: but another set of eyes wouldn't hurt03:04
davecheneycooll03:04
davecheneythanks for the review03:04
davecheneyif I submit this03:04
davecheneyhow can I check03:04
davecheneywhen will I know if it's fixed ?03:04
thumperit looks ok to me...03:05
thumperI am curious though03:05
thumperabout '127.0.0.1' vs localhost03:06
thumperAIUI localhost will be [::] with IPv603:06
davecheneyfalse03:06
davecheneyit is ::103:06
thumperah03:06
thumperanyway...03:06
davecheneythe problem is if uou have a net.Listner03:06
davecheneyno03:06
davecheneyyou do03:06
thumperdo we need the listener in the base test to support ipv4 and v6?03:06
davecheneyl, _ := net.Listen("tcp", ":0")03:07
davecheneythe address reported by l.Addr(), will be a wildcard address03:07
davecheneythere is no way to convert that into a dialable addresss03:07
davecheneysee my second comment03:07
davecheneywe can bind to a wildcard address and then assume localhost points back to the wildcard (safe assumption) if you like03:08
davecheneywhat confuses me, is whatever logic writes out the jenv file, must not use server.Addr(), because that was previosly hard coded to be "localhost:35687" (port number guessed)03:08
thumperhave I mentioned recently how completely fucking crazy our codebase is?03:35
thumperI'm feeling the need to go to the gym and pound on a heavy bag03:37
* thumper feels the rage rising03:37
* davecheney pats thumpers shoulder, soothinglu03:41
* thumper breathes deeply03:49
davecheneythumper: what can I do to help ?03:53
thumpernothing right now03:54
davecheneyi have my shotgun at the ready03:58
thumperdavecheney: in which case, shoot our watcher infrastructure03:59
thumperbecause it is truly shite04:00
* thumper crosses fingers04:00
thumperI *think* I may have it04:01
thumperok...04:02
thumperfor the first time since I started looking, I got the test to pass 5 times in a row04:02
thumperprevious failure rate was 20-33%04:02
thumperrunning 20 times now04:02
thumperBTW, our code is shite04:02
thumperand distributed, asynchronous, parallel, real life network systems are fucking hard to get right04:03
thumperI feel the likelihood of success raising04:03
thumper9 passes in a row04:04
* thumper submits fix04:09
thumperhttp://reviews.vapour.ws/r/1964/04:14
thumperfor the curious04:14
thumperdavecheney: you are reviewer right?04:14
davecheneyreviewing04:17
* thumper runs out to collect daughter04:17
* thumper pauses04:17
* thumper runs again04:18
davecheneythumper: i dunno04:19
davecheneythis looks like it's fixing the symptoms, not treating the cause04:19
menn0thumper: I agree with davecheney, that fix seems like a band aid to me04:37
menn0thumper: great that you figured out the problem though. that's friggin awesome.04:38
davecheneythumper: i'm also concerned that the pr description metnionds channel sends and bare writes04:39
davecheneybut the patch doesn't make any change in that respect04:40
davecheneyeither the code, or the diagnosis, or the description are wrong04:40
menn0thumper: i've just had a dig and i see that fixing this properly is going to be somewhat harder04:48
menn0thumper: i reckon merge the fix so far and then add a card to do a better fix next iteration04:49
menn0thumper: Susanna has a meeting now so I have dad duties04:50
menn0thumper: but I will do some more work later tonight.04:51
wallyworldaxw: whenever you get a chance http://reviews.vapour.ws/r/1965/04:53
axwwallyworld: awesome! looking04:53
thumperdavecheney: part of the problem was that the way the notify workers are, they don't pass the tomb in to the handle method04:58
thumperso we can't select on it04:58
thumperthat is a somewhat bigger refactoring04:59
thumperbut perhaps worthwhile04:59
thumperdavecheney: I think one of the biggest issues was trying to work out what the problem is04:59
thumperdavecheney: and the more I think about it, the more I think we should pass the tomb into the handler functions04:59
thumperdavecheney: because anyone doing any channel work in the workers should use it05:00
* thumper enfixorates05:00
=== kadams54 is now known as kadams54-away
axwwallyworld: reviewed05:11
wallyworldty05:11
thumperdavecheney: http://reviews.vapour.ws/r/1964/diff/# now passing the tomb dying channel to the handle func05:52
thumperdavecheney: so to treat the problem not just the symptom05:53
* thumper heading out to dinner now05:56
thumperback later for meetings05:56
=== frankban_ is now known as frankban
davecheneymeanwhile, reviews from the future http://dave.cheney.net/paste/wat.png07:24
dimitern*lol* "3 minutes from now"07:25
TheMuegood morning and happy birthday, dimitern08:07
dimiternTheMue, thank you! and good morning indeed :)08:09
TheMuedimitern: want to continue our ipaddress id discussion?08:09
TheMuedimitern: the current id may not be unique for future solutions, so we have to change it anyway. and the output for logging could be done by a fine String() on IPAddress08:11
TheMuedimitern: also the id has the only role to identify one record, finding those matching some criteria is task of a query08:12
TheMuedimitern: so far ok?08:12
dimiternTheMue, I think we should get "ipaddress-<space>-<value>" implemented as a tag, space can be hardcoded to "default" for now08:14
TheMuedimitern: where value is the ip address or hostname?08:14
TheMuedimitern: could it be possible to have multiple same named spaces in one database in the future?08:15
thumperdavecheney: still around?http://reviews.vapour.ws/r/1964/08:18
dimiternTheMue, the value is either an ip or hostname, yes08:19
TheMuedimitern: so my questions remains, while a value is unique for a space, could the combination of space and value be double in one database?08:20
dimiternTheMue, however... hmm to make it easier to parse (as space names can have dashes in them, as can hostnames), let's use "ipaddress-<space>@<value>" ?08:21
dimiternTheMue, no it should not be possible08:21
dimiternTheMue, we can have "ipaddress-default@localhost", but that's just stupid to store in state08:22
dimiterna local-machine scoped address/hostname cannot participate in a space08:24
thumperfwereade: ping08:24
TheMuedimitern: ok, reasonable08:24
thumperfwereade: https://plus.google.com/hangouts/_/canonical.com/chat and  http://reviews.vapour.ws/r/1964/diff/#08:25
dimiternas it defeats the purpose of the space being a collection of interchangeable subnets which can see each other08:25
TheMuedimitern: thought about fwereade 's arguments for having a generated unique key, may be UUID but also could be  different one?08:25
thumpero/ dimitern and TheMue08:25
TheMuedimitern: it will always be unique, regardless what we think about in the future08:25
TheMuethumper: o/08:25
dimiternthumper, hey there08:25
dimiternTheMue, for one, space names are unique - even across environments, as they can be reused by multiple environments once created08:27
thumperdimitern: really? are you sure?08:28
dimiternTheMue, about which part?08:28
dimiternthumper, sorry ^^08:28
thumperspace names unique across environments08:28
thumperI'm not entirely sure that makes sense08:28
thumperconsider this...08:29
fwereadethumper, o/08:29
dimiternyes, as the point is for the admin to set them up once and then they can be discovered for new envs08:29
thumperbob in environment A in system B creates space C08:29
TheMuedimitern: if env foo has space bar and env yadda has space bar?08:29
thumpermary in environment D in system E creates space C08:29
thumperbob's env A migrated to system E08:29
thumperboom08:29
thumperfwereade: in the hangout08:29
dimiternspaces are bound to the underlying substrate, not to an environment per se08:30
* TheMue still prefers keys with global unique ids08:30
dimiterne.g. space "foo" means in AWS a bunch of subnets with tag "juju-space-foo"08:30
dimiternhowever, if we have environments on different substrates, they can have the same space names I guess08:31
fwereadedimitern, please just use an opaque key08:32
dimiternTheMue, ok, I'm convinced - let's go with: 1) add a UUID field to ipaddressesDoc (and a unique index on it), 2) upgrade step to generate one if missing, 3) use "ipaddress-<uuid>" for tag format, 4) finish the addresser and change other workers that use api + addresses to use tags08:32
TheMuedimitern: +1, will do (and add cards)08:33
dimiternTheMue, cheers08:34
TheMueomw btw, but hangput dislikes me :(09:01
TheMuedimitern: voidspace: dooferlad: same troubles with hangout?09:03
dimiternTheMue, no, just joined09:03
dooferladTheMue: no, but make sure you are using the right link. It isn't the same every day...09:03
TheMuedooferlad: I've used the one from the mail notification09:04
dooferladTheMue: OK, that is odd09:04
TheMuedooferlad: it hangs at "try to joining the call"09:04
dimiternjam, fwereade, standup?09:04
TheMuedooferlad: will restart my browser09:04
jamon our way09:05
anastasiamacdimitern: ... ¸¸♬·¯·♩¸¸♪·¯·♫¸¸Happy Birthday To You¸¸♬·¯·♩¸¸♪·¯·♫¸¸ ...09:49
dimiternanastasiamac, thank you so much :)09:54
anastasiamac:D09:56
wallyworldfwereade: http://reviews.vapour.ws/r/1968/12:11
fwereadewallyworld, LGTM with a trivial12:27
wallyworldfwereade: actually, i'm testing on the scenario outlined in the bug and it's broken again with this fix. i've done an install hook that never exists. i'm wondering if this wold have worked in 1.2112:28
fwereadewallyworld, force-destroy machine always should have, yes12:29
wallyworldhmmm. i can't see off hand how the latest fix is different from 1.2112:29
fwereadewallyworld, I suspect that something about the status changes has made possible a db state which breaks unit.Destroy12:29
fwereadewallyworld, the fact that it's triggering in obliterateUnit is coincidental12:30
wallyworldhmmm. i'll need to look at the logs i guess12:30
fwereadewallyworld, if you've got a repro you should look at the actual transactions we tried to run against that unit12:31
fwereadewallyworld, and it sounds like a stable broken state it gets into12:32
fwereadewallyworld, that way you can at least see what ops the chain of failed build attempts produced12:32
fwereadewallyworld, see if they're changing (there's a race we've missed) or stable (we've fucked up the memory/db assertion equivalence)12:33
wallyworldyup12:33
wallyworldsigh12:33
wallyworldso i guess there's another problem somewhere besides the one just fixed12:33
fwereadeyeah12:34
fwereadewallyworld, if we're seeing reproducible ErrExcessiveContention we should at least be able to repro it in unit tests and have a fix that rests on something more durable than mere painstaking analysis ;p12:34
wallyworldtests pass, i've got to figure out failure senario12:35
wallyworldi don't know that we have a unit test for a hanging hook12:36
=== anthonyf is now known as Guest73520
wallyworldfwereade: oh, i'm a dick - i forgot --upload-tools. just verified and it's fine12:58
fwereadewallyworld, phew :)13:09
wallyworldfwereade: i replied to yout comment. also, we don't define a slice of statuses so hard to cycle through them13:09
fwereadewallyworld, yeah, I thought so13:10
wallyworldbut so long as it's != Allocating that's all we need13:10
fwereadewallyworld, and, ah yes, ofc, I'm dumb13:10
fwereadewallyworld, ship it :)13:10
wallyworldi just added thoses extras just because13:10
wallyworldty13:10
wallyworldat least caus ei forgot upload tools i reproduced it :-)13:11
mupBug #1466498 opened: serverSuite.TestStop fails <ci> <intermittent-failure> <test-failure> <juju-core:Triaged> <juju-core jes-cli:Triaged> <https://launchpad.net/bugs/1466498>13:23
mupBug #1466498 changed: serverSuite.TestStop fails <ci> <intermittent-failure> <test-failure> <juju-core:Triaged> <juju-core jes-cli:Triaged> <https://launchpad.net/bugs/1466498>13:26
mupBug #1466498 opened: serverSuite.TestStop fails <ci> <intermittent-failure> <test-failure> <juju-core:Triaged> <juju-core jes-cli:Triaged> <https://launchpad.net/bugs/1466498>13:35
mupBug #1466513 opened: destroyTwoEnvironmentsSuite teardown fails <ci> <intermittent-failure> <unit-tests> <juju-core:Incomplete> <juju-core 1.24:Triaged> <https://launchpad.net/bugs/1466513>13:53
mupBug #1466514 opened: TestCertificateUpdateWorkerUpdatesCertificate fails <ci> <intermittent-failure> <test-failure> <juju-core:Incomplete> <juju-core 1.24:Triaged> <https://launchpad.net/bugs/1466514>13:53
=== mgz_ is now known as mgz
mupBug #1466520 opened: serviceSuite setup fails <ci> <intermittent-failure> <unit-tests> <juju-core:Incomplete> <juju-core 1.24:Triaged> <https://launchpad.net/bugs/1466520>14:14
mupBug #1466525 opened: restore fails due to mongo login failure <backup-restore> <ci> <intermittent-failure> <juju-core:Incomplete> <juju-core 1.22:Triaged> <https://launchpad.net/bugs/1466525>14:14
=== Spads is now known as M-SpaceHobo
=== kadams54 is now known as kadams54-away
=== kadams54-away is now known as kadams54
=== M-SpaceHobo is now known as Spads
katcowwitzel3: lmk if you would like to skip our 1:114:36
fwereadewallyworld, don't suppose you're awake?14:40
wwitzel3katco: right, I was planning to take some medicine and lay down for a bit, unless you had something specific we needed to cover14:43
katcowwitzel3: get some rest14:43
katcoericsnow: natefinch: do you need anything?14:44
natefinchkatco: not currently :)14:45
ericsnowkatco: no, thanks14:45
ericsnowkatco: other than a LGTM on that metadata patch :)14:46
katcoericsnow: done :)14:46
ericsnowkatco: thanks!14:46
rogpeppe1i'd very much like a review of this from someone in juju-core please. moving towards having an client-inspectable schema for juju environment config: https://github.com/juju/juju/pull/259714:47
=== rogpeppe1 is now known as rogpeppe
alexisbperrito666, I had fun playing with the new service status yesterday14:56
alexisbit is mightily useful14:57
alexisbI especially like the status-history14:57
perrito666I am glad :D I had fun playing with it too :p14:57
mrammhey, quick question perhaps somebody here knows the answer15:12
mrammdoes juju use some sort of connection pool for mongodb? or is a new connection established for each query?15:13
mrammperrito666: ^^^15:14
voidspacemramm: it creates a new session for each connection15:15
voidspacemramm: *but*15:15
voidspacemramm: mgo is supposed to do connection pooling for us15:15
voidspacemramm: including disposing of dead connections15:15
mrammvoidspace: so there is connection pooling in mgo?15:17
voidspacemramm: yes15:17
mrammthanks!15:17
fwereadeperrito666, was just looking at your github PR, one question:15:38
* perrito666 braces15:38
fwereadeperrito666, this is just testing the existing behaviour, right? in which update-status fires only when the timer ticks?15:39
perrito666fwereade: yes, as that pr does not add the new behaviour15:40
fwereadeperrito666, great, so that is why I can't see any changes in startupHooks despite the addition of update-status to baseCharmHooks :)15:40
perrito666I split both things after you suggested it yesterday15:40
perrito666fwereade: yes :)15:41
fwereadeperrito666, ok, LGTM with some naming quibbles, but check back with ian about the idle timer15:44
perrito666fwereade: I will tx15:45
fwereadeperrito666, I'm pretty confident it shouldn't be below 5s15:45
fwereadeperrito666, even if everything responds super-fast15:45
* perrito666 uses randInt(2,10)15:45
fwereadeperrito666, relation-set gets written when hook completes15:45
fwereadeperrito666, it could easily take 5s before a counterpart even sees that15:46
fwereadeperrito666, and even if *that* unit runs a hook with a response really fast15:47
fwereadeperrito666, we won't see it until 5s after it did at best15:47
fwereadeperrito666, and more likely 10s15:47
perrito666fwereade: this https://github.com/juju/juju/pull/2586#discussion_r3274355515:47
fwereadewallyworld, this conversation is worth reading back when you're around15:48
fwereadeperrito666, wallyworld, I'd actually say that it's more like 15s of idleness before you can have confidence in your idleness15:49
perrito666it is because as the logic stands now the default is inactive until and unless the call to getMetricsTimer(charm) says otherwise15:49
perrito666fwereade: Ill make sure wallyworld gets to this conversation tonight15:49
fwereadeperrito666, think of the timerchooser on its own15:49
fwereadeperrito666, what makes the inactive one "default"?15:49
fwereadeperrito666, you must at least have "active" and "inactive" as well as "default"15:50
fwereadeperrito666, otherwise "default" is just another name for "inactive"15:50
fwereadeperrito666, but I maintain that inactive is *not* the default15:50
perrito666fair15:51
fwereadeperrito666, would you implement a BoolChooser with methods True and Default?15:51
fwereade;p15:51
fwereadeperrito666, wallyworld: if you think this is reason enough to tweak the watcher resolution, so we can detect idleness early, I'm prepared to investigate that but we'd need to stress-test it pretty hard15:52
fwereadeperrito666, wallyworld: (and I think there are UX considerations too -- ISTM that traffic lights that flicker back and forth will inspire less confidence than those that take a little longer to go solid green and stay there)15:55
perrito666fwereade: I definitely would compare this with hdd light rather than traffic lights15:56
perrito666back when hdd light was useful15:56
mupBug #1466565 opened: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:New> <https://launchpad.net/bugs/1466565>15:56
fwereadeperrito666, that's what solid yellow indicates15:57
fwereadeperrito666, "I'm doing stuff, leave me be"15:57
fwereadeperrito666, solid green indicates "everything is configured and working as it should"15:57
perrito666ill agree nevertheless that entreing and leaving iddle too fast feels a bit like whack-a-mole15:58
fwereadeperrito666, if our units look like they can't decide which state they're in we all look dumb15:58
fwereadeperrito666, look at it this way15:58
fwereadeperrito666, status needs to represent things users care about15:59
fwereadeperrito666, they will pay attention to, and react to, changes in status15:59
fwereadeperrito666, but every status change they don't need to react to dilutes the value of the data stream16:00
fwereadeperrito666, (and IMO yellow->green should inspire the reaction "great, now I can relax")16:00
=== kadams54_ is now known as kadams54-away
mupBug #1466570 opened: Juju add-unit stuck on new lxc containers <sts> <juju-core:New> <juju-core 1.20:Triaged> <https://launchpad.net/bugs/1466570>16:08
rogpeppefwereade: here's another step along the provider schema thing. i didn't change the EnvironProvider interface yet because i didn't want to potentially break external provider implementors yet. http://reviews.vapour.ws/r/1969/16:18
fwereaderogpeppe, nice16:18
fwereaderogpeppe, queued it :)16:18
rogpeppefwereade: ta!16:18
rogpeppefwereade: i won't hold my breath :)16:19
* fwereade considers rogpeppe to be a wise man16:19
natefinchheh, the deputy repo I made 2 days ago under github.com/juju already has 12 stars16:26
rogpeppemramm: there is connection pooling *but* it's likely that each concurrently running operation uses one connection16:31
rogpeppemramm: which is something we've been dealing with in the charm store recently16:31
rogpeppemramm: see https://github.com/go-mgo/mgo/issues/12416:32
rogpeppenatefinch: i was thinking of suggesting for someone recently, but the stderr output needed too much massaging for it to be useful as is16:33
rogpeppenatefinch: i wonder if it might be good to have an optional TransformStderrToError([]byte) error (or something) function that can be used to cope with situations like that16:34
natefinchrogpeppe: you can always get the error string and massage it afterward, if you really need to.   That seems a little too specialized to broaden the API.  Generally the stderr-as-error is only good if you know the command produces reasonably sized stderr output.16:36
rogpeppenatefinch: that's true16:37
rogpeppenatefinch: in the case above, we really wanted just the first line16:37
rogpeppenatefinch: i wish there was some nice way of dealing with multiline errors16:38
natefinchgah, I wish loggo had non-f methods16:40
natefinchkatco: so, with a bunch of people already watching the repo I created (github.com/juju/deputy), I'm hesitant to follow through with my previous plan of deleting it in order to follow our new process.  Maybe we can make this the exception, and just make all future work on the repo via PRs?17:00
katconatefinch: that's fine. but we still need the code reviewed17:01
natefinchkatco: absolutrely17:01
natefinchrogpeppe: btw, updated the deputy package to not use the cute options thingy anymore.  I think it's a lot more understandable without it.  Also added a way to have it pipe the output to a logging function, similar to how we do hook output.17:13
rogpeppenatefinch, katco: what's the "new process" ?17:14
katcorogpeppe: first, you like 3 and a half candles17:14
natefinchrogpeppe: create the repo with readme & license only, then add all code via PRs17:14
katcorogpeppe: then, you place a blue lotus from the slopes of mt. kilimanjaro in the middle17:14
rogpeppekatco: well good start, i already like candles17:14
natefinchlol17:14
katcorogpeppe: er, what nate said. it will be on the wiki soon17:15
rogpeppekatco: ha, i'd forgotten we even had a wiki :)17:15
natefinchthe candles and lotus are optional but recommended17:15
natefinchrogpeppe:  we started using the wiki after I got annoyed with the state of our developer documentation17:16
natefinchrogpeppe: the github wiki that is17:16
rogpeppenatefinch: where is it?17:16
natefinchrogpeppe: https://github.com/juju/juju/wiki17:16
rogpeppenatefinch: what are the interface{} arguments to StdoutLog and StderrLog ?17:17
rogpeppenatefinch: wouldn't that be better as just a single string arg?17:17
mattywI need an adult if there's one around?17:17
natefinchrogpeppe: it's a concession to the way most log packages work, e.g: http://golang.org/pkg/log/#Print17:17
rogpeppemattyw: i can pretend17:18
rogpeppenatefinch: i think it would be better a func(string)17:18
rogpeppeas17:18
mattywah rogpeppe you might be just the man - you're name is on the file I'm interested in17:18
rogpeppemattyw: i'm afraid that might be true of quite a few files :)17:18
natefinchrogpeppe: I started that way... I can put it back.  It means you need to wrap most log package's logging functions, but it is a lot more clear what it'll send17:18
rogpeppenatefinch: yeah, i think it's worth it.17:19
rogpeppenatefinch: and it's easier to use if you want to add a prefix, for example17:19
mattywrogpeppe, for acme fans: apiserver/charms/client_test.go:L120 for github fans https://github.com/juju/juju/blob/master/apiserver/charms/client_test.go#L12017:19
natefinchrogpeppe: yeah, I agree, after looking at a consumer using loggo17:19
rogpeppemattyw: not *quite* :)17:19
rogpeppemattyw: no L17:19
mattywrogpeppe, that call seems to be testing the CharmInfo function in the client, but as it's in the charms facade package I'd be expecting it to test that one right?17:20
mattywrogpeppe, ah yeah - sorry17:20
rogpeppemattyw: it's quite usual to test the server side functions by calling the client side functions17:21
rogpeppemattyw: because the client side functions work by invoking the server side functions17:22
mattywrogpeppe, but it shouldn't it be calling the charms facade client?17:22
mattywrogpeppe, there are two charminfo functions one in the charms facade, and another in the enormous client17:22
rogpeppemattyw: ah, i guess17:23
rogpeppemattyw: that stuff is well after my involvement in this area17:23
rogpeppemattyw: i've no idea why there are two implementations of the same call17:24
mattywrogpeppe, I'm not looking for blame - I'm looking for another set of eye to check my sanity17:24
rogpeppemattyw: looks like you're probably right17:28
rogpeppemattyw: i've no idea why the duplication; i guess all the tests need to be duplicated too17:28
mattywrogpeppe, there is some dubiousness added by the basecharmSuite and charmSuite stuff17:28
mattywrogpeppe, duplication is probably a wip attempt at moving away from the huge client17:29
rogpeppemattyw: i would guess that too17:29
rogpeppemattyw: fat lot of difference it makes to the understandability or maintainability of the code though :)17:29
katcoif a state server is in a bad way, is it safe to recommend cycling it? or is juju going to do something weird like uninstall itself?17:29
rogpeppekatco: restarting it should be just fine17:30
rogpeppekatco: restarting the service, that is17:30
rogpeppekatco: in case you had something else in mind17:30
katcorogpeppe: i was just suggesting to cycle the container (it's local)17:31
rogpeppekatco: reboot it?17:31
katcorogpeppe: yes17:31
rogpeppekatco: you should probably be ok. how is the server in a bad way?17:31
katcorogpeppe: https://bugs.launchpad.net/juju-core/+bug/146656517:32
mupBug #1466565: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:In Progress by cox-katherine-e> <https://launchpad.net/bugs/1466565>17:32
katcorogpeppe: it looks to me like somehow juju got in a bad node in its state machine17:33
rogpeppekatco: the log linked to in that issue doesn't look like it shows the issue17:34
rogpeppekatco: it says it's restarting because an upgrade is available17:34
katcorogpeppe: it never comes back up though, wondering if it actually shut down17:35
rogpeppekatco: if you just restart the state server service, do you just get the same thing?17:35
katcorogpeppe: waiting to hear from sparkiegeek17:35
katcorogpeppe: if you're interested, #juju@canonical17:35
mattywIt's been so long since I've done some juju stuff I have no idea what I'm doing17:40
natefinchmattyw: just write if err != nil { return err } a bunch of times, and it'll come back to you ;)17:41
rogpeppelol17:41
mattywnatefinch, go is fine, it's the facades that do it :)17:42
natefinchmattyw: yeah, juju is a beast of a codebase.  Just the pure LOC make it hard to get a handle on17:42
mattywnatefinch, ah ha! I've just remembered the magic17:44
mattyw(the juju in juju you could say)17:44
mupBug #1466565 changed: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:Invalid by cox-katherine-e> <https://launchpad.net/bugs/1466565>18:24
natefinchHow come my software updates all get shown with the description instead of the name of the package?  e.g.: http://i.imgur.com/E4Q3uBV.png  Is that an ubuntu bug, or some weird setting I set by accident?18:27
mupBug #1466565 opened: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:Invalid by cox-katherine-e> <https://launchpad.net/bugs/1466565>18:33
mupBug #1466565 changed: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:Invalid by cox-katherine-e> <https://launchpad.net/bugs/1466565>18:36
=== kadams54-away is now known as kadams54_
natefinchericsnow: unintended nice side effect of using json for plugin output - it's easy to output without line returns18:49
ericsnownatefinch: yay18:49
katcois anyone familiar with the FORCE-VERSION file?18:51
perrito666natefinch: ah, same happened today18:51
perrito666perhaps the name is collapsed?18:51
mupBug #1466565 opened: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:Confirmed for cox-katherine-e> <https://launchpad.net/bugs/1466565>18:54
mupBug #1466565 changed: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:Confirmed for cox-katherine-e> <https://launchpad.net/bugs/1466565>18:57
natefinchkatco: I think that's what gets included when you use --upload-tools18:58
perrito666I think it is necessary to allow juju to use the uploaded version of juju (for which there is no stream)19:00
katcoperrito666: apparently not only then. was installed by default by just bootstrapping 1.23.319:02
katconatefinch: ^^19:03
mupBug #1466565 opened: Upgraded juju to 1.24 dies shortly after starting <landscape> <upgrade-juju> <juju-core:Confirmed for cox-katherine-e> <https://launchpad.net/bugs/1466565>19:06
mupBug #1466629 opened: Containers fail to get ip when non-maas dhcp/dns is used <dhcp> <dns> <lxc> <maas> <openstack-installer> <openstack-provider> <ubuntu-engineering> <ubuntu-openstack> <juju-core:New> <https://launchpad.net/bugs/1466629>20:09
natefinch ericsnow: how do I upload a patch to reviewboard?20:42
alexisbthumper, not that you need any distractions today, but when you have a moment I need your help today20:51
thumperheh20:51
thumperok, will ping you when I have time20:51
natefinchericsnow: if you have time before EOD, could you take a look at the deputy repo?  I made a PR to a branch that shows all the code: https://github.com/juju/deputy/pull/1   I don't know how to get that onto reviewboard or if we care (can always review on github)20:57
natefinch(or anyone else up for a review ^ )20:59
=== kadams54_ is now known as kadams54-away
mupBug #1466660 opened: Unable to create hosted environments on EC2 <juju-core:New for cherylj> <https://launchpad.net/bugs/1466660>21:24
* fwereade would like to express a brief moment of rage to discover that we're still just crapping charm.Meta et al into the database21:24
* fwereade is sure that multiple people have promised to fix that over the last year21:24
alexisbfwereade, you should be sleeping, but if it makes you feel better I am listening21:50
katcowallyworld: thumper: if anyone in your half of the world gets some bandwidth, this bug is targeted for 1.24.2: bug 146656521:51
mupBug #1466565: Upgraded juju to 1.24 dies shortly after starting <cts> <landscape> <sts> <upgrade-juju> <juju-core:Confirmed> <juju-core 1.24:Confirmed> <https://launchpad.net/bugs/1466565>21:51
fwereadealexisb, I have subsided to mild background grumpiness :)21:52
fwereademenn0, ping21:52
menn0fwereade: hi22:02
thumperwhat happened to 1.24.1?22:06
alexisbthumper, what do you mean what happened to it?22:07
thumperalexisb: katco says it is targetted to 1.24.2? I thought we just released 1.24.022:07
alexisbthumper, we are going to cut 1.24.1 soon22:08
katcothumper: we have a 1.24.1 as well22:08
alexisbso new bugs may be targeted to 1.24.2 instead of 1.24.122:08
fwereademenn0, re the stateCollection interface22:10
fwereademenn0, what motivated the set of methods we picked?22:10
* menn0 looks22:10
menn0fwereade: they were what was in use with Juju at the the time of writing22:11
menn0fwereade: it's grown a few methods since it was created as people have wanted more22:11
katcoericsnow: do you know what have we forked because of lack of 1.4? was it just the stdlib?22:12
menn0fwereade: why do you ask?22:12
ericsnowkatco: the only things of which I'm aware are govmomi and that package for windows22:12
fwereademenn0, I wanted to use it myself from a state subpackage to take advantage of the env-aware bits22:14
fwereademenn0, and I found myself thinking "hmm, I'm pretty sure we shouldn't ever Insert"22:14
fwereademenn0, and I found where we inserted and GAAAH WTF in more than one way22:14
katcoericsnow: looks like sys package from stdlib: http://reviews.vapour.ws/r/1897/diff/#22:15
fwereademenn0, so I got scared and I looked for Update and couldn't spot it22:15
menn0fwereade: AddCharm is one place we do where we shouldn't22:15
ericsnowkatco: that's not the stdlib sys package, is it?22:16
katcoericsnow: i believe so22:16
fwereademenn0, and then I just found UpdateId and got grumpy again because I'm damn sure I told thumper *not* to do txn-layer-skipping writes into docs that use txns, and to please put LastLoginTime somewhere else22:16
katcoericsnow: golang.org/x/sys --> github.com/gabriel-samfira/sys22:16
ericsnowkatco: there's a syscall in the stdlib, but no sys22:17
fwereademenn0, so, ehh, anyway22:17
thumperfwereade: I think we agreed to disagree on that point...22:17
thumperand I felt that the overhead of putting it elsewhere wasn't worth it22:17
thumperand no one watches it22:17
katcoericsnow: sorry, supplemental library22:17
fwereadethumper, I apologise then for my lack of clarity22:18
ericsnowkatco: regardless, yeah, that's the one22:18
fwereadethumper, the txn system is a layer as much as the api is22:18
fwereadethumper, and now we've got a document with a magic field that needs as much documentation as everything else in that serialization thing22:20
fwereadethumper, and depends on people reading and understanding and remembering and eschewing the temptation to just autocomplete something that looks like a good idea22:21
fwereadethumper, there are times when we want txn and times when we don't22:21
fwereadethumper, but we need very very good reasons to mix them22:22
fwereadethumper, the relation data cleanup ones are bad enough and they only touch documents known to be unreferenced by the rest of the system22:22
fwereadethumper, mixing txn-aware and non-txn-aware fields in the same document just triggers my twitch-froth-gesticulate reflex22:24
* thumper watches fwereade twitch22:24
* fwereade is indeed something to behold22:24
fwereadethumper, I'm also suffering residual grumpiness from observing that the charm document schema is still largely coming from a different repository22:25
thumperfwereade: ENOCONTEXT22:26
fwereadethumper, ehh, this is all coming from our chat this morning22:26
fwereadethumper, trying to get the stateCollection interface out of state so I could consume things that implemented it and get useful env-awareness in my lease bits22:27
thumperenvironment based lease collection?22:27
fwereadethumper, I think most of the lease namespaces will be per-environment, yes22:28
fwereadethumper, I could hand-hack it but that would be dumb22:28
thumperagreed22:29
fwereadethumper, so anyway I started looking at what we actually did with that interface and that led me to the naked Insert of the charm document and then I looked at the charm serialization and gibber-gibber-flail-moan22:29
fwereadethumper, menn0: so, what I want to do is22:30
thumperthe serilization structure isn't in the state package?22:30
thumperthat seems like a fail22:30
fwereadethumper, is is a goddam massive fucking failure and I am certain that more people than just those working on metrics and actions ahve promised to (1) DTRT themselves and (2) fix the legacy shittiness22:31
fwereadethumper, and yet it has somehow failed to occur in both those instances22:31
fwereadealexisb, huh, it looks like I did have a rant in me after all :/22:32
thumperhaha22:32
thumperI'm thinking my fix I landed yesterday should probably be ported to 1.2422:32
redelmannhi, it's normal to get without space on juju machine-0???22:33
redelmannim using aws default constraints on bootstrap22:33
redelmannjuju is using 7.5G of 8Gb22:33
perrito666redelmann: check the logs22:33
perrito666as in, check if the logs are overly sized22:34
perrito666oversized22:34
redelmannperrito666, 36M of logs22:34
fwereadethumper, and even more infuriatingly22:34
redelmannperrito666, /var/libs/juju/db is using 3.7Gb22:34
fwereadethumper, there's a *bit* of input sanitization for *one* of those fields22:35
* thumper chuckles22:35
fwereadethumper, but that just munges the *Config into a different one22:35
fwereadethumper, and just for fun that only happens on *one* of the two code paths that can lead to config data being written to the document22:36
thumperhaha22:36
thumperfwereade: were you around yesterday when I said how shite our codebase was?22:36
thumpernothing surprises me any more22:36
perrito666redelmann: could you provide a detailed du -shc /var/lib/juju/*22:36
perrito666redelmann: pastebin :)22:36
fwereadethumper, so, I do not think that graduating reviewers has done us any good22:37
thumperfwereade: I don't think that is the source of the problem to be honest22:38
fwereadethumper, it is all too easy for these things to happen when both the coder and the reviewer have only passing familiarity with the code22:38
fwereadethumper, I think it was an attempt to enforce tighter controls and has not really worked out on that front22:39
redelmannperrito666, http://paste.ubuntu.com/11737759/ and http://paste.ubuntu.com/11737763/22:39
katcofwereade: architectural documentation pls22:39
perrito666redelmann: looking22:39
katcofwereade: the code doesn't convey all the knowledge needed to review22:39
thumperfwereade: there are too many devs to push all reviews through the relatively few people who know more how things hang together22:39
thumperkatco: agreed22:39
fwereadekatco, it is hard to bring oneself to do that when the stuff I have written seems to be completely ignored22:40
thumperfwereade: we need a wiki page of "distilled fwereade ranting"22:40
redelmannperrito666, mhh.. look at this: almost 1 hour of this "ps -aux" http://paste.ubuntu.com/11737765/22:40
fwereadekatco, that is no doubt at least partly a perception issue22:41
thumperwallyworld: did you fix 1452745 in master too?22:47
wallyworldbug 145274522:48
mupBug #1452745: 386 constant 250059350016 overflows int <386> <blocker> <ci> <regression> <juju-core 1.24:Fix Released by wallyworld> <https://launchpad.net/bugs/1452745>22:48
wallyworldi think so22:48
wallyworldi'll check22:48
thumper(╯°□°)╯︵ ┻━┻23:01
wallyworldthumper: yes, it got ported forward23:02
thumperhttps://bugs.launchpad.net/juju-core/+bugs?field.tag=intermittent-failure&field.tags_combinator=ALL23:02
* thumper sadface23:02
anastasiamacthumper: ow! that's a lot of "intermittent" failures...23:12
thumperanastasiamac: yeah...23:12
thumpersomething for the bug squad to focus on23:13
anastasiamac:D23:13
thumperI'm hoping my team will have some time next cycle23:13
thumpers/cycle/iteration/23:13
anastasiamacwell, dave is living in the future - he must have more time than anyone :D23:13
anastasiamacaccording to rb at least :D23:14
davecheneyyup, living in the future, three minutes at a time23:31
anastasiamacmake it 8 and u'd be almost like the sun :))23:32
fwereadethumper, menn0: oh, yeah, before sleep: I want to make that interface smaller and at least force the questionable bits to go via .Underlying() so they know they're being bad23:36
fwereadethumper, menn0: objections?23:36
fwereadethumper, menn0: and I know it doesn't cover everything and you can write via Query but one thing at a time :)23:37
fwereadethumper, menn0: (I refer to state.stateCollection)23:38
menn0fwereade: that sounds reasonable to me23:38
thumperfwereade: I defer to menn0 on this23:40
fwereademenn0, thumper: cool, thanks, and happy weekends both :)23:41
thumpercheers23:41

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