)]}'
{"nova/api/openstack/placement/handlers/inventory.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1dbbf9d5df2c0f951abb454a5a8e2ee662faa209","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":409,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":410,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    response \u003d req.response"},{"line_number":414,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_58c01751","line":411,"updated":"2017-05-03 17:13:46.000000000","message":"Unfortunately, we can\u0027t do this -- at least right now. The reason is because we need callers to be able to differentiate between concurrent updates to the provider\u0027s inventory and the fact that the provider has allocations against that inventory.\n\nThe former error is something that can be retried by the caller and the latter is not. So, although it sucks, until we have error codes (not HTTP codes, but error/fault codes), we will need to have error text in the response body that indicates the difference between these two 409 Conflict reasons.","commit_id":"2b27f29d3a4528a30ebb1c40e41fde91b4f99be8"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"175399aabfbe699422cbc6e7fe88807d9ec03701","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":409,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":410,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    response \u003d req.response"},{"line_number":414,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_7ec5fb5a","line":411,"in_reply_to":"5ff73747_58c01751","updated":"2017-05-03 18:15:40.000000000","message":"Jay, isn\u0027t it just a matter of splitting the error handling in two separate messages, one for ConcurrentUpdateDetected and another for InventoryInUse ? We\u0027d continue with the idea of using specific error instead of dumping DB API error, but now we\u0027d return a more specific error message for each case, both raising HTTPConflict 409. Thanks.","commit_id":"2b27f29d3a4528a30ebb1c40e41fde91b4f99be8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a9f01dfaa5134a96fbbe15f03400db605c56410b","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":409,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":410,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    response \u003d req.response"},{"line_number":414,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_9ec44742","line":411,"in_reply_to":"5ff73747_7ec5fb5a","updated":"2017-05-03 18:18:15.000000000","message":"Yup, exactly as I said in the main review comment (not the inline one here, sorry...). I\u0027d be happy if you changed this to have two separate messages for each distinct error type.","commit_id":"2b27f29d3a4528a30ebb1c40e41fde91b4f99be8"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4aa4c9a70d25ecf940da49a81e0a32e4801b1716","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    except exception.ConcurrentUpdateDetected:"},{"line_number":407,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":408,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":409,"context_line":"              \u0027 %(rp_uuid)s because the inventory is being \u0027"},{"line_number":410,"context_line":"              \u0027concurrently updated\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":"    except exception.InventoryInUse:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_f35a24f1","line":409,"range":{"start_line":409,"start_character":15,"end_line":409,"end_character":16},"updated":"2017-05-09 09:17:07.000000000","message":"nit: can move this blank to line 408 to make it consistent","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"99141f0d7a12ca6063eeb888df03be3ed26cce4b","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    except exception.ConcurrentUpdateDetected:"},{"line_number":407,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":408,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":409,"context_line":"              \u0027 %(rp_uuid)s because the inventory is being \u0027"},{"line_number":410,"context_line":"              \u0027concurrently updated\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":"    except exception.InventoryInUse:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_1d6de103","line":409,"range":{"start_line":409,"start_character":15,"end_line":409,"end_character":16},"in_reply_to":"3f044301_f35a24f1","updated":"2017-05-30 17:06:49.000000000","message":"Hope its more consistent now.","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ac7e95d22dbf474dcea0d4414eff8b29d561124b","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":408,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":409,"context_line":"              \u0027 %(rp_uuid)s because the inventory is being \u0027"},{"line_number":410,"context_line":"              \u0027concurrently updated\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":"    except exception.InventoryInUse:"},{"line_number":413,"context_line":"        raise webob.exc.HTTPConflict("}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_832bd892","line":410,"updated":"2017-05-30 14:13:25.000000000","message":"Rafa, please change this to read \"because the inventory was updated by another process. Please retry your request.\"","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"99141f0d7a12ca6063eeb888df03be3ed26cce4b","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":408,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":409,"context_line":"              \u0027 %(rp_uuid)s because the inventory is being \u0027"},{"line_number":410,"context_line":"              \u0027concurrently updated\u0027)"},{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":"    except exception.InventoryInUse:"},{"line_number":413,"context_line":"        raise webob.exc.HTTPConflict("}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_38043315","line":410,"in_reply_to":"df140735_832bd892","updated":"2017-05-30 17:06:49.000000000","message":"Like it","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ac7e95d22dbf474dcea0d4414eff8b29d561124b","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":414,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":415,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":416,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    response \u003d req.response"},{"line_number":419,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_631a047e","line":416,"updated":"2017-05-30 14:13:25.000000000","message":"++","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"99141f0d7a12ca6063eeb888df03be3ed26cce4b","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":414,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":415,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":416,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    response \u003d req.response"},{"line_number":419,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_d812d758","line":416,"in_reply_to":"df140735_631a047e","updated":"2017-05-30 17:06:49.000000000","message":":)","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7031b7a511e4fae259ae3055c6931538d4abcd5b","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        context, uuid)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    inventories \u003d objects.InventoryList(objects\u003d[])"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    try:"},{"line_number":405,"context_line":"        resource_provider.set_inventory(inventories)"},{"line_number":406,"context_line":"    except (exception.ConcurrentUpdateDetected,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_e56a2a18","side":"PARENT","line":403,"updated":"2017-06-02 13:56:47.000000000","message":"unrelated","commit_id":"e3fd7e9bb1db7f13a0b142400816322450bc92b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7031b7a511e4fae259ae3055c6931538d4abcd5b","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            _(\u0027Unable to delete inventory for resource provider \u0027"},{"line_number":408,"context_line":"              \u0027%(rp_uuid)s because the inventory was updated by \u0027"},{"line_number":409,"context_line":"              \u0027another process. Please retry your request.\u0027)"},{"line_number":410,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":411,"context_line":"    except exception.InventoryInUse:"},{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_45ce762d","line":410,"range":{"start_line":410,"start_character":28,"end_line":410,"end_character":50},"updated":"2017-06-02 13:56:47.000000000","message":"Could just use uuid in scope.","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"46bc7102c4f2b7de2bebc4bc450f65f3bb3059b8","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            _(\u0027Unable to delete inventory for resource provider \u0027"},{"line_number":408,"context_line":"              \u0027%(rp_uuid)s because the inventory was updated by \u0027"},{"line_number":409,"context_line":"              \u0027another process. Please retry your request.\u0027)"},{"line_number":410,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":411,"context_line":"    except exception.InventoryInUse:"},{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_28435715","line":410,"range":{"start_line":410,"start_character":28,"end_line":410,"end_character":50},"in_reply_to":"df140735_45ce762d","updated":"2017-06-02 14:13:40.000000000","message":"ack","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7031b7a511e4fae259ae3055c6931538d4abcd5b","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    except exception.InventoryInUse:"},{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":414,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":415,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    response \u003d req.response"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_85bfee5f","line":414,"range":{"start_line":414,"start_character":56,"end_line":414,"end_character":59},"updated":"2017-06-02 13:56:47.000000000","message":"End with a period.","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7031b7a511e4fae259ae3055c6931538d4abcd5b","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    except exception.InventoryInUse:"},{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":414,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":415,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    response \u003d req.response"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_e5010a3a","line":414,"range":{"start_line":414,"start_character":15,"end_line":414,"end_character":16},"updated":"2017-06-02 13:56:47.000000000","message":"nit: I usually want to see the spaces at the end so everything lines up on the left side.","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"46bc7102c4f2b7de2bebc4bc450f65f3bb3059b8","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    except exception.InventoryInUse:"},{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":414,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":415,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    response \u003d req.response"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_6866efc3","line":414,"range":{"start_line":414,"start_character":56,"end_line":414,"end_character":59},"in_reply_to":"df140735_85bfee5f","updated":"2017-06-02 14:13:40.000000000","message":"ack","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"46bc7102c4f2b7de2bebc4bc450f65f3bb3059b8","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    except exception.InventoryInUse:"},{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":414,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":415,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    response \u003d req.response"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_08753364","line":414,"range":{"start_line":414,"start_character":15,"end_line":414,"end_character":16},"in_reply_to":"df140735_e5010a3a","updated":"2017-06-02 14:13:40.000000000","message":"ack","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7031b7a511e4fae259ae3055c6931538d4abcd5b","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":414,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":415,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    response \u003d req.response"},{"line_number":418,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_65f61a66","line":415,"range":{"start_line":415,"start_character":28,"end_line":415,"end_character":50},"updated":"2017-06-02 13:56:47.000000000","message":"same","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"46bc7102c4f2b7de2bebc4bc450f65f3bb3059b8","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":413,"context_line":"            _(\u0027Unable to delete inventory for resource provider\u0027"},{"line_number":414,"context_line":"              \u0027 %(rp_uuid)s because the inventory is in use\u0027)"},{"line_number":415,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    response \u003d req.response"},{"line_number":418,"context_line":"    response.status \u003d 204"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_a86767b7","line":415,"range":{"start_line":415,"start_character":28,"end_line":415,"end_character":50},"in_reply_to":"df140735_65f61a66","updated":"2017-06-02 14:13:40.000000000","message":"ack","commit_id":"6c71e49dd504428e5e9594e74f20a2bcdbaeb5ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d003446eec1a8e922a326c7e0c6aaf3c830bb234","unresolved":false,"context_lines":[{"line_number":411,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":412,"context_line":"    except exception.InventoryInUse:"},{"line_number":413,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":414,"context_line":"            _(\u0027Unable to delete inventory for resource provider \u0027"},{"line_number":415,"context_line":"              \u0027%(rp_uuid)s because the inventory is in use.\u0027)"},{"line_number":416,"context_line":"              % {\u0027rp_uuid\u0027: resource_provider.uuid})"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df3967d1_4557ef03","line":414,"updated":"2017-08-01 21:46:25.000000000","message":"This broke some hacky stuff we have in the scheduler report client when trying to delete inventory and now ironic CI jobs are spewing errors.\n\nhttps://bugs.launchpad.net/nova/+bug/1708031","commit_id":"cc6be41491a4780acbcebdd057da67d3e1ef10c6"}],"nova/tests/functional/api/openstack/placement/gabbits/with-allocations.yaml":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ac7e95d22dbf474dcea0d4414eff8b29d561124b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  response_headers:"},{"line_number":41,"context_line":"      content-type: /application/json/"},{"line_number":42,"context_line":"  response_strings:"},{"line_number":43,"context_line":"      - \"Unable to delete inventory for resource provider $ENVIRON[\u0027RP_UUID\u0027] because the inventory is in use\""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df140735_a32edca2","line":43,"updated":"2017-05-30 14:13:25.000000000","message":"note that you don\u0027t need to enclose the above in double quotes :)","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"},{"author":{"_account_id":8175,"name":"Rafael Folco","email":"rfolco@redhat.com","username":"rfolco"},"change_message_id":"99141f0d7a12ca6063eeb888df03be3ed26cce4b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  response_headers:"},{"line_number":41,"context_line":"      content-type: /application/json/"},{"line_number":42,"context_line":"  response_strings:"},{"line_number":43,"context_line":"      - \"Unable to delete inventory for resource provider $ENVIRON[\u0027RP_UUID\u0027] because the inventory is in use\""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"df140735_5884875e","line":43,"in_reply_to":"df140735_a32edca2","updated":"2017-05-30 17:06:49.000000000","message":"I just copied the \"standard\" :)","commit_id":"03c9c7f55567bce526b77d7f8e5079d30ab7ba9c"}]}
