)]}'
{"nova/conductor/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f15dcbc0da56765e19641536bb7094bafcd6bbb1","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_d4abf7d2","line":760,"updated":"2017-08-31 15:23:44.000000000","message":"Here we create a copy of the allocation that was tight to the source node resource provider. But we did not handle other providers here. If the instance allocates from another resource provider (e.g. one that provides a custom resource) but that provider is not linked to the destination host then I think we are creating inconsistent allocations here.","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"574043258f160da880330727918b0627493ead93","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_f207aec8","line":760,"in_reply_to":"7f287b81_4a402208","updated":"2017-09-06 11:43:49.000000000","message":"While we nova developers intended to use the custom resource classes only for the ironic use case in Pike the placement API and the nova flavor extra_spec does not prevent the deployer to dream up something like a bandwidth custom resource on the compute and implement that by creating one extra resource provider per compute node providing the CUSTOM_BANDWIDTH resource. That deployer will eventually find that he needs to put the compute resource provider and the CUSTOM_BANDWIDTH provider into the same placement aggregate to be able to schedule instances requesting CUSTOM_BANDWIDTH in the flavor. \n\nAt this point he will actually use the shared resource provider feature as the custom resource provider shares the CUSTOM_BANDWIDTH resource with the compute resource provider. That is not supported in Pike. So I think we should let the deployer know early enough to not to try dream about this in Pike.\n\nIn Queens (if we want to support the above case) we have to  take care about more than the allocation from a single resource provider in this allocation copy code.","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"69463d5b5211710b68ea52680760a3cf90bc4569","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_91aae1cf","line":760,"in_reply_to":"7f287b81_582039f8","updated":"2017-09-04 11:55:21.000000000","message":"@Chris: thanks for explaining the ironic solution. You confirmed my fear that not supporting shared resource providers also means that we are not supporting generic custom resources either in Pike. \n\nIs there a good way to signal this to the users? I mean the bp custom-resource-classes-pike is set to Implemented and the Pike release notes only talks about shared storage providers.\n\nI proposed a reno update[1] on stable/pike to cover this but I\u0027m not sure if that is the proper way to do this.\n\n[1]https://review.openstack.org/500521","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5b510a3235086bfd9d2e5b1a1bed8ff59d0c657","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_4a402208","line":760,"in_reply_to":"7f287b81_91aae1cf","updated":"2017-09-05 16:21:30.000000000","message":"The custom resource classes stuff in Pike was specifically for Ironic scheduling so we schedule on the custom resource class rather than the primitives in the flavor for vcpus/ram/disk.\n\nI\u0027m at a bit of a loss to connect the concerns with custom resource classes on the source compute node not being copied to the destination node. Are you thinking of a case where someone/something external to nova is updating the inventory/allocations for the compute node resource provider to add their own custom resource class? That would be invalid as Nova would overwrite it since we aren\u0027t aware of it.\n\nAs Chris noted, what you\u0027d have to do is have some other resource provider in a shared provider aggregate with the compute node, but what is that other provider providing that Nova knows about for the instance to create allocations against it? We know about DISK_GB being shared and are building in support for that for our flavors, but what other things generically would we be supporting? Maybe this is extended to flavor extra specs....and how that works with Ironic, so someone could do similar with whatever they wanted? It starts to hurt my head at some point here how far down the rabbit hole we go with what resources the instances can consume and from where, and how those resources are defined (in the flavor, via the driver / resource tracker, externally via the placement API, etc).","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ad302829a4e7fea3ffa7b6867828076c58b09896","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_f4e833e2","line":760,"in_reply_to":"7f287b81_d4abf7d2","updated":"2017-08-31 15:28:38.000000000","message":"This is the same as we did for live migration:\n\nhttps://review.openstack.org/#/c/496031/\n\nThis is just a tactical backportable fix for pike. Long-term, as the TODO elsewhere in here says, we need to still call the scheduler even if forcing the host so we don\u0027t need this code. That requires an RPC version change to the scheduler manager though, and we can\u0027t backport that.\n\nSo yes this isn\u0027t going to handle shared storage but we don\u0027t claim support for that yet in Pike (or Queens for that matter). What other custom resource providers would we have set at this point?\n\nBasically, I think we know this is limited capability and to support the more complex scenarios that\u0027s going to require more thought and work.","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a1b5987d49a18e8aa1aa9ce98eda2991952d57a3","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_582039f8","line":760,"in_reply_to":"7f287b81_dcb30f4d","updated":"2017-09-01 21:17:07.000000000","message":"the ironic custom resource classes and the handling thereof are built into the ironic driver and the flavors used by ironic.\n\nIn that sense they aren\u0027t really \"custom\" at all.\n\nSome thoughts:\n\nAt some point in the future it will be possible to associate a custom resource class with the resource provider that is a compute node, directly.\n\nBut in the mean time if you need a custom resource class on a compute node, it is effectively a shared provider because it has to be aggregated with the compute node.\n\nDoes that ^ align with your brain gibi?","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b09fe5c9a0885272cdd9abe9e35537cc473b6431","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        source_node_allocations \u003d reportclient.get_allocations_for_instance("},{"line_number":758,"context_line":"            source_node.uuid, instance)"},{"line_number":759,"context_line":"        if source_node_allocations:"},{"line_number":760,"context_line":"            # Generate an allocation request for the destination node."},{"line_number":761,"context_line":"            alloc_request \u003d {"},{"line_number":762,"context_line":"                \u0027allocations\u0027: ["},{"line_number":763,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_dcb30f4d","line":760,"in_reply_to":"7f287b81_f4e833e2","updated":"2017-09-01 07:29:05.000000000","message":"In my head I separated shared resource providers like shared disk where one shared disk provider is connected to multiple compute resource providers from the case when we have custom resource on every compute host and therefore we have separate custom resource provider per compute host. But I see now that this second case can be considered as a shared case because the custom resource provider is shared with compute resource provider. So I guess we have to state that in Pike we don\u0027t support the generic usage of custom resources either because the only way to have generic support for it is through shared resource providers and that is not supported in Pike. However I don\u0027t know how this affects the ironic custom resource class case. As that is somewhat special as there compute resource are not consumed at all.","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"78b48ecb116132236599f63838504f7f2b3b437e","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                           \u0027alloc_request\u0027: alloc_request},"},{"line_number":783,"context_line":"                          instance\u003dinstance)"},{"line_number":784,"context_line":"            else:"},{"line_number":785,"context_line":"                # We have to fail even though the user requested that we force"},{"line_number":786,"context_line":"                # the host. This is because we need Placement to have an"},{"line_number":787,"context_line":"                # accurate reflection of what\u0027s allocated on all nodes so the"},{"line_number":788,"context_line":"                # scheduler can make accurate decisions about which nodes have"},{"line_number":789,"context_line":"                # capacity for building an instance. We also cannot rely on the"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_93162955","line":786,"range":{"start_line":785,"start_character":18,"end_line":786,"end_character":27},"updated":"2017-09-06 15:23:07.000000000","message":"This is worthy of a release note. I\u0027m working on one for bug 1712008 and will need one for this change too.","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06de1a25167c066fa2042ab2d8d4ba0303777bc6","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            instance.save()"},{"line_number":737,"context_line":"            return"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"    # TODO(mriedem): Move this into a common utility method since the"},{"line_number":740,"context_line":"    # LiveMigrationTask is doing the same thing."},{"line_number":741,"context_line":"    def _claim_resources_on_destination("},{"line_number":742,"context_line":"            self, instance, source_node, dest_node):"},{"line_number":743,"context_line":"        \"\"\"Copies allocations from source node to dest node in Placement"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_6e18ef83","line":740,"range":{"start_line":739,"start_character":4,"end_line":740,"end_character":48},"updated":"2017-08-31 16:24:01.000000000","message":"I\u0027m making this change right now to split up this patch some more.","commit_id":"c9f8ce7e83bf96f26f8fbe1d9556ab1ba449eb04"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bed078f97c003c89fe5dfc50d2b7c0aaf1c3a7fd","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        # bypass the scheduler filters, which honors the \u0027force\u0027 flag"},{"line_number":779,"context_line":"        # in the API."},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            scheduler_utils.claim_resources_on_destination("},{"line_number":782,"context_line":"                self.scheduler_client.reportclient, instance,"},{"line_number":783,"context_line":"                source_node, dest_node)"},{"line_number":784,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":785,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":786,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"},{"line_number":787,"context_line":"                # tucked away in _set_vm_state_and_notify."}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_6e12b25a","line":784,"range":{"start_line":781,"start_character":12,"end_line":784,"end_character":43},"updated":"2017-09-06 15:24:28.000000000","message":"We should have a release note explaining that forced host during evacuate will still bypass the scheduler but can fail the allocation to Placement, resulting in the evacuate failing. I\u0027m doing a similar release note for bug 1712008 and will need one here too.","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7e8fac7f8e3307db83a4a382a08fde9ef3ff1d10","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        # bypass the scheduler filters, which honors the \u0027force\u0027 flag"},{"line_number":779,"context_line":"        # in the API."},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            scheduler_utils.claim_resources_on_destination("},{"line_number":782,"context_line":"                self.scheduler_client.reportclient, instance,"},{"line_number":783,"context_line":"                source_node, dest_node)"},{"line_number":784,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":785,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":786,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"},{"line_number":787,"context_line":"                # tucked away in _set_vm_state_and_notify."}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_2e026ab5","line":784,"range":{"start_line":781,"start_character":12,"end_line":784,"end_character":43},"in_reply_to":"7f287b81_6e12b25a","updated":"2017-09-06 15:32:26.000000000","message":"https://review.openstack.org/#/c/501314/","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"98c1880310a2b1faca137726e266d018af489514","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                self.scheduler_client.reportclient, instance,"},{"line_number":783,"context_line":"                source_node, dest_node)"},{"line_number":784,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":785,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":786,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"},{"line_number":787,"context_line":"                # tucked away in _set_vm_state_and_notify."},{"line_number":788,"context_line":"                if request_spec:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_18ef5188","line":785,"updated":"2017-09-01 21:31:40.000000000","message":"It would be nice if you could refactor these two very similar contexts to a method. Not a blocker or anything, but their length (even without the similarity) distracts from the actual action that\u0027s happening here. And their similarity suggests they can be one instead of two methods.","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34a083372ad079768743f9ce728f97afc35f9139","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                self.scheduler_client.reportclient, instance,"},{"line_number":783,"context_line":"                source_node, dest_node)"},{"line_number":784,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":785,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":786,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"},{"line_number":787,"context_line":"                # tucked away in _set_vm_state_and_notify."},{"line_number":788,"context_line":"                if request_spec:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_72f8a97b","line":785,"in_reply_to":"7f287b81_18ef5188","updated":"2017-09-02 22:17:33.000000000","message":"I\u0027ve got a change later in the series which handles the TODO and removes most of the duplicate cruft here.","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"98c1880310a2b1faca137726e266d018af489514","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                # specified a host but are not forcing it. The API passes"},{"line_number":829,"context_line":"                # host\u003dNone in this case but sets up the"},{"line_number":830,"context_line":"                # RequestSpec.requested_destination field for the specified"},{"line_number":831,"context_line":"                # host."},{"line_number":832,"context_line":"                if not request_spec:"},{"line_number":833,"context_line":"                    # NOTE(sbauza): We were unable to find an original"},{"line_number":834,"context_line":"                    # RequestSpec object - probably because the instance is old"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_78689520","line":831,"updated":"2017-09-01 21:31:40.000000000","message":"I know there are reasons for all that, but duh am","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34a083372ad079768743f9ce728f97afc35f9139","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                # specified a host but are not forcing it. The API passes"},{"line_number":829,"context_line":"                # host\u003dNone in this case but sets up the"},{"line_number":830,"context_line":"                # RequestSpec.requested_destination field for the specified"},{"line_number":831,"context_line":"                # host."},{"line_number":832,"context_line":"                if not request_spec:"},{"line_number":833,"context_line":"                    # NOTE(sbauza): We were unable to find an original"},{"line_number":834,"context_line":"                    # RequestSpec object - probably because the instance is old"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_12ef25b1","line":831,"in_reply_to":"7f287b81_78689520","updated":"2017-09-02 22:17:33.000000000","message":"Not sure which thing you\u0027re talking about, or just in general the amount of conditional logic involved in this single rebuild_instance method and how overloaded it is with all of the different parameters passed either directly to it or indirectly via the RequestSpec, but yeah it\u0027s confusing. It\u0027s also similar to why I was -1 on Takashi\u0027s \u0027pass host and force migrate\u0027 to cold migrate stuff in Pike, because it was following the same confusing pattern and I\u0027d like to stop doing that so we can be more clear about what the API is asking conductor to do so one doesn\u0027t need to have the entire flow in their head to understand what\u0027s going on here.","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9efcd6e08886fe563573df64a0f77e5d25ba111f","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            instance.save()"},{"line_number":737,"context_line":"            return"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"    def _allocate_for_evacuate_dest_host(self, context, instance, host,"},{"line_number":740,"context_line":"                                         request_spec\u003dNone):"},{"line_number":741,"context_line":"        # The user is forcing the destination host and bypassing the"},{"line_number":742,"context_line":"        # scheduler. We need to copy the source compute node"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_a1d892ee","line":739,"updated":"2017-09-07 09:40:29.000000000","message":"Why aren\u0027t you not using the same helper method that you provided for forced live-migrations ?\n\nhttps://github.com/openstack/nova/blob/685c16041c7e84fb0861b9b1833fc6c3cc372d05/nova/conductor/tasks/live_migrate.py#L74\n\nWe already have a long list of places where we claim and I\u0027d honestly love to see at least the same path for all the forced calls.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f406edca6f89b01dbacae45c9ec19c89d1e54c","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            instance.save()"},{"line_number":737,"context_line":"            return"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"    def _allocate_for_evacuate_dest_host(self, context, instance, host,"},{"line_number":740,"context_line":"                                         request_spec\u003dNone):"},{"line_number":741,"context_line":"        # The user is forcing the destination host and bypassing the"},{"line_number":742,"context_line":"        # scheduler. We need to copy the source compute node"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_d8c6ec9a","line":739,"in_reply_to":"7f287b81_a1d892ee","updated":"2017-09-07 13:56:19.000000000","message":"That\u0027s scheduler_utils.claim_resources_on_destination which I already refactored before this change in the series. This code is different and more specific to evacuate.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9efcd6e08886fe563573df64a0f77e5d25ba111f","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                context, instance.host, instance.node)"},{"line_number":751,"context_line":"            dest_node \u003d ("},{"line_number":752,"context_line":"                objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":753,"context_line":"                    context, host, use_slave\u003dTrue))"},{"line_number":754,"context_line":"        except exception.ComputeHostNotFound as ex:"},{"line_number":755,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":756,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_41968ef2","line":753,"updated":"2017-09-07 09:40:29.000000000","message":"just a comment explaining that since Ironic doesn\u0027t support evacuate, we don\u0027t care getting the exact node since all the other drivers only have one.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f406edca6f89b01dbacae45c9ec19c89d1e54c","unresolved":false,"context_lines":[{"line_number":750,"context_line":"                context, instance.host, instance.node)"},{"line_number":751,"context_line":"            dest_node \u003d ("},{"line_number":752,"context_line":"                objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":753,"context_line":"                    context, host, use_slave\u003dTrue))"},{"line_number":754,"context_line":"        except exception.ComputeHostNotFound as ex:"},{"line_number":755,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":756,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_5838bc9e","line":753,"in_reply_to":"7f287b81_41968ef2","updated":"2017-09-07 13:56:19.000000000","message":"Do you want me to add that comment? It\u0027s all over the code already, including the API before you get here, so I wasn\u0027t planning on adding it again here.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9efcd6e08886fe563573df64a0f77e5d25ba111f","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            scheduler_utils.claim_resources_on_destination("},{"line_number":782,"context_line":"                self.scheduler_client.reportclient, instance,"},{"line_number":783,"context_line":"                source_node, dest_node)"},{"line_number":784,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":785,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":786,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_6153ca3a","line":783,"updated":"2017-09-07 09:40:29.000000000","message":"Just to make it clear, by merging that it means that as an operator you can no longer force a destination unless the Placement API accepts it.\n\nI know you state that in the release note, but I want to make sure all people reviewing the change accept that very clearly (ie. without requiring a microversion, as we think Nova shouldn\u0027t support targeting a node that is not having supported resources).","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f406edca6f89b01dbacae45c9ec19c89d1e54c","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            scheduler_utils.claim_resources_on_destination("},{"line_number":782,"context_line":"                self.scheduler_client.reportclient, instance,"},{"line_number":783,"context_line":"                source_node, dest_node)"},{"line_number":784,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":785,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":786,"context_line":"                # TODO(mriedem): This ugly RequestSpec handling should be"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_f85be8f2","line":783,"in_reply_to":"7f287b81_6153ca3a","updated":"2017-09-07 13:56:19.000000000","message":"We already merged the same thing for forced live migration. People are going to have to deal with the fact that Placement has to be accurate, which means you can\u0027t bypass it for resource tracking, especially since the RT is no longer healing allocations automatically.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2144aa53c2c6625068248033723db7298cedf058","unresolved":false,"context_lines":[{"line_number":1705,"context_line":"        self.assertFlavorMatchesAllocation(self.flavor1, source_allocation)"},{"line_number":1706,"context_line":"        dest_allocation \u003d allocations[dest_rp_uuid][\u0027resources\u0027]"},{"line_number":1707,"context_line":"        self.assertFlavorMatchesAllocation(self.flavor1, dest_allocation)"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        # start up the source compute"},{"line_number":1710,"context_line":"        self.compute1.start()"},{"line_number":1711,"context_line":"        self.admin_api.put_service("},{"line_number":1712,"context_line":"            source_compute_id, {\u0027forced_down\u0027: \u0027false\u0027})"},{"line_number":1713,"context_line":""},{"line_number":1714,"context_line":"        # When the source node starts up, the instance has moved so the"},{"line_number":1715,"context_line":"        # ResourceTracker should cleanup allocations for the source node."}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_43dbcf4d","line":1712,"range":{"start_line":1708,"start_character":0,"end_line":1712,"end_character":56},"updated":"2017-08-31 14:01:38.000000000","message":"Related to bug 1714072, removing the source node allocation fails here if we don\u0027t have the dest node allocation at the same time, that\u0027s why I couldn\u0027t do the functional recreate test in a separate patch. I could still separate them, but it makes this less of a useful test on it\u0027s own since it would be asserting the *wrong* things for two different reasons.","commit_id":"6402c8b080ec18bd4930f1778678f0d8835053e6"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"98c1880310a2b1faca137726e266d018af489514","unresolved":false,"context_lines":[{"line_number":2534,"context_line":"                              side_effect\u003dexc.NoValidHost(reason\u003d\u0027I am full\u0027))"},{"line_number":2535,"context_line":"        ) as ("},{"line_number":2536,"context_line":"            notify, claim"},{"line_number":2537,"context_line":"        ):"},{"line_number":2538,"context_line":"            ex \u003d self.assertRaises("},{"line_number":2539,"context_line":"                exc.NoValidHost,"},{"line_number":2540,"context_line":"                self.conductor._allocate_for_evacuate_dest_host,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_987581cf","line":2537,"updated":"2017-09-01 21:31:40.000000000","message":"as (notify, claim): \n\n?","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34a083372ad079768743f9ce728f97afc35f9139","unresolved":false,"context_lines":[{"line_number":2534,"context_line":"                              side_effect\u003dexc.NoValidHost(reason\u003d\u0027I am full\u0027))"},{"line_number":2535,"context_line":"        ) as ("},{"line_number":2536,"context_line":"            notify, claim"},{"line_number":2537,"context_line":"        ):"},{"line_number":2538,"context_line":"            ex \u003d self.assertRaises("},{"line_number":2539,"context_line":"                exc.NoValidHost,"},{"line_number":2540,"context_line":"                self.conductor._allocate_for_evacuate_dest_host,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_723d492b","line":2537,"in_reply_to":"7f287b81_987581cf","updated":"2017-09-02 22:17:33.000000000","message":"This is pretty standard pattern when we do mocks with a nested context.","commit_id":"1d736c26f8e36d0bf01b9cbf420f6063c710a305"}],"releasenotes/notes/bug-1713786-0ee9e543683dafa4.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9efcd6e08886fe563573df64a0f77e5d25ba111f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``nova-conductor`` service now needs access to the Placement service"},{"line_number":5,"context_line":"    in the case of forcing a destination host during an evacuation. Ensure"},{"line_number":6,"context_line":"    the ``[placement]`` section of nova.conf for the ``nova-conductor`` service"},{"line_number":7,"context_line":"    is filled in."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f287b81_d3713578","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":44},"updated":"2017-09-07 09:40:29.000000000","message":"that\u0027s not true, we already merged https://review.openstack.org/#/c/496031/ that makes Placement required for conductor.\nI\u0027d be just split that change by providing a separate reno for telling that conductor is needing Placement, and at the same time, add the check in the conductor manager initialization like I said below.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ce9a0e02a3d329bb57af465d8771ddce41177d16","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``nova-conductor`` service now needs access to the Placement service"},{"line_number":5,"context_line":"    in the case of forcing a destination host during an evacuation. Ensure"},{"line_number":6,"context_line":"    the ``[placement]`` section of nova.conf for the ``nova-conductor`` service"},{"line_number":7,"context_line":"    is filled in."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f287b81_0553e86c","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":44},"in_reply_to":"7f287b81_78fc98b4","updated":"2017-09-07 15:08:40.000000000","message":"sure, just do that and I\u0027ll +2 that change.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f406edca6f89b01dbacae45c9ec19c89d1e54c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``nova-conductor`` service now needs access to the Placement service"},{"line_number":5,"context_line":"    in the case of forcing a destination host during an evacuation. Ensure"},{"line_number":6,"context_line":"    the ``[placement]`` section of nova.conf for the ``nova-conductor`` service"},{"line_number":7,"context_line":"    is filled in."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f287b81_78fc98b4","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":44},"in_reply_to":"7f287b81_d3713578","updated":"2017-09-07 13:56:19.000000000","message":"Then I\u0027ll just remove this upgrade section altogether from this note.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9efcd6e08886fe563573df64a0f77e5d25ba111f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The ``nova-conductor`` service now needs access to the Placement service"},{"line_number":5,"context_line":"    in the case of forcing a destination host during an evacuation. Ensure"},{"line_number":6,"context_line":"    the ``[placement]`` section of nova.conf for the ``nova-conductor`` service"},{"line_number":7,"context_line":"    is filled in."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    When forcing a specified destination host during evacuate, the"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f287b81_93b96d16","line":7,"updated":"2017-09-07 09:40:29.000000000","message":"I do wonder if we should do like the compute service \nhttps://github.com/openstack/nova/blob/5bcfaf3e8aeafd0de4bc7579fea65e11d23e880b/nova/compute/manager.py#L1112-L1116","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f406edca6f89b01dbacae45c9ec19c89d1e54c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The ``nova-conductor`` service now needs access to the Placement service"},{"line_number":5,"context_line":"    in the case of forcing a destination host during an evacuation. Ensure"},{"line_number":6,"context_line":"    the ``[placement]`` section of nova.conf for the ``nova-conductor`` service"},{"line_number":7,"context_line":"    is filled in."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    When forcing a specified destination host during evacuate, the"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f287b81_d8226c52","line":7,"in_reply_to":"7f287b81_93b96d16","updated":"2017-09-07 13:56:19.000000000","message":"Placement is only used by conductor if you\u0027re forcing a live migration or an evacuate. Meaning it\u0027s not required, so I\u0027d rather not bend over to add a check like that for a patch that\u0027s going to be backported to stable/pike, especially since in Queens I\u0027d like to remove all of this workaround code for allocations in conductor and move that back to the scheduler but pass a skip_filters flag to select_destinations(), like the TODO in the code says.","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ce9a0e02a3d329bb57af465d8771ddce41177d16","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    The ``nova-conductor`` service now needs access to the Placement service"},{"line_number":5,"context_line":"    in the case of forcing a destination host during an evacuation. Ensure"},{"line_number":6,"context_line":"    the ``[placement]`` section of nova.conf for the ``nova-conductor`` service"},{"line_number":7,"context_line":"    is filled in."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    When forcing a specified destination host during evacuate, the"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f287b81_859a3811","line":7,"in_reply_to":"7f287b81_d8226c52","updated":"2017-09-07 15:08:40.000000000","message":"Well, okay. FWIW, we already have something like skip_filters if you have a force_hosts field set in the RequestSpec so maybe adding that to the RPC API is not needed. Anyway, separate discussion","commit_id":"6edbc5cf37c4fc13c5a6165d19e10967b8e43e0e"}]}
