)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The affinity and anti-affinity server group policy is enforced by the"},{"line_number":10,"context_line":"scheduler but two parallel scheduling could cause that such policy is"},{"line_number":11,"context_line":"violated. During instance boot a late policy check was performed in"},{"line_number":12,"context_line":"the compute manager to pervent this. This check was missing in case"},{"line_number":13,"context_line":"of rebuild. Therefore two parallel evacuate command could cause that"},{"line_number":14,"context_line":"the server group policy is violated. This patch introduces the late"},{"line_number":15,"context_line":"policy check to rebuild to prevent such situation. When the violation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3fa0c359_a2a048a7","line":12,"range":{"start_line":12,"start_character":23,"end_line":12,"end_character":30},"updated":"2018-02-05 15:22:57.000000000","message":"prevent","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The affinity and anti-affinity server group policy is enforced by the"},{"line_number":10,"context_line":"scheduler but two parallel scheduling could cause that such policy is"},{"line_number":11,"context_line":"violated. During instance boot a late policy check was performed in"},{"line_number":12,"context_line":"the compute manager to pervent this. This check was missing in case"},{"line_number":13,"context_line":"of rebuild. Therefore two parallel evacuate command could cause that"},{"line_number":14,"context_line":"the server group policy is violated. This patch introduces the late"},{"line_number":15,"context_line":"policy check to rebuild to prevent such situation. When the violation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3fa0c359_4bc5dc8d","line":12,"range":{"start_line":12,"start_character":23,"end_line":12,"end_character":30},"in_reply_to":"3fa0c359_a2a048a7","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the server group policy is violated. This patch introduces the late"},{"line_number":15,"context_line":"policy check to rebuild to prevent such situation. When the violation"},{"line_number":16,"context_line":"is detected during boot a re-scheduling happens. However the rebuild"},{"line_number":17,"context_line":"action does not have the re-scheduling implementation so in this case"},{"line_number":18,"context_line":"the rebuild will fail and the evacuation needs to be retried by the"},{"line_number":19,"context_line":"user."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"To make the late policy check possible in the compute/manager the"},{"line_number":22,"context_line":"rebuild_instance compute RPC call was extended with a request_spec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3fa0c359_8288ac1f","line":19,"range":{"start_line":17,"start_character":54,"end_line":19,"end_character":5},"updated":"2018-02-05 15:22:57.000000000","message":"I think you might want some words here about why this failure is still preferable over what we have today - which is that the two instances could wind up on the same host (or different hosts) which may violate the server group policy they are in without the user knowing about it since the evacuate doesn\u0027t explicitly fail. We want to make it such that one \"wins\" and one fails and has to be re-evacuated.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"the server group policy is violated. This patch introduces the late"},{"line_number":15,"context_line":"policy check to rebuild to prevent such situation. When the violation"},{"line_number":16,"context_line":"is detected during boot a re-scheduling happens. However the rebuild"},{"line_number":17,"context_line":"action does not have the re-scheduling implementation so in this case"},{"line_number":18,"context_line":"the rebuild will fail and the evacuation needs to be retried by the"},{"line_number":19,"context_line":"user."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"To make the late policy check possible in the compute/manager the"},{"line_number":22,"context_line":"rebuild_instance compute RPC call was extended with a request_spec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3fa0c359_4b215c4d","line":19,"range":{"start_line":17,"start_character":54,"end_line":19,"end_character":5},"in_reply_to":"3fa0c359_8288ac1f","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"568d90b273cd08622d1a92bf6b25419d03140d62","unresolved":false,"context_lines":[{"line_number":16,"context_line":"is detected during boot a re-scheduling happens. However the rebuild"},{"line_number":17,"context_line":"action does not have the re-scheduling implementation so in this case"},{"line_number":18,"context_line":"the rebuild will fail and the evacuation needs to be retried by the"},{"line_number":19,"context_line":"user. Still this is better than allowing a parellel evacuation to"},{"line_number":20,"context_line":"break the server group affinity policy."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"To make the late policy check possible in the compute/manager the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3fa0c359_fa9d8559","line":19,"range":{"start_line":19,"start_character":43,"end_line":19,"end_character":51},"updated":"2018-02-06 02:36:03.000000000","message":"nit: parallel","commit_id":"ff3507061ea655a493200bb280398116c602abe4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d28566a6d4e90ef10908990d350a3b2f737bd35","unresolved":false,"context_lines":[{"line_number":16,"context_line":"is detected during boot a re-scheduling happens. However the rebuild"},{"line_number":17,"context_line":"action does not have the re-scheduling implementation so in this case"},{"line_number":18,"context_line":"the rebuild will fail and the evacuation needs to be retried by the"},{"line_number":19,"context_line":"user. Still this is better than allowing a parellel evacuation to"},{"line_number":20,"context_line":"break the server group affinity policy."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"To make the late policy check possible in the compute/manager the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3fa0c359_9548c8cc","line":19,"range":{"start_line":19,"start_character":43,"end_line":19,"end_character":51},"in_reply_to":"3fa0c359_fa9d8559","updated":"2018-02-06 17:06:01.000000000","message":"Done","commit_id":"ff3507061ea655a493200bb280398116c602abe4"}],"doc/source/user/cellsv2-layout.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"568d90b273cd08622d1a92bf6b25419d03140d62","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. Instance reschedules during boot"},{"line_number":321,"context_line":"#. Instance affinity reporting from the compute nodes to scheduler"},{"line_number":322,"context_line":"#. The late anti-affinity check during boot and evacuate"},{"line_number":323,"context_line":"#. Querying host aggregates from the cell"},{"line_number":324,"context_line":"#. Attaching a volume and ``[cinder]/cross_az_attach\u003dFalse``"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa0c359_1ab871c6","line":322,"range":{"start_line":322,"start_character":39,"end_line":322,"end_character":43},"updated":"2018-02-06 02:36:03.000000000","message":"nit: create? I know we say \u0027boot\u0027 everywhere but it\u0027s only that because of \u0027nova boot\u0027 on the CLI, but it\u0027s \u0027openstack server create\u0027 in OSC and it\u0027s a POST /servers (create) action in the REST API, so I\u0027ve been kind of trying to get away from \u0027boot\u0027 for public facing docs.","commit_id":"ff3507061ea655a493200bb280398116c602abe4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d28566a6d4e90ef10908990d350a3b2f737bd35","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. Instance reschedules during boot"},{"line_number":321,"context_line":"#. Instance affinity reporting from the compute nodes to scheduler"},{"line_number":322,"context_line":"#. The late anti-affinity check during boot and evacuate"},{"line_number":323,"context_line":"#. Querying host aggregates from the cell"},{"line_number":324,"context_line":"#. Attaching a volume and ``[cinder]/cross_az_attach\u003dFalse``"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3fa0c359_5506c088","line":322,"range":{"start_line":322,"start_character":39,"end_line":322,"end_character":43},"in_reply_to":"3fa0c359_1ab871c6","updated":"2018-02-06 17:06:01.000000000","message":"Sure. Done.","commit_id":"ff3507061ea655a493200bb280398116c602abe4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"aaec7d82f751b7d49060e2f871fefbb810c714f1","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. Instance reschedules during boot"},{"line_number":321,"context_line":"#. Instance affinity reporting from the compute nodes to scheduler"},{"line_number":322,"context_line":"#. The late anti-affinity check during server create and evacuate"},{"line_number":323,"context_line":"#. Querying host aggregates from the cell"},{"line_number":324,"context_line":"#. Attaching a volume and ``[cinder]/cross_az_attach\u003dFalse``"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_39844a5e","line":322,"range":{"start_line":322,"start_character":57,"end_line":322,"end_character":65},"updated":"2018-02-06 18:19:03.000000000","message":"evacuate/rebuild, but meh.","commit_id":"edeeaf9102eccb78f1a2555c7e18c3d706f07639"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f6f91158bc1c026c1a709fc0ebc2a849c2a35062","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. Instance reschedules during boot"},{"line_number":321,"context_line":"#. Instance affinity reporting from the compute nodes to scheduler"},{"line_number":322,"context_line":"#. The late anti-affinity check during server create and evacuate"},{"line_number":323,"context_line":"#. Querying host aggregates from the cell"},{"line_number":324,"context_line":"#. Attaching a volume and ``[cinder]/cross_az_attach\u003dFalse``"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_b2cb8f51","line":322,"range":{"start_line":322,"start_character":57,"end_line":322,"end_character":65},"in_reply_to":"3fa0c359_0f5ca023","updated":"2018-02-06 21:00:00.000000000","message":"all cool then","commit_id":"edeeaf9102eccb78f1a2555c7e18c3d706f07639"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba3f3a60a4614b728084461c2954e09d2bc69832","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. Instance reschedules during boot"},{"line_number":321,"context_line":"#. Instance affinity reporting from the compute nodes to scheduler"},{"line_number":322,"context_line":"#. The late anti-affinity check during server create and evacuate"},{"line_number":323,"context_line":"#. Querying host aggregates from the cell"},{"line_number":324,"context_line":"#. Attaching a volume and ``[cinder]/cross_az_attach\u003dFalse``"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_0f5ca023","line":322,"range":{"start_line":322,"start_character":57,"end_line":322,"end_character":65},"in_reply_to":"3fa0c359_39844a5e","updated":"2018-02-06 19:55:44.000000000","message":"No, evacuate is correct here; when you rebuild, you don\u0027t move hosts, and this code that gibi added is only for evacuate, since we don\u0027t need to wonder if the affinity group stuff has changed when we\u0027re not moving hosts.","commit_id":"edeeaf9102eccb78f1a2555c7e18c3d706f07639"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d799ba60b9ad76f2558c9d656f2b0a0cae01b7c5","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"                            instance_uuid\u003dinstance.uuid,"},{"line_number":1323,"context_line":"                            reason\u003dmsg)"},{"line_number":1324,"context_line":""},{"line_number":1325,"context_line":"        if not CONF.workarounds.disable_group_policy_check_upcall:"},{"line_number":1326,"context_line":"            _do_validation(context, instance, group_hint)"},{"line_number":1327,"context_line":""},{"line_number":1328,"context_line":"    def _log_original_error(self, exc_info, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_57e0c296","line":1325,"range":{"start_line":1325,"start_character":15,"end_line":1325,"end_character":65},"updated":"2017-12-06 16:34:40.000000000","message":"Note that getting the instance groups in this method is also doing an up-call to the API database, but that\u0027s why we have this config option to disable that altogether - if you\u0027re in a split MQ superconductor mode setup (like our dsvm CI jobs) then the up-call to get the request spec is going to fail and kill the rebuild/evacuate operation.","commit_id":"65cace510ba4970cca96978d388575204cfb0201"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5e8b0319e85a9bfd55e77bbcb0a9bcf1a458777","unresolved":false,"context_lines":[{"line_number":2950,"context_line":"            # NOTE(gibi): Do a late check of server group policy as parallel"},{"line_number":2951,"context_line":"            # scheduling could violate such policy. This will cause the"},{"line_number":2952,"context_line":"            # evacuate to fail as rebuild does not implement reschedule."},{"line_number":2953,"context_line":"            request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":2954,"context_line":"                context, instance.uuid)"},{"line_number":2955,"context_line":"            filter_properties \u003d request_spec.to_legacy_filter_properties_dict()"},{"line_number":2956,"context_line":"            self._validate_instance_group_policy("},{"line_number":2957,"context_line":"                context, instance, filter_properties[\u0027scheduler_hints\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_77faa675","line":2954,"range":{"start_line":2953,"start_character":12,"end_line":2954,"end_character":39},"updated":"2017-12-06 16:31:13.000000000","message":"We can\u0027t do this. The request spec is in the API database, and the compute shouldn\u0027t up-call to the API, so we have to do something else here, like passing the request_spec down from the top (since I see we don\u0027t have filter_properties in this flow either).","commit_id":"65cace510ba4970cca96978d388575204cfb0201"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a319a8b69a252a5419a52b550bb656f43adda332","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"                            instance_uuid\u003dinstance.uuid,"},{"line_number":1318,"context_line":"                            reason\u003dmsg)"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":"        if not CONF.workarounds.disable_group_policy_check_upcall:"},{"line_number":1321,"context_line":"            _do_validation(context, instance, group_hint)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def _log_original_error(self, exc_info, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_9d756d9b","line":1320,"updated":"2018-02-05 15:19:16.000000000","message":"Note that we\u0027re still doing an upcall if the operator allowed it. \nProbably worth seeing if we documented that, and then amending it for explaining that rebuild would also do an upcall ?","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61c2fc773314dcd9deb0dbcf5b29a91cb4b3ceac","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"                            instance_uuid\u003dinstance.uuid,"},{"line_number":1318,"context_line":"                            reason\u003dmsg)"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":"        if not CONF.workarounds.disable_group_policy_check_upcall:"},{"line_number":1321,"context_line":"            _do_validation(context, instance, group_hint)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def _log_original_error(self, exc_info, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_fd69118b","line":1320,"in_reply_to":"3fa0c359_9d756d9b","updated":"2018-02-05 15:24:58.000000000","message":"It\u0027s documented here:\n\nhttps://docs.openstack.org/nova/latest/user/cellsv2-layout.html#operations-requiring-upcalls","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"                            instance_uuid\u003dinstance.uuid,"},{"line_number":1318,"context_line":"                            reason\u003dmsg)"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":"        if not CONF.workarounds.disable_group_policy_check_upcall:"},{"line_number":1321,"context_line":"            _do_validation(context, instance, group_hint)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"    def _log_original_error(self, exc_info, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_a35feae3","line":1320,"in_reply_to":"3fa0c359_fd69118b","updated":"2018-02-05 18:00:28.000000000","message":"I extended the doc a bit to include when the upcall is made.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":2835,"context_line":"        :param limits: Overcommit limits set by the scheduler. If a host was"},{"line_number":2836,"context_line":"                       specified by the user, this will be None"},{"line_number":2837,"context_line":"        :param request_spec: a RequestSpec object used to schedule the instance"},{"line_number":2838,"context_line":"                             in case of a non forced evacuation."},{"line_number":2839,"context_line":"        \"\"\""},{"line_number":2840,"context_line":"        context \u003d context.elevated()"},{"line_number":2841,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_62456070","line":2838,"range":{"start_line":2838,"start_character":53,"end_line":2838,"end_character":63},"updated":"2018-02-05 15:22:57.000000000","message":"The request_spec is also passed down from api-\u003econductor-\u003ecompute in the case of a rebuild (not evacuate).","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":2835,"context_line":"        :param limits: Overcommit limits set by the scheduler. If a host was"},{"line_number":2836,"context_line":"                       specified by the user, this will be None"},{"line_number":2837,"context_line":"        :param request_spec: a RequestSpec object used to schedule the instance"},{"line_number":2838,"context_line":"                             in case of a non forced evacuation."},{"line_number":2839,"context_line":"        \"\"\""},{"line_number":2840,"context_line":"        context \u003d context.elevated()"},{"line_number":2841,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_829d0c5b","line":2838,"range":{"start_line":2838,"start_character":42,"end_line":2838,"end_character":52},"updated":"2018-02-05 15:22:57.000000000","message":"This is confusing since we always attempt to lookup the original request spec for the instance and pass that down to compute during an evacuate:\n\nhttps://github.com/openstack/nova/blob/5b80c882aa887022f9593c90b03ad009eb157704/nova/compute/api.py#L4280","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":2835,"context_line":"        :param limits: Overcommit limits set by the scheduler. If a host was"},{"line_number":2836,"context_line":"                       specified by the user, this will be None"},{"line_number":2837,"context_line":"        :param request_spec: a RequestSpec object used to schedule the instance"},{"line_number":2838,"context_line":"                             in case of a non forced evacuation."},{"line_number":2839,"context_line":"        \"\"\""},{"line_number":2840,"context_line":"        context \u003d context.elevated()"},{"line_number":2841,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_e3c41243","line":2838,"range":{"start_line":2838,"start_character":42,"end_line":2838,"end_character":52},"in_reply_to":"3fa0c359_829d0c5b","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a319a8b69a252a5419a52b550bb656f43adda332","unresolved":false,"context_lines":[{"line_number":2889,"context_line":"                    image_ref, injected_files, new_pass, orig_sys_metadata,"},{"line_number":2890,"context_line":"                    bdms, recreate, on_shared_storage, preserve_ephemeral,"},{"line_number":2891,"context_line":"                    migration, request_spec)"},{"line_number":2892,"context_line":"            except exception.ComputeResourcesUnavailable as e:"},{"line_number":2893,"context_line":"                LOG.debug(\"Could not rebuild instance on this host, not \""},{"line_number":2894,"context_line":"                          \"enough resources available.\", instance\u003dinstance)"},{"line_number":2895,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_a2c60816","line":2892,"updated":"2018-02-05 15:19:16.000000000","message":"see, we could catch RescheduledException too.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"                          instance\u003dinstance)"},{"line_number":2913,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2914,"context_line":"                self._notify_instance_rebuild_error(context, instance, e, bdms)"},{"line_number":2915,"context_line":"            except exception.RescheduledException as e:"},{"line_number":2916,"context_line":"                # this is raised by the late server group policy check during"},{"line_number":2917,"context_line":"                # evacuation if a parallel scheduling violated the policy."},{"line_number":2918,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_423b8437","line":2915,"range":{"start_line":2915,"start_character":29,"end_line":2915,"end_character":49},"updated":"2018-02-05 15:22:57.000000000","message":"We could avoid the duplication and handle this in the same block as ComputeResourcesUnavailable above, and just tweak the logic for the debug log message based on the exception we hit.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a319a8b69a252a5419a52b550bb656f43adda332","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"                          instance\u003dinstance)"},{"line_number":2913,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2914,"context_line":"                self._notify_instance_rebuild_error(context, instance, e, bdms)"},{"line_number":2915,"context_line":"            except exception.RescheduledException as e:"},{"line_number":2916,"context_line":"                # this is raised by the late server group policy check during"},{"line_number":2917,"context_line":"                # evacuation if a parallel scheduling violated the policy."},{"line_number":2918,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_a261283c","line":2915,"updated":"2018-02-05 15:19:16.000000000","message":"we could avoid duplicating error handling by just catching the RescheduledException in L2892 too.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"                          instance\u003dinstance)"},{"line_number":2913,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2914,"context_line":"                self._notify_instance_rebuild_error(context, instance, e, bdms)"},{"line_number":2915,"context_line":"            except exception.RescheduledException as e:"},{"line_number":2916,"context_line":"                # this is raised by the late server group policy check during"},{"line_number":2917,"context_line":"                # evacuation if a parallel scheduling violated the policy."},{"line_number":2918,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_b512bdb0","line":2915,"range":{"start_line":2915,"start_character":29,"end_line":2915,"end_character":49},"in_reply_to":"3fa0c359_423b8437","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":2919,"context_line":"                rt.delete_allocation_for_evacuated_instance("},{"line_number":2920,"context_line":"                    instance, scheduled_node, node_type\u003d\u0027destination\u0027)"},{"line_number":2921,"context_line":"                self._notify_instance_rebuild_error(context, instance, e, bdms)"},{"line_number":2922,"context_line":"                raise exception.BuildAbortException("},{"line_number":2923,"context_line":"                    instance_uuid\u003dinstance.uuid, reason\u003de.format_message())"},{"line_number":2924,"context_line":"            except Exception as e:"},{"line_number":2925,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_a2b7e8d8","line":2922,"updated":"2018-02-05 15:22:57.000000000","message":"nit: it might be good to leave a comment here that although we\u0027re handling RescheduledException, we don\u0027t have the plumbing in place for handling reschedules for evacuate, so we abort the operation.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":2919,"context_line":"                rt.delete_allocation_for_evacuated_instance("},{"line_number":2920,"context_line":"                    instance, scheduled_node, node_type\u003d\u0027destination\u0027)"},{"line_number":2921,"context_line":"                self._notify_instance_rebuild_error(context, instance, e, bdms)"},{"line_number":2922,"context_line":"                raise exception.BuildAbortException("},{"line_number":2923,"context_line":"                    instance_uuid\u003dinstance.uuid, reason\u003de.format_message())"},{"line_number":2924,"context_line":"            except Exception as e:"},{"line_number":2925,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_5527b913","line":2922,"in_reply_to":"3fa0c359_a2b7e8d8","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":2967,"context_line":"            # NOTE(gibi): Do a late check of server group policy as parallel"},{"line_number":2968,"context_line":"            # scheduling could violate such policy. This will cause the"},{"line_number":2969,"context_line":"            # evacuate to fail as rebuild does not implement reschedule."},{"line_number":2970,"context_line":"            filter_props \u003d request_spec.to_legacy_filter_properties_dict()"},{"line_number":2971,"context_line":"            self._validate_instance_group_policy("},{"line_number":2972,"context_line":"                context, instance, filter_props.get(\u0027scheduler_hints\u0027, {}))"},{"line_number":2973,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_02733c17","line":2970,"range":{"start_line":2970,"start_character":12,"end_line":2970,"end_character":74},"updated":"2018-02-05 15:22:57.000000000","message":"Can we re-use the helper method here?\n\nhints \u003d self._get_scheduler_hints({}, request_spec)","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a319a8b69a252a5419a52b550bb656f43adda332","unresolved":false,"context_lines":[{"line_number":2967,"context_line":"            # NOTE(gibi): Do a late check of server group policy as parallel"},{"line_number":2968,"context_line":"            # scheduling could violate such policy. This will cause the"},{"line_number":2969,"context_line":"            # evacuate to fail as rebuild does not implement reschedule."},{"line_number":2970,"context_line":"            filter_props \u003d request_spec.to_legacy_filter_properties_dict()"},{"line_number":2971,"context_line":"            self._validate_instance_group_policy("},{"line_number":2972,"context_line":"                context, instance, filter_props.get(\u0027scheduler_hints\u0027, {}))"},{"line_number":2973,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_02749c34","line":2970,"updated":"2018-02-05 15:19:16.000000000","message":"Honestly, you can directly access the hints by looking up the RequestSpec.scheduler_hints field, so that legacy transformation isn\u0027t necessary (and I really would like to avoid reusing old dicts unless extremly necessary)\n\nIf you really want to use a getter for that, then use request_spec.get_scheduler_hint(\u0027group\u0027) and pass it thru.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":2967,"context_line":"            # NOTE(gibi): Do a late check of server group policy as parallel"},{"line_number":2968,"context_line":"            # scheduling could violate such policy. This will cause the"},{"line_number":2969,"context_line":"            # evacuate to fail as rebuild does not implement reschedule."},{"line_number":2970,"context_line":"            filter_props \u003d request_spec.to_legacy_filter_properties_dict()"},{"line_number":2971,"context_line":"            self._validate_instance_group_policy("},{"line_number":2972,"context_line":"                context, instance, filter_props.get(\u0027scheduler_hints\u0027, {}))"},{"line_number":2973,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_d561893b","line":2970,"range":{"start_line":2970,"start_character":12,"end_line":2970,"end_character":74},"in_reply_to":"3fa0c359_02733c17","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":2971,"context_line":"            self._validate_instance_group_policy("},{"line_number":2972,"context_line":"                context, instance, filter_props.get(\u0027scheduler_hints\u0027, {}))"},{"line_number":2973,"context_line":""},{"line_number":2974,"context_line":"        if recreate:"},{"line_number":2975,"context_line":"            if not self.driver.capabilities[\"supports_recreate\"]:"},{"line_number":2976,"context_line":"                raise exception.InstanceRecreateNotSupported"},{"line_number":2977,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_42d704c1","line":2974,"updated":"2018-02-05 15:22:57.000000000","message":"Why don\u0027t we do this within this block where we know we\u0027re doing an evacuate? Because rebuild (not evacuate) also passes a request_spec and then we could be checking group policy without actually needing to.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":2971,"context_line":"            self._validate_instance_group_policy("},{"line_number":2972,"context_line":"                context, instance, filter_props.get(\u0027scheduler_hints\u0027, {}))"},{"line_number":2973,"context_line":""},{"line_number":2974,"context_line":"        if recreate:"},{"line_number":2975,"context_line":"            if not self.driver.capabilities[\"supports_recreate\"]:"},{"line_number":2976,"context_line":"                raise exception.InstanceRecreateNotSupported"},{"line_number":2977,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_15fdb139","line":2974,"in_reply_to":"3fa0c359_42d704c1","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"568d90b273cd08622d1a92bf6b25419d03140d62","unresolved":false,"context_lines":[{"line_number":2896,"context_line":"                              \"enough resources available.\", instance\u003dinstance)"},{"line_number":2897,"context_line":"                else:"},{"line_number":2898,"context_line":"                    # RescheduledException is raised by the late server group"},{"line_number":2899,"context_line":"                    # policy check during evacuation and rebuild if a parallel"},{"line_number":2900,"context_line":"                    # scheduling violated the policy."},{"line_number":2901,"context_line":"                    # We catch the RescheduledException here but we don\u0027t have"},{"line_number":2902,"context_line":"                    # the pluming to do an actual reschedule so we abort the"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa0c359_1addd113","line":2899,"range":{"start_line":2899,"start_character":53,"end_line":2899,"end_character":64},"updated":"2018-02-06 02:36:03.000000000","message":"Remove the \"and rebuild\" part? During a rebuild (not evacuate) we won\u0027t move hosts so we shouldn\u0027t do a server group affinity policy check.","commit_id":"ff3507061ea655a493200bb280398116c602abe4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d28566a6d4e90ef10908990d350a3b2f737bd35","unresolved":false,"context_lines":[{"line_number":2896,"context_line":"                              \"enough resources available.\", instance\u003dinstance)"},{"line_number":2897,"context_line":"                else:"},{"line_number":2898,"context_line":"                    # RescheduledException is raised by the late server group"},{"line_number":2899,"context_line":"                    # policy check during evacuation and rebuild if a parallel"},{"line_number":2900,"context_line":"                    # scheduling violated the policy."},{"line_number":2901,"context_line":"                    # We catch the RescheduledException here but we don\u0027t have"},{"line_number":2902,"context_line":"                    # the pluming to do an actual reschedule so we abort the"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa0c359_f5f6ec8f","line":2899,"range":{"start_line":2899,"start_character":53,"end_line":2899,"end_character":64},"in_reply_to":"3fa0c359_1addd113","updated":"2018-02-06 17:06:01.000000000","message":"Done","commit_id":"ff3507061ea655a493200bb280398116c602abe4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"568d90b273cd08622d1a92bf6b25419d03140d62","unresolved":false,"context_lines":[{"line_number":2899,"context_line":"                    # policy check during evacuation and rebuild if a parallel"},{"line_number":2900,"context_line":"                    # scheduling violated the policy."},{"line_number":2901,"context_line":"                    # We catch the RescheduledException here but we don\u0027t have"},{"line_number":2902,"context_line":"                    # the pluming to do an actual reschedule so we abort the"},{"line_number":2903,"context_line":"                    # operation."},{"line_number":2904,"context_line":"                    LOG.debug(\"Could not rebuild instance on this host, \""},{"line_number":2905,"context_line":"                              \"late server group check failed.\","}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa0c359_1a063188","line":2902,"range":{"start_line":2902,"start_character":26,"end_line":2902,"end_character":33},"updated":"2018-02-06 02:36:03.000000000","message":"plumbing\n\nOnly Sylvain has the proper plumage for our team.","commit_id":"ff3507061ea655a493200bb280398116c602abe4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d28566a6d4e90ef10908990d350a3b2f737bd35","unresolved":false,"context_lines":[{"line_number":2899,"context_line":"                    # policy check during evacuation and rebuild if a parallel"},{"line_number":2900,"context_line":"                    # scheduling violated the policy."},{"line_number":2901,"context_line":"                    # We catch the RescheduledException here but we don\u0027t have"},{"line_number":2902,"context_line":"                    # the pluming to do an actual reschedule so we abort the"},{"line_number":2903,"context_line":"                    # operation."},{"line_number":2904,"context_line":"                    LOG.debug(\"Could not rebuild instance on this host, \""},{"line_number":2905,"context_line":"                              \"late server group check failed.\","}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa0c359_552b20ea","line":2902,"range":{"start_line":2902,"start_character":26,"end_line":2902,"end_character":33},"in_reply_to":"3fa0c359_1a063188","updated":"2018-02-06 17:06:01.000000000","message":":) Done.","commit_id":"ff3507061ea655a493200bb280398116c602abe4"}],"nova/tests/functional/test_server_group.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        post \u003d {\u0027evacuate\u0027: {\u0027onSharedStorage\u0027: False}}"},{"line_number":429,"context_line":"        self.admin_api.post_server_action(servers[1][\u0027id\u0027], post)"},{"line_number":430,"context_line":"        self._wait_for_migration_status(servers[1], [\u0027done\u0027])"},{"line_number":431,"context_line":"        evacuated_server \u003d self._wait_for_state_change("},{"line_number":432,"context_line":"            self.admin_api, servers[1], \u0027ACTIVE\u0027)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_5da4c508","line":430,"updated":"2018-02-05 15:22:57.000000000","message":"nit: if _wait_for_migration_status checked the type on the expected_statuses parameter and converted a string type to a single-item list, you wouldn\u0027t have to make this change. Maybe it\u0027s better to be explicit though.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        post \u003d {\u0027evacuate\u0027: {\u0027onSharedStorage\u0027: False}}"},{"line_number":429,"context_line":"        self.admin_api.post_server_action(servers[1][\u0027id\u0027], post)"},{"line_number":430,"context_line":"        self._wait_for_migration_status(servers[1], [\u0027done\u0027])"},{"line_number":431,"context_line":"        evacuated_server \u003d self._wait_for_state_change("},{"line_number":432,"context_line":"            self.admin_api, servers[1], \u0027ACTIVE\u0027)"},{"line_number":433,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_95d0e1cb","line":430,"in_reply_to":"3fa0c359_5da4c508","updated":"2018-02-05 18:00:28.000000000","message":"I like the explicitness. As we are not backporting it to stable branch I don\u0027t have to worry about conflicts either.","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":3933,"context_line":"                \u0027_validate_instance_group_policy\u0027)"},{"line_number":3934,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._set_migration_status\u0027)"},{"line_number":3935,"context_line":"    @mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker.rebuild_claim\u0027)"},{"line_number":3936,"context_line":"    def test_rebuild_late_server_group_policy_check("},{"line_number":3937,"context_line":"            self, mock_rebuild_claim, mock_set_migration_status,"},{"line_number":3938,"context_line":"            mock_validate_policy, mock_image_meta, mock_notify_exists,"},{"line_number":3939,"context_line":"            mock_notify_legacy, mock_notify, mock_instance_save,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_1ddcfd72","line":3936,"range":{"start_line":3936,"start_character":13,"end_line":3936,"end_character":20},"updated":"2018-02-05 15:22:57.000000000","message":"evacuate?","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":3933,"context_line":"                \u0027_validate_instance_group_policy\u0027)"},{"line_number":3934,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._set_migration_status\u0027)"},{"line_number":3935,"context_line":"    @mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker.rebuild_claim\u0027)"},{"line_number":3936,"context_line":"    def test_rebuild_late_server_group_policy_check("},{"line_number":3937,"context_line":"            self, mock_rebuild_claim, mock_set_migration_status,"},{"line_number":3938,"context_line":"            mock_validate_policy, mock_image_meta, mock_notify_exists,"},{"line_number":3939,"context_line":"            mock_notify_legacy, mock_notify, mock_instance_save,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_d5bd0969","line":3936,"range":{"start_line":3936,"start_character":13,"end_line":3936,"end_character":20},"in_reply_to":"3fa0c359_1ddcfd72","updated":"2018-02-05 18:00:28.000000000","message":"You are right. I guess I was confused by the mocked rebuild functions :)","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb257847b9a408e24024873d8ae166139851f73f","unresolved":false,"context_lines":[{"line_number":3969,"context_line":"                \u0027_validate_instance_group_policy\u0027)"},{"line_number":3970,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._set_migration_status\u0027)"},{"line_number":3971,"context_line":"    @mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker.rebuild_claim\u0027)"},{"line_number":3972,"context_line":"    def test_rebuild_late_server_group_policy_check_fails("},{"line_number":3973,"context_line":"            self, mock_rebuild_claim, mock_set_migration_status,"},{"line_number":3974,"context_line":"            mock_validate_policy, mock_notify_legacy, mock_notify,"},{"line_number":3975,"context_line":"            mock_instance_save, mock_context_elevated, mock_delete_allocation,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_7d450117","line":3972,"range":{"start_line":3972,"start_character":13,"end_line":3972,"end_character":20},"updated":"2018-02-05 15:22:57.000000000","message":"evacuate","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9bf95cd74a64b30fb102a3397d37446a013a2e9b","unresolved":false,"context_lines":[{"line_number":3969,"context_line":"                \u0027_validate_instance_group_policy\u0027)"},{"line_number":3970,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._set_migration_status\u0027)"},{"line_number":3971,"context_line":"    @mock.patch(\u0027nova.compute.resource_tracker.ResourceTracker.rebuild_claim\u0027)"},{"line_number":3972,"context_line":"    def test_rebuild_late_server_group_policy_check_fails("},{"line_number":3973,"context_line":"            self, mock_rebuild_claim, mock_set_migration_status,"},{"line_number":3974,"context_line":"            mock_validate_policy, mock_notify_legacy, mock_notify,"},{"line_number":3975,"context_line":"            mock_instance_save, mock_context_elevated, mock_delete_allocation,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_b5bcfd69","line":3972,"range":{"start_line":3972,"start_character":13,"end_line":3972,"end_character":20},"in_reply_to":"3fa0c359_7d450117","updated":"2018-02-05 18:00:28.000000000","message":"Done","commit_id":"df85c2420e86779e3bbec99d8b31264fe2f79a32"}]}
