)]}'
{"nova/virt/driver.py":[{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"f76b007356d2898593b94ebc21f83c42fb266d73","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    requires_allocation_refresh \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Because the input to update_provider_tree is expensive to build, drivers"},{"line_number":138,"context_line":"    # should set this to True if they override that method."},{"line_number":139,"context_line":"    supports_provider_tree \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, virtapi):"},{"line_number":142,"context_line":"        self.virtapi \u003d virtapi"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_2d01cb06","line":139,"range":{"start_line":137,"start_character":0,"end_line":139,"end_character":34},"updated":"2017-11-29 01:15:20.000000000","message":"Just one question, why not put \"support_provider_tree\" to the capabilities dict, Line:124","commit_id":"aed199ce0e5d796459376b3bf45680cea94de0fd"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ba012e7e05a7871ddf6f63bd5becec76f05a668a","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    requires_allocation_refresh \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Because the input to update_provider_tree is expensive to build, drivers"},{"line_number":138,"context_line":"    # should set this to True if they override that method."},{"line_number":139,"context_line":"    supports_provider_tree \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, virtapi):"},{"line_number":142,"context_line":"        self.virtapi \u003d virtapi"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_e6521ade","line":139,"range":{"start_line":137,"start_character":0,"end_line":139,"end_character":34},"in_reply_to":"ff82abbf_2d01cb06","updated":"2017-11-29 08:40:08.000000000","message":"Does this mean this param will be used the same way as requires_allocation_refresh https://github.com/openstack/nova/blob/f0643869e3331436bff55ffbec19d118cec4ca9e/nova/compute/resource_tracker.py#L1148?","commit_id":"aed199ce0e5d796459376b3bf45680cea94de0fd"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"24a0263926fd627f4aca3e3fe95e53cd1958a88a","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    requires_allocation_refresh \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Because the input to update_provider_tree is expensive to build, drivers"},{"line_number":138,"context_line":"    # should set this to True if they override that method."},{"line_number":139,"context_line":"    supports_provider_tree \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, virtapi):"},{"line_number":142,"context_line":"        self.virtapi \u003d virtapi"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_7058f92f","line":139,"range":{"start_line":137,"start_character":0,"end_line":139,"end_character":34},"in_reply_to":"ff82abbf_cdc36e37","updated":"2017-11-29 14:37:06.000000000","message":"Got it, thanks a lot for your explanation, it\u0027s clear for me :)","commit_id":"aed199ce0e5d796459376b3bf45680cea94de0fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a9d7e108842ac9016695034cc351d60eec7550ba","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    requires_allocation_refresh \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # Because the input to update_provider_tree is expensive to build, drivers"},{"line_number":138,"context_line":"    # should set this to True if they override that method."},{"line_number":139,"context_line":"    supports_provider_tree \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, virtapi):"},{"line_number":142,"context_line":"        self.virtapi \u003d virtapi"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff82abbf_cdc36e37","line":139,"range":{"start_line":137,"start_character":0,"end_line":139,"end_character":34},"in_reply_to":"ff82abbf_e6521ade","updated":"2017-11-29 14:18:44.000000000","message":"\u003e Just one question, why not put \"support_provider_tree\" to the\n \u003e capabilities dict, Line:124\n \u003e Does this mean this param will be used the same way as\n \u003e requires_allocation_refresh https://github.com/openstack/nova/blob/f0643869e3331436bff55ffbec19d118cec4ca9e/nova/compute/resource_tracker.py#L1148?\n\nYeah, that was the idea.  It\u0027s more of an internal thing than a \"capability\" per se.\n\nBut Jay and I have been discussing the design a bit more, and it looks like it may not end up being as expensive as we originally thought to build the provider tree that feeds into update_provider_tree - so we may not end up needing this hack after all.","commit_id":"aed199ce0e5d796459376b3bf45680cea94de0fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a16959ad046f5c7191ecfef30d99c1a336dc8790","unresolved":false,"context_lines":[{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        When this method returns, provider_tree should represent the correct"},{"line_number":816,"context_line":"        hierarchy of nested resource providers, as well as the inventory of"},{"line_number":817,"context_line":"        those resource providers."},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        This method supersedes get_inventory(): if this method is implemented,"},{"line_number":820,"context_line":"        get_inventory() is not used."}],"source_content_type":"text/x-python","patch_set":23,"id":"7f96bb07_88aaa6cf","line":817,"updated":"2018-01-15 23:12:35.000000000","message":"We should state the limitation that you can\u0027t rename a provider.  (Which you would have to do by deleting that provider from provider_tree and re-adding it - there\u0027s currently no other way to do it (without talking directly to placement, of course).)","commit_id":"668528567e20e54d06834bb55098c1ebe5521ee0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"40896f039487c8e6bdb5f76a5e0e2a1881373fd6","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        \"\"\""},{"line_number":802,"context_line":"        raise NotImplementedError()"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def update_provider_tree(self, provider_tree, nodename):"},{"line_number":805,"context_line":"        \"\"\"Update a ProviderTree object with current resource provider and"},{"line_number":806,"context_line":"        inventory information."},{"line_number":807,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7f96bb07_b9866f65","line":804,"range":{"start_line":804,"start_character":48,"end_line":804,"end_character":58},"updated":"2018-01-18 13:48:48.000000000","message":"This parameter isn\u0027t needed, as the nodename can be retrieved by just grabbing the provider_tree\u0027s single root node name.","commit_id":"e347b09ecc4ad1b5a71edb8a458e7acc30af4422"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8ac3737b9e4f4bbb5b17e4f7c6ee3333b0589b64","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        \"\"\""},{"line_number":802,"context_line":"        raise NotImplementedError()"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def update_provider_tree(self, provider_tree, nodename):"},{"line_number":805,"context_line":"        \"\"\"Update a ProviderTree object with current resource provider and"},{"line_number":806,"context_line":"        inventory information."},{"line_number":807,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7f96bb07_044e16c0","line":804,"range":{"start_line":804,"start_character":48,"end_line":804,"end_character":58},"in_reply_to":"7f96bb07_b9866f65","updated":"2018-01-18 14:24:04.000000000","message":"changed my mind. provider_tree should be a full deep-copy of the reportclient\u0027s _provider_tree object and therefore the nodename parameter will be necessary at least for the foreseeable future where the primary loop over known compute nodes exists in the resource tracker.","commit_id":"e347b09ecc4ad1b5a71edb8a458e7acc30af4422"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"40896f039487c8e6bdb5f76a5e0e2a1881373fd6","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        get_inventory() is not used."},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        :note: Renaming a provider (by deleting it from provider_tree and"},{"line_number":817,"context_line":"        re-adding it with a different name) is not supported at this time."},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        :param nova.compute.provider_tree.ProviderTree provider_tree:"},{"line_number":820,"context_line":"            A ProviderTree object representing all the providers associated"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f96bb07_1916834a","line":817,"updated":"2018-01-18 13:48:48.000000000","message":"I would add a further note that the provider_tree parameter is fully owned by the virt driver and can be modified as-needed without needing to protect the provider_tree from other modifying threads.","commit_id":"e347b09ecc4ad1b5a71edb8a458e7acc30af4422"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8e75d55fe1e0a2bf526fedbc1761085b1623372d","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        get_inventory() is not used."},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        :note: Renaming a provider (by deleting it from provider_tree and"},{"line_number":817,"context_line":"        re-adding it with a different name) is not supported at this time."},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        :param nova.compute.provider_tree.ProviderTree provider_tree:"},{"line_number":820,"context_line":"            A ProviderTree object representing all the providers associated"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f96bb07_db748800","line":817,"in_reply_to":"7f96bb07_1916834a","updated":"2018-01-18 18:08:05.000000000","message":"Done","commit_id":"e347b09ecc4ad1b5a71edb8a458e7acc30af4422"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c7f6f9d005de1fadabcbe30754f908fca6bf1ea6","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            an advisory capacity to restrict changes to only the providers"},{"line_number":829,"context_line":"            associated with that one node, but this is not a requirement: the"},{"line_number":830,"context_line":"            caller always subsumes all changes regardless."},{"line_number":831,"context_line":"        :return: True if the provider_tree was changed; False otherwise."},{"line_number":832,"context_line":"        \"\"\""},{"line_number":833,"context_line":"        raise NotImplementedError()"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f93b717_94e3f105","line":831,"range":{"start_line":831,"start_character":8,"end_line":831,"end_character":72},"updated":"2018-01-25 20:44:02.000000000","message":"Consider getting rid of this semantic.  It\u0027s really inexpensive for us to figure out on our own, and it creates unnecessary complexity in the interface.","commit_id":"a75d4dd4a20cffa44b802c37770021781022ddb5"},{"author":{"_account_id":9172,"name":"Radoslav Gerganov","email":"rgerganov@vmware.com","username":"rgerganov"},"change_message_id":"530315e8e58699dec26fab7c6002978c2267c513","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            an advisory capacity to restrict changes to only the providers"},{"line_number":829,"context_line":"            associated with that one node, but this is not a requirement: the"},{"line_number":830,"context_line":"            caller always subsumes all changes regardless."},{"line_number":831,"context_line":"        :return: True if the provider_tree was changed; False otherwise."},{"line_number":832,"context_line":"        \"\"\""},{"line_number":833,"context_line":"        raise NotImplementedError()"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f93b717_f13a79e5","line":831,"range":{"start_line":831,"start_character":8,"end_line":831,"end_character":72},"in_reply_to":"5f93b717_94e3f105","updated":"2018-01-26 07:44:06.000000000","message":"+1","commit_id":"a75d4dd4a20cffa44b802c37770021781022ddb5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9f1fbd8b97f38de8eb3a27509db7a8c2cb1d9de2","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            an advisory capacity to restrict changes to only the providers"},{"line_number":829,"context_line":"            associated with that one node, but this is not a requirement: the"},{"line_number":830,"context_line":"            caller always subsumes all changes regardless."},{"line_number":831,"context_line":"        :return: True if the provider_tree was changed; False otherwise."},{"line_number":832,"context_line":"        \"\"\""},{"line_number":833,"context_line":"        raise NotImplementedError()"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f93b717_ca7c57ed","line":831,"range":{"start_line":831,"start_character":8,"end_line":831,"end_character":72},"in_reply_to":"5f93b717_94e3f105","updated":"2018-01-26 16:26:43.000000000","message":"Why would we get rid of this if it\u0027s inexpensive to calculate there have been changes and communicate that to the caller?","commit_id":"a75d4dd4a20cffa44b802c37770021781022ddb5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"423897ec5da7de6678c0e6d75a0c4c1707b6ded3","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            an advisory capacity to restrict changes to only the providers"},{"line_number":829,"context_line":"            associated with that one node, but this is not a requirement: the"},{"line_number":830,"context_line":"            caller always subsumes all changes regardless."},{"line_number":831,"context_line":"        :return: True if the provider_tree was changed; False otherwise."},{"line_number":832,"context_line":"        \"\"\""},{"line_number":833,"context_line":"        raise NotImplementedError()"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f93b717_ca98d71c","line":831,"range":{"start_line":831,"start_character":8,"end_line":831,"end_character":72},"in_reply_to":"5f93b717_ca7c57ed","updated":"2018-01-26 16:32:49.000000000","message":"It\u0027s easy for the *reportclient* to calculate there have been changes.  In fact, update_from_provider_tree does that implicitly as written.  But I can think of a number of possible impls of this driver method - including the one rado told me about this morning - that would make it much harder to do here.","commit_id":"a75d4dd4a20cffa44b802c37770021781022ddb5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6410b553e7c96c1917fff9e5ed568c6fa17ea843","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            an advisory capacity to restrict changes to only the providers"},{"line_number":829,"context_line":"            associated with that one node, but this is not a requirement: the"},{"line_number":830,"context_line":"            caller always subsumes all changes regardless."},{"line_number":831,"context_line":"        :return: True if the provider_tree was changed; False otherwise."},{"line_number":832,"context_line":"        \"\"\""},{"line_number":833,"context_line":"        raise NotImplementedError()"},{"line_number":834,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f93b717_55cc3569","line":831,"range":{"start_line":831,"start_character":8,"end_line":831,"end_character":72},"in_reply_to":"5f93b717_ca98d71c","updated":"2018-01-30 00:01:00.000000000","message":"Done in https://review.openstack.org/#/c/531260/","commit_id":"a75d4dd4a20cffa44b802c37770021781022ddb5"}]}
