)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18672d878228ab5ae7fc7796624f761e4e7f4a5b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Eric Fried \u003cefried@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-11-27 14:49:33 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Commonize _update code path"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There were a bunch of report client methods around updating inventory to"},{"line_number":10,"context_line":"placement which were only being used in the non-update_provider_tree"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3f79a3b5_7328e1eb","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":27},"updated":"2018-11-28 22:28:29.000000000","message":"not the best commit summary... :(\n\nluckily you redeemed yourself with a good commit message.","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86efc632aa64eb792abf67b30b346c040288458c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There were a bunch of report client methods around updating inventory to"},{"line_number":10,"context_line":"placement which were only being used in the non-update_provider_tree"},{"line_number":11,"context_line":"code paths of the resource tracker\u0027s update routine. Those code paths"},{"line_number":12,"context_line":"had already been retrofitted to produce a placement-shaped inventory"},{"line_number":13,"context_line":"object."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"update_from_provider_tree gives us another way to flush these inventory"},{"line_number":16,"context_line":"changes."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9fdfeff1_e6bd1f02","line":13,"range":{"start_line":11,"start_character":53,"end_line":13,"end_character":7},"updated":"2019-02-01 19:33:28.000000000","message":"So https://github.com/openstack/nova/blob/5a4863aa152f58f6de426b3908a75c2cc1b2efca/nova/compute/resource_tracker.py#L962 and https://github.com/openstack/nova/blob/5a4863aa152f58f6de426b3908a75c2cc1b2efca/nova/compute/resource_tracker.py#L972","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce9eeb550a420c8185b9c4c590b81d755de13c61","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There were a bunch of report client methods around updating inventory to"},{"line_number":10,"context_line":"placement which were only being used in the non-update_provider_tree"},{"line_number":11,"context_line":"code paths of the resource tracker\u0027s update routine. Those code paths"},{"line_number":12,"context_line":"had already been retrofitted to produce a placement-shaped inventory"},{"line_number":13,"context_line":"object."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"update_from_provider_tree gives us another way to flush these inventory"},{"line_number":16,"context_line":"changes."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9fdfeff1_86853309","line":13,"range":{"start_line":11,"start_character":53,"end_line":13,"end_character":7},"in_reply_to":"9fdfeff1_e6bd1f02","updated":"2019-02-01 19:40:40.000000000","message":"Yes, mainly the guts of the latter.","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86efc632aa64eb792abf67b30b346c040288458c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"changes."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch simply takes the inventory object produced by the"},{"line_number":19,"context_line":"get_inventory() and update_compute_node() code paths and updates the"},{"line_number":20,"context_line":"provider tree object in the same fashion as update_provider_tree does."},{"line_number":21,"context_line":"So now all three code paths can commonly invoke"},{"line_number":22,"context_line":"update_from_provider_tree."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9fdfeff1_a63957a4","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":13},"updated":"2019-02-01 19:33:28.000000000","message":"set_inventory_for_provider?","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3de142cc7c7ad1173eeb31b88963ed8554894493","unresolved":false,"context_lines":[{"line_number":16,"context_line":"changes."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch simply takes the inventory object produced by the"},{"line_number":19,"context_line":"get_inventory() and update_compute_node() code paths and updates the"},{"line_number":20,"context_line":"provider tree object in the same fashion as update_provider_tree does."},{"line_number":21,"context_line":"So now all three code paths can commonly invoke"},{"line_number":22,"context_line":"update_from_provider_tree."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9fdfeff1_06c38358","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":13},"in_reply_to":"9fdfeff1_a63957a4","updated":"2019-02-01 19:34:16.000000000","message":"Nevermind I get it now.","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18672d878228ab5ae7fc7796624f761e4e7f4a5b","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                inv_data \u003d self.driver.get_inventory(nodename)"},{"line_number":952,"context_line":"                _normalize_inventory_from_cn_obj(inv_data, compute_node)"},{"line_number":953,"context_line":"            except NotImplementedError:"},{"line_number":954,"context_line":"                # Eventually all virt drivers will return an inventory dict in"},{"line_number":955,"context_line":"                # the format that the placement API expects and we\u0027ll be able"},{"line_number":956,"context_line":"                # to remove this code branch"},{"line_number":957,"context_line":"                inv_data \u003d compute_utils.compute_node_to_inventory_dict("},{"line_number":958,"context_line":"                    compute_node)"},{"line_number":959,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_936c9d34","line":956,"range":{"start_line":954,"start_character":0,"end_line":956,"end_character":44},"updated":"2018-11-28 22:28:29.000000000","message":"are there any virt drivers left that don\u0027t at least implement get_inventory()? If not, this can/should be removed along with compute_utils.compute_node_to_inventory_dict() (if this is its only caller)","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6744d8df7f8704b3eb8832b0f2457e29c1f2f988","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                inv_data \u003d self.driver.get_inventory(nodename)"},{"line_number":952,"context_line":"                _normalize_inventory_from_cn_obj(inv_data, compute_node)"},{"line_number":953,"context_line":"            except NotImplementedError:"},{"line_number":954,"context_line":"                # Eventually all virt drivers will return an inventory dict in"},{"line_number":955,"context_line":"                # the format that the placement API expects and we\u0027ll be able"},{"line_number":956,"context_line":"                # to remove this code branch"},{"line_number":957,"context_line":"                inv_data \u003d compute_utils.compute_node_to_inventory_dict("},{"line_number":958,"context_line":"                    compute_node)"},{"line_number":959,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_ae0db233","line":956,"range":{"start_line":954,"start_character":0,"end_line":956,"end_character":44},"in_reply_to":"3f79a3b5_936c9d34","updated":"2018-11-28 22:42:38.000000000","message":"I did look into that while I was implementing this series, and yes, there are a couple. I even considered implementing upt for those so I could do just as you suggest, but didn\u0027t want to go that far off into the weeds right now. Soon.","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"763a0cd9bb9cb7dafe14acdff8144e81bd87ce71","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                inv_data \u003d self.driver.get_inventory(nodename)"},{"line_number":952,"context_line":"                _normalize_inventory_from_cn_obj(inv_data, compute_node)"},{"line_number":953,"context_line":"            except NotImplementedError:"},{"line_number":954,"context_line":"                # Eventually all virt drivers will return an inventory dict in"},{"line_number":955,"context_line":"                # the format that the placement API expects and we\u0027ll be able"},{"line_number":956,"context_line":"                # to remove this code branch"},{"line_number":957,"context_line":"                inv_data \u003d compute_utils.compute_node_to_inventory_dict("},{"line_number":958,"context_line":"                    compute_node)"},{"line_number":959,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_8ee9d6ac","line":956,"range":{"start_line":954,"start_character":0,"end_line":956,"end_character":44},"in_reply_to":"3f79a3b5_ae0db233","updated":"2018-11-28 23:02:55.000000000","message":":) cool with me.","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"059fd06ec453df422943ecd543bb2993a98222d2","unresolved":false,"context_lines":[{"line_number":974,"context_line":"        # Flush any changes. If we processed ReshapeNeeded above, allocs is not"},{"line_number":975,"context_line":"        # None, and this will hit placement\u0027s POST /reshaper route."},{"line_number":976,"context_line":"        reportclient.update_from_provider_tree(context, prov_tree,"},{"line_number":977,"context_line":"                                               allocations\u003dallocs)"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d4,"},{"line_number":980,"context_line":"                    retry_on_exception\u003dlambda e: isinstance("}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_58683ff4","line":977,"updated":"2019-01-14 16:00:03.000000000","message":"✓ nice changes.","commit_id":"d2e13e6af091603228d858cc770b9089a91bd24a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"42a8504128f2556fc4f39e98d0f35b6cf44038b4","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        reportclient.update_from_provider_tree(context, prov_tree,"},{"line_number":970,"context_line":"                                               allocations\u003dallocs)"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d4,"},{"line_number":973,"context_line":"                    retry_on_exception\u003dlambda e: isinstance("},{"line_number":974,"context_line":"                        e, exception.ResourceProviderUpdateConflict))"},{"line_number":975,"context_line":"    def _update(self, context, compute_node, startup\u003dFalse):"},{"line_number":976,"context_line":"        \"\"\"Update partial stats locally and populate them to Scheduler.\"\"\""},{"line_number":977,"context_line":"        if self._resource_change(compute_node):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_809d3f67","line":974,"range":{"start_line":972,"start_character":0,"end_line":974,"end_character":69},"updated":"2019-01-31 04:22:08.000000000","message":"Why not just retry the _update_to_placement()? The others don\u0027t retrieve any fresher things from anywhere, do they?","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"db41ffae69ee61deeb213f90e39c81088702bbf4","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        reportclient.update_from_provider_tree(context, prov_tree,"},{"line_number":970,"context_line":"                                               allocations\u003dallocs)"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d4,"},{"line_number":973,"context_line":"                    retry_on_exception\u003dlambda e: isinstance("},{"line_number":974,"context_line":"                        e, exception.ResourceProviderUpdateConflict))"},{"line_number":975,"context_line":"    def _update(self, context, compute_node, startup\u003dFalse):"},{"line_number":976,"context_line":"        \"\"\"Update partial stats locally and populate them to Scheduler.\"\"\""},{"line_number":977,"context_line":"        if self._resource_change(compute_node):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_9d8119c6","line":974,"range":{"start_line":972,"start_character":0,"end_line":974,"end_character":69},"in_reply_to":"9fdfeff1_809d3f67","updated":"2019-01-31 15:02:12.000000000","message":"I think you\u0027re correct, Tetsuro. Let me throw up a patch that does that.","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"470e083a029102dededa66e3d6426ab00b92c2d8","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        reportclient.update_from_provider_tree(context, prov_tree,"},{"line_number":970,"context_line":"                                               allocations\u003dallocs)"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"    @retrying.retry(stop_max_attempt_number\u003d4,"},{"line_number":973,"context_line":"                    retry_on_exception\u003dlambda e: isinstance("},{"line_number":974,"context_line":"                        e, exception.ResourceProviderUpdateConflict))"},{"line_number":975,"context_line":"    def _update(self, context, compute_node, startup\u003dFalse):"},{"line_number":976,"context_line":"        \"\"\"Update partial stats locally and populate them to Scheduler.\"\"\""},{"line_number":977,"context_line":"        if self._resource_change(compute_node):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_5d7971c5","line":974,"range":{"start_line":972,"start_character":0,"end_line":974,"end_character":69},"in_reply_to":"9fdfeff1_9d8119c6","updated":"2019-01-31 15:09:06.000000000","message":"https://review.openstack.org/634252","commit_id":"570ad369928c296aac59a3e81ceb45a4ff2e19a7"}],"nova/compute/utils.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"354dfc5f09f9dc580a3cc4766e068438956cea51","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"            \u0027min_unit\u0027: 1,"},{"line_number":1222,"context_line":"            \u0027max_unit\u0027: compute_node.vcpus,"},{"line_number":1223,"context_line":"            \u0027step_size\u0027: 1,"},{"line_number":1224,"context_line":"            \u0027allocation_ratio\u0027: compute_node.cpu_allocation_ratio,"},{"line_number":1225,"context_line":"        }"},{"line_number":1226,"context_line":"    if compute_node.memory_mb \u003e 0:"},{"line_number":1227,"context_line":"        result[rc_fields.ResourceClass.MEMORY_MB] \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5fb99cc2","line":1224,"updated":"2018-11-06 11:46:18.000000000","message":"Is this use of *ratio still groovy with regard to recent changes, or are those changes still in flight?\n\n[later]\nAh, never mind, is a straight copy.","commit_id":"12f523dc024858155d432060d4f27dd4acada56a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18672d878228ab5ae7fc7796624f761e4e7f4a5b","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"    \"\"\""},{"line_number":1213,"context_line":"    result \u003d {}"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    # NOTE(jaypipes): Ironic virt driver will return 0 values for vcpus,"},{"line_number":1216,"context_line":"    # memory_mb and disk_gb if the Ironic node is not available/operable"},{"line_number":1217,"context_line":"    if compute_node.vcpus \u003e 0:"},{"line_number":1218,"context_line":"        result[rc_fields.ResourceClass.VCPU] \u003d {"},{"line_number":1219,"context_line":"            \u0027total\u0027: compute_node.vcpus,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_d34f75bc","line":1216,"range":{"start_line":1215,"start_character":0,"end_line":1216,"end_character":72},"updated":"2018-11-28 22:28:29.000000000","message":"this should now be incorrect. I believe Ironic should return total\u003dreserved when the node is unavailable...","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"763a0cd9bb9cb7dafe14acdff8144e81bd87ce71","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"    \"\"\""},{"line_number":1213,"context_line":"    result \u003d {}"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    # NOTE(jaypipes): Ironic virt driver will return 0 values for vcpus,"},{"line_number":1216,"context_line":"    # memory_mb and disk_gb if the Ironic node is not available/operable"},{"line_number":1217,"context_line":"    if compute_node.vcpus \u003e 0:"},{"line_number":1218,"context_line":"        result[rc_fields.ResourceClass.VCPU] \u003d {"},{"line_number":1219,"context_line":"            \u0027total\u0027: compute_node.vcpus,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_cef34e9f","line":1216,"range":{"start_line":1215,"start_character":0,"end_line":1216,"end_character":72},"in_reply_to":"3f79a3b5_4e22dea7","updated":"2018-11-28 23:02:55.000000000","message":"totes.","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6744d8df7f8704b3eb8832b0f2457e29c1f2f988","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"    \"\"\""},{"line_number":1213,"context_line":"    result \u003d {}"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    # NOTE(jaypipes): Ironic virt driver will return 0 values for vcpus,"},{"line_number":1216,"context_line":"    # memory_mb and disk_gb if the Ironic node is not available/operable"},{"line_number":1217,"context_line":"    if compute_node.vcpus \u003e 0:"},{"line_number":1218,"context_line":"        result[rc_fields.ResourceClass.VCPU] \u003d {"},{"line_number":1219,"context_line":"            \u0027total\u0027: compute_node.vcpus,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_4e22dea7","line":1216,"range":{"start_line":1215,"start_character":0,"end_line":1216,"end_character":72},"in_reply_to":"3f79a3b5_d34f75bc","updated":"2018-11-28 22:42:38.000000000","message":"Straight cut/paste. FUP?","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"059fd06ec453df422943ecd543bb2993a98222d2","unresolved":false,"context_lines":[{"line_number":1093,"context_line":"            parent_provider_uuid\u003dparent_provider_uuid)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"        # Auto-create custom resource classes coming from a virt driver"},{"line_number":1096,"context_line":"        self._ensure_resource_classes(context, set(inv_data))"},{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"        # NOTE(efried): Do not use the DELETE API introduced in microversion"},{"line_number":1099,"context_line":"        # 1.5, even if the new inventory is empty.  It provides no way of"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_28796afb","side":"PARENT","line":1096,"range":{"start_line":1096,"start_character":8,"end_line":1096,"end_character":61},"updated":"2019-01-14 16:00:03.000000000","message":"are we doing this anywhere now? this was one of those compromises we made with the Ironic team to ensure that custom resource classes for Ironic nodes were automatically created and would not cause failures in the resource tracker in nova-compute services that service Ironic baremetal resource nodes.","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a2691d12c903e3b326dfd7948a300f35dee40de","unresolved":false,"context_lines":[{"line_number":1093,"context_line":"            parent_provider_uuid\u003dparent_provider_uuid)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"        # Auto-create custom resource classes coming from a virt driver"},{"line_number":1096,"context_line":"        self._ensure_resource_classes(context, set(inv_data))"},{"line_number":1097,"context_line":""},{"line_number":1098,"context_line":"        # NOTE(efried): Do not use the DELETE API introduced in microversion"},{"line_number":1099,"context_line":"        # 1.5, even if the new inventory is empty.  It provides no way of"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_c1917b9b","side":"PARENT","line":1096,"range":{"start_line":1096,"start_character":8,"end_line":1096,"end_character":61},"in_reply_to":"bfdaf3ff_28796afb","updated":"2019-01-15 19:45:01.000000000","message":"\u003e are we doing this anywhere now?\n\nYES. The new set_inventory_for_provider (the artist formerly known as _set_inventory_for_provider) is doing it on La1170 (L927 as of PS17).","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0cf51d6e699a0107b3a036eebc196eda296ea285","unresolved":false,"context_lines":[{"line_number":924,"context_line":"            return"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"        # Ensure non-standard resource classes exist, creating them if needed."},{"line_number":927,"context_line":"        self._ensure_resource_classes(context, set(inv_data))"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":930,"context_line":"        inv_data \u003d inv_data or {}"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fdfeff1_12b72a89","line":927,"updated":"2019-01-18 19:00:47.000000000","message":"ack, ok, yeah, here...","commit_id":"d2e13e6af091603228d858cc770b9089a91bd24a"}],"nova/tests/functional/test_report_client.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"18672d878228ab5ae7fc7796624f761e4e7f4a5b","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"            # conflict exception."},{"line_number":1246,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"            # Allocation bumped the generation. Clear the cache so get_+_ensure"},{"line_number":1249,"context_line":"            # picks up the latest."},{"line_number":1250,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1251,"context_line":"            ptree \u003d self.client.get_provider_tree_and_ensure_root("},{"line_number":1252,"context_line":"                self.context, self.compute_uuid)"},{"line_number":1253,"context_line":"            inventories \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_13ae4d30","line":1250,"range":{"start_line":1248,"start_character":0,"end_line":1250,"end_character":46},"updated":"2018-11-28 22:28:29.000000000","message":"you just did this on line 1246... :)","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6744d8df7f8704b3eb8832b0f2457e29c1f2f988","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"            # conflict exception."},{"line_number":1246,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"            # Allocation bumped the generation. Clear the cache so get_+_ensure"},{"line_number":1249,"context_line":"            # picks up the latest."},{"line_number":1250,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1251,"context_line":"            ptree \u003d self.client.get_provider_tree_and_ensure_root("},{"line_number":1252,"context_line":"                self.context, self.compute_uuid)"},{"line_number":1253,"context_line":"            inventories \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_ce358edd","line":1250,"range":{"start_line":1248,"start_character":0,"end_line":1250,"end_character":46},"in_reply_to":"3f79a3b5_13ae4d30","updated":"2018-11-28 22:42:38.000000000","message":"Right you are. I\u0027m going to blame this on a bad merge during restack.","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a2691d12c903e3b326dfd7948a300f35dee40de","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"            # conflict exception."},{"line_number":1246,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"            # Allocation bumped the generation. Clear the cache so get_+_ensure"},{"line_number":1249,"context_line":"            # picks up the latest."},{"line_number":1250,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1251,"context_line":"            ptree \u003d self.client.get_provider_tree_and_ensure_root("},{"line_number":1252,"context_line":"                self.context, self.compute_uuid)"},{"line_number":1253,"context_line":"            inventories \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"bfdaf3ff_13bcf103","line":1250,"range":{"start_line":1248,"start_character":0,"end_line":1250,"end_character":46},"in_reply_to":"3f79a3b5_52fed807","updated":"2019-01-15 19:45:01.000000000","message":"Done","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d1e72cb901c77d30bb60962dc9757b63940374a0","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"            # conflict exception."},{"line_number":1246,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"            # Allocation bumped the generation. Clear the cache so get_+_ensure"},{"line_number":1249,"context_line":"            # picks up the latest."},{"line_number":1250,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1251,"context_line":"            ptree \u003d self.client.get_provider_tree_and_ensure_root("},{"line_number":1252,"context_line":"                self.context, self.compute_uuid)"},{"line_number":1253,"context_line":"            inventories \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_52fed807","line":1250,"range":{"start_line":1248,"start_character":0,"end_line":1250,"end_character":46},"in_reply_to":"3f79a3b5_ce358edd","updated":"2018-11-30 16:19:45.000000000","message":"forgot to fix this","commit_id":"27b7bad88b531e0869f8e9af9ab951b921c37634"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"059fd06ec453df422943ecd543bb2993a98222d2","unresolved":false,"context_lines":[{"line_number":298,"context_line":"            self.assertRaises(exception.InvalidResourceClass,"},{"line_number":299,"context_line":"                              self.client.set_inventory_for_provider,"},{"line_number":300,"context_line":"                              self.context, self.compute_uuid,"},{"line_number":301,"context_line":"                              self.compute_name, inv_data)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_736d2497","side":"PARENT","line":301,"updated":"2019-01-14 16:00:03.000000000","message":"any reason to remove this?","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a2691d12c903e3b326dfd7948a300f35dee40de","unresolved":false,"context_lines":[{"line_number":298,"context_line":"            self.assertRaises(exception.InvalidResourceClass,"},{"line_number":299,"context_line":"                              self.client.set_inventory_for_provider,"},{"line_number":300,"context_line":"                              self.context, self.compute_uuid,"},{"line_number":301,"context_line":"                              self.compute_name, inv_data)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_ef502b61","side":"PARENT","line":301,"in_reply_to":"bfdaf3ff_736d2497","updated":"2019-01-15 19:45:01.000000000","message":"Because set_inventory_for_provider now automatically creates the resource class, so this error condition can\u0027t happen.","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"059fd06ec453df422943ecd543bb2993a98222d2","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027, new\u003dmock.Mock())"},{"line_number":306,"context_line":"    def test_ensure_standard_resource_class(self):"},{"line_number":307,"context_line":"        \"\"\"Test case for bug #1746615: If placement is running a newer version"},{"line_number":308,"context_line":"        of code than compute, it may have new standard resource classes we"},{"line_number":309,"context_line":"        don\u0027t know about.  Make sure this scenario doesn\u0027t cause errors in"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_936a087e","side":"PARENT","line":306,"updated":"2019-01-14 16:00:03.000000000","message":"any reason to remove this test?","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"efe8f92a291ff3731d4578c8ebeb469f59890123","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027, new\u003dmock.Mock())"},{"line_number":306,"context_line":"    def test_ensure_standard_resource_class(self):"},{"line_number":307,"context_line":"        \"\"\"Test case for bug #1746615: If placement is running a newer version"},{"line_number":308,"context_line":"        of code than compute, it may have new standard resource classes we"},{"line_number":309,"context_line":"        don\u0027t know about.  Make sure this scenario doesn\u0027t cause errors in"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fdfeff1_e6467fc0","side":"PARENT","line":306,"in_reply_to":"9fdfeff1_26fc876e","updated":"2019-02-01 19:45:31.000000000","message":"Damnit, ignore that comment - wrong patch set.","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"05b16c5494c0b11d66868ad27267ca6d81fe2bc1","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027, new\u003dmock.Mock())"},{"line_number":306,"context_line":"    def test_ensure_standard_resource_class(self):"},{"line_number":307,"context_line":"        \"\"\"Test case for bug #1746615: If placement is running a newer version"},{"line_number":308,"context_line":"        of code than compute, it may have new standard resource classes we"},{"line_number":309,"context_line":"        don\u0027t know about.  Make sure this scenario doesn\u0027t cause errors in"}],"source_content_type":"text/x-python","patch_set":17,"id":"9fdfeff1_26fc876e","side":"PARENT","line":306,"in_reply_to":"bfdaf3ff_2f171354","updated":"2019-02-01 19:44:36.000000000","message":"No I meant *move* the tests but now I realize that you already did and I just didn\u0027t make the connection:\n\nhttps://review.openstack.org/#/c/615705/20/nova/tests/unit/compute/test_compute_utils.py","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a2691d12c903e3b326dfd7948a300f35dee40de","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027, new\u003dmock.Mock())"},{"line_number":306,"context_line":"    def test_ensure_standard_resource_class(self):"},{"line_number":307,"context_line":"        \"\"\"Test case for bug #1746615: If placement is running a newer version"},{"line_number":308,"context_line":"        of code than compute, it may have new standard resource classes we"},{"line_number":309,"context_line":"        don\u0027t know about.  Make sure this scenario doesn\u0027t cause errors in"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_2f171354","side":"PARENT","line":306,"in_reply_to":"bfdaf3ff_936a087e","updated":"2019-01-15 19:45:01.000000000","message":"Covered by the chunk starting at L613 below [1]. Confusing because the kept method was renamed to name of the old removed method.\n\n[1] https://review.openstack.org/#/c/615705/17/nova/tests/functional/test_report_client.py@a613","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86efc632aa64eb792abf67b30b346c040288458c","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027, new\u003dmock.Mock())"},{"line_number":306,"context_line":"    def test_ensure_standard_resource_class(self):"},{"line_number":307,"context_line":"        \"\"\"Test case for bug #1746615: If placement is running a newer version"},{"line_number":308,"context_line":"        of code than compute, it may have new standard resource classes we"},{"line_number":309,"context_line":"        don\u0027t know about.  Make sure this scenario doesn\u0027t cause errors in"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_26e9e7e4","side":"PARENT","line":306,"range":{"start_line":306,"start_character":8,"end_line":306,"end_character":43},"updated":"2019-02-01 19:33:28.000000000","message":"No need to keep this? Does something else test the fix for bug 1746615?","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce9eeb550a420c8185b9c4c590b81d755de13c61","unresolved":false,"context_lines":[{"line_number":303,"context_line":"    @mock.patch(\u0027nova.compute.utils.is_volume_backed_instance\u0027,"},{"line_number":304,"context_line":"                new\u003dmock.Mock(return_value\u003dFalse))"},{"line_number":305,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027, new\u003dmock.Mock())"},{"line_number":306,"context_line":"    def test_ensure_standard_resource_class(self):"},{"line_number":307,"context_line":"        \"\"\"Test case for bug #1746615: If placement is running a newer version"},{"line_number":308,"context_line":"        of code than compute, it may have new standard resource classes we"},{"line_number":309,"context_line":"        don\u0027t know about.  Make sure this scenario doesn\u0027t cause errors in"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_6697ef3b","side":"PARENT","line":306,"range":{"start_line":306,"start_character":8,"end_line":306,"end_character":43},"in_reply_to":"9fdfeff1_26e9e7e4","updated":"2019-02-01 19:40:40.000000000","message":"See discussion around same in PS17\n\nhttps://review.openstack.org/#/c/615705/17/nova/tests/functional/test_report_client.py@a306","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"86efc632aa64eb792abf67b30b346c040288458c","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"            self.assert_things_were_called(uuid)"},{"line_number":3001,"context_line":""},{"line_number":3002,"context_line":""},{"line_number":3003,"context_line":"class TestComputeNodeToInventoryDict(test.NoDBTestCase):"},{"line_number":3004,"context_line":"    def test_compute_node_inventory(self):"},{"line_number":3005,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":3006,"context_line":"        name \u003d \u0027computehost\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_c6c1fb55","side":"PARENT","line":3003,"range":{"start_line":3003,"start_character":6,"end_line":3003,"end_character":36},"updated":"2019-02-01 19:33:28.000000000","message":"Why don\u0027t these tests move to nova.tests.unit.compute.test_compute_utils?","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"efe8f92a291ff3731d4578c8ebeb469f59890123","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"            self.assert_things_were_called(uuid)"},{"line_number":3001,"context_line":""},{"line_number":3002,"context_line":""},{"line_number":3003,"context_line":"class TestComputeNodeToInventoryDict(test.NoDBTestCase):"},{"line_number":3004,"context_line":"    def test_compute_node_inventory(self):"},{"line_number":3005,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":3006,"context_line":"        name \u003d \u0027computehost\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_860f7386","side":"PARENT","line":3003,"range":{"start_line":3003,"start_character":6,"end_line":3003,"end_character":36},"in_reply_to":"9fdfeff1_06a623ac","updated":"2019-02-01 19:45:31.000000000","message":"No I meant *move* the tests but now I realize that you already did and I just didn\u0027t make the connection:\n\nhttps://review.openstack.org/#/c/615705/20/nova/tests/unit/compute/test_compute_utils.py","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ce9eeb550a420c8185b9c4c590b81d755de13c61","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"            self.assert_things_were_called(uuid)"},{"line_number":3001,"context_line":""},{"line_number":3002,"context_line":""},{"line_number":3003,"context_line":"class TestComputeNodeToInventoryDict(test.NoDBTestCase):"},{"line_number":3004,"context_line":"    def test_compute_node_inventory(self):"},{"line_number":3005,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":3006,"context_line":"        name \u003d \u0027computehost\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_06a623ac","side":"PARENT","line":3003,"range":{"start_line":3003,"start_character":6,"end_line":3003,"end_character":36},"in_reply_to":"9fdfeff1_c6c1fb55","updated":"2019-02-01 19:40:40.000000000","message":"Because they\u0027re not needed anymore, because the method they\u0027re testing (_compute_node_to_inventory_dict) is gone.\n\nhttps://review.openstack.org/#/c/615705/20/nova/scheduler/client/report.py@a131","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"662091e1792eb2b2e1e19d3b05df67bf08c42e6f","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        # otherwise."},{"line_number":198,"context_line":"        inv \u003d provider_tree.data(nodename).inventory"},{"line_number":199,"context_line":"        ratios \u003d self._get_allocation_ratios(inv)"},{"line_number":200,"context_line":"        # TODO(efried): Fix these to reflect something like reality"},{"line_number":201,"context_line":"        cpu_reserved \u003d CONF.reserved_host_cpus"},{"line_number":202,"context_line":"        mem_reserved \u003d CONF.reserved_host_memory_mb"},{"line_number":203,"context_line":"        disk_reserved \u003d self._get_reserved_host_disk_gb_from_config()"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_1d284d32","line":200,"updated":"2019-01-15 15:23:21.000000000","message":"I guess this is a note to self that needs to be committed at some point, so why not now?","commit_id":"d2e13e6af091603228d858cc770b9089a91bd24a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a2691d12c903e3b326dfd7948a300f35dee40de","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        # otherwise."},{"line_number":198,"context_line":"        inv \u003d provider_tree.data(nodename).inventory"},{"line_number":199,"context_line":"        ratios \u003d self._get_allocation_ratios(inv)"},{"line_number":200,"context_line":"        # TODO(efried): Fix these to reflect something like reality"},{"line_number":201,"context_line":"        cpu_reserved \u003d CONF.reserved_host_cpus"},{"line_number":202,"context_line":"        mem_reserved \u003d CONF.reserved_host_memory_mb"},{"line_number":203,"context_line":"        disk_reserved \u003d self._get_reserved_host_disk_gb_from_config()"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_819b73c7","line":200,"in_reply_to":"bfdaf3ff_1d284d32","updated":"2019-01-15 19:45:01.000000000","message":"Okay, so it\u0027s rebasing that made it look weird: This comment was removed via [1] with the \"initial allocation ratio\" work. It shouldn\u0027t have been, because we^wthe PowerVM guys still need to fix up at least the reserved values (if not also the default initial allocation ratios - not sure if/how that would happen in light of the new setup) to reflect something like reality. Arguably I/someone should put the comment back in a separate change set, but this happens to be the site of a merge conflict I was resolving when I noticed the spurious deletion.\n\n[1] https://github.com/openstack/nova/commit/08f3ae960623c94bdd997cacb3e81f04b4bbba69#diff-46d49d172cae6b899c1be3628dede5d1","commit_id":"d2e13e6af091603228d858cc770b9089a91bd24a"}]}
