)]}'
{"doc/source/admin/configuration/schedulers.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":1243,"context_line":"---------------------------------"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"In order to use placement to honor availability zone requests, there must be"},{"line_number":1246,"context_line":"palcement aggregates that match the membership and UUID of nova host aggregates"},{"line_number":1247,"context_line":"that you assign as availability zones. The same key in aggregate metadata used"},{"line_number":1248,"context_line":"by the `AvailabilityZoneFilter` filter controls this function, and is enabled by"},{"line_number":1249,"context_line":"setting `[scheduler]/query_placement_for_availability_zone\u003dTrue`."}],"source_content_type":"text/x-rst","patch_set":24,"id":"5f7c97a3_f13fbab2","line":1246,"range":{"start_line":1246,"start_character":0,"end_line":1246,"end_character":9},"updated":"2018-05-21 21:40:41.000000000","message":"placement","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"  +-------------------+--------------------------------------+"},{"line_number":1255,"context_line":"  | Field             | Value                                |"},{"line_number":1256,"context_line":"  +-------------------+--------------------------------------+"},{"line_number":1257,"context_line":"  | availability_zone | None                                 |"},{"line_number":1258,"context_line":"  | created_at        | 2018-03-29T16:22:23.175884           |"},{"line_number":1259,"context_line":"  | deleted           | False                                |"},{"line_number":1260,"context_line":"  | deleted_at        | None                                 |"}],"source_content_type":"text/x-rst","patch_set":24,"id":"5f7c97a3_d144fe49","line":1257,"updated":"2018-05-21 21:40:41.000000000","message":"Kind of weird that you create an aggregate that\u0027s not in an AZ. Oh I see you set the AZ below. Could just do that in one call, but it\u0027s a nit.\n\nopenstack aggregate create --zone az002 myaz","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"}],"nova/conf/scheduler.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"62ad341d0ccb4ee06852f480d09dae1642823c31","unresolved":false,"context_lines":[{"line_number":177,"context_line":"found, or that aggregate does not match one in placement, the result will"},{"line_number":178,"context_line":"be the same as not finding any suitable hosts."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Note that if you enable this flag, you can disable the (less efficient)"},{"line_number":181,"context_line":"AvailabilityZoneFilter in the scheduler."},{"line_number":182,"context_line":"\"\"\"),"},{"line_number":183,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_542be180","line":180,"range":{"start_line":180,"start_character":55,"end_line":180,"end_character":71},"updated":"2018-05-23 16:12:46.000000000","message":"that sounds a bit opinionated","commit_id":"96f10711667603e7fbad57b151c6438cdd9ae270"}],"nova/scheduler/request_filter.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1983cda343724c06de5bbce41dd4507bf37fea72","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    This will modify request_spec to request hosts in an aggregate that"},{"line_number":70,"context_line":"    matches the desired AZ of the user\u0027s request."},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":"    az_hint \u003d request_spec.availability_zone"},{"line_number":73,"context_line":"    if not az_hint:"},{"line_number":74,"context_line":"        return"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_7c0c55eb","line":72,"updated":"2018-02-25 10:05:01.000000000","message":"Hmm, I guess this may not be set","commit_id":"64c68b2b483658f324c945ee4da482877f0f26a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            reason\u003d_(\u0027No hosts available for tenant\u0027))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def map_az_to_placement_aggregate(ctxt, request_spec):"},{"line_number":64,"context_line":"    \"\"\"Map requested nova availability zones to placement aggregates."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    This will modify request_spec to request hosts in an aggregate that"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_11c0367c","line":63,"updated":"2018-05-21 21:40:41.000000000","message":"AvailabilityZoneFilter won\u0027t run on rebuild so we probably shouldn\u0027t here. My brain is fuzzy on if this could potentially cause any issues during rebuild though, besides just unnecessary queries/performance hit.","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba8dd6e9ec672b247f8968a8cc1fe2c77eb37911","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            reason\u003d_(\u0027No hosts available for tenant\u0027))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def map_az_to_placement_aggregate(ctxt, request_spec):"},{"line_number":64,"context_line":"    \"\"\"Map requested nova availability zones to placement aggregates."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    This will modify request_spec to request hosts in an aggregate that"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_91be86d2","line":63,"in_reply_to":"5f7c97a3_11c0367c","updated":"2018-05-21 21:44:22.000000000","message":"We currently don\u0027t call placement during scheduling for rebuild, so this is all unnecessary:\n\nhttps://github.com/openstack/nova/blob/d78055df0e39b53fd481c53429ba77f8c1e1ab09/nova/scheduler/manager.py#L135\n\nWhich likely means we shouldn\u0027t be calling this:\n\nhttps://github.com/openstack/nova/blob/d78055df0e39b53fd481c53429ba77f8c1e1ab09/nova/scheduler/manager.py#L127\n\nSo that\u0027s a separate issue.","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"}],"nova/tests/functional/test_aggregates.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        nova.tests.unit.image.fake.stub_out_image_service(self)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":80,"context_line":"        self.scheduler_service \u003d self.start_service(\u0027scheduler\u0027)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        self.computes \u003d {}"},{"line_number":83,"context_line":"        self.aggregates \u003d {}"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_910766ca","line":80,"updated":"2018-05-21 21:40:41.000000000","message":"You\u0027ll need to restart this if you change the enabled_filters.","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        # NOTE(danms): This is the default set of filters, minus"},{"line_number":303,"context_line":"        # the AvailabilityZoneFilter"},{"line_number":304,"context_line":"        filters \u003d ["},{"line_number":305,"context_line":"            \"RetryFilter\","},{"line_number":306,"context_line":"            \"ComputeFilter\","},{"line_number":307,"context_line":"            \"ComputeCapabilitiesFilter\","},{"line_number":308,"context_line":"            \"ImagePropertiesFilter\","},{"line_number":309,"context_line":"            \"ServerGroupAntiAffinityFilter\","},{"line_number":310,"context_line":"            \"ServerGroupAffinityFilter\","},{"line_number":311,"context_line":"        ]"},{"line_number":312,"context_line":"        self.flags(enabled_filters\u003dfilters, group\u003d\u0027filter_scheduler\u0027)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def test_filter_with_az(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_71040ac7","line":311,"range":{"start_line":304,"start_character":8,"end_line":311,"end_character":9},"updated":"2018-05-21 21:40:41.000000000","message":"nit: rather than duplicate this in the test, I would have just done something like:\n\nenabled_filters \u003d CONF.filter_scheduler.enabled_filters\nif \u0027AvailabilityZoneFilter\u0027 in enabled_filters:\n    enabled_filters.remove(\u0027AvailabilityZoneFilter\u0027)\n    self.flags(enabled_filters\u003dfilters, group\u003d\u0027filter_scheduler\u0027)","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            \"ServerGroupAntiAffinityFilter\","},{"line_number":310,"context_line":"            \"ServerGroupAffinityFilter\","},{"line_number":311,"context_line":"        ]"},{"line_number":312,"context_line":"        self.flags(enabled_filters\u003dfilters, group\u003d\u0027filter_scheduler\u0027)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def test_filter_with_az(self):"},{"line_number":315,"context_line":"        self._set_az_aggregate(\u0027only-host2\u0027, \u0027myaz\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_d1671eb7","line":312,"updated":"2018-05-21 21:40:41.000000000","message":"Don\u0027t you need to restart the nova-scheduler service since you changed the filters?","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        server1 \u003d self._boot_server(az\u003d\u0027myaz\u0027)"},{"line_number":317,"context_line":"        server2 \u003d self._boot_server(az\u003d\u0027myaz\u0027)"},{"line_number":318,"context_line":"        hosts \u003d [self._get_instance_host(s) for s in (server1, server2)]"},{"line_number":319,"context_line":"        self.assertEqual([\u0027host2\u0027, \u0027host2\u0027], hosts)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class TestAggregateFiltersTogether(AggregateRequestFiltersTest):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_9130c6a0","line":319,"updated":"2018-05-21 21:40:41.000000000","message":"If query_placement_for_availability_zone\u003dFalse and the AvailabilityZoneFilter was still enabled (which I think it still is in this test), what\u0027s preventing the two servers from randomly landing on the same host?\n\nThis could be deterministic if we had a weigher that said the other host was weighed higher than the target host in the az we want, unless there are other ways I\u0027m not thinking of.","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0995f78da6339e2678bea9d2e1c6ace3db3248a","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        server1 \u003d self._boot_server(az\u003d\u0027myaz\u0027)"},{"line_number":317,"context_line":"        server2 \u003d self._boot_server(az\u003d\u0027myaz\u0027)"},{"line_number":318,"context_line":"        hosts \u003d [self._get_instance_host(s) for s in (server1, server2)]"},{"line_number":319,"context_line":"        self.assertEqual([\u0027host2\u0027, \u0027host2\u0027], hosts)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class TestAggregateFiltersTogether(AggregateRequestFiltersTest):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_c3ef47e7","line":319,"in_reply_to":"5f7c97a3_9130c6a0","updated":"2018-05-22 15:55:52.000000000","message":"Yeah, I hate injecting the test-only weigher into the path for a functional test. Feels like a monkeypatch to me. But, I\u0027ll do it.","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                   group\u003d\u0027scheduler\u0027)"},{"line_number":329,"context_line":"        self.flags(placement_aggregate_required_for_tenants\u003dTrue,"},{"line_number":330,"context_line":"                   group\u003d\u0027scheduler\u0027)"},{"line_number":331,"context_line":"        self.flags(query_placement_for_availability_zone\u003dTrue,"},{"line_number":332,"context_line":"                   group\u003d\u0027scheduler\u0027)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def test_tenant_with_az_match(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_f1201a4c","line":331,"updated":"2018-05-21 21:40:41.000000000","message":"Did you want to remove the AvailabilityZoneFilter from config when running this?","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0995f78da6339e2678bea9d2e1c6ace3db3248a","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                   group\u003d\u0027scheduler\u0027)"},{"line_number":329,"context_line":"        self.flags(placement_aggregate_required_for_tenants\u003dTrue,"},{"line_number":330,"context_line":"                   group\u003d\u0027scheduler\u0027)"},{"line_number":331,"context_line":"        self.flags(query_placement_for_availability_zone\u003dTrue,"},{"line_number":332,"context_line":"                   group\u003d\u0027scheduler\u0027)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def test_tenant_with_az_match(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_a3becbd1","line":331,"in_reply_to":"5f7c97a3_f1201a4c","updated":"2018-05-22 15:55:52.000000000","message":"Yeah","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ace19b46942996131b35cf8120f193d5952dc7b","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        # Boot the server into that az and make sure we fail"},{"line_number":355,"context_line":"        server \u003d self._boot_server(az\u003d\u0027myaz\u0027)"},{"line_number":356,"context_line":"        self.assertIsNone(self._get_instance_host(server))"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_b11aa214","line":356,"updated":"2018-05-21 21:40:41.000000000","message":"Assert the instance is in ERROR status?","commit_id":"6565b897e7b4549d14e64c651bc24e949d5528c2"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"62ad341d0ccb4ee06852f480d09dae1642823c31","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.report_client.set_aggregates_for_provider(self.context, host_uuid,"},{"line_number":157,"context_line":"                                                       placement_aggs)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _wait_for_state_change(self, server, from_status):"},{"line_number":160,"context_line":"        for i in range(0, 50):"},{"line_number":161,"context_line":"            server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":162,"context_line":"            if server[\u0027status\u0027] !\u003d from_status:"},{"line_number":163,"context_line":"                break"},{"line_number":164,"context_line":"            time.sleep(.1)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return server"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _boot_server(self, az\u003dNone):"},{"line_number":169,"context_line":"        server_req \u003d self._build_minimal_create_server_request("},{"line_number":170,"context_line":"            self.api, \u0027test-instance\u0027, flavor_id\u003dself.flavors[0][\u0027id\u0027],"},{"line_number":171,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":172,"context_line":"            networks\u003d\u0027none\u0027, az\u003daz)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        created_server \u003d self.api.post_server({\u0027server\u0027: server_req})"},{"line_number":175,"context_line":"        server \u003d self._wait_for_state_change(created_server, \u0027BUILD\u0027)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        return server"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _get_instance_host(self, server):"},{"line_number":180,"context_line":"        srv \u003d self.admin_api.get_server(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_945e5910","line":177,"range":{"start_line":159,"start_character":0,"end_line":177,"end_character":21},"updated":"2018-05-23 16:12:46.000000000","message":"the methods move wasn\u0027t really needed, right?","commit_id":"96f10711667603e7fbad57b151c6438cdd9ae270"}]}
