Earlier  
Posted Nick Remark
#openstack-nova - 2023-11-17
11:39:03 pas-ha[m] this allows to upgrade the etcd and tooz-using components in whatever order w/o changing the configuration
12:57:25 opendevreview Merged openstack/nova master: Bump jsonschema minimum to 4.0.0 https://review.opendev.org/c/openstack/nova/+/850021
13:33:19 jangutter pas-ha[m]: regarding version autodetect: https://lists.openstack.org/pipermail/openstack-discuss/2023-August/034704.html
13:35:17 jangutter pas-ha[m]: probing for a version also means you don't error on the case where you forgot to upgrade your etcd.
14:13:57 bauzas lemme get it straight
14:14:08 bauzas etcd changed its endpoint by a release
14:14:36 bauzas tooz accordingly changed to use the newer endpoint by a specific tooz release
14:15:18 bauzas given now, we upgrade tooz but not etcd, tooz talks the new way while it should talk to the other endpoint
14:15:32 bauzas amirite, jangutter pas-ha[m], frickler ?
14:17:57 jangutter bauzas: correct, it's also possible to override the endpoint away from the default, in cinder config. Both old and new tooz can work with old and new etcd if the endpoint is given explicitly.
14:18:02 tkajinam the problem is that tooz used to use v3beta which is hardcoded and users had to override it in case needed
14:18:53 bauzas jangutter: was cinder using the default, or was it specifically asking an endpoint?
14:19:03 tkajinam the problem here is that in stable/2023.1 we had old tooz using v1beta by default along with old etcd3 with v1beta. now we upgrade only tooz and the new version uses v1 by default.
14:19:15 tkajinam and because etcd3 is still old after upgrade v3 api is not available
14:20:13 jangutter https://opendev.org/openstack/devstack/commit/3a7a3cd8c5a5ac3f1655d6ff17974f8623fb3330 <--- before this, cinder was using default, after this cinder was asking explicitly for v3
14:20:29 bauzas we shouldn't expect operators to upgrade their dependencies when upgrading
14:20:43 tkajinam we added api_version=/v3 in coordination url in devstack stable/2023.2, so if you first deploy cinder with stable/2023.1 coordination url does not contain api version
14:20:56 opendevreview John Garbutt proposed openstack/nova-specs master: Expose PCI device NUMA using PXB https://review.opendev.org/c/openstack/nova-specs/+/869416
14:21:01 tkajinam and the same config value is carried over so tooz continue using the default which has been changed from stable/2023.1 to master
14:21:42 jangutter tkajinam: and it's worse, tooz was using v3alpha, not v3beta https://review.opendev.org/c/openstack/tooz/+/891355/6/tooz/drivers/etcd3gw.py
14:21:43 bauzas okay, but that's then a devstack config problem
14:21:55 tkajinam ah, yeah. I was wrong/ v1alpha
14:22:09 bauzas jangutter: why shouldn't we changing devstack now to use the default?
14:22:32 tkajinam bauzas, no we can't use default
14:22:36 bauzas that's still a breaking change and people would need to change their config when upgrading to Caracal
14:23:21 jangutter the only way config stays the same is if etcd and tooz is upgraded in lockstep.
14:23:24 tkajinam bauzas, the default in tooz stable/2023.1 is v3alpha, the default in tooz master is v3. Because we keep using old etcd without v3 during upgrade process we have to override api version to v3alpha to keep using v3alpha after upgrade
14:23:58 jangutter if etcd and tooz mismatches, the endpoint has to be specified.
14:24:31 bauzas shouldn't tooz be somehow a bit smarter and do a failback call if etcd isn't new enough ?
14:24:56 tkajinam that's what was proposed above by pas-ha[m]
14:25:02 opendevreview John Garbutt proposed openstack/nova-specs master: Add spec for PCI Groups https://review.opendev.org/c/openstack/nova-specs/+/899719
14:25:57 bauzas what I'm afraid is that operators doing upgrades would face that problem too, right?
14:26:24 bauzas if we start tweaking devstack, there is surely an impact for regular ops that don't deploy with it :)
14:26:43 jangutter that's technically down to etcd3gw backend... and etcd doesn't have a nice version discovery, so, it's the try-different-versions method.
14:26:45 bauzas this means they have to change some config on the fly during upgrades
14:26:57 tkajinam well, we did document the upgrade impact to suggest setting api version in case old api version should be used.
14:27:08 bauzas jangutter: I'm personnally fine with a try/catch clause
14:27:19 tkajinam but what we are learning here is that just documentation may kill some people.
14:27:23 tkajinam including us
14:27:28 bauzas oh yeah
14:27:47 tkajinam https://review.opendev.org/c/openstack/tooz/+/891355/6/releasenotes/notes/etcd-3.4-eee8300c942a1263.yaml
14:28:00 bauzas if you really do breaking upgrades, my personal recommandation is to provide tools that people can consume for checking their states and whether they'll break
14:28:05 jangutter yep, the release notes are the last resort :-/
14:28:34 bauzas tkajinam: we, in nova, create the nova-status upgrade command for that exact reason
14:28:40 bauzas created*
14:29:04 bauzas because even if we spoil the breaking changes in our relnotes, people may be impacted and miss the point
14:29:37 bauzas anyway, I'm not saying tooz shall do a tooz-status upgrade commande
14:29:39 bauzas command*
14:29:44 tkajinam the problem may be that tooz is not the right place to provide that config validation, because tooz itself does not register config options but components using it does and pass the url value
14:29:51 jangutter The problem is that etcd is sometimes regarded as an _externally_ managed service, and sometimes an _internally_ managed service.
14:30:00 tkajinam we can provide the base implementation but every project may need to implement the command using that
14:30:08 bauzas I'm just saying that we need some kind of lockstep mechanism that can handle both etcd/tooz upgrades at once
14:31:25 jangutter yeah: for kolla-ansible that happens because in one release all the elements (config, tooz, etcd) is in lockstep. But that's not necessarily the same case for source-level projects.
14:32:43 bauzas problem is, again, you can't really ask operators to do some OS upgrade while you're upgrading your services
14:32:56 bauzas that's why grenade is not bumping the reqs
14:33:36 jangutter yeah, _however_ etcd in devstack isn't the os-bundled one.
14:35:04 bauzas just checked, we pull tooz-3.2.0
14:35:09 bauzas https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_73a/900783/2/check/grenade-skip-level-always/73acbef/controller/logs/old/devstacklog.txt
14:36:13 bauzas and we have etcd3gw==2.1.0
14:36:59 bauzas oh tonyb +Wd my revert patch https://review.opendev.org/c/openstack/requirements/+/901079
14:38:00 tonyb it's clearly broken
14:38:24 bauzas oh heh, https://github.com/openstack/grenade#theory-of-upgrade
14:38:31 bauzas tkajinam: jangutter: ^
14:38:45 jangutter yeah I saw that.
14:38:54 tonyb we should block it in g-r and figure out how to handle things for the longer term
14:39:30 bauzas "Any other required changes on upgrade are an exception and must be called out in the release notes." and "Grenade supports per release specific upgrade scripts (from-juno, from-kilo)."
14:39:47 bauzas tonyb: I don't disagree
14:40:33 bauzas I still think I'd appreciate if tooz may do some fallback mechanism to an older endpoint if the newer endpoint sounds invalid
14:40:39 tkajinam https://review.opendev.org/q/topic:etcd-api-discovery
14:40:42 bauzas just for the sake of easing people's lifes
14:41:15 tkajinam We probably need a bug and link these to the bug, but we can make tooz smart and discover the available api version unless user explicitly requires a specific version
14:41:22 bauzas tkajinam: wow, kudos
14:41:26 tkajinam which is being implemented in these
14:41:53 tkajinam (tooz patch need further work because we first need a new release of etcd3gw...
14:41:57 bauzas sounds a good path to me
14:42:32 bauzas we may ban the current tooz release and just await for a newer release once everything is fine
14:42:38 jangutter tkajinam: one question - if etcd gets updated (v3alpha disappears and v3 appears) - would this case be handled?
14:44:33 tkajinam jangutter, yes. with that code etcd checks the etcd server version using version api and use the latest api version available
14:44:47 tkajinam jangutter, though you may need to restart servers because the detected api is cached after the first detection.
14:44:57 tkajinam s/servers/services/ I mean
14:45:10 tkajinam s/etcd checks/tooz checks/
14:45:44 jangutter takjinam: so it will appear if cinder "remembers" the version of etcd it first connected to and never try a newer version?
14:46:37 tkajinam there is tradeoff. we can let tooz check api version every time but it always requires additional api call
14:46:47 tkajinam we may probably implement expire but I'd leave it for now
14:46:58 tkajinam jangutter, I probably had to say this first. yes, you are correct
14:49:19 jangutter tkajinam: yeah, gracefully redetecting the endpoint on error is also another option, that adds time to report errors.
14:50:40 jangutter but this covers 95% of the pain.
14:58:08 tkajinam https://bugs.launchpad.net/python-etcd3gw/+bug/2043810
14:59:01 tkajinam I've created a bug here... in case you want something you can refer to
14:59:04 tkajinam jangutter, we can discuss how we can realize the automated switch without restart, but I'd prefer leaving it for follow-up.
15:00:05 jangutter tkajinam: right, I'm fine with just documenting the behavior (i.e. we expect dependent services to be restarted on etcd upgrade)
15:04:38 jangutter (that's a much more reasonable expectation than requiring operators to update etcd + tooz in lockstep.
15:15:17 tonyb bauzas: You probably need to remove your -W on 901079
15:15:36 bauzas ack I will
15:49:43 bauzas dansmith: before I shutdown for the weekend and before your PTOs, just a quick question about https://review.opendev.org/c/openstack/nova/+/899625
15:50:39 bauzas for non-SRIOV GPUs, shall we cap the total of the inventory by the max_instances or should we rather provide total=0 if the GPU has more than the max ?
15:51:03 bauzas for example, a GPU type supporting 8 vGPUs
15:51:10 bauzas and the operator saying max_instances=2
15:51:34 bauzas shall we then accept one GPU and providing a total=2 or should we rather not accept it?
15:51:41 dansmith we can't *actually* have total=0 right?

Earlier   Later