Friday, 2019-01-04

*** mikecmpbll has joined #openstack-swift00:26
openstackgerritMerged openstack/swift-bench master: Change openstack-dev to openstack-discuss  https://review.openstack.org/62283200:38
*** gyee has quit IRC00:45
timburkei wish torgomatic was here :-/01:39
timburkefor a variety of reason, and nearly all of them good, but right now, i really wanna know why we did https://github.com/openstack/swift/blob/2.20.0/swift/common/utils.py#L1897-L1898 and carved out an exception for our prefixing iif we call logger.exception()01:40
timburkelogger.error(..., exc_info=True)? sure, get a prefix. logger.exception(...)? nope.01:41
openstackgerritTim Burke proposed openstack/swift master: Let developers/operators add watchers to object audit  https://review.openstack.org/21282401:43
*** mikecmpbll has quit IRC01:44
*** psachin has joined #openstack-swift03:04
*** psachin has quit IRC03:07
*** psachin has joined #openstack-swift03:08
*** lifeless has joined #openstack-swift03:10
*** two_tired has joined #openstack-swift03:15
*** mahatic has quit IRC04:06
*** two_tired has quit IRC04:57
*** rcernin has quit IRC06:47
*** ccamacho has joined #openstack-swift08:01
*** mikecmpbll has joined #openstack-swift08:03
*** mikecmpbll has joined #openstack-swift09:06
*** [diablo] has joined #openstack-swift09:38
*** e0ne has joined #openstack-swift09:52
*** lifeless has quit IRC12:42
*** mvkr has quit IRC13:57
*** mvkr has joined #openstack-swift14:12
*** two_tired has joined #openstack-swift14:48
*** two_tired has quit IRC15:32
*** psachin has quit IRC16:32
*** itlinux has joined #openstack-swift16:33
*** e0ne has quit IRC16:36
timburkegood morning17:00
*** mikecmpbll has quit IRC17:11
notmynamegood morning17:15
*** e0ne has joined #openstack-swift17:43
*** e0ne has quit IRC17:44
*** mikecmpbll has joined #openstack-swift18:02
*** gyee has joined #openstack-swift18:04
*** ccamacho has quit IRC18:07
*** itlinux_ has joined #openstack-swift18:33
*** itlinux has quit IRC18:35
claygWe run probetests in the gate right?  I think I'd like to maybe have more EC disks (12 disks for a 4+2 policy instead of only 8)19:14
timburkeclayg: yeah, we do19:17
tdasilvaclayg, timburke: i think we just need to change this: https://github.com/openstack/swift/blob/master/tools/playbooks/multinode_setup/configure_loopback.yaml#L6319:22
claygCool!  I’ll see about getting tests working with extra disks first... then test the change.19:23
*** itlinux_ has quit IRC19:40
*** lifeless has joined #openstack-swift20:12
zaitcevOh boy20:35
zaitcevSuddenly, the zero-copy send in object server... does not work on py3 with rather strange effects.20:36
zaitcev def __len__(self):  return wsgi.MINIMUM_CHUNK_SIZE + 120:36
timburkewheee!20:40
*** itlinux has joined #openstack-swift20:44
timburkeyeah, looking at https://review.openstack.org/#/c/102609/ i fell like its mostly black magic. maybe it comes down to a difference in sockets when we call `wsock = env['wsgi.input'].get_socket(); wsockfd = wsock.fileno()`? no idea20:52
patchbotpatch 102609 - swift - Zero-copy object-server GET responses with splice() (MERGED) - 11 patch sets20:52
zaitcevI thought maybe corking... Because in py3 apparently bodies come out before headers.20:59
timburkewhoa... ok, yeah, that'd make some sense...21:00
timburkedoes it work any better if we drop the corking entirely?21:01
zaitcevI'm going to test21:04
zaitcevOne thing though, I don't understand what the corking is for to begin with. It bothers me, I don't want just slash and burn randomly.21:06
timburkereading the comments, it seems to try to avoid sending headers, then sending object data; rather, we want to send headers + start of object data, then rest of object data. just to try to cut down on # of packets.21:08
timburkei like "working" more than "broken but optimized"21:09
zaitcevOooh, so it corks the rest of headers21:10
zaitcevWell, as you say.21:10
timburkei wonder if we should (now? maybe this wasn't an option before?) be doing something with env['eventlet.minimum_write_chunk_size'] instead of that crazy EventletPlungerString guy...21:14
timburkeugh, and if we keep it, it *definitely* needs to be subclassing bytes, not str...21:16
zaitcevmodern eventlet does   if isinstance(data, six.text_type):   data = data.encode('ascii')21:17
zaitcevwhich is kinda amazing21:17
timburke...so we lose the __len__ specialness! there we go21:18
zaitcevunfortunately if we set eventlet.minimum_write_chunk_size, then all bufferization is defeated21:18
timburkedata *was* our plunger guy, then it was plain-old bytes, so towrite_size += len(data) doesn't do what we want21:19
zaitcevI didn't know how eventlet's wsgi worked21:19
zaitcevI thought that once you return from app, it posted headers, then cycled through chunks of what app returned (an iterator or whatever).21:20
timburkebut all of eventlet's bufferization doesn't matter at this point, yeah? drop it to zero just before we call res(env, start_response)21:20
timburkeyeah, there's no guarantee that an app will have actually *called* start_response until you get at least one non-empty chunk out of the iterator :-/21:21
zaitcevBut nope... It goes cycling right away. So, it receives our plunger string. THEN, it calls a fuction write()... which... is not a write at all. It's a big thing that looks if headers were sent, and if not, preps and sends headers.21:21
timburkewsgi servers get a lot of leeway when it comes to deciding when to send how much data21:21
zaitcevThe core of the problem is, we want to splice in iterator, but we only want to do it once the header data is sent to socket.21:22
zaitcevSo corking does not actually do anything21:23
zaitcev(it seems to me)21:23
timburkei swear, if the golang stuff doesn't move at some point, clayg's gonna go write a sweventlet or swsgi or something (a la swob)21:23
timburkezaitcev: yeah, i'm 99% sure it's the plunger inheriting from str, not bytes21:23
zaitcevwell maybe twsgi right away, skip the s21:23
claygeventlet is only terrible if you have to do blocking io 😢21:24
claygand it's not like lightweight concurrency isn't nice to have even when you DO have to do blocking io21:25
clayggolang is kinda great for that - despite all other evidence that it is also terrible21:25
timburkeclayg: idk, you might still want to write your own wsgi server ;-)21:25
claygi don't really like WSGI, it skipped some stuff that web servers have to think about that I later found out I cared about (like slow clients, and pipelined requests)21:26
timburkecould still use eventlet. but it'd be nice if we didn't have to do something like EventletPlungerString21:26
timburketrue... but the 3rd party middlewares :-(21:27
claygyeah that's non-sense - but WSGI doesn't really like you to think to hard about zero-copy - again WSGI is also terrible21:28
zaitcevtimburke: if I comment corking out, there's no change in behavior. I'll need to find out what's going on for real.21:28
claygright... 3rd party middleware... nm WSGI is the only piece of software that isn't terrible!21:29
claygzaitcev: no body uses that zero-copy non-sense - let's just deprecate it and say it's not supported in py321:29
timburkezaitcev: have you tried the bytes thing? EventletPlungerString().encode('ascii') will give you something whose len() is 0 again...21:29
zaitcevoh21:30
zaitcevhaha21:30
timburkeclayg: funny... i think i was talking with notmyname the other day about how we seem to be pretty defensive about making sure it'll work before we try it, so we ought to turn it on by default and try to get rid of the option :P21:30
clayg🙄21:31
claygyou guys like to make it complicated21:31
zaitcevtimburke: thanks a lot, that worked21:31
timburke\o/21:31
timburkeapparently there's one other place where we subclass str... but it shouldn't be bytes. https://github.com/openstack/swift/blob/2.20.0/swift/common/middleware/s3api/s3response.py#L39 + non-ASCII headers scares me, though21:37
timburke[chr(x) for x in range(256) if chr(x) != chr(x).lower()] gives very different results on py2 vs py3...21:39
*** itlinux_ has joined #openstack-swift21:56
*** itlinux has quit IRC21:59
*** itlinux_ has quit IRC22:24
openstackgerritTim Burke proposed openstack/swift master: s3api: Delete multipart uploads via multi-delete  https://review.openstack.org/62870123:07
*** openstack has joined #openstack-swift23:45
*** ChanServ sets mode: +o openstack23:45
openstackgerritTim Burke proposed openstack/swift master: s3api: Delete multipart uploads via multi-delete  https://review.openstack.org/62870123:48

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