Earlier  
Posted Nick Remark
#openstack-nova - 2017-04-27
13:55:17 mriedem ok
13:55:26 mriedem unlike libvirt where we have 1x1
13:55:26 dansmith yep
13:55:28 dansmith right
13:56:05 dansmith so before we cellified that api, we just looked up the service in the one database, and if it was there, then we add it to the aggregate and move on
13:56:18 dansmith now, we also verify that there is a hostmapping,
13:56:33 mriedem i'll have to look up the aggregates api code
13:56:34 dansmith but we use that hostmapping to know which cell db to look for the service
13:56:47 dansmith https://github.com/openstack/nova/blob/master/nova/compute/api.py#L4734-L4760
13:56:57 dansmith damn, well, a few lines off
13:57:10 dansmith add_host_to_aggregate() is what you want in there
13:57:29 dansmith anyway, there are a couple of things we can do:
13:57:43 dansmith 1. Just say you can't do this, mock ironic for being weird, and move on
13:57:52 mriedem so this is https://developer.openstack.org/api-ref/compute/#add-host
13:58:12 dansmith 2. If we don't find a hostmapping, we scan each cell for a matching service as a fallback, and if we find it, proceed
13:58:33 dansmith it would be a single get-by-hostname per cell, so not *too* bad
13:58:35 dansmith yeah that
13:59:32 mriedem ok i see this guy https://github.com/openstack/nova/blob/master/nova/compute/api.py#L4748
13:59:32 mriedem yeah
13:59:39 mriedem ugh
13:59:55 mriedem so this is kind of like the same issue we have that prompted the need for using uuids in the services and hypervisors APIs
14:00:07 dansmith it's fairly dumb because this only affects ironic and only in that kindof silly case, but..
14:00:12 mriedem and you had to workaround in the HostAPI code for now
14:00:23 mriedem so i think we do the same thing you already did in the HostAPI to find a service/host
14:00:33 dansmith why is it the same?
14:00:40 mriedem iterate the cells until we find a match, if we don't find one, 404, if we find multiple, 409
14:00:43 dansmith just that we don't know the cell by the uuid you mean I guess
14:01:05 dansmith well, I don't know that we need to handle the multiple case necessarily
14:01:30 dansmith if you have multiple compute services with the same hostname you have already messed up your mappings anyway
14:01:40 dansmith we did the 409 because we were deleting something,
14:01:46 mriedem i'm talking about this https://github.com/openstack/nova/blob/master/nova/compute/api.py#L4413
14:01:48 dansmith but I think in this case it's okay to take the first and stop looping
14:01:58 dansmith yeah I know
14:02:07 zioproto mriedem: I am looking at the database, select connection_info from block_device_mapping where instance_uuid= ...
14:02:16 zioproto mriedem: what exactly should I check ?
14:02:41 zioproto everything looks exactly the same
14:02:44 zioproto except the volume uuid
14:05:03 mriedem dansmith: not sure what you mean by "but I think in this case it's okay to take the first and stop looping"
14:05:26 mriedem your #2 is start looping the cells looking for the service by hostname right?
14:05:33 mriedem if we find a match we use that cell context
14:05:39 dansmith mriedem: you *will* have duplicate service ids by no fault of your own because it's autoincrement.. you only have duplicate service hostnames if you're doing it wrong
14:05:50 dansmith mriedem: so I think it's okay to not do the full scan dupe check if you're looking up by hostname
14:06:05 mriedem this came up in the spec and i think johnthetubaguy said duplicate hostnames is a thing
14:06:09 zioproto mriedem: in the xml file both disks have this same line
14:06:12 zioproto <address type='drive' controller='0' bus='0' target='0' unit='0'/>
14:06:27 mriedem zioproto: that seems like the cause then
14:06:34 dansmith mriedem: can't be, otherwise our HostMapping doesn't work :)
14:06:39 zioproto but this xml file is generated by nova, correct ?
14:06:58 mriedem zioproto: yes, would have to lookup the code
14:07:04 mriedem dansmith: let me check the spec
14:07:10 mriedem because one of these APIs takes hostname and i remember talking about htis
14:07:11 mriedem *this
14:08:07 dansmith mriedem: we do all our rpc routing by hostname, have a unique constraint there, etc
14:08:34 dansmith mriedem: if we had dupes, we'd be sending rpc messages to the wrong hosts all over the place
14:08:43 mriedem dansmith: but in a cells v1 world your unique constraint is only scoped to the cell
14:08:46 mriedem right?
14:08:58 zioproto mriedem: most likely this machine booted in Liberty and not in Mitaka it cannot boot anymore :(
14:09:03 dansmith mriedem: it's all mirrored up to the top level db, where there is a constraint
14:09:04 zioproto mriedem: should I open a bug
14:09:06 zioproto ?
14:09:22 mriedem zioproto: i'm not sure what liberty vs mitaka has to do with this
14:09:23 dansmith mriedem: i.e. all the services are in the cell dbs and in the main unified one at the top
14:09:37 mriedem dansmith: ok, well, i'm just telling you what i was told
14:09:47 mriedem you'll have to get the details from johnthetubaguy's horses mouth
14:09:49 dansmith mriedem: anyway, finish your convo with zioproto, we can argue about this detail in the review
14:12:04 mriedem dansmith: ok i think i remember now
14:12:09 mriedem it's the PUT /os-services APIs
14:12:23 mriedem https://developer.openstack.org/api-ref/compute/?expanded=add-host-detail,enable-scheduling-for-a-compute-service-detail#enable-scheduling-for-a-compute-service
14:12:28 mriedem they don't take an id
14:12:31 mriedem the body contains a host
14:12:35 mriedem *hostname
14:12:54 mriedem that's when i started asking about if we could have collisions there and john said we could
14:13:06 mriedem don't ask me how
14:13:22 dansmith mriedem: okay I totally don't understand how, but I'll put this up and hopefully he'll show up
14:13:37 mriedem anywho, as part of the spec we're collapsing those garbage PUT APIs into a single PUT with a service uuid in the path
14:13:57 mriedem so
14:13:58 mriedem PUT /os-services/disable { "host": "host1", "binary": "nova-compute" }
14:14:00 mriedem becomes
14:14:04 mriedem PUT /os-services/{service_id} { "status": "disabled" }
14:14:12 mriedem where service_id is a uuid
14:14:28 mriedem having said all that, i think we're fine with what you're proposing :)
14:14:39 mriedem we == me and the turd in my pocket
14:15:02 dansmith ack, yep
14:42:16 openstackgerrit Dan Smith proposed openstack/nova master: re-Allow adding computes with no ComputeNodes to aggregates https://review.openstack.org/460616
14:54:22 mriedem hmm, isn't it possible to override a mock?
14:54:35 mriedem like if the test class does a global mock of something but a test case wants to override it
14:54:49 mriedem i thought just decorating the test case would override the mock from the test class...
14:54:52 mriedem but apparently not
14:58:35 artom mriedem, maybe explicit assignment will work?
14:58:58 artom nova.stuff.moar = mock.Mock()
14:59:21 zioproto mriedem: in the table block_device_mapping what is the column no_device for ? for one attachment I have value 0 and for the other NULL
15:03:20 openstackgerrit Béla Vancsics proposed openstack/nova master: [WIP] Transform aggregate.update_metadata notification https://review.openstack.org/460625
15:03:37 mriedem zioproto: good question
15:03:47 mriedem zioproto: let me consult my tome of bdm fields
15:08:12 mriedem not doc'ed in the api
15:08:24 mriedem schema says it could be a dict in the api?
15:08:38 mriedem but it's treated like a boolean,
15:08:43 mriedem it's definitely some legacy bdmv1 thing
15:09:15 mriedem https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/block_device_mapping_v1.py#L34
15:10:10 mriedem https://github.com/openstack/nova/blob/master/nova/compute/api.py#L2969

Earlier   Later