Earlier  
Posted Nick Remark
#openstack-nova - 2017-04-27
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 yeah
13:59:32 mriedem ok i see this guy https://github.com/openstack/nova/blob/master/nova/compute/api.py#L4748
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
15:14:15 mriedem boolean in the object model https://github.com/openstack/nova/blob/master/nova/objects/block_device.py#L85
15:14:47 mriedem boolean in the data model https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L622
15:16:31 mriedem zioproto: i'm not really sure what the hell it means,
15:16:40 mriedem but it looks like maybe your customer did a swap volume operation on that instance?
15:16:48 mriedem because that sets 'no_device': None
15:16:49 mriedem in the bdm

Earlier   Later