Earlier  
Posted Nick Remark
#openstack-nova - 2018-09-27
10:35:34 openstackgerrit tianhui proposed openstack/nova master: Update doc: launch-instance-from-volume https://review.openstack.org/605640
11:15:48 openstackgerrit Merged openstack/nova master: Pick next minimum libvirt / QEMU versions for "T" release https://review.openstack.org/605060
11:27:17 openstackgerrit Balazs Gibizer proposed openstack/nova master: Followup for Iba230201803ef3d33bccaaf83eb10453eea43f20 https://review.openstack.org/605653
11:57:11 openstackgerrit Balazs Gibizer proposed openstack/nova master: Follow up for Iba230201803ef3d33bccaaf83eb10453eea43f20 https://review.openstack.org/605653
11:57:12 openstackgerrit Balazs Gibizer proposed openstack/nova master: Follow up for Ie991d4b53e9bb5e7ec26da99219178ab7695abf6 https://review.openstack.org/605658
12:01:13 gibi jaypipes: I've left answer to your question in https://review.openstack.org/#/c/591811/
12:13:12 mdbooth Hmm, I just discovered that initialisation by defaultdict isn't threadsafe
12:13:58 cdent mdbooth: that statement has an mdbooth number of 7
12:14:32 mdbooth It means that if you've got: foo = defaultdict(threading.Lock)
12:14:47 mdbooth and 2 threads concurrently do: foo['thing']
12:14:57 mdbooth They might get different threading.Lock objects
12:16:54 cdent there's some interesting but potentially old discussion at https://stackoverflow.com/questions/17682484/is-collections-defaultdict-thread-safe
12:17:18 mdbooth cdent: Yep, that's where I read it :)
12:43:06 openstackgerrit huanhongda proposed openstack/nova master: Allow to attach/detach port when vm_state is soft-delete https://review.openstack.org/605602
12:48:20 openstackgerrit Elod Illes proposed openstack/nova master: Reject interface attach with QoS aware port https://review.openstack.org/570078
12:50:00 openstackgerrit Matt Riedemann proposed openstack/nova master: Null out instance.availability_zone on shelve offload https://review.openstack.org/599087
12:50:55 mriedem johnthetubaguy: alex_xu: ^ was just a rebase due to a new notification test that needed a sample update
13:11:08 gibi mriedem: is the skip_filters flag of the scheduler you mention in https://github.com/openstack/nova/blob/8c3d02ac3d890f414ce4e05c41d44dca3b385424/nova/conductor/tasks/live_migrate.py#L103-L108 a reality or just a dream?
13:12:28 gibi mriedem: I'm trying to solve the nested force migration issues in https://review.openstack.org/#/c/604084/2/nova/tests/functional/test_servers.py@4897 and I think that skip_filters flag is the solution
13:17:30 mriedem gibi: i'm not working on it if that's what you mean
13:18:09 mriedem but i think the idea is still ok - pass a flag to the scheduler to not run filtered hosts, just do the claim on the forced host
13:18:32 mriedem treats the scheduler more like a library
13:18:42 mriedem the point of that todo was more about DRYing up the code
13:18:52 gibi mriedem: would scheduler still call GET allocation_candidates?
13:19:25 mriedem if it needs those to make the claim, then i guess? but that kind of goes against what forcing a host is all about,
13:19:38 mriedem which is, claims be damned this is where i want the thing to go
13:19:46 mriedem but having said that,
13:19:58 mriedem we already broke that contract with https://github.com/openstack/nova/blob/8c3d02ac3d890f414ce4e05c41d44dca3b385424/nova/conductor/tasks/live_migrate.py#L103-L108
13:20:09 mriedem because we have to keep allocations straight in placement
13:20:17 mriedem or that's what we said to justify that change at the time
13:20:40 mriedem honestly force with bypassing the scheduler was always a terrible idea
13:20:47 gibi mriedem: when we forcing a host we cannot blindly copy the source allocation to the dest host in case of nested
13:21:08 gibi mriedem: as we only know the dest host rp_uuid but not the nested rps
13:21:35 mriedem so we need a new set of allocation candidates
13:21:37 gibi mriedem: one way to solve that is to call GET a_c but limit the search for the given dest host
13:21:51 mriedem that seems reasonable
13:21:53 mriedem essentially,
13:22:25 mriedem in the case of nested RP allocations + force, we'd just go through the scheduler with the requested host but kind of ignore the force flag
13:22:50 mriedem i.e. you can live migrate today by specifying a specific host w/o forcing it and we'll validate that requested host with the scheduler
13:22:54 mriedem it sounds like you want to do the same
13:22:58 mriedem s/want/need/
13:23:25 gibi mriedem: that seems to be the way forward. So now I go and dig that code path
13:23:30 gibi mriedem: thanks
13:24:07 mriedem in the case of an unforced live migration to a specific host, we just set the RequestSpec.requested_destination to the requested host/node and send that to the scheduler
13:24:24 mriedem it sounds like you'd just need some logic up-front to determine, is this an instance that has allocations on nested RPs
13:24:28 mriedem and if so, ignore the force flag
13:25:12 gibi mriedem: yeah, forced live migration will be less forced as it can return NoValidHost after this change
13:25:13 mriedem https://github.com/openstack/nova/blob/8c3d02ac3d890f414ce4e05c41d44dca3b385424/nova/compute/api.py#L4374
13:25:44 mriedem gibi: and i think that's ok - forced live migration could always fail even if you bypassed the scheduler b/c the conductor task still does some prechecks on the forced host
13:25:45 gibi mriedem: which means if every instance will be on nested RP then force livemigration will be equal to non forced livemigration with provided host
13:26:01 mriedem https://github.com/openstack/nova/blob/8c3d02ac3d890f414ce4e05c41d44dca3b385424/nova/conductor/tasks/live_migrate.py#L160
13:26:13 mriedem like, self._check_host_is_up(self.destination) is the ComputeFilter
13:26:20 mriedem self._check_destination_has_enough_memory() is the RamFilter
13:26:27 mriedem etc
13:26:56 mriedem i'd really like to just get rid of that _check_requested_destination method
13:27:11 gibi mriedem: OK, this seems to be a way forward to eventually get rid of the force live migration altogether
13:27:28 jaypipes mriedem: "recheck slow node" <-- worst 90s band name EVAH.
13:27:46 mriedem jaypipes: it's definitely not as good as butthole surfers
13:27:52 jaypipes indeed.
13:28:22 jaypipes true fact: my high school band in the early 90s was called "Slow Children at Play".
13:28:46 mriedem highly offensive
13:28:50 jaypipes embarrassing, I know.
13:29:43 mriedem https://www.youtube.com/watch?v=SkjJLQUhxks
13:29:49 mriedem now i know what needs to be playing this morning
13:32:44 mriedem bauzas: depending on where you check if you should ignore the force flag it could get messy,
13:32:45 mriedem https://github.com/openstack/nova/blob/8c3d02ac3d890f414ce4e05c41d44dca3b385424/nova/compute/api.py#L4359
13:32:52 mriedem because the api determines what gets passed to conductor
13:32:56 mriedem it's all very tightly coupled
13:33:21 mriedem i.e. if force is True, the requested host parameter isn't passed to conductor, but the request spec is set with the requested_destination
13:33:51 mriedem but if force is True, the request spec is untouched and the requested host is passed to conductor
13:33:55 mriedem and conductor has to know what that means
13:34:10 gibi mriedem: I see
13:34:21 mriedem i assume the logic to determine if the instance has allocations against nested RPs should probably live in conductor
13:34:25 mriedem so we don't block the API response
13:34:34 mriedem although having said that....
13:34:52 mriedem before some microversion, live migration is aysync rpc call from api-conductor-scheduler until we pick a host and cast to it
13:35:15 mriedem https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id31
13:35:34 mriedem meaning it's pretty easy to timeout the API while picking hosts before 2.34
13:35:56 mriedem cold migrate is the same way - it's all synchronous until we cast to the chosen compute
13:36:01 mriedem :(
13:36:42 mriedem anywho, i'd recommend doing your nested RP calculations in conductor rather than api
13:37:04 gibi mriedem: ack
13:37:21 mriedem maybe you don't need to look at placement? maybe you can just glean if it's got nested rps by looking at the flavor?
13:37:52 mriedem i guess you care about allocations for ports
13:38:16 gibi mriedem: even if flavor has granular groups I don't know if the host the instance is on are already reshaped to nested or not
13:38:26 mriedem right yeah
13:39:17 gibi mriedem: can we simply ignore the force flag for every instance not just for the nested ones? I mean the end user will not know if his instance is nested or not
13:40:22 mriedem it's not really about the owner of the instance (the user), force is for the admin
13:40:44 gibi mriedem: true, I missed that
13:41:01 mriedem if we're really going down a path of blatantly ignoring the force parameter, we should probably consider just deprecating it in the api
13:41:19 mriedem like i said, we kind of already ignore it today for ram/disk/vcpu
13:41:32 mriedem plus some other sanity checks that conductor does
13:41:53 mriedem caching scheduler is the only thing that would still truly force today since it doesn't create allocations
13:41:59 mriedem but we can maybe remove the caching scheduler now
13:42:10 mriedem mgagne: i've been meaning to follow up with you about the caching scheduler removal...
13:43:50 gibi mriedem: does this ignoring behavior needs to be guarded with a new api microversion? I hope not as maintaining the old behavior is not easily possible for nested
13:44:49 mriedem gibi: no i don't think so,
13:44:55 mriedem we're already ignoring force for some filters like i said
13:45:07 mriedem a microversion would be more of a signaling mechanism,
13:45:31 mriedem plus things like nova CLI that do version discovery and pass the latest microversion by default would simply opt into the new microversion where force is never passed

Earlier   Later