| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2024-10-21 | |||
| 12:45:43 | sean-k-mooney | rather then a flavor for conversion we proably need to pass an expected type | |
| 12:45:59 | sean-k-mooney | or convertion function for the flavor value. the image ones are already typed | |
| 12:46:17 | tkajinam | yeah | |
| 12:46:25 | tkajinam | ok the logic for packed_ring is specifically implemented in get_packed_virtqueue_constraint | |
| 12:46:30 | sean-k-mooney | i.e. pass in bool or oslo.utils.str_to_bool whatever taht is called | |
| 12:47:48 | sean-k-mooney | ya so the issue is proably here https://github.com/openstack/nova/blob/master/nova/virt/hardware.py#L1985 | |
| 12:47:57 | sean-k-mooney | in that path we are not converting it to the correct type | |
| 12:48:16 | sean-k-mooney | we convert the flavor to the correct type here https://github.com/openstack/nova/blob/master/nova/virt/hardware.py#L1990-L1992 | |
| 12:48:28 | sean-k-mooney | but in the dict case the image_value is just a string | |
| 12:49:15 | sean-k-mooney | so we need to call strutils.bool_from_string here https://github.com/openstack/nova/blob/master/nova/virt/hardware.py#L1985 | |
| 13:54:13 | jlejeune | hello, I have a question regarding host_mapping, is it "normal" that when we delete a nova-compute service, the 'mapped' field in nova_cell1.compute_nodes table stays at 1 instead of 0 while nova_api.host_mappings related entry is removed ? | |
| 13:55:23 | jlejeune | by letting that 'mapped' field to 1 prevent nova-manage cell_v2 discover_hosts command to create the missing mapping | |
| 13:56:37 | gibi | jlejeune: it sounds like bug #1 in scenario 1 in https://bugs.launchpad.net/nova/+bug/2077070/comments/7 | |
| 13:57:17 | gibi | jlejeune: could you check if adding --by-service to the discover_hosts command helps you or not | |
| 13:57:21 | gibi | ? | |
| 13:57:41 | jlejeune | I've already test it and indeed, it "fix" the issue by creating the missing mapping | |
| 13:58:14 | gibi | OK. Then I think it is the same issue. | |
| 13:58:32 | gibi | so yeah, nova should set mapped to 0 when the host mapping is deleted. | |
| 13:58:40 | jlejeune | but not sure I want to do it by service, given the number of computes we have in production | |
| 13:59:01 | jlejeune | agree | |
| 13:59:35 | gibi | if you have time to propose a fix then I'm happy to review it. If not then eventually I get to it myself to propose the fix. | |
| 14:01:46 | jlejeune | I will have a look ! | |
| 14:02:26 | gibi | jlejeune: thanks! | |
| 14:27:27 | jlejeune | gibi: maybe we should split the bug in two, one for pci devices and another one for the mapping issue ? | |
| 14:31:56 | gibi | jlejeune: I don't think there is anythin else in the pci side, but if you want a separate bug to fix the mapping issue then sure go ahead and file one. I agree that not mentioning pci devices in the separate bug will help the reviewers not bog down on the pci stuff. | |
| 14:34:00 | jlejeune | yes exactly :) | |
| 14:35:43 | gibi | ping me with the separate bug and I will quickly do the triage of it | |
| 14:37:21 | jlejeune | ok | |
| 14:55:02 | jlejeune | gibi: https://bugs.launchpad.net/nova/+bug/2085135 | |
| 15:09:46 | gibi | jlejeune: thank | |
| 15:44:06 | johnthetubaguy | dansmith: are you thinking threads for each task being better for what nova-compute is generally doing? I hadn’t really thought about that. I could see that limiting the code changes, I suppose? | |
| 15:44:29 | dansmith | johnthetubaguy: I want us to at least consider that yeah | |
| 15:44:35 | bauzas | johnthetubaguy: that was something we were considering from the last PTG | |
| 15:45:29 | dansmith | johnthetubaguy: I suspect we have some places where we think we're threadsafe, but aren't | |
| 15:45:38 | dansmith | so we'll need to fix that up, which we should have fixed anyway | |
| 15:46:14 | dansmith | but I think much of nova (potentially conductor as well) could just move straight to real threads, ops can control how much parallelism they want (which they've asked for before) to scale performance, and then we can move on | |
| 15:47:17 | johnthetubaguy | Yeah, I had not thought of it like that. Its a good point. | |
| 15:49:06 | clarkb | just as a point of info zuul runs largely with real threads (I think the websocket lib we use may involve asyncio but I can't remember) | |
| 15:49:32 | JayF | ^ is what dtantsur has been pitching for IPA, although we've written no code in that direction | |
| 15:49:38 | clarkb | it works reasonably well and in theory will work better when we can drop the gil and sort out all of the places we missed extra lockign (but we already coordinate multiple processes with zookeeper so don't really need that scaling approach with dropping gil) | |
| 15:50:25 | dtantsur | Yep. Not all of our project needs to handle an extremely high concurrency. | |
| 15:50:40 | dtantsur | Especially Ironic, which has "I'm busy, come back later" as an inherent part of its API :) | |
| 15:51:20 | johnthetubaguy | Honestly, most of the bugs I find are where we attempt high concurrency badly, hard blocking on some of the API calls and tasks would totally make me operator self happier :) | |
| 15:51:25 | opendevreview | Artom Lifshitz proposed openstack/nova master: libvirt pwr mgmt: reproduce bug 2085122 https://review.opendev.org/c/openstack/nova/+/932922 | |
| 16:05:12 | sean-k-mooney | gibi: im not actully sold on usign ayncio for the timout stuff by the way | |
| 16:05:38 | sean-k-mooney | gibi: it was just going to be my next poc, warp the existing fucntion in awaitlet and dispatch ot asyncio on a seperat ethead | |
| 16:05:56 | sean-k-mooney | specificlay for the nova-api sacather gather usecause | |
| 16:06:08 | dansmith | I'm quite sure that doing that will not be a magic bullet unless we're actually running the asyncio event loop | |
| 16:06:32 | sean-k-mooney | right that woudl be idea run the asyncio eventloop in a sperate thread nad dispatch the async task into it | |
| 16:06:58 | sean-k-mooney | again this is just one of the many altertinitve i was condiering | |
| 16:07:10 | sean-k-mooney | im not conviced it is a good approch but its what was suggested in teh wiki | |
| 16:07:28 | dansmith | yeah, but unless we're the parent, I think that the thing that spawned us may receive the SIGALRM and not deliver it to our event loop as a result meaning it doesn't really work like we think if it's blocked in a C call | |
| 16:08:06 | dansmith | anyway, we should dive into a poc and confirm | |
| 16:08:13 | sean-k-mooney | https://wiki.openstack.org/wiki/Eventlet-removal#3._Timeout_and_Deadline_Management_2 | |
| 16:09:06 | gibi | sean-k-mooney: for me more moving pieces sounds worse, e.g. awaitlet + asyncio + a worker thread running the eventloop is just too much complexity. | |
| 16:09:17 | sean-k-mooney | i did a poc of this before https://review.opendev.org/c/openstack/nova/+/904425/10/nova/context.py#422 | |
| 16:09:28 | sean-k-mooney | with a diffent approch | |
| 16:09:35 | sean-k-mooney | gibi: ack which is valid | |
| 16:10:17 | sean-k-mooney | gibi: i dont think the event approch you suggest really works as we cant assume we can generially check the event within the fucntio we are dispatching | |
| 16:10:22 | dansmith | gibi: ++ | |
| 16:10:30 | sean-k-mooney | gibi: sqlachmen does supprot a statement_timeout | |
| 16:10:43 | sean-k-mooney | which i think is going to be the answer for db queies | |
| 16:10:54 | sean-k-mooney | i think this is currently set per session or conenction | |
| 16:11:05 | gibi | sean-k-mooney: my point that we need to make assumption about the functions we run as a task or we need to prepare to abandon them from the gather thread | |
| 16:11:07 | dansmith | sean-k-mooney: "To handle signals the event loop must be run in the main thread." | |
| 16:11:25 | sean-k-mooney | dansmith: sure but we cant use sinals for this | |
| 16:11:40 | dansmith | I think that unless you're the main thread, you can't delegate things to executors and expect things like timeouts to preempt | |
| 16:11:45 | sean-k-mooney | when run under mod_wsig some of those are uncondtionally handeled by apache | |
| 16:12:05 | sean-k-mooney | so i dont think we can rely on sig_arlarm in general | |
| 16:12:36 | dansmith | right, but I think that's how asyncio handles preemptable timeouts right? | |
| 16:12:47 | sean-k-mooney | i do not think so | |
| 16:12:58 | sean-k-mooney | asycio also works on windows where it cant | |
| 16:13:18 | dansmith | sure, but it doesn't have to implement the primitives in the same way | |
| 16:13:26 | johnthetubaguy | What is the argument against brute forcing it with extra threads (for the scatter/gather) apache just says no? Or just worried about the system resources/latency of the extra thread? | |
| 16:13:57 | sean-k-mooney | johnthetubaguy: its not really the scather gahter that the concern | |
| 16:13:58 | dansmith | I've just run into some weirdness when trying to run asyncio compatible stuff from deep inside "regular" code and it seems like it was related to some of the caveats around the event loop being in the main thread | |
| 16:14:13 | sean-k-mooney | we coudl remove that but we currently use eventlet to timeout queiry that done return | |
| 16:14:14 | gibi | johnthetubaguy: threads are not cancellable so we cannot easily port the today's timeout handling | |
| 16:14:29 | dansmith | right ^ | |
| 16:14:30 | sean-k-mooney | so i think the reall fix for that is the sql alchemey statement timeout | |
| 16:14:34 | johnthetubaguy | Ah… got you. | |
| 16:14:36 | dansmith | sean-k-mooney: eight | |
| 16:14:44 | dansmith | sean-k-mooney: *right | |
| 16:14:51 | sean-k-mooney | process can be killd but that not reaonble ot do in the api | |
| 16:15:39 | gibi | sean-k-mooney: sure, if all the blocking call can be made non blocking with a timeout then we can just push down our timeout handling to the bottom of the call stack | |
| 16:15:39 | sean-k-mooney | ok so i think ill pause lookign at other "timeout methods" that work for arbitry funcitons | |
| 16:15:57 | sean-k-mooney | and insted look at how we can pass timeouts to existing libs directly i.e. sqlachmey | |
| 16:16:31 | gibi | yeah, I think we should not chase the "timeut for arbitrary function" direction with native threads. But accept that we need to per task type based solution | |
| 16:16:44 | dansmith | agree | |
| 16:17:15 | sean-k-mooney | that is fine with me. | |
| 16:17:35 | sean-k-mooney | i was hoping to limit the scope fo the refactors but lets expore that instead then | |
| 16:18:22 | sean-k-mooney | to be clear changing form eventlet.timeout to native timeouts in sqlachemy shoudl work with or without eventlet monkypatching | |
| 16:18:43 | dansmith | yeah | |
| 16:18:54 | sean-k-mooney | dansmith: gibi: would you condier this in or out of scope for this cycle. perhasps we shoudl dicsuss in ptg session | |
| 16:19:10 | sean-k-mooney | im not sure if that is high or low risk | |
| 16:19:14 | gibi | sean-k-mooney: do we have a timeout today both on the gather greenthread and on the task greenthreads doing the work? | |
| 16:19:15 | dansmith | I think we could get an eventlet.Timeout or a sqla.timeout at any point so we should already be handling those | |
| 16:20:13 | gibi | sean-k-mooney: I consider the work in scope for E, landing it for E might not happen but if I want to learn the devils in the details I need to work on an example, and this is a good example. | |
| 16:20:24 | sean-k-mooney | ack | |
| 16:20:26 | dansmith | also, AFAIK eventlet will let the timeout happen to unblock the waiter, but the worker thread actually blocked remains there to be GC'd until it frees up, | |