)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"25eb1a83055a2b678d2ab3e4354b3b7739864ef6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jay Pipes \u003cjaypipes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-08-09 08:41:22 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"remove provider allocs in confirm/revert resize"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now that the scheduler creates a doubled-up allocation for the duration"},{"line_number":10,"context_line":"of a move operation (with part of the allocation referring to the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9f436f4f_c3242810","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"updated":"2017-08-09 13:18:05.000000000","message":"Capitalize?","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jay Pipes \u003cjaypipes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-08-09 08:41:22 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"remove provider allocs in confirm/revert resize"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now that the scheduler creates a doubled-up allocation for the duration"},{"line_number":10,"context_line":"of a move operation (with part of the allocation referring to the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"9f436f4f_9552c966","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"in_reply_to":"9f436f4f_c3242810","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"62ccf3629f3e58f390330b5b2a7e889e59256220","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     09e169bd (placement: refactor healing of allocations in RT)"},{"line_number":2,"context_line":"Author:     Matt Riedemann \u003cmriedem.os@gmail.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2017-08-02 17:48:38 -0400"},{"line_number":4,"context_line":"Commit:     Jay Pipes \u003cjaypipes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-08-09 16:32:36 -0400"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"9f436f4f_4b18421c","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":49},"updated":"2017-08-09 20:42:08.000000000","message":"How did this happen?","commit_id":"2f2be31b0c397980e40e77e3f31bf2bf18a7f29e"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # calling PUT /allocations back to the placement API. The allocation"},{"line_number":474,"context_line":"        # that gets PUT\u0027d back to placement will only include the destination"},{"line_number":475,"context_line":"        # host and any shared providers."},{"line_number":476,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":477,"context_line":"            # We\u0027re on the source host during confirm_resize()..."},{"line_number":478,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":479,"context_line":"            res \u003d self.report_client.remove_provider_from_instance_allocation("}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_236347b4","line":476,"updated":"2017-07-28 16:56:58.000000000","message":"Shouldn\u0027t we check that instance.host \u003d\u003d self.host here? Checking the prefix seems a little odd to me. I\u0027m not even sure if _old is right without going to look at how it\u0027s passed in.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0ebcfe94313b12eb7b1ba998e658d26499edd59d","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # calling PUT /allocations back to the placement API. The allocation"},{"line_number":474,"context_line":"        # that gets PUT\u0027d back to placement will only include the destination"},{"line_number":475,"context_line":"        # host and any shared providers."},{"line_number":476,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":477,"context_line":"            # We\u0027re on the source host during confirm_resize()..."},{"line_number":478,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":479,"context_line":"            res \u003d self.report_client.remove_provider_from_instance_allocation("}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_b4206ef9","line":476,"in_reply_to":"df3967d1_54c02251","updated":"2017-07-28 18:14:40.000000000","message":"Yup. Ugly and owned.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b1ee9538cfdfc69589dcda81ec90831492c02160","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # calling PUT /allocations back to the placement API. The allocation"},{"line_number":474,"context_line":"        # that gets PUT\u0027d back to placement will only include the destination"},{"line_number":475,"context_line":"        # host and any shared providers."},{"line_number":476,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":477,"context_line":"            # We\u0027re on the source host during confirm_resize()..."},{"line_number":478,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":479,"context_line":"            res \u003d self.report_client.remove_provider_from_instance_allocation("}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_54c02251","line":476,"in_reply_to":"df3967d1_d18424b4","updated":"2017-07-28 18:03:52.000000000","message":"instance.host !\u003d self.host?\n\nAnyway, it\u0027s ugly. As long as you recognize and own it.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # calling PUT /allocations back to the placement API. The allocation"},{"line_number":474,"context_line":"        # that gets PUT\u0027d back to placement will only include the destination"},{"line_number":475,"context_line":"        # host and any shared providers."},{"line_number":476,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":477,"context_line":"            # We\u0027re on the source host during confirm_resize()..."},{"line_number":478,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":479,"context_line":"            res \u003d self.report_client.remove_provider_from_instance_allocation("}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_d18424b4","line":476,"in_reply_to":"ff346bd7_236347b4","updated":"2017-07-28 17:49:18.000000000","message":"The _old prefix is hard-coded at the call location:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/manager.py#L3520-L3521\n\nAnd unfortunately, instance.host has been set to *the destination host* during start of the resize_instance() call on the destination:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/manager.py#L3873\n\nSo, this really is the only sure-fire way to tell if we\u0027re on the source host and in the confirm_resize() phase.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                instance.project_id)"},{"line_number":482,"context_line":"            if not res:"},{"line_number":483,"context_line":"                LOG.warning(\"Failed to save manipulated allocation when \""},{"line_number":484,"context_line":"                            \"confirming resize.\", instance\u003dinstance)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":487,"context_line":"    def update_usage(self, context, instance, nodename):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_2308e7d7","line":484,"updated":"2017-07-28 16:56:58.000000000","message":"This will never get retried, because both sides will avoid healing the doubled allocation, right? In that case, it\u0027s a pretty big error, IMHO and worthy of an error-level log. Almost worth raising up in case we can retry or something.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                instance.project_id)"},{"line_number":482,"context_line":"            if not res:"},{"line_number":483,"context_line":"                LOG.warning(\"Failed to save manipulated allocation when \""},{"line_number":484,"context_line":"                            \"confirming resize.\", instance\u003dinstance)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":487,"context_line":"    def update_usage(self, context, instance, nodename):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_11a3cc51","line":484,"in_reply_to":"ff346bd7_2308e7d7","updated":"2017-07-28 17:49:18.000000000","message":"Agreed and done.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e9fed70948357ee2ec362a1fa8973e4778579c8c","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"                    continue"},{"line_number":1080,"context_line":"                if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"},{"line_number":1081,"context_line":"                    # NOTE(jaypipes): If the instance is migrating or resizing,"},{"line_number":1082,"context_line":"                    # it\u0027s vm_state will be something other than DELETED or"},{"line_number":1083,"context_line":"                    # SHELVED_OFFLOADED, and we continue here to ensure that we"},{"line_number":1084,"context_line":"                    # do NOT delete the instance allocation. The instance\u0027s"},{"line_number":1085,"context_line":"                    # allocation will be set on the destination host during"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_681a4e17","line":1082,"range":{"start_line":1082,"start_character":22,"end_line":1082,"end_character":26},"updated":"2017-07-28 16:30:49.000000000","message":"its","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5bf25cdca778f821b158c2522de033b2e59101bb","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"                    continue"},{"line_number":1080,"context_line":"                if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"},{"line_number":1081,"context_line":"                    # NOTE(jaypipes): If the instance is migrating or resizing,"},{"line_number":1082,"context_line":"                    # it\u0027s vm_state will be something other than DELETED or"},{"line_number":1083,"context_line":"                    # SHELVED_OFFLOADED, and we continue here to ensure that we"},{"line_number":1084,"context_line":"                    # do NOT delete the instance allocation. The instance\u0027s"},{"line_number":1085,"context_line":"                    # allocation will be set on the destination host during"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_2866862b","line":1082,"range":{"start_line":1082,"start_character":22,"end_line":1082,"end_character":26},"in_reply_to":"ff346bd7_681a4e17","updated":"2017-07-28 16:36:11.000000000","message":"Done","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                    # confirming of the resize operation. This will cause the"},{"line_number":1087,"context_line":"                    # allocations against the source host to be effectively"},{"line_number":1088,"context_line":"                    # deleted."},{"line_number":1089,"context_line":"                    continue"},{"line_number":1090,"context_line":"            except exception.InstanceNotFound:"},{"line_number":1091,"context_line":"                # The instance is gone, so we definitely want to"},{"line_number":1092,"context_line":"                # remove allocations associated with it."}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_0334c391","line":1089,"updated":"2017-07-28 16:56:58.000000000","message":"This is a different part of the bug from above and thus I would have expected it to be a separate patch. But, maybe it makes sense for backportability.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                    # confirming of the resize operation. This will cause the"},{"line_number":1087,"context_line":"                    # allocations against the source host to be effectively"},{"line_number":1088,"context_line":"                    # deleted."},{"line_number":1089,"context_line":"                    continue"},{"line_number":1090,"context_line":"            except exception.InstanceNotFound:"},{"line_number":1091,"context_line":"                # The instance is gone, so we definitely want to"},{"line_number":1092,"context_line":"                # remove allocations associated with it."}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_f18728b6","line":1089,"in_reply_to":"ff346bd7_0334c391","updated":"2017-07-28 17:49:18.000000000","message":"Yeah, it\u0027s related so I\u0027d prefer to keep it in a single patch for backportability.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"100323bad30caa918c2ec6de3d3e657d50f8f561","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":480,"context_line":"                instance[\u0027uuid\u0027], cn_uuid, instance.user_id,"},{"line_number":481,"context_line":"                instance.project_id)"},{"line_number":482,"context_line":"            if not res:"},{"line_number":483,"context_line":"                LOG.error(\"Failed to save manipulated allocation when \""},{"line_number":484,"context_line":"                          \"confirming resize.\", instance\u003dinstance)"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_e5ecf0f4","line":482,"updated":"2017-07-29 12:16:08.000000000","message":"does it matter that this condition isn\u0027t covered by the unit tests?","commit_id":"34c26352d6f3b58c9fd5e8dfd2c40f2634a2fdfe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e7e46d8df6f282da527ebfb0c2115b1a7db12773","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":480,"context_line":"                instance[\u0027uuid\u0027], cn_uuid, instance.user_id,"},{"line_number":481,"context_line":"                instance.project_id)"},{"line_number":482,"context_line":"            if not res:"},{"line_number":483,"context_line":"                LOG.error(\"Failed to save manipulated allocation when \""},{"line_number":484,"context_line":"                          \"confirming resize.\", instance\u003dinstance)"},{"line_number":485,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_2f775c3d","line":482,"in_reply_to":"df3967d1_e5ecf0f4","updated":"2017-07-31 14:24:15.000000000","message":"If we care that it works, then it should be covered, IMHO. Since this is a pretty important issue to highlight, I think we should at least make sure we walk over this.","commit_id":"34c26352d6f3b58c9fd5e8dfd2c40f2634a2fdfe"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"100323bad30caa918c2ec6de3d3e657d50f8f561","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                                                        expected_attrs\u003d[])"},{"line_number":1078,"context_line":"                if not instance.host:"},{"line_number":1079,"context_line":"                    continue"},{"line_number":1080,"context_line":"                if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"},{"line_number":1081,"context_line":"                    # NOTE(jaypipes): If the instance is migrating or resizing,"},{"line_number":1082,"context_line":"                    # its vm_state will be something other than DELETED or"},{"line_number":1083,"context_line":"                    # SHELVED_OFFLOADED, and we continue here to ensure that we"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_c5bb2ce3","line":1080,"updated":"2017-07-29 12:16:08.000000000","message":"as far as I can nor is this one?","commit_id":"34c26352d6f3b58c9fd5e8dfd2c40f2634a2fdfe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e7e46d8df6f282da527ebfb0c2115b1a7db12773","unresolved":false,"context_lines":[{"line_number":1077,"context_line":"                                                        expected_attrs\u003d[])"},{"line_number":1078,"context_line":"                if not instance.host:"},{"line_number":1079,"context_line":"                    continue"},{"line_number":1080,"context_line":"                if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"},{"line_number":1081,"context_line":"                    # NOTE(jaypipes): If the instance is migrating or resizing,"},{"line_number":1082,"context_line":"                    # its vm_state will be something other than DELETED or"},{"line_number":1083,"context_line":"                    # SHELVED_OFFLOADED, and we continue here to ensure that we"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_ef8ef425","line":1080,"in_reply_to":"df3967d1_c5bb2ce3","updated":"2017-07-31 14:24:15.000000000","message":"This is clearly important to test, yeah.","commit_id":"34c26352d6f3b58c9fd5e8dfd2c40f2634a2fdfe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"270240d207ee285684926d370e8093f71f2f5209","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # calling PUT /allocations back to the placement API. The allocation"},{"line_number":474,"context_line":"        # that gets PUT\u0027d back to placement will only include the destination"},{"line_number":475,"context_line":"        # host and any shared providers."},{"line_number":476,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":477,"context_line":"            # We\u0027re on the source host during confirm_resize()..."},{"line_number":478,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":479,"context_line":"            LOG.debug(\"Confirming resize on source host. Removing resources \""},{"line_number":480,"context_line":"                      \"claimed on provider %s from allocation for instance %s\","}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_44c71914","line":477,"range":{"start_line":476,"start_character":8,"end_line":477,"end_character":65},"updated":"2017-07-31 21:04:47.000000000","message":"We also need to handle revert to get gibi\u0027s test passing, this did it for me:\n\ndiff --git a/nova/compute/resource_tracker.py b/nova/compute/resource_tracker.py\nindex 4fc9540..d4c21c0 100644\n--- a/nova/compute/resource_tracker.py\n+++ b/nova/compute/resource_tracker.py\n@@ -485,6 +485,18 @@ class ResourceTracker(object):\n             if not res:\n                 LOG.error(\"Failed to save manipulated allocation when \"\n                           \"confirming resize.\", instance\u003dinstance)\n+        else:\n+            # We\u0027re on the destination host during revert_resize()...\n+            cn_uuid \u003d self.compute_nodes[nodename].uuid\n+            LOG.debug(\"Reverting resize on target host. Removing resources \"\n+                      \"claimed on provider %s from allocation for instance %s\",\n+                      cn_uuid, instance.uuid, instance\u003dinstance)\n+            res \u003d self.reportclient.remove_provider_from_instance_allocation(\n+                instance.uuid, cn_uuid, instance.user_id,\n+                instance.project_id)\n+            if not res:\n+                LOG.error(\"Failed to save manipulated allocation when \"\n+                          \"reverting resize.\", instance\u003dinstance)\n\n\nAre you going to handle revert in a separate patch?","commit_id":"69bb7781b5817e16189faddbcf0181ed7a0b1182"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"607541a2f2bcaec337daba3fe367cc05cb0bbc23","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1125,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1126,"context_line":"        compute_version \u003d objects.Service.get_minimum_version_multi("},{"line_number":1127,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1128,"context_line":"        heal_allocations \u003d True"},{"line_number":1129,"context_line":"        if compute_version \u003c 22:"},{"line_number":1130,"context_line":"            heal_allocations \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_843501dd","line":1127,"range":{"start_line":1127,"start_character":21,"end_line":1127,"end_character":35},"updated":"2017-07-31 20:41:20.000000000","message":"This needs to be [\u0027nova-compute\u0027]. Or just use get_minimum_version.","commit_id":"69bb7781b5817e16189faddbcf0181ed7a0b1182"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4416c7d797be50595f54bd5f2079475095add48d","unresolved":false,"context_lines":[{"line_number":1137,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1138,"context_line":"        has_ocata_computes \u003d False"},{"line_number":1139,"context_line":"        if compute_version \u003c 22:"},{"line_number":1140,"context_line":"            has_ocata_computes \u003d True"},{"line_number":1141,"context_line":""},{"line_number":1142,"context_line":"        for instance in instances:"},{"line_number":1143,"context_line":"            if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_45648e22","line":1140,"updated":"2017-08-01 23:26:17.000000000","message":"I like this degree of verticality but I guess you could have done: has_ocata_compute \u003d compute_version \u003c 22\n\n?","commit_id":"2a7db5ddd7673881e3cbe76a00dba36c55c1a0c3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d9939f1b9adb4bfb8305846512cd73735328de","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # calling PUT /allocations back to the placement API. The allocation"},{"line_number":474,"context_line":"        # that gets PUT\u0027d back to placement will only include the destination"},{"line_number":475,"context_line":"        # host and any shared providers."},{"line_number":476,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":477,"context_line":"            # We\u0027re on the source host during confirm_resize()..."},{"line_number":478,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":479,"context_line":"            LOG.debug(\"Confirming resize on source host. Removing resources \""},{"line_number":480,"context_line":"                      \"claimed on provider %s from allocation for instance %s\","},{"line_number":481,"context_line":"                      cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":482,"context_line":"            res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":483,"context_line":"                instance.uuid, cn_uuid, instance.user_id,"},{"line_number":484,"context_line":"                instance.project_id, instance_type or instance.flavor)"},{"line_number":485,"context_line":"            if not res:"},{"line_number":486,"context_line":"                LOG.error(\"Failed to save manipulated allocation when \""},{"line_number":487,"context_line":"                          \"confirming resize.\", instance\u003dinstance)"},{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            # We\u0027re on the destination host during revert_resize()..."},{"line_number":490,"context_line":"            cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":491,"context_line":"            LOG.debug(\"Reverting resize on target host. Removing resources \""},{"line_number":492,"context_line":"                      \"claimed on provider %s from allocation for instance %s\","},{"line_number":493,"context_line":"                      cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":494,"context_line":"            res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":495,"context_line":"                instance.uuid, cn_uuid, instance.user_id,"},{"line_number":496,"context_line":"                instance.project_id, instance_type or instance.flavor)"},{"line_number":497,"context_line":"            if not res:"},{"line_number":498,"context_line":"                LOG.error(\"Failed to save manipulated allocation when \""},{"line_number":499,"context_line":"                          \"reverting resize.\", instance\u003dinstance)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":502,"context_line":"    def update_usage(self, context, instance, nodename):"}],"source_content_type":"text/x-python","patch_set":16,"id":"df3967d1_981626f1","line":499,"range":{"start_line":476,"start_character":1,"end_line":499,"end_character":65},"updated":"2017-08-03 09:53:07.000000000","message":"I fails to see any logical differences between the if and the else branch except the log messages. Is this if here only to have better logging?\n\n(Locally I removed the duplication and functional tests still passing)","commit_id":"6a8fda82523e5213c2937e017d174ccce06039f8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"16b5061e292396a8c41da2e9c29f0915287b9e90","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"                    # UUID and not the instance UUID. The scheduler will"},{"line_number":1071,"context_line":"                    # allocate the resources for the destination host to the"},{"line_number":1072,"context_line":"                    # instance UUID."},{"line_number":1073,"context_line":"                    LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1074,"context_line":"                              \"with all Pike compute hosts. Skipping \""},{"line_number":1075,"context_line":"                              \"auto-correction of allocations.\")"},{"line_number":1076,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"df3967d1_e757cb57","line":1073,"updated":"2017-08-03 12:42:52.000000000","message":"I think I found an edge case. If the placement returns no allocation candidates (e.g. do not have enough resources for the allocation request) then the scheduler falls back to the legacy behavior and does not claim the resources. I think before this patch the periodic task healed the allocation eventually but now with this change it doesn\u0027t do it any more.\n\nI put up a WIP patch that reproduces the problem: https://review.openstack.org/#/c/490461","commit_id":"6a8fda82523e5213c2937e017d174ccce06039f8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"81c69be5202c27514566a85a7596c0f7b55354c7","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                self.pci_tracker.update_pci_for_instance(context,"},{"line_number":1032,"context_line":"                                                         instance,"},{"line_number":1033,"context_line":"                                                         sign\u003dsign)"},{"line_number":1034,"context_line":"                if has_ocata_computes:"},{"line_number":1035,"context_line":"                    LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1036,"context_line":"                              \"with Ocata compute hosts. Auto-correcting \""},{"line_number":1037,"context_line":"                              \"allocations to handle Ocata-style assumptions.\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"df3967d1_da3250f2","line":1034,"updated":"2017-08-03 19:26:32.000000000","message":"This should not be indented under \"if self.pci_tracker\" right?","commit_id":"e04462faaf63ee8e809beef2b0857714d9d857c8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"09585ec858ca9d4e2b6be6ff7293358c2886ca0e","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            instance_type or instance.flavor)"},{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":485,"context_line":"        res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":486,"context_line":"            instance.uuid, cn_uuid, instance.user_id,"},{"line_number":487,"context_line":"            instance.project_id, my_resources)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf3e73b7_df4c1278","line":484,"range":{"start_line":482,"start_character":7,"end_line":484,"end_character":71},"updated":"2017-08-07 09:55:43.000000000","message":"This log reminds me that we may miss other move cases. After a check, I found the evacuate still broken after the evacuate, no-one is going to clean up the double allocations. \n\nAlso after this patch https://review.openstack.org/#/c/491012/4, no-one is going to auto-heal the allocations for the evacuate.","commit_id":"79062bc481e5a61d2037203b41f99424825f4e9e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # from the placement API, dropping the resources in the doubled-up"},{"line_number":474,"context_line":"        # allocation set that refer to the source host UUID and calling PUT"},{"line_number":475,"context_line":"        # /allocations back to the placement API. The allocation that gets"},{"line_number":476,"context_line":"        # PUT\u0027d back to placement will only include the destination host and"},{"line_number":477,"context_line":"        # any shared providers."},{"line_number":478,"context_line":"        my_resources \u003d scheduler_utils.resources_from_flavor(instance,"},{"line_number":479,"context_line":"            instance_type or instance.flavor)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_bfcb6c51","line":476,"range":{"start_line":476,"start_character":56,"end_line":476,"end_character":72},"updated":"2017-08-09 18:41:01.000000000","message":"well, or source host, depending on which way we\u0027re going...","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        # from the placement API, dropping the resources in the doubled-up"},{"line_number":474,"context_line":"        # allocation set that refer to the source host UUID and calling PUT"},{"line_number":475,"context_line":"        # /allocations back to the placement API. The allocation that gets"},{"line_number":476,"context_line":"        # PUT\u0027d back to placement will only include the destination host and"},{"line_number":477,"context_line":"        # any shared providers."},{"line_number":478,"context_line":"        my_resources \u003d scheduler_utils.resources_from_flavor(instance,"},{"line_number":479,"context_line":"            instance_type or instance.flavor)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_15cc9933","line":476,"range":{"start_line":476,"start_character":56,"end_line":476,"end_character":72},"in_reply_to":"9f436f4f_bfcb6c51","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"25eb1a83055a2b678d2ab3e4354b3b7739864ef6","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        my_resources \u003d scheduler_utils.resources_from_flavor(instance,"},{"line_number":479,"context_line":"            instance_type or instance.flavor)"},{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_c300a837","line":481,"range":{"start_line":481,"start_character":8,"end_line":481,"end_character":17},"updated":"2017-08-09 13:18:05.000000000","message":"nit: If this is only used for the LOG message, the text should be capitalized to \u0027Confirming\u0027 / \u0027Reverting\u0027","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        my_resources \u003d scheduler_utils.resources_from_flavor(instance,"},{"line_number":479,"context_line":"            instance_type or instance.flavor)"},{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_75e405ad","line":481,"range":{"start_line":481,"start_character":8,"end_line":481,"end_character":17},"in_reply_to":"9f436f4f_c300a837","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            instance_type or instance.flavor)"},{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":485,"context_line":"        res \u003d self.reportclient.remove_provider_from_instance_allocation("}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_3f065c88","line":482,"range":{"start_line":482,"start_character":32,"end_line":482,"end_character":38},"updated":"2017-08-09 18:41:01.000000000","message":"If you\u0027re reverting, then you\u0027re reverting the resize on the destination host...so this would be a confusing message:\n\nhttp://logs.openstack.org/10/488510/30/check/gate-tempest-dsvm-neutron-multinode-full-ubuntu-xenial-nv/c725063/logs/screen-n-cpu.txt.gz#_Aug_09_13_52_47_710463\n\nEspecially given the NOTE above. So operation should be a tuple I suppose of (\u0027Confirming\u0027, \u0027source\u0027) / (\u0027Reverting\u0027, \u0027destination\u0027).","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            instance_type or instance.flavor)"},{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":485,"context_line":"        res \u003d self.reportclient.remove_provider_from_instance_allocation("}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_35631d1d","line":482,"range":{"start_line":482,"start_character":32,"end_line":482,"end_character":38},"in_reply_to":"9f436f4f_3f065c88","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":485,"context_line":"        res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":486,"context_line":"            instance.uuid, cn_uuid, instance.user_id,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_7fdaa417","line":483,"range":{"start_line":483,"start_character":71,"end_line":483,"end_character":73},"updated":"2017-08-09 18:41:01.000000000","message":"nit: this is redundant when you use the instance\u003dinstance kwarg","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        cn_uuid \u003d self.compute_nodes[nodename].uuid"},{"line_number":481,"context_line":"        operation \u003d \u0027confirming\u0027 if prefix \u003d\u003d \u0027old_\u0027 else \u0027reverting\u0027"},{"line_number":482,"context_line":"        LOG.debug(\"%s resize on source host. Removing resources \""},{"line_number":483,"context_line":"                  \"claimed on provider %s from allocation for instance %s\","},{"line_number":484,"context_line":"                  operation, cn_uuid, instance.uuid, instance\u003dinstance)"},{"line_number":485,"context_line":"        res \u003d self.reportclient.remove_provider_from_instance_allocation("},{"line_number":486,"context_line":"            instance.uuid, cn_uuid, instance.user_id,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_f56c7509","line":483,"range":{"start_line":483,"start_character":71,"end_line":483,"end_character":73},"in_reply_to":"9f436f4f_7fdaa417","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"590b9200c3802151be7f9a38ceca3b2f8b8bd242","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        operation \u003d \u0027Confirming\u0027"},{"line_number":483,"context_line":"        source_or_dest \u003d \u0027source\u0027"},{"line_number":484,"context_line":"        if prefix \u003d\u003d \u0027old_\u0027:"},{"line_number":485,"context_line":"            operation \u003d \u0027Reverting\u0027"},{"line_number":486,"context_line":"            source_or_dest \u003d \u0027destination\u0027"},{"line_number":487,"context_line":"        LOG.debug(\"%s resize on %s host. Removing resources claimed on \""},{"line_number":488,"context_line":"                  \"provider %s from allocation\","},{"line_number":489,"context_line":"                  operation, source_or_dest, cn_uuid, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9f436f4f_50734f16","line":486,"range":{"start_line":485,"start_character":12,"end_line":486,"end_character":42},"updated":"2017-08-09 20:26:24.000000000","message":"This is wrong. When prefix is old_ we\u0027re confirming on the source:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/manager.py#L3530","commit_id":"cadffffa9317afde74c9908c3b2073beb58baa01"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"        We only call this method on a single occasion: on the source host"},{"line_number":1026,"context_line":"        during a confirm_resize() operation. This is important to reconcile the"},{"line_number":1027,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"},{"line_number":1028,"context_line":"        resources against the destination host during a move operation."},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        :param consumer_uuid: The instance/consumer UUID"},{"line_number":1031,"context_line":"        :param rp_uuid: The UUID of the provider whose resources we wish to"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_43a64bad","line":1028,"updated":"2017-07-28 16:56:58.000000000","message":"Just to be clear, we\u0027ll never fail on a generation conflict here and need to retry, is that right? We don\u0027t pass the generation of the RP that I see, so I\u0027m guessing not, but.. just want to be sure since we only get one chance to un-double this allocation.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"        We only call this method on a single occasion: on the source host"},{"line_number":1026,"context_line":"        during a confirm_resize() operation. This is important to reconcile the"},{"line_number":1027,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"},{"line_number":1028,"context_line":"        resources against the destination host during a move operation."},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        :param consumer_uuid: The instance/consumer UUID"},{"line_number":1031,"context_line":"        :param rp_uuid: The UUID of the provider whose resources we wish to"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_31b7f089","line":1028,"in_reply_to":"ff346bd7_43a64bad","updated":"2017-07-28 17:49:18.000000000","message":"Correct.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        # Grab the \"doubled-up\" allocation that we will manipulate"},{"line_number":1039,"context_line":"        r \u003d self.get(url)"},{"line_number":1040,"context_line":"        if r.status_code \u003d\u003d 200:"},{"line_number":1041,"context_line":"            current_allocs \u003d r.json()[\u0027allocations\u0027]"},{"line_number":1042,"context_line":"            if current_allocs:"},{"line_number":1043,"context_line":"                # If the source host isn\u0027t in the current allocation for the"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_c3debb3c","line":1040,"updated":"2017-07-28 16:56:58.000000000","message":"This is just me, but I hate putting the whole body of work here inside an if. Personally, I\u0027d rather:\n\n if not 200:\n    log and bail\n\nand then the rest of the function can be one indent level less. Otherwise the main purpose of this function is inside a conditional.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        # Grab the \"doubled-up\" allocation that we will manipulate"},{"line_number":1039,"context_line":"        r \u003d self.get(url)"},{"line_number":1040,"context_line":"        if r.status_code \u003d\u003d 200:"},{"line_number":1041,"context_line":"            current_allocs \u003d r.json()[\u0027allocations\u0027]"},{"line_number":1042,"context_line":"            if current_allocs:"},{"line_number":1043,"context_line":"                # If the source host isn\u0027t in the current allocation for the"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_11bcec67","line":1040,"in_reply_to":"ff346bd7_c3debb3c","updated":"2017-07-28 17:49:18.000000000","message":"Done","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"        r \u003d self.get(url)"},{"line_number":1040,"context_line":"        if r.status_code \u003d\u003d 200:"},{"line_number":1041,"context_line":"            current_allocs \u003d r.json()[\u0027allocations\u0027]"},{"line_number":1042,"context_line":"            if current_allocs:"},{"line_number":1043,"context_line":"                # If the source host isn\u0027t in the current allocation for the"},{"line_number":1044,"context_line":"                # instance, don\u0027t do anything... just return True"},{"line_number":1045,"context_line":"                if rp_uuid not in current_allocs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_83cd5386","line":1042,"updated":"2017-07-28 16:56:58.000000000","message":"Similarly, you could do the same here and safe yet another indent level.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"        r \u003d self.get(url)"},{"line_number":1040,"context_line":"        if r.status_code \u003d\u003d 200:"},{"line_number":1041,"context_line":"            current_allocs \u003d r.json()[\u0027allocations\u0027]"},{"line_number":1042,"context_line":"            if current_allocs:"},{"line_number":1043,"context_line":"                # If the source host isn\u0027t in the current allocation for the"},{"line_number":1044,"context_line":"                # instance, don\u0027t do anything... just return True"},{"line_number":1045,"context_line":"                if rp_uuid not in current_allocs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_91a7bc50","line":1042,"in_reply_to":"ff346bd7_83cd5386","updated":"2017-07-28 17:49:18.000000000","message":"Done","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e9fed70948357ee2ec362a1fa8973e4778579c8c","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"                              \"none.\", rp_uuid, consumer_uuid)"},{"line_number":1049,"context_line":"                    return True"},{"line_number":1050,"context_line":"                new_allocs \u003d ["},{"line_number":1051,"context_line":"                    {"},{"line_number":1052,"context_line":"                        \u0027resource_provider\u0027: {"},{"line_number":1053,"context_line":"                            \u0027uuid\u0027: alloc_rp_uuid,"},{"line_number":1054,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_c89a5a60","line":1051,"range":{"start_line":1051,"start_character":20,"end_line":1051,"end_character":21},"updated":"2017-07-28 16:30:49.000000000","message":"ugh","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"afe6a010cfbdf535f2da38e7da7bbf7f2f724377","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"                              \"none.\", rp_uuid, consumer_uuid)"},{"line_number":1049,"context_line":"                    return True"},{"line_number":1050,"context_line":"                new_allocs \u003d ["},{"line_number":1051,"context_line":"                    {"},{"line_number":1052,"context_line":"                        \u0027resource_provider\u0027: {"},{"line_number":1053,"context_line":"                            \u0027uuid\u0027: alloc_rp_uuid,"},{"line_number":1054,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_912a1c8e","line":1051,"range":{"start_line":1051,"start_character":20,"end_line":1051,"end_character":21},"in_reply_to":"ff346bd7_43152be4","updated":"2017-07-28 17:49:18.000000000","message":"It\u0027s not a dict comprehension. It\u0027s a list comprehension with each element in the list being a dict.\n\nIt would likely be even harder to tell that if the code looked like this:\n\n new_allocs \u003d [{\n     \u0027resource_provider\u0027: {\u0027uuid\u0027: alloc_rp_uuid},\n     \u0027resources\u0027: alloc[\u0027resources\u0027]}\n     for alloc_rp_uuid, alloc in current_allocs.items()\n     if alloc_rp_uuid !\u003d rp_uuid]","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"869ad910bc24c6a58dac2a28fb26ff3d6ee59812","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"                              \"none.\", rp_uuid, consumer_uuid)"},{"line_number":1049,"context_line":"                    return True"},{"line_number":1050,"context_line":"                new_allocs \u003d ["},{"line_number":1051,"context_line":"                    {"},{"line_number":1052,"context_line":"                        \u0027resource_provider\u0027: {"},{"line_number":1053,"context_line":"                            \u0027uuid\u0027: alloc_rp_uuid,"},{"line_number":1054,"context_line":"                        },"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_43152be4","line":1051,"range":{"start_line":1051,"start_character":20,"end_line":1051,"end_character":21},"in_reply_to":"ff346bd7_c89a5a60","updated":"2017-07-28 16:56:58.000000000","message":"Yeah, a multi-line whitespace-filled dict comprehension is pretty hard to read, IMHO.","commit_id":"5fd744d847e457c5707af2be2bd66786c5f970fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1e56f4ef8407963990fed9061a65586353931496","unresolved":false,"context_lines":[{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":"        # If the source host isn\u0027t in the current allocation for the instance,"},{"line_number":1052,"context_line":"        # don\u0027t do anything"},{"line_number":1053,"context_line":"        if rp_uuid not in current_allocs:"},{"line_number":1054,"context_line":"            LOG.error(\"Expected to find allocations referencing resource \""},{"line_number":1055,"context_line":"                      \"provider %s for %s, but found none.\","},{"line_number":1056,"context_line":"                      rp_uuid, consumer_uuid)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_15f9fd4b","line":1053,"updated":"2017-08-02 16:17:11.000000000","message":"This is a dict indexed by rp_uuid?","commit_id":"2a7db5ddd7673881e3cbe76a00dba36c55c1a0c3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1e56f4ef8407963990fed9061a65586353931496","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"                      rp_uuid, consumer_uuid)"},{"line_number":1057,"context_line":"            return True"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        new_allocs \u003d ["},{"line_number":1060,"context_line":"            {"},{"line_number":1061,"context_line":"                \u0027resource_provider\u0027: {"},{"line_number":1062,"context_line":"                    \u0027uuid\u0027: alloc_rp_uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_158e9dcf","line":1059,"updated":"2017-08-02 16:17:11.000000000","message":"But this is a list of dicts with resource_provider-\u003euuid-\u003e$uuid ?\n\nI\u0027m super confused.","commit_id":"2a7db5ddd7673881e3cbe76a00dba36c55c1a0c3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"853b60a923127a1c768f3598729f9a2a29001328","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"                      rp_uuid, consumer_uuid)"},{"line_number":1057,"context_line":"            return True"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        new_allocs \u003d ["},{"line_number":1060,"context_line":"            {"},{"line_number":1061,"context_line":"                \u0027resource_provider\u0027: {"},{"line_number":1062,"context_line":"                    \u0027uuid\u0027: alloc_rp_uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_64d9b4f1","line":1059,"in_reply_to":"df3967d1_158e9dcf","updated":"2017-08-02 18:45:34.000000000","message":"Yes, unfortunately the GET /allocations/ response format is not consistent with the PUT /allocations request format. :(","commit_id":"2a7db5ddd7673881e3cbe76a00dba36c55c1a0c3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4500606e933bfc747d29c4640453202007e4a283","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"                },"},{"line_number":1103,"context_line":"                \u0027resources\u0027: current_allocs[rp_uuid][\u0027resources\u0027]"},{"line_number":1104,"context_line":"            }"},{"line_number":1105,"context_line":"            # FIXME(danms): This is totally cheating"},{"line_number":1106,"context_line":"            LOG.info(\u0027Original resources from same-host \u0027"},{"line_number":1107,"context_line":"                     \u0027allocation: %s\u0027 % peer_alloc[\u0027resources\u0027])"},{"line_number":1108,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027VCPU\u0027] -\u003d flavor.vcpus"}],"source_content_type":"text/x-python","patch_set":15,"id":"df3967d1_7bf82f7a","line":1105,"updated":"2017-08-02 21:03:41.000000000","message":"Is the intent to fix this now? If not, can you be more explicit about the nature of the cheating so less thinking required now?","commit_id":"5eda68597cf79505d65aad1f1b9748299ea9d6cd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"81df344e219545a7f53447ac11dc1ddd75d6f182","unresolved":false,"context_lines":[{"line_number":1116,"context_line":"                     \u0027allocation: %s\u0027 % peer_alloc[\u0027resources\u0027])"},{"line_number":1117,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027VCPU\u0027] -\u003d flavor.vcpus"},{"line_number":1118,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027DISK_GB\u0027] -\u003d flavor.root_gb"},{"line_number":1119,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027MEMORY_MB\u0027] -\u003d flavor.memory_mb"},{"line_number":1120,"context_line":"            LOG.info(\u0027Subtracting old resources from same-host \u0027"},{"line_number":1121,"context_line":"                     \u0027allocation: %s\u0027 % peer_alloc[\u0027resources\u0027])"},{"line_number":1122,"context_line":"            new_allocs.append(peer_alloc)"}],"source_content_type":"text/x-python","patch_set":16,"id":"df3967d1_1de580dc","line":1119,"updated":"2017-08-03 13:35:48.000000000","message":"Another reason not to do this: we need to account for flavor overrides in here. We probably need a function that turns a flavor into a set of allocations that we can use here and elsewhere. I\u0027m surprised we don\u0027t already have that, but maybe I\u0027m missing it.","commit_id":"6a8fda82523e5213c2937e017d174ccce06039f8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"98e445d3e554579216aed8649ef173bf178f877b","unresolved":false,"context_lines":[{"line_number":1116,"context_line":"                     \u0027allocation: %s\u0027 % peer_alloc[\u0027resources\u0027])"},{"line_number":1117,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027VCPU\u0027] -\u003d flavor.vcpus"},{"line_number":1118,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027DISK_GB\u0027] -\u003d flavor.root_gb"},{"line_number":1119,"context_line":"            peer_alloc[\u0027resources\u0027][\u0027MEMORY_MB\u0027] -\u003d flavor.memory_mb"},{"line_number":1120,"context_line":"            LOG.info(\u0027Subtracting old resources from same-host \u0027"},{"line_number":1121,"context_line":"                     \u0027allocation: %s\u0027 % peer_alloc[\u0027resources\u0027])"},{"line_number":1122,"context_line":"            new_allocs.append(peer_alloc)"}],"source_content_type":"text/x-python","patch_set":16,"id":"df3967d1_3d1ba4d0","line":1119,"in_reply_to":"df3967d1_1de580dc","updated":"2017-08-03 13:37:55.000000000","message":"Yep, this:\n\nhttps://review.openstack.org/#/c/473627/11/nova/scheduler/utils.py","commit_id":"6a8fda82523e5213c2937e017d174ccce06039f8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"        then PUTs the resulting allocation back to the placement API for the"},{"line_number":1010,"context_line":"        consumer."},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"        We only call this method on a single occasion: on the source host"},{"line_number":1013,"context_line":"        during a confirm_resize() operation. This is important to reconcile the"},{"line_number":1014,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"},{"line_number":1015,"context_line":"        resources against the destination host during a move operation. If the"},{"line_number":1016,"context_line":"        move was between hosts, the entire allocation for rp_uuid will"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_7f4f44bd","line":1013,"range":{"start_line":1012,"start_character":8,"end_line":1013,"end_character":44},"updated":"2017-08-09 18:41:01.000000000","message":"This is also called from the destination host on a revert_resize() operation.","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"        then PUTs the resulting allocation back to the placement API for the"},{"line_number":1010,"context_line":"        consumer."},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"        We only call this method on a single occasion: on the source host"},{"line_number":1013,"context_line":"        during a confirm_resize() operation. This is important to reconcile the"},{"line_number":1014,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"},{"line_number":1015,"context_line":"        resources against the destination host during a move operation. If the"},{"line_number":1016,"context_line":"        move was between hosts, the entire allocation for rp_uuid will"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_15513937","line":1013,"range":{"start_line":1012,"start_character":8,"end_line":1013,"end_character":44},"in_reply_to":"9f436f4f_7f4f44bd","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"},{"line_number":1015,"context_line":"        resources against the destination host during a move operation. If the"},{"line_number":1016,"context_line":"        move was between hosts, the entire allocation for rp_uuid will"},{"line_number":1017,"context_line":"        be dropped. If not, then we will subtract resources from the single"},{"line_number":1018,"context_line":"        allocation to account for the reserved amount on the sending host."},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        :param consumer_uuid: The instance/consumer UUID"},{"line_number":1021,"context_line":"        :param rp_uuid: The UUID of the provider whose resources we wish to"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_9f00a836","line":1018,"range":{"start_line":1017,"start_character":20,"end_line":1018,"end_character":74},"updated":"2017-08-09 18:41:01.000000000","message":"OK this is the resize to same host case. Was a bit confusing to read at first. The \u0027sending host\u0027 in resize to same host is the same host, so it\u0027s confusing. Or am I wrong?","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"},{"line_number":1015,"context_line":"        resources against the destination host during a move operation. If the"},{"line_number":1016,"context_line":"        move was between hosts, the entire allocation for rp_uuid will"},{"line_number":1017,"context_line":"        be dropped. If not, then we will subtract resources from the single"},{"line_number":1018,"context_line":"        allocation to account for the reserved amount on the sending host."},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        :param consumer_uuid: The instance/consumer UUID"},{"line_number":1021,"context_line":"        :param rp_uuid: The UUID of the provider whose resources we wish to"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_d53f31d4","line":1018,"range":{"start_line":1017,"start_character":20,"end_line":1018,"end_character":74},"in_reply_to":"9f436f4f_9f00a836","updated":"2017-08-09 19:58:39.000000000","message":"Embettered the misinclarifications on the above words.","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"                      \"found none.\", consumer_uuid)"},{"line_number":1040,"context_line":"            return False"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"        # If the source host isn\u0027t in the current allocation for the instance,"},{"line_number":1043,"context_line":"        # don\u0027t do anything"},{"line_number":1044,"context_line":"        if rp_uuid not in current_allocs:"},{"line_number":1045,"context_line":"            LOG.error(\"Expected to find allocations referencing resource \""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_ffb7b485","line":1042,"range":{"start_line":1042,"start_character":17,"end_line":1042,"end_character":28},"updated":"2017-08-09 18:41:01.000000000","message":"rp_uuid - since it\u0027s source or dest host","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"                      \"found none.\", consumer_uuid)"},{"line_number":1040,"context_line":"            return False"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"        # If the source host isn\u0027t in the current allocation for the instance,"},{"line_number":1043,"context_line":"        # don\u0027t do anything"},{"line_number":1044,"context_line":"        if rp_uuid not in current_allocs:"},{"line_number":1045,"context_line":"            LOG.error(\"Expected to find allocations referencing resource \""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_d00dff37","line":1042,"range":{"start_line":1042,"start_character":17,"end_line":1042,"end_character":28},"in_reply_to":"9f436f4f_ffb7b485","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"        # If the source host isn\u0027t in the current allocation for the instance,"},{"line_number":1043,"context_line":"        # don\u0027t do anything"},{"line_number":1044,"context_line":"        if rp_uuid not in current_allocs:"},{"line_number":1045,"context_line":"            LOG.error(\"Expected to find allocations referencing resource \""},{"line_number":1046,"context_line":"                      \"provider %s for %s, but found none.\","},{"line_number":1047,"context_line":"                      rp_uuid, consumer_uuid)"},{"line_number":1048,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_bf76ccd7","line":1045,"range":{"start_line":1045,"start_character":16,"end_line":1045,"end_character":21},"updated":"2017-08-09 18:41:01.000000000","message":"If we\u0027re returning True, do we really need this to be an ERROR level log message? What can an operator do about this? I\u0027d think WARNING is fine.","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"        # If the source host isn\u0027t in the current allocation for the instance,"},{"line_number":1043,"context_line":"        # don\u0027t do anything"},{"line_number":1044,"context_line":"        if rp_uuid not in current_allocs:"},{"line_number":1045,"context_line":"            LOG.error(\"Expected to find allocations referencing resource \""},{"line_number":1046,"context_line":"                      \"provider %s for %s, but found none.\","},{"line_number":1047,"context_line":"                      rp_uuid, consumer_uuid)"},{"line_number":1048,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_3028cb84","line":1045,"range":{"start_line":1045,"start_character":16,"end_line":1045,"end_character":21},"in_reply_to":"9f436f4f_bf76ccd7","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"25eb1a83055a2b678d2ab3e4354b3b7739864ef6","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"            return True"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        compute_providers \u003d [uuid for uuid, alloc in current_allocs.items()"},{"line_number":1051,"context_line":"                             if \u0027VCPU\u0027 in alloc[\u0027resources\u0027]]"},{"line_number":1052,"context_line":"        LOG.info(current_allocs)"},{"line_number":1053,"context_line":"        LOG.info(\u0027Instance %s has resources on %i compute nodes\u0027,"},{"line_number":1054,"context_line":"            consumer_uuid, len(compute_providers))"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_436838f4","line":1051,"range":{"start_line":1051,"start_character":29,"end_line":1051,"end_character":60},"updated":"2017-08-09 13:18:05.000000000","message":"ugly hack, but yeah, I get it.","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        compute_providers \u003d [uuid for uuid, alloc in current_allocs.items()"},{"line_number":1051,"context_line":"                             if \u0027VCPU\u0027 in alloc[\u0027resources\u0027]]"},{"line_number":1052,"context_line":"        LOG.info(current_allocs)"},{"line_number":1053,"context_line":"        LOG.info(\u0027Instance %s has resources on %i compute nodes\u0027,"},{"line_number":1054,"context_line":"            consumer_uuid, len(compute_providers))"},{"line_number":1055,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_3aff8a02","line":1052,"range":{"start_line":1052,"start_character":8,"end_line":1052,"end_character":32},"updated":"2017-08-09 18:41:01.000000000","message":"Why is this INFO level? Plus, there is no context when you see this in the logs. We should at least do something like:\n\nLOG.debug(\u0027Current allocations for instance: %s\u0027, current_allocs, instance_uuid\u003dconsumer_uuid)","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        compute_providers \u003d [uuid for uuid, alloc in current_allocs.items()"},{"line_number":1051,"context_line":"                             if \u0027VCPU\u0027 in alloc[\u0027resources\u0027]]"},{"line_number":1052,"context_line":"        LOG.info(current_allocs)"},{"line_number":1053,"context_line":"        LOG.info(\u0027Instance %s has resources on %i compute nodes\u0027,"},{"line_number":1054,"context_line":"            consumer_uuid, len(compute_providers))"},{"line_number":1055,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_b03b9bcf","line":1052,"range":{"start_line":1052,"start_character":8,"end_line":1052,"end_character":32},"in_reply_to":"9f436f4f_3aff8a02","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        ]"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"        if len(compute_providers) \u003d\u003d 1:"},{"line_number":1068,"context_line":"            # NOTE(danms): If we are the only provider then we need to"},{"line_number":1069,"context_line":"            # merge back in the doubled allocation with our part"},{"line_number":1070,"context_line":"            # subtracted"},{"line_number":1071,"context_line":"            peer_alloc \u003d {"},{"line_number":1072,"context_line":"                \u0027resource_provider\u0027: {"},{"line_number":1073,"context_line":"                    \u0027uuid\u0027: rp_uuid,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_ba3b7acf","line":1070,"range":{"start_line":1068,"start_character":12,"end_line":1070,"end_character":24},"updated":"2017-08-09 18:41:01.000000000","message":"If this is resize to the same host, can we mention that for clarity?","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        ]"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"        if len(compute_providers) \u003d\u003d 1:"},{"line_number":1068,"context_line":"            # NOTE(danms): If we are the only provider then we need to"},{"line_number":1069,"context_line":"            # merge back in the doubled allocation with our part"},{"line_number":1070,"context_line":"            # subtracted"},{"line_number":1071,"context_line":"            peer_alloc \u003d {"},{"line_number":1072,"context_line":"                \u0027resource_provider\u0027: {"},{"line_number":1073,"context_line":"                    \u0027uuid\u0027: rp_uuid,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_903d37bd","line":1070,"range":{"start_line":1068,"start_character":12,"end_line":1070,"end_character":24},"in_reply_to":"9f436f4f_ba3b7acf","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"749ba1d628ec9e84ff262fb70c4e184445f71772","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                },"},{"line_number":1075,"context_line":"                \u0027resources\u0027: current_allocs[rp_uuid][\u0027resources\u0027]"},{"line_number":1076,"context_line":"            }"},{"line_number":1077,"context_line":"            # FIXME(danms): This is totally cheating"},{"line_number":1078,"context_line":"            LOG.info(\u0027Original resources from same-host \u0027"},{"line_number":1079,"context_line":"                     \u0027allocation: %s\u0027, peer_alloc[\u0027resources\u0027])"},{"line_number":1080,"context_line":"            scheduler_utils.merge_resources(peer_alloc[\u0027resources\u0027],"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_f19db259","line":1077,"updated":"2017-08-09 14:10:44.000000000","message":"This isn\u0027t cheating anymore since we\u0027re properly considering the flavor and overrides, so this should be removed.","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"56e87b470ab478bf8ef9095de3e446d805628866","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"                },"},{"line_number":1075,"context_line":"                \u0027resources\u0027: current_allocs[rp_uuid][\u0027resources\u0027]"},{"line_number":1076,"context_line":"            }"},{"line_number":1077,"context_line":"            # FIXME(danms): This is totally cheating"},{"line_number":1078,"context_line":"            LOG.info(\u0027Original resources from same-host \u0027"},{"line_number":1079,"context_line":"                     \u0027allocation: %s\u0027, peer_alloc[\u0027resources\u0027])"},{"line_number":1080,"context_line":"            scheduler_utils.merge_resources(peer_alloc[\u0027resources\u0027],"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_b0aefbe4","line":1077,"in_reply_to":"9f436f4f_f19db259","updated":"2017-08-09 19:58:39.000000000","message":"Done","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"        LOG.debug(\"Sending updated allocation %s for instance %s after \""},{"line_number":1090,"context_line":"                  \"removing resources for %s.\","},{"line_number":1091,"context_line":"                  new_allocs, consumer_uuid, rp_uuid)"},{"line_number":1092,"context_line":"        r \u003d self.put(url, payload, version\u003d\u00271.10\u0027)"},{"line_number":1093,"context_line":"        if r.status_code !\u003d 204:"},{"line_number":1094,"context_line":"            LOG.warning(\"Failed to save allocation for %s. Got HTTP %s: %s\","},{"line_number":1095,"context_line":"                        consumer_uuid, r.status_code, r.text)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_1a896674","line":1092,"range":{"start_line":1092,"start_character":12,"end_line":1092,"end_character":50},"updated":"2017-08-09 18:41:01.000000000","message":"We don\u0027t really need 1.10 for this. 1.8 is what you need for the project_id/user_id stuff on PUT /allocations, but even then, do we need those for this? I know it would be nice, but my point is, nova-status is only checking that you have at least 1.4, not that you\u0027re using 1.10 for the Placement API before upgrading your computes:\n\nhttps://github.com/openstack/nova/blob/master/nova/cmd/status.py#L208\n\nSo should we try 1.10 and fallback to PUT /allocations without the microversion (and drop project_id/user_id) if Placement isn\u0027t new enough? Or change nova-status (today) to require 1.10 for Placement, even though the FilterScheduler will fallback gracefully if 1.10 isn\u0027t available:\n\nhttps://github.com/openstack/nova/blob/master/nova/scheduler/manager.py#L137-L143\n\nWhich was the only thing that actually required 1.10 before this.\n\ngibi has a similar problem here: https://review.openstack.org/#/c/491491/","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6b8b169e8257fccc1d6e25f4c232efdc5b43b05","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"        LOG.debug(\"Sending updated allocation %s for instance %s after \""},{"line_number":1090,"context_line":"                  \"removing resources for %s.\","},{"line_number":1091,"context_line":"                  new_allocs, consumer_uuid, rp_uuid)"},{"line_number":1092,"context_line":"        r \u003d self.put(url, payload, version\u003d\u00271.10\u0027)"},{"line_number":1093,"context_line":"        if r.status_code !\u003d 204:"},{"line_number":1094,"context_line":"            LOG.warning(\"Failed to save allocation for %s. Got HTTP %s: %s\","},{"line_number":1095,"context_line":"                        consumer_uuid, r.status_code, r.text)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_35bc3ddb","line":1092,"range":{"start_line":1092,"start_character":12,"end_line":1092,"end_character":50},"in_reply_to":"9f436f4f_1a896674","updated":"2017-08-09 19:42:54.000000000","message":"https://review.openstack.org/#/c/492234/","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04c3d3e651e02008e544953924e37939bee24df5","unresolved":false,"context_lines":[{"line_number":1090,"context_line":"                  \"removing resources for %s.\","},{"line_number":1091,"context_line":"                  new_allocs, consumer_uuid, rp_uuid)"},{"line_number":1092,"context_line":"        r \u003d self.put(url, payload, version\u003d\u00271.10\u0027)"},{"line_number":1093,"context_line":"        if r.status_code !\u003d 204:"},{"line_number":1094,"context_line":"            LOG.warning(\"Failed to save allocation for %s. Got HTTP %s: %s\","},{"line_number":1095,"context_line":"                        consumer_uuid, r.status_code, r.text)"},{"line_number":1096,"context_line":"        return r.status_code \u003d\u003d 204"},{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"    @safe_connect"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_3a378ab3","line":1095,"range":{"start_line":1093,"start_character":8,"end_line":1095,"end_character":61},"updated":"2017-08-09 18:41:01.000000000","message":"This fails all the time in the resize to same host tests in our Tempest runs since the subtracted allocations result in 0 which is now rejected by Placement:\n\nhttp://logs.openstack.org/10/488510/30/check/gate-tempest-dsvm-neutron-full-ubuntu-xenial/5a36c66/logs/screen-n-cpu.txt.gz#_Aug_09_16_27_56_378094\n\n9155da345e5d6d1aee293bc66f746da52bca4c79","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"634567f5057956e348cff197cbb4d0234b852c69","unresolved":false,"context_lines":[{"line_number":1090,"context_line":"                  \"removing resources for %s.\","},{"line_number":1091,"context_line":"                  new_allocs, consumer_uuid, rp_uuid)"},{"line_number":1092,"context_line":"        r \u003d self.put(url, payload, version\u003d\u00271.10\u0027)"},{"line_number":1093,"context_line":"        if r.status_code !\u003d 204:"},{"line_number":1094,"context_line":"            LOG.warning(\"Failed to save allocation for %s. Got HTTP %s: %s\","},{"line_number":1095,"context_line":"                        consumer_uuid, r.status_code, r.text)"},{"line_number":1096,"context_line":"        return r.status_code \u003d\u003d 204"},{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"    @safe_connect"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_d5605135","line":1095,"range":{"start_line":1093,"start_character":8,"end_line":1095,"end_character":61},"in_reply_to":"9f436f4f_3a378ab3","updated":"2017-08-09 19:44:02.000000000","message":"To recap the failure, the scheduler correctly doubles the allocation for resize to same host here:\n\nhttp://logs.openstack.org/10/488510/30/check/gate-tempest-dsvm-neutron-full-ubuntu-xenial/5a36c66/logs/screen-n-sch.txt.gz#_Aug_09_16_27_37_633725\n\nBut the compute overwrites that during the migration:\n\nhttp://logs.openstack.org/10/488510/30/check/gate-tempest-dsvm-neutron-full-ubuntu-xenial/5a36c66/logs/screen-n-cpu.txt.gz#_Aug_09_16_27_46_100320\n\nAnd that ^ isn\u0027t fixed until the next patch after this one that accounts for it.","commit_id":"76591884cab0be7a383e82db6c8538a135e0c4f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"590b9200c3802151be7f9a38ceca3b2f8b8bd242","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"        then PUTs the resulting allocation back to the placement API for the"},{"line_number":1010,"context_line":"        consumer."},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"        We call this method on a two occasions: on the source host during a"},{"line_number":1013,"context_line":"        confirm_resize() operation and on the destination host during a"},{"line_number":1014,"context_line":"        revert_resize() operation. This is important to reconcile the"},{"line_number":1015,"context_line":"        \"doubled-up\" allocation that the scheduler constructs when claiming"}],"source_content_type":"text/x-python","patch_set":31,"id":"9f436f4f_f0e92380","line":1012,"range":{"start_line":1012,"start_character":31,"end_line":1012,"end_character":36},"updated":"2017-08-09 20:26:24.000000000","message":"two","commit_id":"cadffffa9317afde74c9908c3b2073beb58baa01"}],"nova/tests/functional/compute/test_resource_tracker.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1b6d09fba4ae39df95f5ca5df1b3f72cd1d979fc","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                self.assertEqual(3, len(inv))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            # Now \"spawn\" an instance to the first compute node by calling the"},{"line_number":293,"context_line":"            # RT\u0027s instance_claim(), which should, in the case of an Ironic"},{"line_number":294,"context_line":"            # instance, grab the full compute node for the instance and write"},{"line_number":295,"context_line":"            # allocation records for VCPU, MEMORY_MB, and DISK_GB"},{"line_number":296,"context_line":"            cn1_obj \u003d self.COMPUTE_NODE_FIXTURES[uuids.cn1]"},{"line_number":297,"context_line":"            cn1_nodename \u003d cn1_obj.hypervisor_hostname"},{"line_number":298,"context_line":"            inst \u003d self.INSTANCE_FIXTURES[uuids.instance1]"}],"source_content_type":"text/x-python","patch_set":21,"id":"df3967d1_fadab475","side":"PARENT","line":295,"range":{"start_line":293,"start_character":0,"end_line":295,"end_character":65},"updated":"2017-08-03 19:35:18.000000000","message":"This is ocata behavior, which we\u0027re not doing anymore, thus I think this comment and the assumption below that we\u0027ll have allocations after the claim is no longer right.","commit_id":"82c892be5189f844ca4d95c4d50cdcb135601a06"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1b6d09fba4ae39df95f5ca5df1b3f72cd1d979fc","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            # and then the checks below."},{"line_number":301,"context_line":"            self.rt.reportclient.update_instance_allocation(cn1_obj,"},{"line_number":302,"context_line":"                                                            inst,"},{"line_number":303,"context_line":"                                                            1)"},{"line_number":304,"context_line":"            with self.rt.instance_claim(self.ctx, inst, cn1_nodename):"},{"line_number":305,"context_line":"                pass"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"df3967d1_fac3d487","line":303,"updated":"2017-08-03 19:35:18.000000000","message":"This is the change I made, which mimics the scheduler-claims-for-us behavior of pike, which I think is what we want here.","commit_id":"8f53b840b56b78941266cdbc11130484c12db59c"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"20a8c9ce5f9568e2f5ffbf150a82dc80220396a9","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"        # NOTE(gibi): After fix 1707071 we need to set the service version to"},{"line_number":1082,"context_line":"        # pike to test pike only interactions. We need separate tests for"},{"line_number":1083,"context_line":"        # ocata - pike interactions"},{"line_number":1084,"context_line":"        # self.useFixture(nova_fixtures.AllServicesCurrent())"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        placement \u003d self.useFixture(nova_fixtures.PlacementFixture())"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_222cd397","side":"PARENT","line":1083,"range":{"start_line":1082,"start_character":47,"end_line":1083,"end_character":35},"updated":"2017-08-02 08:15:36.000000000","message":"Do we want to add tests for ocata - pike?","commit_id":"afab0ca0c8f4c68b8d6d8646f408e9522596870e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6ae1c8ceab9844d8bdefe36ff1f282d57b0ff6c8","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":1080,"context_line":""},{"line_number":1081,"context_line":"        # NOTE(gibi): After fix 1707071 we need to set the service version to"},{"line_number":1082,"context_line":"        # pike to test pike only interactions. We need separate tests for"},{"line_number":1083,"context_line":"        # ocata - pike interactions"},{"line_number":1084,"context_line":"        # self.useFixture(nova_fixtures.AllServicesCurrent())"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        placement \u003d self.useFixture(nova_fixtures.PlacementFixture())"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_42d35761","side":"PARENT","line":1083,"range":{"start_line":1082,"start_character":47,"end_line":1083,"end_character":35},"in_reply_to":"df3967d1_222cd397","updated":"2017-08-02 08:20:40.000000000","message":"Ah, I see now, we just want to keep the Pike works as Ocata when upgrade. So probably it\u0027s ok without that tests.","commit_id":"afab0ca0c8f4c68b8d6d8646f408e9522596870e"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3c6711d5d4832c6dc4de6f9c2fa809f9a6044008","unresolved":false,"context_lines":[{"line_number":5602,"context_line":"            self.assertIsNotNone(self.instance.migration_context)"},{"line_number":5603,"context_line":""},{"line_number":5604,"context_line":"        @mock.patch(\u0027nova.objects.Service.get_minimum_version\u0027,"},{"line_number":5605,"context_line":"                    return_value\u003d22)"},{"line_number":5606,"context_line":"        @mock.patch.object(self.compute, \"_notify_about_instance_usage\")"},{"line_number":5607,"context_line":"        @mock.patch.object(self.compute, \"_set_instance_info\")"},{"line_number":5608,"context_line":"        @mock.patch.object(self.instance, \u0027save\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"bf3e73b7_b04e38bf","line":5605,"updated":"2017-08-04 20:55:51.000000000","message":"This will need to get pushed to the following patch since it has to do with the ocata computes thing.","commit_id":"073618a33fab80ebc5610580c15190f0341006e2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9344fcae9bb5373c4f12410839f96f7f4eac8f63","unresolved":false,"context_lines":[{"line_number":5602,"context_line":"            self.assertIsNotNone(self.instance.migration_context)"},{"line_number":5603,"context_line":""},{"line_number":5604,"context_line":"        @mock.patch(\u0027nova.objects.Service.get_minimum_version\u0027,"},{"line_number":5605,"context_line":"                    return_value\u003d22)"},{"line_number":5606,"context_line":"        @mock.patch.object(self.compute, \"_notify_about_instance_usage\")"},{"line_number":5607,"context_line":"        @mock.patch.object(self.compute, \"_set_instance_info\")"},{"line_number":5608,"context_line":"        @mock.patch.object(self.instance, \u0027save\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf3e73b7_b0fcf83e","line":5605,"updated":"2017-08-04 20:57:02.000000000","message":"from previous revision comment, this should move to the next patch","commit_id":"75c8ca001c92b29fe8c75e4a48f863a955877697"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"852ef92a5e67ad2872abacf6bb3aba333a262a89","unresolved":false,"context_lines":[{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"        cn \u003d self.rt.compute_nodes[_NODENAME]"},{"line_number":2473,"context_line":"        ctx \u003d mock.sentinel.ctx"},{"line_number":2474,"context_line":"        self.rt._heal_allocations(ctx, cn)"},{"line_number":2475,"context_line":"        mock_delete_allocs.assert_not_called()"},{"line_number":2476,"context_line":""},{"line_number":2477,"context_line":"    @mock.patch(\u0027nova.objects.Instance.get_by_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f436f4f_83f98581","line":2474,"updated":"2017-08-09 09:46:08.000000000","message":"This doesn\u0027t seems to exists","commit_id":"d6c7b05319b409d579c32093a8a22b1025fd952a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"429a8c6d02293a312f9482106440feafd6441251","unresolved":false,"context_lines":[{"line_number":2471,"context_line":""},{"line_number":2472,"context_line":"        cn \u003d self.rt.compute_nodes[_NODENAME]"},{"line_number":2473,"context_line":"        ctx \u003d mock.sentinel.ctx"},{"line_number":2474,"context_line":"        self.rt._heal_allocations(ctx, cn)"},{"line_number":2475,"context_line":"        mock_delete_allocs.assert_not_called()"},{"line_number":2476,"context_line":""},{"line_number":2477,"context_line":"    @mock.patch(\u0027nova.objects.Instance.get_by_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f436f4f_5d8ff522","line":2474,"in_reply_to":"9f436f4f_83f98581","updated":"2017-08-09 12:33:56.000000000","message":"gah, rebase fail.","commit_id":"d6c7b05319b409d579c32093a8a22b1025fd952a"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4416c7d797be50595f54bd5f2079475095add48d","unresolved":false,"context_lines":[{"line_number":650,"context_line":"                        \u0027MEMORY_MB\u0027: 1024,"},{"line_number":651,"context_line":"                    },"},{"line_number":652,"context_line":"                },"},{"line_number":653,"context_line":"                uuids.shared_storage: {"},{"line_number":654,"context_line":"                    \u0027resource_provider_generation\u0027: 42,"},{"line_number":655,"context_line":"                    \u0027resources\u0027: {"},{"line_number":656,"context_line":"                        \u0027DISK_GB\u0027: 100,"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_a8d8af7e","line":653,"updated":"2017-08-01 23:26:17.000000000","message":"Remind me, please: Did we decide in one of the hangouts that long term perhaps DISK_GB here could potentially be 200 or there might actually be two different shared providers providing disk, 100 each?\n\nI know that\u0027s not what we\u0027re doing now, just trying to remember where we landed that conversation.","commit_id":"2a7db5ddd7673881e3cbe76a00dba36c55c1a0c3"}]}
