)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b8dd18c982c9f9a77f8db4813b1b495483d93410","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for the next commits which add child resource providers"},{"line_number":10,"context_line":"for SRIOV physical functions, this patch updates the scheduler report"},{"line_number":11,"context_line":"client to use the new 1.2 microversion of the placement API and set/get"},{"line_number":12,"context_line":"the parent_provider_uuid attribute of the resource provider created"},{"line_number":13,"context_line":"during calls to _create_resource_provider()"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"ba5201f7_3c193389","line":11,"updated":"2017-01-04 13:10:08.000000000","message":"1.3","commit_id":"a0ffa769b90b4498185c482823cc7a276f555348"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d3830b652abed354a78b9aead397ea1399629ae9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for the next commits which add child resource providers"},{"line_number":10,"context_line":"for SRIOV physical functions, this patch updates the scheduler report"},{"line_number":11,"context_line":"client to use the new 1.2 microversion of the placement API and set/get"},{"line_number":12,"context_line":"the parent_provider_uuid attribute of the resource provider created"},{"line_number":13,"context_line":"during calls to _create_resource_provider()"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"ba5201f7_82acdc36","line":11,"updated":"2017-01-09 15:47:53.000000000","message":"1.4","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e7156a3c943c4f193ace56a38f17967f490111ea","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In preparation for future commits which will add child resource"},{"line_number":10,"context_line":"providers for SR-IOV physical functions, this patch updates the"},{"line_number":11,"context_line":"scheduler report client to use the new 1.11 microversion of the"},{"line_number":12,"context_line":"placement API and set/get the \u0027parent_provider_uuid\u0027 attribute of the"},{"line_number":13,"context_line":"resource provider created during calls to \u0027_create_resource_provider()\u0027"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2f367b06e683ed7c815dd9e0536a46e5f0a27e6c"},{"line_number":16,"context_line":"blueprint: nested-resource-providers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":54,"id":"3f4b6375_e701e307","line":13,"range":{"start_line":12,"start_character":10,"end_line":13,"end_character":70},"updated":"2017-10-25 13:41:17.000000000","message":"I think the get part is missing from the patch as the patch does not enforce version 1.11 on _get_resource_provider so it can be that get returns RPs without parent_provider_uuid. However I\u0027m not sure that the intention is really to change both the create and the get/set here.","commit_id":"03ac344e0b359d252a76db02a88db447fb3e9f14"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d673b2f41b6cdaa6583a385cdb9dd1664db67cd1","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for future commits which will add child resource"},{"line_number":10,"context_line":"providers for SR-IOV physical functions, this patch updates the"},{"line_number":11,"context_line":"scheduler report client to use the new 1.12 microversion of the"},{"line_number":12,"context_line":"placement API and set/get the \u0027parent_provider_uuid\u0027 attribute of the"},{"line_number":13,"context_line":"resource provider created during calls to \u0027_create_resource_provider()\u0027"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":91,"id":"df87a7cf_e9e9e0b6","line":11,"range":{"start_line":11,"start_character":39,"end_line":11,"end_character":43},"updated":"2017-12-07 13:20:34.000000000","message":"This is merged as version 1.14","commit_id":"a0ff3e293684461aecfcb46fcbaf26bd416da798"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"00f25af65a08ad968552435f007e848e9ee63c5b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for future commits which will add child resource"},{"line_number":10,"context_line":"providers for SR-IOV physical functions, this patch updates the"},{"line_number":11,"context_line":"scheduler report client to use the new 1.12 microversion of the"},{"line_number":12,"context_line":"placement API and set/get the \u0027parent_provider_uuid\u0027 attribute of the"},{"line_number":13,"context_line":"resource provider created during calls to \u0027_create_resource_provider()\u0027"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":91,"id":"df87a7cf_cb2966e6","line":11,"range":{"start_line":11,"start_character":39,"end_line":11,"end_character":43},"in_reply_to":"df87a7cf_e9e9e0b6","updated":"2017-12-07 19:44:23.000000000","message":"Yeah, was just going to mention that.","commit_id":"a0ff3e293684461aecfcb46fcbaf26bd416da798"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"58b2a50b3f327dabac653a66fee370c169849278","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        }"},{"line_number":217,"context_line":"        # For right now, we\u0027re only supporting a single level of nesting so we"},{"line_number":218,"context_line":"        # can set the root provider UUID to the parent if the parent has been"},{"line_number":219,"context_line":"        # specified. Otherwise, leave the root provider UUID out of the payload"},{"line_number":220,"context_line":"        # and the placement service will automatically fill in the root to"},{"line_number":221,"context_line":"        # match the provider\u0027s own UUID."},{"line_number":222,"context_line":"        root_provider_uuid \u003d uuid"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_016cac33","line":219,"updated":"2016-10-14 14:52:50.000000000","message":"This comment isn\u0027t aligned with what you do below, where you do set root in the payload.","commit_id":"4527c6cdb0d2f11e1138f9c831f8802ab5db0928"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1d2ad7845c203a7ff998bb1297c9987863d672bf","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        }"},{"line_number":217,"context_line":"        # For right now, we\u0027re only supporting a single level of nesting so we"},{"line_number":218,"context_line":"        # can set the root provider UUID to the parent if the parent has been"},{"line_number":219,"context_line":"        # specified. Otherwise, leave the root provider UUID out of the payload"},{"line_number":220,"context_line":"        # and the placement service will automatically fill in the root to"},{"line_number":221,"context_line":"        # match the provider\u0027s own UUID."},{"line_number":222,"context_line":"        root_provider_uuid \u003d uuid"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_ac6cd708","line":219,"in_reply_to":"fa6399be_016cac33","updated":"2016-10-14 15:14:41.000000000","message":"that\u0027s not the payload below :) that\u0027s the returned ResourceProvider object.","commit_id":"4527c6cdb0d2f11e1138f9c831f8802ab5db0928"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"eeeb66451091d4531d2502491056f23b6c063701","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        }"},{"line_number":217,"context_line":"        # For right now, we\u0027re only supporting a single level of nesting so we"},{"line_number":218,"context_line":"        # can set the root provider UUID to the parent if the parent has been"},{"line_number":219,"context_line":"        # specified. Otherwise, leave the root provider UUID out of the payload"},{"line_number":220,"context_line":"        # and the placement service will automatically fill in the root to"},{"line_number":221,"context_line":"        # match the provider\u0027s own UUID."},{"line_number":222,"context_line":"        root_provider_uuid \u003d uuid"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_997af486","line":219,"in_reply_to":"fa6399be_ac6cd708","updated":"2016-10-14 15:39:26.000000000","message":"evidently I\u0027m tired. please move along, nothing to see here\n\nI was misreading the conditional on line 223","commit_id":"4527c6cdb0d2f11e1138f9c831f8802ab5db0928"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b160471ee60db7b0bdfa86e8e5609b706e0e462e","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        # and the placement service will automatically fill in the root to"},{"line_number":221,"context_line":"        # match the provider\u0027s own UUID."},{"line_number":222,"context_line":"        root_provider_uuid \u003d uuid"},{"line_number":223,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":224,"context_line":"            root_provider_uuid \u003d parent_provider_uuid"},{"line_number":225,"context_line":"            payload[\u0027root_provider_uuid\u0027] \u003d root_provider_uuid"},{"line_number":226,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        resp \u003d self.post(url, payload)"},{"line_number":229,"context_line":"        if resp.status_code \u003d\u003d 201:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_c9316c0d","line":226,"range":{"start_line":223,"start_character":0,"end_line":226,"end_character":66},"updated":"2016-11-16 12:09:28.000000000","message":"maybe you can:\nif the parent_provider_uuid is not None:\npayload[\u0027root_provider_uuid\u0027]\u003dNone\npayload[\u0027parent_provider_uuid\u0027]\u003d parent_provider_uuid\nelse:\npayload[\u0027root_provider_uuid\u0027]\u003d root_provider_uuid\npayload[\u0027root_provider_uuid\u0027]\u003d None\n\nso it will work like I suggested in \nhttps://review.openstack.org/#/c/377138/14/nova/objects/resource_provider.py","commit_id":"5381cbf984bb9a5f8fbc2251e6b538b7e202350c"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"90e8134918df963f0b37bc8e7cac5e7e3419cc2d","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                      \"for resource provider with UUID {0} and name {1}.\")"},{"line_number":227,"context_line":"            msg \u003d msg.format(uuid, name)"},{"line_number":228,"context_line":"            LOG.info(msg)"},{"line_number":229,"context_line":"            return self._get_resource_provider(uuid)"},{"line_number":230,"context_line":"        elif resp.status_code \u003d\u003d 409:"},{"line_number":231,"context_line":"            # Another thread concurrently created a resource provider with the"},{"line_number":232,"context_line":"            # same UUID. Log a warning and then just return the resource"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a77a97e_b1b45982","line":229,"updated":"2016-11-17 13:19:58.000000000","message":"I\u0027m pretty okay with this change conceptually, but I\u0027m guessing that some people will not be happy with the additional call to the placement API to get info we already know.\n\nAlso it\u0027s not clear the change is germane to the point of this changeset? Is there some detail I\u0027m missing?","commit_id":"18978d74287515bd70c130ce36ab898d2939571a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e960598f80d838974ddfe6a524e25572b0d72a6b","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                      \"for resource provider with UUID {0} and name {1}.\")"},{"line_number":227,"context_line":"            msg \u003d msg.format(uuid, name)"},{"line_number":228,"context_line":"            LOG.info(msg)"},{"line_number":229,"context_line":"            return self._get_resource_provider(uuid)"},{"line_number":230,"context_line":"        elif resp.status_code \u003d\u003d 409:"},{"line_number":231,"context_line":"            # Another thread concurrently created a resource provider with the"},{"line_number":232,"context_line":"            # same UUID. Log a warning and then just return the resource"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a77a97e_e528c7e4","line":229,"in_reply_to":"7a77a97e_34fbd748","updated":"2016-11-17 14:33:49.000000000","message":"I\u0027m not too concerned about the optimization myself, it just wasn\u0027t clear what was going on. Thanks.","commit_id":"18978d74287515bd70c130ce36ab898d2939571a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6d12b003420c787bf7313873af8b1f03743f8c38","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                      \"for resource provider with UUID {0} and name {1}.\")"},{"line_number":227,"context_line":"            msg \u003d msg.format(uuid, name)"},{"line_number":228,"context_line":"            LOG.info(msg)"},{"line_number":229,"context_line":"            return self._get_resource_provider(uuid)"},{"line_number":230,"context_line":"        elif resp.status_code \u003d\u003d 409:"},{"line_number":231,"context_line":"            # Another thread concurrently created a resource provider with the"},{"line_number":232,"context_line":"            # same UUID. Log a warning and then just return the resource"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a77a97e_34fbd748","line":229,"in_reply_to":"7a77a97e_b1b45982","updated":"2016-11-17 14:23:19.000000000","message":"so the idea was to retrieve the root_provider_uuid so we can support more than one level\nI also blocked passing  root_provider_uuid  on the object create level as it should be calculate internally in resource provider object.\nI can optimize here so we can to get only if we have payload[\u0027parent_provider_uuid\u0027] in the payload otherwise we will create the object.","commit_id":"18978d74287515bd70c130ce36ab898d2939571a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"365d289ce8abe8a9607ef974e3a203e84aa43889","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                      \"for resource provider with UUID {0} and name {1}.\")"},{"line_number":211,"context_line":"            msg \u003d msg.format(uuid, name)"},{"line_number":212,"context_line":"            LOG.info(msg)"},{"line_number":213,"context_line":"            return objects.ResourceProvider("},{"line_number":214,"context_line":"                    uuid\u003duuid,"},{"line_number":215,"context_line":"                    name\u003dname,"},{"line_number":216,"context_line":"                    generation\u003d1,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a74a57a_7c62fb17","side":"PARENT","line":213,"updated":"2016-11-30 15:12:02.000000000","message":"Not that it is the result of this change or anything (so I\u0027m just commenting for the sake of memory), but I think it is a bug to have the placement objects in the client code: it makes the later extraction more complex.","commit_id":"fd590fdff50cb8eba6e3d38ca0a17b89519bc8d3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b8dd18c982c9f9a77f8db4813b1b495483d93410","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        }"},{"line_number":216,"context_line":"        # We don\u0027t pass root provider UUID because it will be retrieved"},{"line_number":217,"context_line":"        # automatically according to the parent provider UUID when create"},{"line_number":218,"context_line":"        # the resource provider."},{"line_number":219,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":220,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_df3659e6","line":218,"updated":"2017-01-04 13:10:08.000000000","message":"Do we even need to bother to mention the root provider uuid here? It is a server side implementation detail, not part of the HTTP API representation.","commit_id":"a0ffa769b90b4498185c482823cc7a276f555348"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d3830b652abed354a78b9aead397ea1399629ae9","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        auth_plugin \u003d keystone.load_auth_from_conf_options("},{"line_number":156,"context_line":"            CONF, \u0027placement\u0027)"},{"line_number":157,"context_line":"        headers \u003d {"},{"line_number":158,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.3\u0027"},{"line_number":159,"context_line":"        }"},{"line_number":160,"context_line":"        self._client \u003d session.Session("},{"line_number":161,"context_line":"            auth\u003dauth_plugin,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_627618da","line":158,"updated":"2017-01-09 15:47:53.000000000","message":"1.4","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"98cc7143aec98d04908c6bfb77b2b27b030246cf","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        auth_plugin \u003d keystone.load_auth_from_conf_options("},{"line_number":156,"context_line":"            CONF, \u0027placement\u0027)"},{"line_number":157,"context_line":"        headers \u003d {"},{"line_number":158,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.3\u0027"},{"line_number":159,"context_line":"        }"},{"line_number":160,"context_line":"        self._client \u003d session.Session("},{"line_number":161,"context_line":"            auth\u003dauth_plugin,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_2c748134","line":158,"in_reply_to":"ba5201f7_627618da","updated":"2017-01-11 21:06:42.000000000","message":"Done","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d3830b652abed354a78b9aead397ea1399629ae9","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        }"},{"line_number":245,"context_line":"        # We don\u0027t pass root provider UUID because it will be retrieved"},{"line_number":246,"context_line":"        # automatically according to the parent provider UUID when create"},{"line_number":247,"context_line":"        # the resource provider."},{"line_number":248,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":249,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_a280008d","line":247,"updated":"2017-01-09 15:47:53.000000000","message":"don\u0027t need to mention root, invisible to client","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"98cc7143aec98d04908c6bfb77b2b27b030246cf","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        }"},{"line_number":245,"context_line":"        # We don\u0027t pass root provider UUID because it will be retrieved"},{"line_number":246,"context_line":"        # automatically according to the parent provider UUID when create"},{"line_number":247,"context_line":"        # the resource provider."},{"line_number":248,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":249,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_6c904944","line":247,"in_reply_to":"ba5201f7_a280008d","updated":"2017-01-11 21:06:42.000000000","message":"Done","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ff6c06eee19876dcab700bee896af69af859037a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            CONF, \u0027placement\u0027)"},{"line_number":197,"context_line":"        headers \u003d {"},{"line_number":198,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.6\u0027"},{"line_number":199,"context_line":"        }"},{"line_number":200,"context_line":"        self._client \u003d keystone.load_session_from_conf_options("},{"line_number":201,"context_line":"            CONF, \u0027placement\u0027, auth\u003dauth_plugin,"},{"line_number":202,"context_line":"            additional_headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f231b9d_d56f4fc3","line":199,"updated":"2017-06-12 12:40:24.000000000","message":"I think we decided that we would express the microversion per request, not as a session setting.\n\nIf this is being done as a way of saying \"this report client will only work from version 1.6 and beyond\" is this the best way to do that, and is that desirable?","commit_id":"91143213ca90b60192bcb68cf83f4254f51b840c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"873abdde9b9b35b76423804392484bad48807ca4","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            CONF, \u0027placement\u0027)"},{"line_number":197,"context_line":"        headers \u003d {"},{"line_number":198,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.6\u0027"},{"line_number":199,"context_line":"        }"},{"line_number":200,"context_line":"        self._client \u003d keystone.load_session_from_conf_options("},{"line_number":201,"context_line":"            CONF, \u0027placement\u0027, auth\u003dauth_plugin,"},{"line_number":202,"context_line":"            additional_headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f1d235d_e73e81bf","line":199,"in_reply_to":"5f201791_839b6616","updated":"2017-07-06 08:46:50.000000000","message":"Done","commit_id":"91143213ca90b60192bcb68cf83f4254f51b840c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a191b7de6e47c6df1a574b49bac88e3f9470162","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            CONF, \u0027placement\u0027)"},{"line_number":197,"context_line":"        headers \u003d {"},{"line_number":198,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.6\u0027"},{"line_number":199,"context_line":"        }"},{"line_number":200,"context_line":"        self._client \u003d keystone.load_session_from_conf_options("},{"line_number":201,"context_line":"            CONF, \u0027placement\u0027, auth\u003dauth_plugin,"},{"line_number":202,"context_line":"            additional_headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":36,"id":"5f201791_839b6616","line":199,"in_reply_to":"7f231b9d_d56f4fc3","updated":"2017-06-26 18:19:54.000000000","message":"No, it\u0027s being done this way because this patch series is way old and was just copying what had been done previously. I\u0027ll change it.","commit_id":"91143213ca90b60192bcb68cf83f4254f51b840c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e7156a3c943c4f193ace56a38f17967f490111ea","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        version \u003d None"},{"line_number":453,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":454,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":455,"context_line":"            version \u003d \u00271.11\u0027"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        resp \u003d self.post(url, payload, version\u003dversion)"},{"line_number":458,"context_line":"        placement_req_id \u003d get_placement_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":54,"id":"3f4b6375_71481186","line":455,"range":{"start_line":455,"start_character":12,"end_line":455,"end_character":28},"updated":"2017-10-25 13:41:17.000000000","message":"Do we need to handle the case when the placement API is older and doesn\u0027t support 1.11?","commit_id":"03ac344e0b359d252a76db02a88db447fb3e9f14"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5c055cf5bbdaa8d6921ea4d792c2b9d8246b989a","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        version \u003d None"},{"line_number":453,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":454,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":455,"context_line":"            version \u003d \u00271.11\u0027"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        resp \u003d self.post(url, payload, version\u003dversion)"},{"line_number":458,"context_line":"        placement_req_id \u003d get_placement_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":54,"id":"3f4b6375_db98fe75","line":455,"range":{"start_line":455,"start_character":12,"end_line":455,"end_character":28},"in_reply_to":"3f4b6375_71481186","updated":"2017-10-25 14:59:15.000000000","message":"If that\u0027s the case, this will fail in the API, which is acceptable.  Overall version discovery/negotiation will eventually be done in _create_client.","commit_id":"03ac344e0b359d252a76db02a88db447fb3e9f14"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b1d6d09b772bfc3f55e40f40f79ccd1358839d94","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        version \u003d None"},{"line_number":453,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":454,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":455,"context_line":"            version \u003d \u00271.11\u0027"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        resp \u003d self.post(url, payload, version\u003dversion)"},{"line_number":458,"context_line":"        placement_req_id \u003d get_placement_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":54,"id":"3f4b6375_63f70a8d","line":455,"range":{"start_line":455,"start_character":12,"end_line":455,"end_character":28},"in_reply_to":"3f4b6375_71481186","updated":"2017-10-26 09:24:41.000000000","message":"In the client, we should be setting the version to 1.11 *always*. I will fix.","commit_id":"03ac344e0b359d252a76db02a88db447fb3e9f14"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e7156a3c943c4f193ace56a38f17967f490111ea","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                    uuid\u003duuid,"},{"line_number":471,"context_line":"                    name\u003dname,"},{"line_number":472,"context_line":"                    generation\u003d0,"},{"line_number":473,"context_line":"                    parent_provider_uuid\u003dparent_provider_uuid,"},{"line_number":474,"context_line":"            )"},{"line_number":475,"context_line":"        elif resp.status_code \u003d\u003d 409:"},{"line_number":476,"context_line":"            # Another thread concurrently created a resource provider with the"}],"source_content_type":"text/x-python","patch_set":54,"id":"3f4b6375_8a8116fe","line":473,"updated":"2017-10-25 13:41:17.000000000","message":"So here we return a dict that has a parent_provider_uuid but _get_resource_provider() does not force version 1.11 so it might return a dict without parent_provider_uuid this could be problematic for the user of the report client.","commit_id":"03ac344e0b359d252a76db02a88db447fb3e9f14"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"22eb2b8d5e2e8dee5b0edcfe9d72ca6600c24ca9","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        version \u003d None"},{"line_number":453,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":454,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":455,"context_line":"            version \u003d \u00271.11\u0027"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        resp \u003d self.post(url, payload, version\u003dversion)"},{"line_number":458,"context_line":"        placement_req_id \u003d get_placement_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_fc0cd194","line":455,"range":{"start_line":455,"start_character":22,"end_line":455,"end_character":28},"updated":"2017-10-25 16:09:07.000000000","message":"Not a stopper, but this feels like a \"magic number\". Perhaps add a constant to the top of the file like:\n\n  PARENT_PROVIDER_VERSION \u003d \"1.11\"\n\nand then reference that here and in the tests that expect that version to be set.","commit_id":"2d52abc16cd59cb569f613c9753ef09e47541478"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ca737e22c5fbb7138bb1482b7d6b5e0662b0432b","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        version \u003d None"},{"line_number":453,"context_line":"        if parent_provider_uuid is not None:"},{"line_number":454,"context_line":"            payload[\u0027parent_provider_uuid\u0027] \u003d parent_provider_uuid"},{"line_number":455,"context_line":"            version \u003d \u00271.11\u0027"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        resp \u003d self.post(url, payload, version\u003dversion)"},{"line_number":458,"context_line":"        placement_req_id \u003d get_placement_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f4b6375_2370f207","line":455,"range":{"start_line":455,"start_character":22,"end_line":455,"end_character":28},"in_reply_to":"3f4b6375_fc0cd194","updated":"2017-10-26 09:27:56.000000000","message":"Instead of a constant I just added a comment to explain setting the version to 1.11 here.","commit_id":"2d52abc16cd59cb569f613c9753ef09e47541478"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"49d738db3f369bf90e28c94e00e399b05a070a75","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @safe_connect"},{"line_number":426,"context_line":"    def _create_resource_provider(self, uuid, name,"},{"line_number":427,"context_line":"                                  parent_provider_uuid\u003dNone):"},{"line_number":428,"context_line":"        \"\"\"Calls the placement API to create a new resource provider record."},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        :param uuid: UUID of the new resource provider"}],"source_content_type":"text/x-python","patch_set":83,"id":"df87a7cf_2ee2c904","line":427,"updated":"2017-12-04 15:29:21.000000000","message":"nit: this could be a single line.","commit_id":"d6eaa3a23be115305cf34546527015bfdb8799ec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7e39a00b6c29dbb47eced0c013a8f6342312ff04","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        :raise: ResourceProviderRetrievalFailed on error."},{"line_number":403,"context_line":"        \"\"\""},{"line_number":404,"context_line":"        resp \u003d self.get(\"/resource_providers/%s\" % uuid,"},{"line_number":405,"context_line":"                        version\u003dNESTED_PROVIDER_API_VERSION)"},{"line_number":406,"context_line":"        if resp.status_code \u003d\u003d 200:"},{"line_number":407,"context_line":"            data \u003d resp.json()"},{"line_number":408,"context_line":"            return data"}],"source_content_type":"text/x-python","patch_set":91,"id":"df87a7cf_2b5fb272","line":405,"updated":"2017-12-07 19:50:12.000000000","message":"So with this, all computes now need placement upgraded before they can use this, just so we\u0027re aware. We should probably update our nova-status check on the minimum required placement version:\n\nhttps://github.com/openstack/nova/blob/master/nova/cmd/status.py#L202","commit_id":"a0ff3e293684461aecfcb46fcbaf26bd416da798"}],"nova/tests/functional/api/openstack/placement/test_report_client.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d3830b652abed354a78b9aead397ea1399629ae9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            session\u003drequest_session,"},{"line_number":43,"context_line":"            additional_headers\u003d{"},{"line_number":44,"context_line":"                \u0027x-auth-token\u0027: \u0027admin\u0027,"},{"line_number":45,"context_line":"                \u0027OpenStack-API-Version\u0027: \u0027placement 1.3\u0027,"},{"line_number":46,"context_line":"            })"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_c5e34e32","line":45,"updated":"2017-01-09 15:47:53.000000000","message":"1.4","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"98cc7143aec98d04908c6bfb77b2b27b030246cf","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            session\u003drequest_session,"},{"line_number":43,"context_line":"            additional_headers\u003d{"},{"line_number":44,"context_line":"                \u0027x-auth-token\u0027: \u0027admin\u0027,"},{"line_number":45,"context_line":"                \u0027OpenStack-API-Version\u0027: \u0027placement 1.3\u0027,"},{"line_number":46,"context_line":"            })"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_ccb215e5","line":45,"in_reply_to":"ba5201f7_c5e34e32","updated":"2017-01-11 21:06:42.000000000","message":"Done","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"f7d5710a0b87797ff83ef1a12c60d37d5709a47d","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":323,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":324,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":325,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":326,"context_line":"        parent_provider_uuid part of the payload is properly specified."},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        parent_uuid \u003d uuids.parent"},{"line_number":329,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":330,"context_line":"        name \u003d \u0027computehost\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a6eadb0_0658e855","line":327,"range":{"start_line":325,"start_character":7,"end_line":327,"end_character":11},"updated":"2016-12-19 13:35:52.000000000","message":"First line of docstring should be single line.\nAnd multi-line part follows after it.","commit_id":"271402798f9861f3a374f498daa8f3fccc4dc7b3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b3d10eeb32f6d14f9e62df0164fad42827a02afd","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":323,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":324,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":325,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":326,"context_line":"        parent_provider_uuid part of the payload is properly specified."},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        parent_uuid \u003d uuids.parent"},{"line_number":329,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":330,"context_line":"        name \u003d \u0027computehost\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a6eadb0_acb473d1","line":327,"range":{"start_line":325,"start_character":7,"end_line":327,"end_character":11},"in_reply_to":"1a6eadb0_0658e855","updated":"2016-12-19 14:02:23.000000000","message":"Hi Kyrylo!\n\nWe no longer force having the first line be on a single line.\n\nBest,\n\n-jay","commit_id":"271402798f9861f3a374f498daa8f3fccc4dc7b3"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"b68f2976679db49097c9ae7a066268e8e97649e2","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":323,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":324,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":325,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":326,"context_line":"        parent_provider_uuid part of the payload is properly specified."},{"line_number":327,"context_line":"        \"\"\""},{"line_number":328,"context_line":"        parent_uuid \u003d uuids.parent"},{"line_number":329,"context_line":"        uuid \u003d uuids.compute_node"},{"line_number":330,"context_line":"        name \u003d \u0027computehost\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a6eadb0_c0d97385","line":327,"range":{"start_line":325,"start_character":7,"end_line":327,"end_character":11},"in_reply_to":"1a6eadb0_acb473d1","updated":"2016-12-19 14:11:14.000000000","message":"Ok, thanks for response, Jay!","commit_id":"271402798f9861f3a374f498daa8f3fccc4dc7b3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d3830b652abed354a78b9aead397ea1399629ae9","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        load_auth_mock.assert_called_once_with(CONF, \u0027placement\u0027)"},{"line_number":122,"context_line":"        expected_headers \u003d {"},{"line_number":123,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.3\u0027,"},{"line_number":124,"context_line":"        }"},{"line_number":125,"context_line":"        ks_sess_mock.assert_called_once_with("},{"line_number":126,"context_line":"            auth\u003dload_auth_mock.return_value,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_85e30605","line":123,"updated":"2017-01-09 15:47:53.000000000","message":"1.4","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"98cc7143aec98d04908c6bfb77b2b27b030246cf","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        load_auth_mock.assert_called_once_with(CONF, \u0027placement\u0027)"},{"line_number":122,"context_line":"        expected_headers \u003d {"},{"line_number":123,"context_line":"            \u0027OpenStack-API-Version\u0027: \u0027placement 1.3\u0027,"},{"line_number":124,"context_line":"        }"},{"line_number":125,"context_line":"        ks_sess_mock.assert_called_once_with("},{"line_number":126,"context_line":"            auth\u003dload_auth_mock.return_value,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_0cd09df5","line":123,"in_reply_to":"ba5201f7_85e30605","updated":"2017-01-11 21:06:42.000000000","message":"Done","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"98cc7143aec98d04908c6bfb77b2b27b030246cf","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        ks_sess_mock.assert_called_once_with("},{"line_number":168,"context_line":"            auth\u003dload_auth_mock.return_value,"},{"line_number":169,"context_line":"            additional_headers\u003dexpected_headers,"},{"line_number":170,"context_line":"        )"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"class TestProviderOperations(SchedulerReportClientTestCase):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_cc005569","line":170,"updated":"2017-01-11 21:06:42.000000000","message":"This was duplicative. Removed.","commit_id":"1c256468a743ee58f6c3d498edd0011a22ae773d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7906dbe25fb867e26bfd8483268ce8b541d0b0b0","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class TestConstructor(test.NoDBTestCase):"},{"line_number":152,"context_line":"    def setUp(self):"},{"line_number":153,"context_line":"        super(TestConstructor, self).setUp()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":156,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7f515b1d_ca3a07e6","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":44},"updated":"2017-09-22 17:20:33.000000000","message":"This seems unnecessary..","commit_id":"1cbcee55ae27e55b1cd27a1f7132966a55dd6c20"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"10ed5419cb1aee30f8aac308ecf38b4dfef567d2","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class TestConstructor(test.NoDBTestCase):"},{"line_number":152,"context_line":"    def setUp(self):"},{"line_number":153,"context_line":"        super(TestConstructor, self).setUp()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":156,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7f515b1d_2d8e5578","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":44},"in_reply_to":"7f515b1d_ca3a07e6","updated":"2017-09-22 17:27:18.000000000","message":"Heh, just copy pasta. Will remove. Thanks :)","commit_id":"1cbcee55ae27e55b1cd27a1f7132966a55dd6c20"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"34d2d835371742b01863e88342d11dfcd575b192","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class TestConstructor(test.NoDBTestCase):"},{"line_number":152,"context_line":"    def setUp(self):"},{"line_number":153,"context_line":"        super(TestConstructor, self).setUp()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":156,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"7f515b1d_7faaafd2","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":44},"updated":"2017-10-04 17:40:06.000000000","message":"Jay, not removed yet.. :-(","commit_id":"6f394e3ed1fcd0b54e9df152ab600f80131caae0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8e6dfe87086b25b470926fc07493bb0db155b56e","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class TestConstructor(test.NoDBTestCase):"},{"line_number":152,"context_line":"    def setUp(self):"},{"line_number":153,"context_line":"        super(TestConstructor, self).setUp()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":156,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"7f515b1d_d1651747","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":44},"in_reply_to":"7f515b1d_7faaafd2","updated":"2017-10-04 18:31:00.000000000","message":"Thanks Ken\u0027ichi! Will remove in my next pass on this series. Right now I\u0027m waiting for a this series to go before the nested resource providers work:\n\nhttps://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:no-orm-resource-providers","commit_id":"6f394e3ed1fcd0b54e9df152ab600f80131caae0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b65903a20ef7e0596ab28da5450d56a6606273e0","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class TestConstructor(test.NoDBTestCase):"},{"line_number":152,"context_line":"    def setUp(self):"},{"line_number":153,"context_line":"        super(TestConstructor, self).setUp()"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_session_from_conf_options\u0027)"},{"line_number":156,"context_line":"    @mock.patch(\u0027keystoneauth1.loading.load_auth_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"5f4e5783_d24be784","line":153,"range":{"start_line":152,"start_character":0,"end_line":153,"end_character":44},"in_reply_to":"7f515b1d_d1651747","updated":"2017-10-10 17:08:20.000000000","message":"Done","commit_id":"6f394e3ed1fcd0b54e9df152ab600f80131caae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e7156a3c943c4f193ace56a38f17967f490111ea","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"            \u0027uuid\u0027: uuid,"},{"line_number":1185,"context_line":"            \u0027name\u0027: uuid,"},{"line_number":1186,"context_line":"            \u0027generation\u0027: 42,"},{"line_number":1187,"context_line":"            \u0027parent_provider_uuid\u0027: None,"},{"line_number":1188,"context_line":"        }"},{"line_number":1189,"context_line":"        resp_mock.json.return_value \u003d json_data"},{"line_number":1190,"context_line":"        self.ks_sess_mock.get.return_value \u003d resp_mock"},{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        result \u003d self.client._get_resource_provider(uuid)"}],"source_content_type":"text/x-python","patch_set":54,"id":"3f4b6375_4aa43ea6","line":1189,"range":{"start_line":1187,"start_character":0,"end_line":1189,"end_character":47},"updated":"2017-10-25 13:41:17.000000000","message":"This is only true if the request was made with at least version 1.11 header without that it all depends on what is the latest version of placement.","commit_id":"03ac344e0b359d252a76db02a88db447fb3e9f14"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c081a8e449131be26357cc4e17a7583d32b0905a","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"                parent_provider_uuid\u003dNone,"},{"line_number":1199,"context_line":"        )"},{"line_number":1200,"context_line":"        expected_url \u003d \u0027/resource_providers/\u0027 + uuid"},{"line_number":1201,"context_line":"        expected_headers \u003d {\u0027OpenStack-API-Version\u0027: \u0027placement 1.11\u0027}"},{"line_number":1202,"context_line":"        self.ks_sess_mock.get.assert_called_once_with(expected_url,"},{"line_number":1203,"context_line":"                                                      endpoint_filter\u003dmock.ANY,"},{"line_number":1204,"context_line":"                                                      raise_exc\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":59,"id":"3f4b6375_7f3c362e","line":1201,"range":{"start_line":1201,"start_character":53,"end_line":1201,"end_character":68},"updated":"2017-10-26 13:35:19.000000000","message":"nit: I would have thought that these would also reference the constant in the report client, but... meh.","commit_id":"683bdbbf5fc3a55c453468367cee3611e49a0922"},{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"18633a3a89be5d85737757f058567afb044045c4","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"            expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.12\u0027)"},{"line_number":1272,"context_line":"        # A 503 Service Unavailable should trigger an error log"},{"line_number":1273,"context_line":"        # that includes the placement request id and return None"},{"line_number":1274,"context_line":"        # A 503 Service Unavailable should trigger an error log that"},{"line_number":1275,"context_line":"        # includes the placement request id and return None"},{"line_number":1276,"context_line":"        # from _get_resource_provider()"},{"line_number":1277,"context_line":"        self.assertTrue(logging_mock.called)"},{"line_number":1278,"context_line":"        self.assertIsNone(result)"}],"source_content_type":"text/x-python","patch_set":71,"id":"1f485f77_095b5654","line":1275,"range":{"start_line":1274,"start_character":8,"end_line":1275,"end_character":59},"updated":"2017-11-14 09:44:10.000000000","message":"Maybe this is unnecessary.","commit_id":"cfc91a96e5fcc45d4bdef4b90b0be42251946edd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"012fab26bba584b0c8c84d4e88b4f98076aab3aa","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"            expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.12\u0027)"},{"line_number":1272,"context_line":"        # A 503 Service Unavailable should trigger an error log"},{"line_number":1273,"context_line":"        # that includes the placement request id and return None"},{"line_number":1274,"context_line":"        # A 503 Service Unavailable should trigger an error log that"},{"line_number":1275,"context_line":"        # includes the placement request id and return None"},{"line_number":1276,"context_line":"        # from _get_resource_provider()"},{"line_number":1277,"context_line":"        self.assertTrue(logging_mock.called)"},{"line_number":1278,"context_line":"        self.assertIsNone(result)"}],"source_content_type":"text/x-python","patch_set":71,"id":"1f485f77_0c6eb200","line":1275,"range":{"start_line":1274,"start_character":8,"end_line":1275,"end_character":59},"in_reply_to":"1f485f77_095b5654","updated":"2017-11-14 22:25:04.000000000","message":"Done","commit_id":"cfc91a96e5fcc45d4bdef4b90b0be42251946edd"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"        self.assertEqual(uuids.request_id,"},{"line_number":1278,"context_line":"                         logging_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1281,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1282,"context_line":"    def test_create_resource_provider(self, get_rp_mock):"},{"line_number":1283,"context_line":"        \"\"\"Test that _create_resource_provider() sends a dict of resource"},{"line_number":1284,"context_line":"        provider information without a parent provider UUID."}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_fbf5becb","line":1281,"range":{"start_line":1280,"start_character":0,"end_line":1281,"end_character":41},"updated":"2017-11-30 01:58:20.000000000","message":"I don\u0027t think we really need this mock patch.","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03969321568473b97e514562aebea985db3a678d","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"        self.assertEqual(uuids.request_id,"},{"line_number":1278,"context_line":"                         logging_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1281,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1282,"context_line":"    def test_create_resource_provider(self, get_rp_mock):"},{"line_number":1283,"context_line":"        \"\"\"Test that _create_resource_provider() sends a dict of resource"},{"line_number":1284,"context_line":"        provider information without a parent provider UUID."}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_98182285","line":1281,"range":{"start_line":1280,"start_character":0,"end_line":1281,"end_character":41},"in_reply_to":"ff82abbf_fbf5becb","updated":"2017-11-30 18:10:14.000000000","message":"Done","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1281,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1282,"context_line":"    def test_create_resource_provider(self, get_rp_mock):"},{"line_number":1283,"context_line":"        \"\"\"Test that _create_resource_provider() sends a dict of resource"},{"line_number":1284,"context_line":"        provider information without a parent provider UUID."},{"line_number":1285,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_9b0032ad","line":1282,"range":{"start_line":1282,"start_character":42,"end_line":1282,"end_character":55},"updated":"2017-11-30 01:58:20.000000000","message":"ditto","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        name \u003d \u0027computehost\u0027"},{"line_number":1288,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d201)"},{"line_number":1289,"context_line":"        self.ks_adap_mock.post.return_value \u003d resp_mock"},{"line_number":1290,"context_line":"        get_rp_mock.return_value \u003d mock.sentinel.get_rp"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"        self.client._create_resource_provider(uuid, name)"},{"line_number":1293,"context_line":""}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_bbfbb6bb","line":1290,"range":{"start_line":1290,"start_character":8,"end_line":1290,"end_character":55},"updated":"2017-11-30 01:58:20.000000000","message":"ditto","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1295,"context_line":"            \u0027uuid\u0027: uuid,"},{"line_number":1296,"context_line":"            \u0027name\u0027: name,"},{"line_number":1297,"context_line":"        }"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        expected_url \u003d \u0027/resource_providers\u0027"},{"line_number":1300,"context_line":"        self.ks_adap_mock.post.assert_called_once_with("},{"line_number":1301,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_3b29e635","line":1298,"updated":"2017-11-30 01:58:20.000000000","message":"expected_provider_dict has gone. (and it should have parent_provider_uuid\u003dNone)","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03969321568473b97e514562aebea985db3a678d","unresolved":false,"context_lines":[{"line_number":1295,"context_line":"            \u0027uuid\u0027: uuid,"},{"line_number":1296,"context_line":"            \u0027name\u0027: name,"},{"line_number":1297,"context_line":"        }"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        expected_url \u003d \u0027/resource_providers\u0027"},{"line_number":1300,"context_line":"        self.ks_adap_mock.post.assert_called_once_with("},{"line_number":1301,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_73253fab","line":1298,"in_reply_to":"ff82abbf_3b29e635","updated":"2017-11-30 18:10:14.000000000","message":"Done","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1300,"context_line":"        self.ks_adap_mock.post.assert_called_once_with("},{"line_number":1301,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"},{"line_number":1302,"context_line":"            microversion\u003d\u00271.14\u0027)"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1305,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1306,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_1b97423c","line":1303,"updated":"2017-11-30 01:58:20.000000000","message":"self.assertEqual(expected_provider_dict, result) has gone.","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1301,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"},{"line_number":1302,"context_line":"            microversion\u003d\u00271.14\u0027)"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1305,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1306,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":1307,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":1308,"context_line":"        parent_provider_uuid part of the payload is properly specified."}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_fb3b7e34","line":1305,"range":{"start_line":1304,"start_character":0,"end_line":1305,"end_character":41},"updated":"2017-11-30 01:58:20.000000000","message":"Why do we need this?","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"03969321568473b97e514562aebea985db3a678d","unresolved":false,"context_lines":[{"line_number":1301,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"},{"line_number":1302,"context_line":"            microversion\u003d\u00271.14\u0027)"},{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1305,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1306,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":1307,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":1308,"context_line":"        parent_provider_uuid part of the payload is properly specified."}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_5307db19","line":1305,"range":{"start_line":1304,"start_character":0,"end_line":1305,"end_character":41},"in_reply_to":"ff82abbf_fb3b7e34","updated":"2017-11-30 18:10:14.000000000","message":"Done","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1305,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1306,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":1307,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":1308,"context_line":"        parent_provider_uuid part of the payload is properly specified."},{"line_number":1309,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_bb4176a8","line":1306,"range":{"start_line":1306,"start_character":54,"end_line":1306,"end_character":68},"updated":"2017-11-30 01:58:20.000000000","message":"and this?","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"cc010f4ec5898d6b7eb5496c34e5510e540b52ca","unresolved":false,"context_lines":[{"line_number":1312,"context_line":"        name \u003d \u0027computehost\u0027"},{"line_number":1313,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d201)"},{"line_number":1314,"context_line":"        self.ks_adap_mock.post.return_value \u003d resp_mock"},{"line_number":1315,"context_line":"        get_rp_mock.return_value \u003d mock.sentinel.get_rp"},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"        result \u003d self.client._create_resource_provider("},{"line_number":1318,"context_line":"            uuid,"}],"source_content_type":"text/x-python","patch_set":77,"id":"ff82abbf_7b19aed4","line":1315,"range":{"start_line":1315,"start_character":0,"end_line":1315,"end_character":55},"updated":"2017-11-30 01:58:20.000000000","message":"and this.","commit_id":"2d150054fe296a47ce7e9996f460f354d060da2f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"49d738db3f369bf90e28c94e00e399b05a070a75","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"        )"},{"line_number":1240,"context_line":"        expected_url \u003d \u0027/resource_providers/\u0027 + uuid"},{"line_number":1241,"context_line":"        self.ks_adap_mock.get.assert_called_once_with("},{"line_number":1242,"context_line":"            expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.14\u0027)"},{"line_number":1243,"context_line":"        self.assertEqual(expected_provider_dict, result)"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"    def test_get_resource_provider_not_found(self):"}],"source_content_type":"text/x-python","patch_set":83,"id":"df87a7cf_0eb265e7","line":1242,"range":{"start_line":1242,"start_character":56,"end_line":1242,"end_character":62},"updated":"2017-12-04 15:29:21.000000000","message":"I really wish we used descriptive constants for these, but that ship seems to have sailed...","commit_id":"d6eaa3a23be115305cf34546527015bfdb8799ec"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0000f6af2ad031caff81795999fe9d47dca7b165","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"        )"},{"line_number":1240,"context_line":"        expected_url \u003d \u0027/resource_providers/\u0027 + uuid"},{"line_number":1241,"context_line":"        self.ks_adap_mock.get.assert_called_once_with("},{"line_number":1242,"context_line":"            expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.14\u0027)"},{"line_number":1243,"context_line":"        self.assertEqual(expected_provider_dict, result)"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"    def test_get_resource_provider_not_found(self):"}],"source_content_type":"text/x-python","patch_set":83,"id":"df87a7cf_110e0a8d","line":1242,"range":{"start_line":1242,"start_character":56,"end_line":1242,"end_character":62},"in_reply_to":"df87a7cf_0eb265e7","updated":"2017-12-04 16:03:16.000000000","message":"I thought there was a recent patch that did that, at least for one microversion.  And I thought it was this series, but I guess not.\n\nAnyway, I don\u0027t think the ship is gone for good.  That\u0027s something we could do in a followon, nah?","commit_id":"d6eaa3a23be115305cf34546527015bfdb8799ec"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"94e4e8a357abc9782513b3fddeff57a0208373a4","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"        )"},{"line_number":1240,"context_line":"        expected_url \u003d \u0027/resource_providers/\u0027 + uuid"},{"line_number":1241,"context_line":"        self.ks_adap_mock.get.assert_called_once_with("},{"line_number":1242,"context_line":"            expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.14\u0027)"},{"line_number":1243,"context_line":"        self.assertEqual(expected_provider_dict, result)"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"    def test_get_resource_provider_not_found(self):"}],"source_content_type":"text/x-python","patch_set":83,"id":"df87a7cf_b17ddeb2","line":1242,"range":{"start_line":1242,"start_character":56,"end_line":1242,"end_character":62},"in_reply_to":"df87a7cf_110e0a8d","updated":"2017-12-04 16:08:18.000000000","message":"we did. in the report client. not in the tests.","commit_id":"d6eaa3a23be115305cf34546527015bfdb8799ec"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"49d738db3f369bf90e28c94e00e399b05a070a75","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        self.ks_adap_mock.get.assert_called_once_with("},{"line_number":1276,"context_line":"            expected_url, raise_exc\u003dFalse, microversion\u003d\u00271.14\u0027)"},{"line_number":1277,"context_line":"        # A 503 Service Unavailable should trigger an error log that"},{"line_number":1278,"context_line":"        # includes the placement request id and return None"},{"line_number":1279,"context_line":"        # from _get_resource_provider()"},{"line_number":1280,"context_line":"        self.assertTrue(logging_mock.called)"},{"line_number":1281,"context_line":"        self.assertEqual(uuids.request_id,"}],"source_content_type":"text/x-python","patch_set":83,"id":"df87a7cf_6e945138","line":1278,"updated":"2017-12-04 15:29:21.000000000","message":"unrelated whitespace change","commit_id":"d6eaa3a23be115305cf34546527015bfdb8799ec"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b8aba96e2fd3286e0b775615c34ea6cacaa2250","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"        self.assertEqual(uuids.request_id,"},{"line_number":1310,"context_line":"                         logging_mock.call_args[0][1][\u0027placement_req_id\u0027])"},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1313,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1314,"context_line":"    def test_create_resource_provider(self, get_rp_mock):"},{"line_number":1315,"context_line":"        \"\"\"Test that _create_resource_provider() sends a dict of resource"},{"line_number":1316,"context_line":"        provider information without a parent provider UUID."}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_89af0fe2","line":1313,"range":{"start_line":1312,"start_character":0,"end_line":1313,"end_character":41},"updated":"2017-12-06 15:07:22.000000000","message":"These got re-added at PS86.  They are (still) not needed, and can be removed...","commit_id":"e125c9240d6e2fe412be58dd75c0519f3a56b4d0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b8aba96e2fd3286e0b775615c34ea6cacaa2250","unresolved":false,"context_lines":[{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1313,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1314,"context_line":"    def test_create_resource_provider(self, get_rp_mock):"},{"line_number":1315,"context_line":"        \"\"\"Test that _create_resource_provider() sends a dict of resource"},{"line_number":1316,"context_line":"        provider information without a parent provider UUID."},{"line_number":1317,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_a9aa13cf","line":1314,"range":{"start_line":1314,"start_character":44,"end_line":1314,"end_character":55},"updated":"2017-12-06 15:07:22.000000000","message":"...here...","commit_id":"e125c9240d6e2fe412be58dd75c0519f3a56b4d0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b8aba96e2fd3286e0b775615c34ea6cacaa2250","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"        name \u003d \u0027computehost\u0027"},{"line_number":1320,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d201)"},{"line_number":1321,"context_line":"        self.ks_adap_mock.post.return_value \u003d resp_mock"},{"line_number":1322,"context_line":"        get_rp_mock.return_value \u003d mock.sentinel.get_rp"},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"        self.client._create_resource_provider(uuid, name)"},{"line_number":1325,"context_line":""}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_69b40b36","line":1322,"range":{"start_line":1322,"start_character":0,"end_line":1322,"end_character":55},"updated":"2017-12-06 15:07:22.000000000","message":"...here...","commit_id":"e125c9240d6e2fe412be58dd75c0519f3a56b4d0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b8aba96e2fd3286e0b775615c34ea6cacaa2250","unresolved":false,"context_lines":[{"line_number":1333,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"},{"line_number":1334,"context_line":"            microversion\u003d\u00271.14\u0027)"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1337,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1338,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":1339,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":1340,"context_line":"        parent_provider_uuid part of the payload is properly specified."}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_09853f5a","line":1337,"range":{"start_line":1336,"start_character":0,"end_line":1337,"end_character":41},"updated":"2017-12-06 15:07:22.000000000","message":"...here...","commit_id":"e125c9240d6e2fe412be58dd75c0519f3a56b4d0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b8aba96e2fd3286e0b775615c34ea6cacaa2250","unresolved":false,"context_lines":[{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":1337,"context_line":"                \u0027_get_resource_provider\u0027)"},{"line_number":1338,"context_line":"    def test_create_resource_provider_with_parent(self, get_rp_mock):"},{"line_number":1339,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":1340,"context_line":"        parent_provider_uuid part of the payload is properly specified."},{"line_number":1341,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_c97e776a","line":1338,"range":{"start_line":1338,"start_character":56,"end_line":1338,"end_character":67},"updated":"2017-12-06 15:07:22.000000000","message":"...here...","commit_id":"e125c9240d6e2fe412be58dd75c0519f3a56b4d0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2b8aba96e2fd3286e0b775615c34ea6cacaa2250","unresolved":false,"context_lines":[{"line_number":1344,"context_line":"        name \u003d \u0027computehost\u0027"},{"line_number":1345,"context_line":"        resp_mock \u003d mock.Mock(status_code\u003d201)"},{"line_number":1346,"context_line":"        self.ks_adap_mock.post.return_value \u003d resp_mock"},{"line_number":1347,"context_line":"        get_rp_mock.return_value \u003d mock.sentinel.get_rp"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        result \u003d self.client._create_resource_provider("},{"line_number":1350,"context_line":"            uuid,"}],"source_content_type":"text/x-python","patch_set":88,"id":"df87a7cf_e981fb4b","line":1347,"range":{"start_line":1347,"start_character":0,"end_line":1347,"end_character":55},"updated":"2017-12-06 15:07:22.000000000","message":"...and here.","commit_id":"e125c9240d6e2fe412be58dd75c0519f3a56b4d0"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"912303f4cd7b9e27fc78d081bbbe7adec74452bf","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"        self.ks_adap_mock.post.assert_called_once_with("},{"line_number":1330,"context_line":"            expected_url, json\u003dexpected_payload, raise_exc\u003dFalse,"},{"line_number":1331,"context_line":"            microversion\u003d\u00271.14\u0027)"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    def test_create_resource_provider_with_parent(self):"},{"line_number":1334,"context_line":"        \"\"\"Test that when specifying a parent provider UUID, that the"},{"line_number":1335,"context_line":"        parent_provider_uuid part of the payload is properly specified."}],"source_content_type":"text/x-python","patch_set":91,"id":"df87a7cf_54cd1264","line":1332,"updated":"2017-12-07 01:45:37.000000000","message":"good to add checking the result of _create_resource_provider(uuid, name)..., i.e. \nself.assertEqual(expected_provider_dict, result)","commit_id":"a0ff3e293684461aecfcb46fcbaf26bd416da798"}]}
