Thursday, 2025-08-21

opendevreviewSteve Baker proposed openstack/ironic master: Memoize calls to bcrypt.checkpw  https://review.opendev.org/c/openstack/ironic/+/95813000:05
stevebaker[m]TheJulia: is there an obvious way of seeing the metal3 regression and to see if my change helps?00:06
TheJulianot really, unfortunately. Metal3-integration was just fine, it was a job which uses an ironic-image for the standalone operator dmitry has in metal3 which blew up when when tests went too long00:08
TheJuliaTesting00:10
TheJuliaI can tell you already that just "baremetal node show <random name>" is faster, already below a second00:10
TheJuliaThat looks *way* faster00:13
TheJulialike, absurdly faster00:16
stevebaker[m]cool cool00:53
JayF-1 for a release note (required to backport). I'd also prefer we not land this until at least a workday has passed so other cores can chime in. I asked fungi to take a look to make sure there's not some security implication here we haven't spotted. 01:01
opendevreviewSteve Baker proposed openstack/ironic master: Memoize calls to bcrypt.checkpw  https://review.opendev.org/c/openstack/ironic/+/95813001:25
opendevreviewOpenStack Proposal Bot proposed openstack/ironic-ui master: Imported Translations from Zanata  https://review.opendev.org/c/openstack/ironic-ui/+/95782902:36
opendevreviewKaifeng Wang proposed openstack/ironic master: Direct return of vmedia action during in power failure  https://review.opendev.org/c/openstack/ironic/+/95814706:42
rpittaugood morning ironic! o/07:05
FreemanBoss[m]Good morning rpittau: 07:05
abongalegm folks08:10
janderswhat's the best way to check the state of Ironic CI? I'd like to recheck a change which passed reviews and previously passed CI but now is permafailing tempest08:15
jandersI don't want to waste cycles blindly running recheck08:16
fricklerjanders: I'd usually look at the history of the failing job in order to see whether it only fails for a single change or always (for the last 20 runs or so)08:18
fricklerjanders: if you point to a specific change, I could also try to look at the logs and possibly give some further hints08:20
jandersfrickler thank you. I am looking at https://review.opendev.org/c/openstack/ironic/+/95697208:20
jandersit's failing ironic-tempest-uefi-redfish-vmedia-4k, it seems this job had 1 pass in ~25 attempts over 2 days08:23
rpittauI think there's a request to remove it 08:23
jandersrpittau ACK08:23
rpittauhttps://review.opendev.org/c/openstack/ironic/+/95796208:23
rpittauI've recheked the patch08:24
rpittaujust ignore it for now08:24
jandersrpittau thank you08:24
jandersnot great CI is having issues, but I am glad I learned more how to investigate upstream issues08:25
jandersthanks folks!08:25
janderswill keep it in mind for the future08:25
frickleryes, iiuc centos published broken images that are used in that particular job08:32
*** srelf_ is now known as Continuity08:49
ContinuityMorning Ironic08:49
ContinuityDoes anyone make use of DPUs as part of an ironic deployment, and if so any blogs or additional reading, im struggling to find anything in the docs about support or use cases08:49
opendevreviewBaptiste Jonglez proposed openstack/networking-generic-switch master: tox: exclude all venv dirs from pep8  https://review.opendev.org/c/openstack/networking-generic-switch/+/95815209:25
opendevreviewBaptiste Jonglez proposed openstack/networking-generic-switch master: tox: Enable codespell by default and limit it to relevant files  https://review.opendev.org/c/openstack/networking-generic-switch/+/95815409:30
opendevreviewBaptiste Jonglez proposed openstack/networking-generic-switch master: Cast boolean Netmiko kwargs to native types  https://review.opendev.org/c/openstack/networking-generic-switch/+/95807909:38
dtantsurTheJulia: updated re slowness. A new test I've added to https://github.com/metal3-io/ironic-standalone-operator/pull/349 proofs (IMO) that sqlite is not the issue. I'm running a non-HA Ironic with a real database, and it still takes 4 minutes to create and delete nodes.11:38
dtantsurThe work around works, and we're unblocked. I'll create a bug to track the slow down.11:38
dtantsurhere goes https://bugs.launchpad.net/ironic/+bug/212114311:46
dtantsurContinuity: TheJulia has the most context about DPU's than any of us, I suspect.11:51
dtantsurstevebaker[m]: the bug is https://bugs.launchpad.net/ironic/+bug/2121143. I'll try applying your patch but note that the normal JSON RPC case is not affected by the slow-down, only the local RPC one.11:54
opendevreviewMerged openstack/ironic master: Make ironic-tempest-uefi-redfish-vmedia-4k non-voting  https://review.opendev.org/c/openstack/ironic/+/95796212:26
TheJuliadtantsur: still invokes that code path, fwiw. I found it using the tox -elocal-ironic-dev command which invokes a very similar configuration13:12
kubajjHello, in https://opendev.org/openstack/ironic-python-agent/commit/2db123d318e481e4c59e305ca52e4eeb526b7659 Arne limits the number of logical disks in the target raid config to 2.13:29
kubajjOur question is: does anybody have a clue why he set this limit?13:29
kubajjIs there a possibility that this will change, or can we just assume that this is the max?13:29
TheJuliadtantsur: your test completed13:30
TheJuliakubajj: for a mirror set for the root os?13:30
kubajjTheJulia: sorry, should have sent the line https://opendev.org/openstack/ironic-python-agent/src/branch/master/ironic_python_agent/hardware.py#L335713:31
*** dmellado62 is now known as dmellado13:32
TheJuliaThe only thing I can think of is it is to enforce the mirror set usage for the root os13:32
kubajjI am not sure if I understood correctly, my question is directed to if we could support more logical disks (3+)13:34
kubajjTheJulia: if I understood correctly what you mean by mirror set for root os, that's exactly what we do - we have a mirrored root partition and a RAID array with the rest of the disk next to it13:35
TheJuliaNobody has asked. I think most would prefer to prevent folks from trying to make raid5's bootable. I mean it is *doable* but difficult.13:38
TheJuliaJayF: I think we should get your request logging change landed today if at all possible, to at least provide clear insight into the wall time on the outer edge of the api.13:39
dtantsurTheJulia: yeah, unfortunately it does not have the required verbosity level, I'm fixing it :(13:44
TheJuliadtantsur: what doesn't?13:44
dtantsurI assumed you meant https://github.com/metal3-io/ironic-image/pull/742 for Steve's patch13:44
TheJuliayou mean the job logs?13:45
dtantsuryeah, there is no timing13:46
TheJuliafor the job steps?13:47
dtantsurWill run 19 of 19 specs13:47
dtantsur•••SSSSSSSSSS••••••13:47
dtantsurRan 9 of 19 Specs in 971.579 seconds13:47
dtantsurThis does not give me much to work with :)13:48
TheJuliayeah, that made me raise an eyebrow13:48
TheJuliaok13:48
dtantsurjust outdated configuration, fixing in https://github.com/metal3-io/ironic-image/pull/74413:48
TheJuliaFWIW, I looked at a local process rpc single job and it shows no sign of the huge lag, at least in what gets logged. We still need logging like JayF's patch on the API side to trace it end to end.13:49
dtantsurAfter seeing Steve's patch, I'm also wondering if TLS is making any difference13:51
TheJulia13:11:08.725: rpc client logs its going to create a ndoe. 13:11:09.735 -> completed via client logging13:51
dtantsurAlthough, realistically, it should not take seconds13:51
TheJuliano, I was able to pin basic auth's authenticate() method down to our big pain point at least locally13:51
TheJulia300ms per invocation...13:52
kubajjTheJulia: ok, thanks, we will take it as a fixed limit for now13:52
dtantsurTheJulia: so, you assume it's bcrypt combined with indirection?13:52
TheJuliakubajj: that *should only be* the root volume13:52
TheJuliadtantsur: I can confirm that is the case13:52
dtantsurGotcha, thanks for looking into it13:53
TheJuliano problem, I still want to dig some more, but at least with the logging we have in place it sure looks like the bcrypt invocation was the huge pain point13:53
dtantsurSince it's local, I wonder if we can support a much more lightweight hash13:53
TheJuliaI mean... its likely over optimization, its only 300ms once on that credential13:53
TheJuliaafterwards it wallclocked at like 0.6ms13:54
TheJuliaAnyway, I have 2.5 hours of meetings starting in 6 minutes, my brain is about to shift focus to that :(13:54
dtantsurohhh, good luck13:55
TheJuliaThe indirection actually seems quite sporty without the extra overhead, but until I have JayF's patch in place its a little more difficult to see if we're doing other silly things which are just sinking time.13:56
TheJuliaOther changes around verbose logging likely still make a lot of sense to change, just for human sanity as well.13:57
dtantsurGood reminder, left some comments on the JayF's patch14:07
opendevreviewBaptiste Jonglez proposed openstack/networking-generic-switch master: Detect device configuration errors on Dell Force10 and OS10  https://review.opendev.org/c/openstack/networking-generic-switch/+/86831814:33
opendevreviewVerification of a change to openstack/ironic master failed: Fix the ability to escape service fail  https://review.opendev.org/c/openstack/ironic/+/95697214:44
dtantsurTheJulia: we're down to less than 20 seconds with stevebaker[m]'s patch \o/14:46
TheJuliafor the hundred node add/delete14:57
dtantsuryep14:58
TheJulianice15:13
TheJuliasounds like it is faster than it was previously15:13
dtantsurIt is, yes. I have a feeling that the HA case also sped up slightly.15:15
dtantsurNow, I have one concern with the implementation but it should not change the performance profile in the normal case.15:15
TheJuliawhich is?15:16
dtantsurCache growth, see inline15:18
TheJuliawhich cache?15:18
TheJulia(keep in mind, on endless call of doom)15:18
dtantsurSorry :) Steve is adding a cache for bcrypt comparison results, both positive and negative. This allows an attacker to grow the cache infinitely. I'm suggesting using the Python's LRU cache instead.15:19
TheJuliaoh, yeah, oh.. heh, yeah15:20
TheJuliaI was thinking recording should hav ebeen later, but didn't raise it yesterday due to out of spoons15:27
JayFgood catch on that auth catching change dtantsur 15:36
JayFI had a nagging feeling I was missing something and I'm going to proclaim that as "it" :D 15:36
TheJuliadtantsur: is the 20 seconds on par with what it was before we removed eventlet and went to indirection?15:47
opendevreviewHabeeb Babasulaiman proposed openstack/bifrost master: bug: drop --develop flag from testenv usage  https://review.opendev.org/c/openstack/bifrost/+/94672415:52
dtantsurTheJulia: unfortunately, I don't have this stats15:56
TheJuliapity :(15:56
TheJuliaI'm fairly sure its likely a little faster with Steve's patch if the basic auth is enforced by Ironic for the api, if not then... likely not15:56
TheJuliasince it is any basic auth invocation which is impacted15:57
dtantsurAh, well. Before the eventlet change, we did not use RPC for the non-HA case.15:58
TheJuliayes15:58
dtantsurI can try to find some job that happened between the local RPC change and the eventlet migration..15:58
TheJuliabut if you were doing basic auth on the front end, you were always paying ~300ms15:58
TheJuliawith the rpc changes, that went to 600ms15:58
TheJulianow, that should be functionally wiped out15:59
dtantsurI *think* we terminate basic auth on httpd, but not for the RPC.15:59
TheJuliaok15:59
TheJuliafair enough15:59
dtantsur(I wish our RPC stack adequately supported unix sockets)16:00
TheJuliano auth then?16:00
dtantsuryeah, just use ACL16:00
dtantsurTheJulia: https://github.com/metal3-io/ironic-standalone-operator/actions/runs/17045058098/job/48318568516 is the job I was looking for: with local RPC and eventlet. Around ~ 1.5 minutes for the node test.16:04
dtantsurSo, quite a difference with 4 minutes. BUT! It's also before the indirection change.16:05
TheJuliaWOW16:06
TheJuliaWOW16:06
TheJulia#goodnews16:06
dtantsurTheJulia: now, when you have some brain space, there is another interesting aspect. I see a lot of RPC calls related to traits. We don't even use traits in Metal3. I wonder if they can be avoided.16:09
dtantsurEven node deletion seems to call TraitList.get_trait_names. Creation too.16:10
dtantsurCreation also calls TraitList.get_by_node_id16:10
dtantsurOkay, the latter is caused by node_convert_with_links, which probably should not expect node.get('traits') to be None (I assume it's an empty list instead)16:12
dtantsurhmm, no, it does not make much sense...16:14
dtantsurOh. RPC create_node returns traits as a full TraitList object. And then we fetch it again.16:15
TheJuliaon a call, but basically it all has to do with the traits flow/logic16:20
dtantsurI'll cook a patch soon, and you'll see if you need to yell at me for not understanding indirection :)16:20
TheJuliayou can't nest other objects in indirection, fwiw16:21
dtantsurTheJulia: I may not fully understand what you mean, but RPC create_node returns a Node where node.traits is a TraitsList object16:22
TheJuliapreviously, we nested node.traits as a nested object16:25
TheJuliawhich was traits16:25
opendevreviewDmitry Tantsur proposed openstack/ironic master: WIP Reduce the number of RPC calls to traits API  https://review.opendev.org/c/openstack/ironic/+/95822616:25
dtantsurTheJulia: it still is a nested object (assuming it deserializes correctly)16:26
TheJuliawe can't do that with an OVO nested object through indirection16:26
dtantsurRPC create_node returned {'ironic_object.name': 'Node', 'ironic_object.namespace': 'ironic', 'ironic_object.version': '1.42', 'ironic_object.data': {'id': 56, 'uuid': 'f96d65f2-39f3-4e5c-b360-e918a050bcec', 'name': 'node-55', 'chassis_id': None, 'instance_uuid': None, 'driver': 'redfish', 'driver_info': {}, 'driver_internal_info': {}, 'clean_step': {}, 'deploy_step': {}, 'service_step': {}, 'raid_config': {}, 16:27
dtantsur'target_raid_config': {}, '16:27
dtantsurinstance_info': {}, 'properties': {}, 'reservation': None, 'conductor_affinity': None, 'conductor_group': '', 'power_state': None, 'target_power_state': None, 'provision_state': 'enroll', 'provision_updated_at': None, 'target_provision_state': None, 'maintenance': False, 'maintenance_reason': None, 'fault': None, 'console_enabled': False, 'last_error': None, 'resource_class': None, 'inspection_finished_at': None, 16:27
dtantsur'inspection_started_at'16:27
dtantsur: None, 'extra': {}, 'automated_clean': None, 'protected': False, 'protected_reason': None, 'allocation_id': None, 'bios_interface': 'redfish', 'boot_interface': 'ipxe', 'console_interface': 'no-console', 'deploy_interface': 'direct', 'firmware_interface': 'redfish', 'inspect_interface': 'agent', 'management_interface': 'redfish', 'network_interface': 'noop', 'power_interface': 'redfish', 'raid_interface': 'redfish', 16:27
dtantsur'rescue_interface':16:27
dtantsur 'no-rescue', 'storage_interface': 'noop', 'vendor_interface': 'redfish', 'traits': {'ironic_object.name': 'TraitList', 'ironic_object.namespace': 'ironic', 'ironic_object.version': '1.1', 'ironic_object.data': {'objects': []}}, 'owner': None, 'lessee': None, 'description': None, 'retired': False, 'retired_reason': None, 'network_data': {}, 'boot_mode': None, 'secure_boot': None, 'shard': None, 'parent_node': None, 16:27
dtantsur'disable_power_off': 16:27
dtantsurFalse, 'created_at': '2025-08-20T16:42:54Z', 'updated_at': None}}16:27
dtantsursorry, too much :(16:27
TheJuliadude, paste ;)16:27
dtantsurAn easy mistake: if it's small on my screen, it's small everywhere16:27
TheJuliano worries16:28
dtantsurTheJulia: see traits https://paste.opendev.org/raw/bu58ghGmyDyFb3qODQIy/16:28
TheJuliaYeah, your turning off indirection on the method so it would try to read locally and then skip indirection16:30
TheJuliaThe method *must* be decorated for OVO to try and route it over16:30
TheJuliaotherwise its doing half and half16:30
dtantsurWell, get_trait_names should not be remotable16:31
dtantsurIt operates fully on a local state16:31
TheJuliaohh, yeah, your right!16:31
TheJuliahmmm!16:31
dtantsurThis all is another cause of slowness. Any Node API call results in 1-2 RPC calls to TraitsList, regardless of whether traits are even used.16:32
dtantsurI hope my patch fixes that - it will be easy to see in the bifrost logs.16:32
TheJuliayeah, that should be fine, I think16:33
TheJuliabut yeah16:33
dtantsurI think it works, next time I'll check if there are any other redundant calls17:14
opendevreviewDmitry Tantsur proposed openstack/ironic master: Reduce the number of RPC calls to traits API  https://review.opendev.org/c/openstack/ironic/+/95822617:18
opendevreviewBaptiste Jonglez proposed openstack/networking-generic-switch master: Aruba: Add error message patterns to detect errors  https://review.opendev.org/c/openstack/networking-generic-switch/+/95823117:41
opendevreviewBaptiste Jonglez proposed openstack/networking-generic-switch master: Fix support for Aruba AOS CX devices  https://review.opendev.org/c/openstack/networking-generic-switch/+/95823417:54
*** keekz_ is now known as keekz20:39
*** logan_ is now known as Guest2466020:52
*** keekz_ is now known as keekz20:55
*** naskio_ is now known as naskio20:55
*** abongale_ is now known as abongale20:55
*** jungleboyj_ is now known as jungleboyj20:55
*** rpittau_ is now known as rpittau20:55
*** tonyb_ is now known as tonyb20:55
*** gmaan_ is now known as gmaan20:55
JayFlocal-ironic-dev is like, loop-restarting for me22:04
JayFI wonder if it's my local code22:04
JayF2025-08-21 15:05:38.195 54447 INFO cotyledon._service_manager [-] Child 54521 killed by signal -1122:06
TheJuliaI'm sort of suspecting the single process we might need a larger stacks size22:08
JayFyeah looping with that on master22:09
JayFhow do you do that?22:09
JayFis there a quick and dirty thing I can do to get this working to test my req logging22:09
JayFif not I can spin a devstack but I'm running outta time22:09
JayFoh, ulimit in the shell beforehand22:10
JayFI can try that22:10
JayFI wonder if tox mucks with limits, too22:10
JayFyeah ulimit -s unlimited in shell beforehand no dice22:10
JayFIRONIC_THREAD_STACK_SIZE22:11
JayFthanks, past julia22:11
JayFos.environ.get('IRONIC_THREAD_STACK_SIZE', 65536)) => TypeError: 'str' object cannot be interpreted as an integer22:13
JayFI'll fix it locally and push something once I sus it out22:13
JayFtox was eating the environment22:14
JayFand I had to wrap that in an int()22:14
JayFI'll update my logging patch first but then will followup to fix both that bug and local-ironic-dev config22:14
TheJuliaugh, yeah22:14
TheJuliamakes sense, I didn't try it with the env name22:14
JayFI'm just glad I got to find something broken too22:15
JayFI was feeling left out ;) 22:15
opendevreviewJay Faulkner proposed openstack/ironic master: Add request logging middleware for API requests  https://review.opendev.org/c/openstack/ironic/+/95810322:20
opendevreviewJay Faulkner proposed openstack/ironic master: Fix setting IRONIC_THREAD_STACK_SIZE  https://review.opendev.org/c/openstack/ironic/+/95824922:25
opendevreviewJay Faulkner proposed openstack/ironic master: Fix local-ironic-dev by setting stack size  https://review.opendev.org/c/openstack/ironic/+/95825022:25
opendevreviewSteve Baker proposed openstack/ironic master: Memoize calls to bcrypt.checkpw  https://review.opendev.org/c/openstack/ironic/+/95813022:58
opendevreviewMerged openstack/ironic master: Fix the ability to escape service fail  https://review.opendev.org/c/openstack/ironic/+/95697223:39
janders^^ \o/23:39
jandersTheJulia if you are still around and have time, what are your general thoughts about https://review.opendev.org/c/openstack/ironic/+/957189 ?23:40
jandersif there is any rework needed I'm happy to put some time into it today23:40
TheJuliaSeems reasonable to me23:43
TheJuliaJust need to get ci to be green23:43
janders++23:43
jandersthank you Julia23:43
jandersdoco-wise, do you find https://review.opendev.org/c/openstack/ironic/+/957825 reasonable?23:46
jandersI can work with Iury and Riccardo and get these all finished off and merged upstream and downstream today23:46

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