)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0abaf86aa1f6487f84c1eb5fc6df380d8ba7b80","unresolved":false,"context_lines":[{"line_number":10,"context_line":"when an Inventory object in the supplied InventoryList object was using"},{"line_number":11,"context_line":"a resource class that did not exist in the resource class cache. This"},{"line_number":12,"context_line":"patch fixes that by having the string_from_id() and id_from_string()"},{"line_number":13,"context_line":"methods of the resource class cache raise KeyError instead of returning"},{"line_number":14,"context_line":"None. We raise specific ResourceClassNotFound and"},{"line_number":15,"context_line":"InventoryWithResourceClassNotFound exception subclasses to differentiate"},{"line_number":16,"context_line":"in the inventory API handler between an unknown resource class and a"},{"line_number":17,"context_line":"known resource class that doesn\u0027t exist in a given resource provider\u0027s"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba5da102_9f08172a","line":14,"range":{"start_line":13,"start_character":36,"end_line":14,"end_character":4},"updated":"2016-11-02 21:26:42.000000000","message":"This is no longer true.","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"}],"nova/api/openstack/placement/handlers/inventory.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"365a92390b653ffc7c1d7b08b6f413abece54b84","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    except exception.NotFound as exc:"},{"line_number":344,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":345,"context_line":"            _(\u0027Bad inventory %(class)s for resource provider \u0027"},{"line_number":346,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027class\u0027: exc,"},{"line_number":347,"context_line":"                                           \u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":348,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":349,"context_line":"            json_formatter\u003dutil.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_d7dbddeb","line":346,"range":{"start_line":346,"start_character":43,"end_line":346,"end_character":55},"updated":"2016-10-28 11:53:50.000000000","message":"Why do we need to return the same value as the following \"error\" here ?","commit_id":"c6004c42c00b846ea872ff50a41e376e9dcd09e3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9625b1d3eee67291547cebef0080a7193876a4e3","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    except exception.NotFound as exc:"},{"line_number":344,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":345,"context_line":"            _(\u0027Bad inventory %(class)s for resource provider \u0027"},{"line_number":346,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027class\u0027: exc,"},{"line_number":347,"context_line":"                                           \u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":348,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":349,"context_line":"            json_formatter\u003dutil.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_a3e8c5b5","line":346,"range":{"start_line":346,"start_character":43,"end_line":346,"end_character":55},"in_reply_to":"ba5da102_d7dbddeb","updated":"2016-10-31 15:54:37.000000000","message":"Done","commit_id":"c6004c42c00b846ea872ff50a41e376e9dcd09e3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3cf2e8793172e07c58f36713552814e87e202ca7","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    except exception.NotFound as exc:"},{"line_number":344,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":345,"context_line":"            _(\u0027Bad inventory %(class)s for resource provider \u0027"},{"line_number":346,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027class\u0027: exc,"},{"line_number":347,"context_line":"                                           \u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":348,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":349,"context_line":"            json_formatter\u003dutil.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_62030e10","line":346,"in_reply_to":"ba5da102_d7dbddeb","updated":"2016-10-31 13:19:13.000000000","message":"Yeah, this is going to lead to a rather messy or at least redundant error response","commit_id":"c6004c42c00b846ea872ff50a41e376e9dcd09e3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b6ddd10b7f0734f299353a087a0eae7dddf3cb40","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        resource_provider.set_inventory(inventories)"},{"line_number":343,"context_line":"    except exception.NotFound as exc:"},{"line_number":344,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":345,"context_line":"            _(\u0027Unknown resource class in inventory for resource provider \u0027"},{"line_number":346,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":347,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":348,"context_line":"            json_formatter\u003dutil.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5da102_64ecb3f3","line":345,"range":{"start_line":345,"start_character":15,"end_line":345,"end_character":50},"updated":"2016-11-02 12:14:58.000000000","message":"We also raise NotFound at  https://github.com/openstack/nova/blob/master/nova/objects/resource_provider.py#L162, that isn\u0027t the case of \u0027unknown resource class\u0027","commit_id":"05f911eda27a3b1f8ac46435d14c1516ce914dd3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e52bfa1f704552aab461c3868e37dcab03202f5f","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        resource_provider.set_inventory(inventories)"},{"line_number":343,"context_line":"    except exception.NotFound as exc:"},{"line_number":344,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":345,"context_line":"            _(\u0027Unknown resource class in inventory for resource provider \u0027"},{"line_number":346,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":347,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":348,"context_line":"            json_formatter\u003dutil.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5da102_1fd0a01e","line":345,"range":{"start_line":345,"start_character":15,"end_line":345,"end_character":50},"in_reply_to":"ba5da102_64ecb3f3","updated":"2016-11-02 13:14:50.000000000","message":"Hmm, nice catch Alex. I guess we\u0027ll need to raise specific NotFound subclass exceptions in order to differentiate in this block. I\u0027ll fix up shortly.","commit_id":"05f911eda27a3b1f8ac46435d14c1516ce914dd3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"802f244bc682129faf4aab0a078e8f940154048d","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":348,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":349,"context_line":"    except exception.InventoryWithResourceClassNotFound as exc:"},{"line_number":350,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":351,"context_line":"            _(\u0027No inventory record with resource class for resource provider \u0027"},{"line_number":352,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":353,"context_line":"                                           \u0027error\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_2b98a31b","line":350,"range":{"start_line":350,"start_character":13,"end_line":350,"end_character":39},"updated":"2016-11-03 08:09:20.000000000","message":"409 is better I guess. This is error which is triggered by race. The code will check the existed inventories at https://github.com/openstack/nova/blob/master/nova/objects/resource_provider.py#L267\n\nThen when the code update the inventory, the inventory disappeared. So this shouldn\u0027t 400","commit_id":"6a42f8e257633351f6499f62bb8944bacdb7f642"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4519a1371f962a49f44cab79be8b7899de03c4c7","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":348,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":349,"context_line":"    except exception.InventoryWithResourceClassNotFound as exc:"},{"line_number":350,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":351,"context_line":"            _(\u0027No inventory record with resource class for resource provider \u0027"},{"line_number":352,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027rp_uuid\u0027: resource_provider.uuid,"},{"line_number":353,"context_line":"                                           \u0027error\u0027: exc},"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_fb910748","line":350,"range":{"start_line":350,"start_character":13,"end_line":350,"end_character":39},"in_reply_to":"ba5da102_2b98a31b","updated":"2016-11-03 14:29:59.000000000","message":"OK, yes, that makes sense. I will fix up.","commit_id":"6a42f8e257633351f6499f62bb8944bacdb7f642"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bfeb61061cbe399e9c39ef59a44a1b0137648b3","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                                           \u0027error\u0027: exc},"},{"line_number":348,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":349,"context_line":"    except exception.InventoryWithResourceClassNotFound as exc:"},{"line_number":350,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":351,"context_line":"            _(\u0027Race condition detected when setting inventory. No inventory \u0027"},{"line_number":352,"context_line":"              \u0027record with resource class for resource provider \u0027"},{"line_number":353,"context_line":"              \u0027%(rp_uuid)s: %(error)s\u0027) % {\u0027rp_uuid\u0027: resource_provider.uuid,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5da102_d9241db4","line":350,"range":{"start_line":350,"start_character":24,"end_line":350,"end_character":36},"updated":"2016-11-04 15:22:19.000000000","message":"We don\u0027t have anything testing this case...","commit_id":"69bac2f99c01b3e5bc09179c03fd24606e12d041"}],"nova/db/sqlalchemy/resource_class_cache.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e82d1d5acdae4757a7b2cfa1cde58f3db76fe0a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            # Otherwise, check the database table"},{"line_number":92,"context_line":"            _refresh_from_db(self.ctx, self)"},{"line_number":93,"context_line":"            return self.id_cache[rc_str]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def string_from_id(self, rc_id):"},{"line_number":96,"context_line":"        \"\"\"The reverse of the id_from_string() method. Given a supplied numeric"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_d06b75b7","line":93,"updated":"2016-11-02 13:34:49.000000000","message":"Would it help if we just raised ResourceClassNotFound from here directly? Same in string_from_id? Then you don\u0027t have to handle the KeyError all over the object code, and risk missing one so you leak a KeyError up to the REST API layer.","commit_id":"6b1acd372209d5aeb79f8ec3533a33265bc86be7"}],"nova/objects/resource_provider.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e82d1d5acdae4757a7b2cfa1cde58f3db76fe0a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    try:"},{"line_number":197,"context_line":"        rc_id \u003d _RC_CACHE.id_from_string(inventory.resource_class)"},{"line_number":198,"context_line":"    except KeyError:"},{"line_number":199,"context_line":"        raise exception.NotFound(\"No such resource class \u0027%s\u0027\" %"},{"line_number":200,"context_line":"                                 inventory.resource_class)"},{"line_number":201,"context_line":"    inv_list \u003d InventoryList(objects\u003d[inventory])"},{"line_number":202,"context_line":"    conn \u003d context.session.connection()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_5556772a","line":199,"range":{"start_line":199,"start_character":24,"end_line":199,"end_character":32},"updated":"2016-11-02 13:34:49.000000000","message":"ResourceClassNotFound?","commit_id":"6b1acd372209d5aeb79f8ec3533a33265bc86be7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e82d1d5acdae4757a7b2cfa1cde58f3db76fe0a","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    try:"},{"line_number":214,"context_line":"        rc_id \u003d _RC_CACHE.id_from_string(inventory.resource_class)"},{"line_number":215,"context_line":"    except KeyError:"},{"line_number":216,"context_line":"        raise exception.NotFound(\"No such resource class \u0027%s\u0027\" %"},{"line_number":217,"context_line":"                                 inventory.resource_class)"},{"line_number":218,"context_line":"    inv_list \u003d InventoryList(objects\u003d[inventory])"},{"line_number":219,"context_line":"    conn \u003d context.session.connection()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_9532cf0e","line":216,"range":{"start_line":216,"start_character":24,"end_line":216,"end_character":32},"updated":"2016-11-02 13:34:49.000000000","message":"ResourceClassNotFound?","commit_id":"6b1acd372209d5aeb79f8ec3533a33265bc86be7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e82d1d5acdae4757a7b2cfa1cde58f3db76fe0a","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    # Short-circuit out if there are any allocations with string"},{"line_number":260,"context_line":"    # resource class names that don\u0027t exist."},{"line_number":261,"context_line":"    for inv in inv_list.objects:"},{"line_number":262,"context_line":"        try:"},{"line_number":263,"context_line":"            _RC_CACHE.id_from_string(inv.resource_class)"},{"line_number":264,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_90273db5","line":261,"range":{"start_line":261,"start_character":15,"end_line":261,"end_character":31},"updated":"2016-11-02 13:34:49.000000000","message":"fwiw I don\u0027t think you have to iterate over the .objects attribute explicitly.","commit_id":"6b1acd372209d5aeb79f8ec3533a33265bc86be7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5e82d1d5acdae4757a7b2cfa1cde58f3db76fe0a","unresolved":false,"context_lines":[{"line_number":875,"context_line":"            try:"},{"line_number":876,"context_line":"                _RC_CACHE.id_from_string(alloc.resource_class)"},{"line_number":877,"context_line":"            except KeyError:"},{"line_number":878,"context_line":"                raise exception.NotFound(\"No such resource class \u0027%s\u0027\" %"},{"line_number":879,"context_line":"                                         alloc.resource_class)"},{"line_number":880,"context_line":""},{"line_number":881,"context_line":"        # Before writing any allocation records, we check that the submitted"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_503205f3","line":878,"range":{"start_line":878,"start_character":32,"end_line":878,"end_character":40},"updated":"2016-11-02 13:34:49.000000000","message":"ResourceClassNotFound?","commit_id":"6b1acd372209d5aeb79f8ec3533a33265bc86be7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0abaf86aa1f6487f84c1eb5fc6df380d8ba7b80","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        _ensure_rc_cache(context)"},{"line_number":858,"context_line":"        conn \u003d context.session.connection()"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # Short-circuit out if there are any allocations with string"},{"line_number":861,"context_line":"        # resource class names that don\u0027t exist."},{"line_number":862,"context_line":"        for alloc in allocs:"},{"line_number":863,"context_line":"            if _RC_CACHE.id_from_string(alloc.resource_class) is None:"},{"line_number":864,"context_line":"                raise exception.NotFound(\"No such resource class \u0027%s\u0027\" %"},{"line_number":865,"context_line":"                                         alloc.resource_class)"},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_ff3f53b1","side":"PARENT","line":863,"range":{"start_line":860,"start_character":8,"end_line":863,"end_character":61},"updated":"2016-11-02 21:26:42.000000000","message":"Why is this removed?","commit_id":"ad695a2691abe2aaadbb29ee970de4ba8a74824d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0c2fe5dabcdfb6c87e3c18b76824ef9ca6231547","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        _ensure_rc_cache(context)"},{"line_number":858,"context_line":"        conn \u003d context.session.connection()"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # Short-circuit out if there are any allocations with string"},{"line_number":861,"context_line":"        # resource class names that don\u0027t exist."},{"line_number":862,"context_line":"        for alloc in allocs:"},{"line_number":863,"context_line":"            if _RC_CACHE.id_from_string(alloc.resource_class) is None:"},{"line_number":864,"context_line":"                raise exception.NotFound(\"No such resource class \u0027%s\u0027\" %"},{"line_number":865,"context_line":"                                         alloc.resource_class)"},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_7a4d0e99","side":"PARENT","line":863,"range":{"start_line":860,"start_character":8,"end_line":863,"end_character":61},"in_reply_to":"ba5da102_1a8892c4","updated":"2016-11-03 00:53:40.000000000","message":"Then again, short-circuiting here would mean we wouldn\u0027t have to rollback the trx started on line 876. OK, will put back...","commit_id":"ad695a2691abe2aaadbb29ee970de4ba8a74824d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3d7830501dbc4dfe26a67256508cd219bbac6a11","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        _ensure_rc_cache(context)"},{"line_number":858,"context_line":"        conn \u003d context.session.connection()"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # Short-circuit out if there are any allocations with string"},{"line_number":861,"context_line":"        # resource class names that don\u0027t exist."},{"line_number":862,"context_line":"        for alloc in allocs:"},{"line_number":863,"context_line":"            if _RC_CACHE.id_from_string(alloc.resource_class) is None:"},{"line_number":864,"context_line":"                raise exception.NotFound(\"No such resource class \u0027%s\u0027\" %"},{"line_number":865,"context_line":"                                         alloc.resource_class)"},{"line_number":866,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_1a8892c4","side":"PARENT","line":863,"range":{"start_line":860,"start_character":8,"end_line":863,"end_character":61},"in_reply_to":"ba5da102_ff3f53b1","updated":"2016-11-03 00:49:35.000000000","message":"Because the same effect happens in _check_capacity_exceeded() which is called on line 879 below.","commit_id":"ad695a2691abe2aaadbb29ee970de4ba8a74824d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4fcfd78902c3a4485eea3a1319010e6489cdd0c9","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            classes or the DB."},{"line_number":263,"context_line":"    \"\"\""},{"line_number":264,"context_line":"    _ensure_rc_cache(context)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    conn \u003d context.session.connection()"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    existing_resources \u003d _get_current_inventory_resources(conn, rp)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_ab611307","line":265,"updated":"2016-11-03 08:10:54.000000000","message":"extra change at here.","commit_id":"6a42f8e257633351f6499f62bb8944bacdb7f642"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4519a1371f962a49f44cab79be8b7899de03c4c7","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            classes or the DB."},{"line_number":263,"context_line":"    \"\"\""},{"line_number":264,"context_line":"    _ensure_rc_cache(context)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    conn \u003d context.session.connection()"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    existing_resources \u003d _get_current_inventory_resources(conn, rp)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_3b98df69","line":265,"in_reply_to":"ba5da102_ab611307","updated":"2016-11-03 14:29:59.000000000","message":"Done","commit_id":"6a42f8e257633351f6499f62bb8944bacdb7f642"}],"nova/tests/functional/db/test_resource_class_cache.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"018e812d28c4c418ee998569f4a9b0d3dfa4ea5a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.assertEqual(1001, cache.id_from_string(\u0027IRON_NFV\u0027))"},{"line_number":71,"context_line":"            self.assertFalse(sel_mock.called)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_rc_cache_miss(self):"},{"line_number":74,"context_line":"        \"\"\"Test that we raise KeyError if an unknown resource class ID or"},{"line_number":75,"context_line":"        string is searched for."},{"line_number":76,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_4a410a0b","line":73,"updated":"2016-10-27 06:54:00.000000000","message":"Doesn\u0027t seem necessary since you have this covered above but OK.","commit_id":"c42260036efa6ad65f80dae68d433f72bb4aec80"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0abaf86aa1f6487f84c1eb5fc6df380d8ba7b80","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Haven\u0027t added anything to the DB yet, so should raise KeyError"},{"line_number":54,"context_line":"        self.assertRaises(exception.ResourceClassNotFound,"},{"line_number":55,"context_line":"                          cache.string_from_id, 1001)"},{"line_number":56,"context_line":"        self.assertRaises(exception.ResourceClassNotFound,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_3fb46b33","line":53,"range":{"start_line":53,"start_character":64,"end_line":53,"end_character":72},"updated":"2016-11-02 21:26:42.000000000","message":"nit: no longer true","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3d7830501dbc4dfe26a67256508cd219bbac6a11","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Haven\u0027t added anything to the DB yet, so should raise KeyError"},{"line_number":54,"context_line":"        self.assertRaises(exception.ResourceClassNotFound,"},{"line_number":55,"context_line":"                          cache.string_from_id, 1001)"},{"line_number":56,"context_line":"        self.assertRaises(exception.ResourceClassNotFound,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_5a8e8ad0","line":53,"range":{"start_line":53,"start_character":64,"end_line":53,"end_character":72},"in_reply_to":"ba5da102_3fb46b33","updated":"2016-11-03 00:49:35.000000000","message":"Done","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0abaf86aa1f6487f84c1eb5fc6df380d8ba7b80","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self.assertFalse(sel_mock.called)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_rc_cache_miss(self):"},{"line_number":77,"context_line":"        \"\"\"Test that we raise KeyError if an unknown resource class ID or"},{"line_number":78,"context_line":"        string is searched for."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_7f88a371","line":77,"range":{"start_line":77,"start_character":30,"end_line":77,"end_character":38},"updated":"2016-11-02 21:26:42.000000000","message":"ditto","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3d7830501dbc4dfe26a67256508cd219bbac6a11","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self.assertFalse(sel_mock.called)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_rc_cache_miss(self):"},{"line_number":77,"context_line":"        \"\"\"Test that we raise KeyError if an unknown resource class ID or"},{"line_number":78,"context_line":"        string is searched for."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_7abfce60","line":77,"range":{"start_line":77,"start_character":30,"end_line":77,"end_character":38},"in_reply_to":"ba5da102_7f88a371","updated":"2016-11-03 00:49:35.000000000","message":"Done","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"}],"nova/tests/functional/db/test_resource_provider.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0abaf86aa1f6487f84c1eb5fc6df380d8ba7b80","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        )"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        inv_list \u003d objects.InventoryList(objects\u003d[inv])"},{"line_number":226,"context_line":"        self.assertRaises(exception.NotFound, rp.set_inventory, inv_list)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @mock.patch(\u0027nova.objects.resource_provider.LOG\u0027)"},{"line_number":229,"context_line":"    def test_set_inventory_over_capacity(self, mock_log):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_bf7ebb67","line":226,"range":{"start_line":226,"start_character":36,"end_line":226,"end_character":44},"updated":"2016-11-02 21:26:42.000000000","message":"Do you want to be more specific?","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3d7830501dbc4dfe26a67256508cd219bbac6a11","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        )"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        inv_list \u003d objects.InventoryList(objects\u003d[inv])"},{"line_number":226,"context_line":"        self.assertRaises(exception.NotFound, rp.set_inventory, inv_list)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @mock.patch(\u0027nova.objects.resource_provider.LOG\u0027)"},{"line_number":229,"context_line":"    def test_set_inventory_over_capacity(self, mock_log):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_9ac2e2e7","line":226,"range":{"start_line":226,"start_character":36,"end_line":226,"end_character":44},"in_reply_to":"ba5da102_bf7ebb67","updated":"2016-11-03 00:49:35.000000000","message":"Done","commit_id":"f32b0f27214bd3a3263cf97b23ca48706aa37ccf"}]}
