Wednesday, 2024-07-03

opendevreviewMerged openstack/swift master: common: move memcached exceptions to the base file.  https://review.opendev.org/c/openstack/swift/+/92331505:51
acolestimburke: apologies, I can't make today's meeting16:13
opendevreviewJianjian Huo proposed openstack/swift master: common: add memcached based cooperative token mechanism.  https://review.opendev.org/c/openstack/swift/+/89017417:53
opendevreviewJianjian Huo proposed openstack/swift master: proxy: use cooperative tokens to coalesce updating shard range requests into backend  https://review.opendev.org/c/openstack/swift/+/90896920:39
timburkealmost meeting time, but i'm not sure there's going to be many people around for it20:55
timburke#startmeeting swift21:00
opendevmeetMeeting started Wed Jul  3 21:00:08 2024 UTC and is due to finish in 60 minutes.  The chair is timburke. Information about MeetBot at http://wiki.debian.org/MeetBot.21:00
opendevmeetUseful Commands: #action #agreed #help #info #idea #link #topic #startvote.21:00
opendevmeetThe meeting name has been set to 'swift'21:00
timburkewho's here for the swift meeting?21:00
timburkei know acoles and mattoliver are out21:00
fulecorafaIm here21:01
timburkeo/21:01
fulecorafao/21:01
timburkewell, it'll do, even if it's just the two of us :-)21:03
timburkeas usual, the agenda's at21:03
timburke#link https://wiki.openstack.org/wiki/Meetings/Swift21:03
timburkefirst up21:03
timburke#topic published docker images21:04
timburkethey were busted -- now they're fixed!21:04
fulecorafaThat's great news!21:04
timburkethey're also now py3-only!21:04
timburke#link https://review.opendev.org/c/openstack/swift/+/89645021:04
patch-botpatch 896450 - swift - Get rid of py2 docker image builds; switch "latest... (MERGED) - 3 patch sets21:04
timburkewe probably should have changed the "latest" tag to be py3 a while ago, so i think it's all good21:05
timburkei still need to look into getting a gate job to run functional tests using the built container, though -- but at least the immediate problem of publishing known-broken images is resolved21:07
timburkeunfortunately, i realized we'd been doing that for months and months :-(21:07
fulecorafaWe've being taking a look at automating some test, but they're are focused on s3api21:08
timburkegoing back to september at least21:08
fulecorafaMaybe we could start messing around with getting the tests to run in the container as well21:08
timburke#link https://bugs.launchpad.net/swift/+bug/203726821:08
patch-botBug #2037268 - Docker's SAIO doesn't work (Fix Released)21:08
timburkefulecorafa, that'd be great, thanks for thinking of it! iirc, the docker image includes s3api support, so that could work well -- i'll double check21:09
fulecorafaIt does include, I'm sure of it21:09
fulecorafaBut the testing we've been doing with the image has been more of a manual work. i.e. a cli client which makes a bunch of calls to a running instance21:10
timburkethe main i need to figure out is how to get the zuul plumbing sorted; i think clarkb has previously given me some pointers to help get me started, just need to go back through some notes21:11
timburkeah, makes sense21:11
fulecorafaI imagine the ideal scenario would be to automatically run a docker instance and testing together21:11
clarkbtimburke: ya zuul has a bunch of existing base job stuff you can inherit from and supply secrest to and it does a lot of the container build and publishing work for you21:12
clarkbtimburke: opendev/system-config has a lot of examples as does zuul/zuul or zuul/nodepool21:12
timburkemy thought is basically to have a job that starts up the just-built container, then runs `pytest test/functional` with an appropriate config file to point it at the container21:12
clarkbprobably the zuul stuff is closer to what you're doing since its also python and a smaller number of images. Look at the zuul image builds and the zuul quickstart job and how they interact21:12
timburkeyeah -- probably what i really ought to do is extend the existing build job to include validation testing21:13
fulecorafaShould be great as well. I did try to run testing on the image before, but I just couldn't figure out the python dependencies. I'll later try again with this new fix21:13
timburkenext up21:14
timburke#topic account-reaper and sharded containers21:14
timburkei still haven't gotten to writing a probe test. but it's still on my list!21:14
timburkehopefully i can get something together for next week21:15
zaitcevthanks for remembering21:15
timburkenext up...21:15
timburke#topic cooperative tokens21:16
jianjianah, I joined on the right moment21:16
timburkeyou did!21:16
timburkei was hoping jianjian might offer an overview of some of the work here, since i've seen a decent bit of activity/interest lately21:17
timburke#link https://review.opendev.org/c/openstack/swift/+/89017421:17
patch-botpatch 890174 - swift - common: add memcached based cooperative token mech... - 32 patch sets21:17
zaitcevI have a fundamental queestion: do we actually need these21:17
zaitcevin light of the Fernet token review21:17
timburkeand21:18
timburke#link https://review.opendev.org/c/openstack/swift/+/90896921:18
zaitcevSoon there will be no memcached, no McRouter, no trouble ... right?21:18
patch-botpatch 908969 - swift - proxy: use cooperative tokens to coalesce updating... - 23 patch sets21:18
jianjianzaitcev, other than Fernet token, swift has other use cases which replies on memcached21:18
timburkezaitcev, so memcache will still be a thing -- these are mostly around account/container info and (especially) shard range caching21:19
zaitcevjianjian: yeah. But those aren't cooperative token use cases.21:19
timburke(thanks for reviewing the fernet token patch, though!)21:19
zaitcevDid I review it? I remember looking it, but...21:19
zaitcev(having a biden moment)21:19
timburkep 861271 has your +2 and everything :-)21:20
patch-bothttps://review.opendev.org/c/openstack/swift/+/861271 - swift - tempauth: Support fernet tokens - 6 patch sets21:20
zaitcevSo anyway, I'm not aganist the cooperative tokens idea, I think they are pretty clever.21:20
jianjianfrom our production experience, shard range caching is our mostly targeted use case. we see a lot of shard range cache misses and the associated thundering herd problems.21:20
zaitcevI see.21:20
jianjianand when shard range cache misses, thousands of requests would go the same containers (3 replica) and overload those container, because shard range GET is a very expensive and slow operation.21:22
jianjianand also some of those requests would be able to get shard ranges and start to write into memcache at the same time, cause memcache to fail as well21:23
jianjianbut think about it, all of those tens of thousands requests are asking for the same thing! we only need one of them21:24
jianjianthat's the basic idea of cooperative token. on top of that, we allow a few of requests to get the token and go to the backend, in case any single one would fail to do so.21:25
zaitcevI see what I misunderstood. You aren't talking about authentication tokens at all, but tokens that you circulate in memcached like in a TokenRing.21:26
timburkeyeah, something like a semaphore i think21:27
zaitcevWay to go off half-cocked. But thanks for the additional explanation.21:27
jianjianno, it's not for authentication.21:27
jianjiantimburke, that's right21:28
jianjiantesting on staging cluster works well, we are going to enabling it on production, let's see.21:28
timburkewe've got a few processes that might be interested in shard ranges -- is this work only improving proxy-server handling? would mattoliver's p 874721 be able to benefit, too?21:29
patch-bothttps://review.opendev.org/c/openstack/swift/+/874721 - swift - updater: add memcache shard update lookup support - 5 patch sets21:29
timburkehow are you looking at measuring the improvement?21:29
jianjianjust noticed this patch, will take a look at it21:30
jianjianmy goal is to not see the container server 503 storms any more, not sure if it will improve anything like front user will see21:31
timburkeit's mroe than a year out of date, so i wouldn't worry *too much* about it -- i was just curious if you could see other processes which need shard ranges (such as the object-updater) using the same API21:32
jianjianif those container server won't be overloaded, user would see less 503 errors21:32
timburkeor rather, that *could benefit from* shard ranges -- updater doesn't currently fetch shard ranges, just accepts redirects21:32
jianjiangood point, I will take a look. thanks! timburke21:32
jianjiancccccbkvbdvfndecuccvrufvdvlccbretkdtnufnnrvr21:32
jianjianoh, no, sorry my usb device21:33
zaitcevMy keyboard just repeats a key.21:34
timburkebut either way, reducing the load from proxies will be great, and getting some measurable improvements from prod is always a vote of confidence :-) i'll try to review the chain, though it looks like acoles has been helping too21:34
timburkenext up21:35
timburke#topic py312 and slow process start-up21:35
timburkethis was something i noticed when trying to run tests locally ahead of declaring py312 support in p 91787821:36
patch-bothttps://review.opendev.org/c/openstack/swift/+/917878 - swift - Test under py312 (MERGED) - 5 patch sets21:36
timburke(that only added automated unit testing under py312; func and probe tests i performed locally)21:36
timburkefunc tests were fine, but probe tests took *forever*21:37
timburkei eventually traced it down warnings about pkg_resources being deprecated21:38
zaitcevI think I recall fixing one... Only because watcher used it and I was obligated.21:39
timburkethe kind of funny thing is that setuptools (which was what was issuing the warning about pkg_resources being deprecated) was *also* the one writing code that would use pkg_resources!21:39
timburkehttps://github.com/pypa/setuptools/blob/main/setuptools/script.tmpl21:40
jianjianhaha21:40
zaitcevgroan21:40
jianjianI noticed our pipeline has "swift-tox-py312" now, so that's added by the 917878 patch?21:41
timburkethat only really came up with py312 because prior to that, python -m venv would include an older version of setuptools that didn't issue the warning21:41
timburkejianjian, yup!21:41
jianjian👍21:42
timburkeafter a bit more digging, i figured out that we could change how we indicate there's this bin script to get around it21:42
timburkebasically, instead of listing it in the "scripts" of the "files" section in setup.cfg, list it in "console_scripts" in "entry_points"21:43
zaitcevOh, so that was the reason21:44
zaitcevWhy didn't you write it in the changelog? It's not self-evident. I'd add a +2 right away.21:45
timburkeso i started doing the conversion. it's mostly fairly mechanical, but there are a few bin scripts that still have a lot of code in them that needs to get relocated21:45
timburkei thought i did ok on that in p 918365 ! i guess not clear enough :-)21:45
patch-bothttps://review.opendev.org/c/openstack/swift/+/918365 - swift - Use entry_points for server executables - 4 patch sets21:45
jianjiannice! this brings us closer to run py312 on prod21:45
zaitcevOh, right. That'd add a lot of boilerplate.21:45
timburkeanyway, mattoliver at least took a look a couple months ago, recommending that we do it for everybody, so now i've added more patches stacked on top21:47
timburkeif anyone has time to review, i'd appreciate it21:47
timburkenext up21:47
timburke#topic multi-policy containers21:48
timburkei promised fulecorafa i'd get this on the agenda :-)21:48
fulecorafaThanks a lot :)21:48
timburkei'm not sure what would be most useful for you, though. more discussion/brainstorming, maybe?21:49
fulecorafaSo, we've been working on this and we have a working prototype. Based on that idea from last meeting of making a +cold bucket automatically21:49
timburkecool!21:50
zaitcevInteresting!21:51
fulecorafaWe still have to make some adaptations to start thinking about a patch though. We've been working with some old version, which is what we use in production21:51
fulecorafaSome other good news: we got it working with MPUs and versioning as well21:51
timburkealways best to start from what you're running in prod :-)21:51
timburkenice!21:51
fulecorafaOne thing we are still pondering though21:52
fulecorafaFor multipart uploads, it kind of came for free with our modifications in the protocol if we have 4 buckets in the end: bkt; bkt+segments; bkt+cold and bkt+segments+cold21:53
timburkethat'd seem to make sense21:54
fulecorafaWe came to consider possibly removing this need by adapting the manifest file to skip the linking bkt -> bkt+cold (manifest) -> bkt+cold+segments (parts). So it would be just bkt (manifest) -> bkt+segments+cold (parts)21:55
fulecorafaIs it worth the trouble?21:55
timburkemaybe? i think it'd probably come down to what kind of performance tradeoffs you can make -- the extra hop will necessarily increase time-to-first-byte21:57
fulecorafaMy personal opinion is that it is not worth it. It would largly complicate the code and this increase in time would be little compared to the whole process21:58
fulecorafaIn our tests, we didn't notice much of a difference21:58
timburkehaving the four buckets seems unavoidable -- bkt / bkt+cold for normal uploads, bkt+segments / bkt+segments+cold for part data22:01
timburkei'm inclined to agree that having the extra hop is worth it if it means the code is easier to grok and maintain22:01
fulecorafaThen we agree. Maybe this changes when we come around to patch upstream, but we can talk about it then22:02
timburkecool, sounds great!22:02
timburkeall right, we're about at time22:02
timburkethank you all for coming, and thank you for working on swift!22:02
timburke#endmeeting22:02
opendevmeetMeeting ended Wed Jul  3 22:02:44 2024 UTC.  Information about MeetBot at http://wiki.debian.org/MeetBot . (v 0.1.4)22:02
opendevmeetMinutes:        https://meetings.opendev.org/meetings/swift/2024/swift.2024-07-03-21.00.html22:02
opendevmeetMinutes (text): https://meetings.opendev.org/meetings/swift/2024/swift.2024-07-03-21.00.txt22:02
opendevmeetLog:            https://meetings.opendev.org/meetings/swift/2024/swift.2024-07-03-21.00.log.html22:02
fulecorafaThanks people, have a nice one!22:02

Generated by irclog2html.py 2.17.3 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!