)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1449a394505af2d4df307e9972055e5095f04810","unresolved":false,"context_lines":[{"line_number":7,"context_line":"placement: add ResourceClass and ResourceClassList"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for the placement REST API getting CRUD operations on"},{"line_number":10,"context_line":"resource classes, creates ResourceClass and ResourceClassList objects."},{"line_number":11,"context_line":"In this patch, we only add a ResourceClassList.get_all() method that"},{"line_number":12,"context_line":"merges the standardized resource classes with any custom resource"},{"line_number":13,"context_line":"classes that might have been added to the resource_classes table."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba5da102_e5864812","line":10,"updated":"2016-10-31 13:40:54.000000000","message":"create\n\nif there\u0027s another change","commit_id":"28d884078382c797964af453877264fa8f02036d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b3d3f1a2fb1bd78ff5815235e3bd3b5e294c670b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"placement: add ResourceClass and ResourceClassList"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In preparation for the placement REST API getting CRUD operations on"},{"line_number":10,"context_line":"resource classes, creates ResourceClass and ResourceClassList objects."},{"line_number":11,"context_line":"In this patch, we only add a ResourceClassList.get_all() method that"},{"line_number":12,"context_line":"merges the standardized resource classes with any custom resource"},{"line_number":13,"context_line":"classes that might have been added to the resource_classes table."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba5da102_11229a52","line":10,"in_reply_to":"ba5da102_e5864812","updated":"2016-10-31 15:16:18.000000000","message":"Done","commit_id":"28d884078382c797964af453877264fa8f02036d"}],"nova/objects/resource_provider.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba11f3fc43b4f2062b984411b844b5beeec27872","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"    def _get_all(context):"},{"line_number":1047,"context_line":"        _ensure_rc_cache(context)"},{"line_number":1048,"context_line":"        standards \u003d _RC_CACHE.get_standards()"},{"line_number":1049,"context_line":"        customs \u003d list(context.session.query(models.ResourceClass).all())"},{"line_number":1050,"context_line":"        return standards + customs"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_6a9ece57","line":1049,"updated":"2016-10-27 07:51:29.000000000","message":"I\u0027m lazy and haven\u0027t looked this up yet, but do we check on create of a custom resource class that it\u0027s not in the standard list and fail with a 409 or something? Just wondering if this should be a set.","commit_id":"84a08c96b605708598904b00e0987cef3fd7c3f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"02ca80970c3fdfd6ddd6316e20d17a474ac07add","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"    def _get_all(context):"},{"line_number":1047,"context_line":"        _ensure_rc_cache(context)"},{"line_number":1048,"context_line":"        standards \u003d _RC_CACHE.get_standards()"},{"line_number":1049,"context_line":"        customs \u003d list(context.session.query(models.ResourceClass).all())"},{"line_number":1050,"context_line":"        return standards + customs"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_0d38f0d2","line":1049,"in_reply_to":"ba5da102_6a9ece57","updated":"2016-10-28 08:20:00.000000000","message":"Yes, we return an error if the user attempts to create a custom resource class that is the same as a standard resource class.","commit_id":"84a08c96b605708598904b00e0987cef3fd7c3f9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1fcaaa9515ba45d36934aeea393b85f3711e8d73","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"        _ensure_rc_cache(context)"},{"line_number":1046,"context_line":"        standards \u003d _RC_CACHE.get_standards()"},{"line_number":1047,"context_line":"        customs \u003d list(context.session.query(models.ResourceClass).all())"},{"line_number":1048,"context_line":"        return standards + customs"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    @base.remotable_classmethod"},{"line_number":1051,"context_line":"    def get_all(cls, context):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_f7dabe16","line":1048,"updated":"2016-11-04 22:18:03.000000000","message":"so it could be possible to have a list having two dicts in that with the same ID, right?\n\nFor example, say I\u0027m adding a new custom resource class, it could have an ID \u003d 0 where a standard class could also have an ID \u003d 0, right?\n\nI know you\u0027re providing the create() method in a later change, I just want to make sure we either accept to have the same ID for 2 different resources, or just making sure we don\u0027t use the existing IDs when creating the custom resource.","commit_id":"328c45bd59227f7a06e96a4719510d0de3156cda"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8f4af48ac32dfec76912d9327e482709e034031a","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"        _ensure_rc_cache(context)"},{"line_number":1046,"context_line":"        standards \u003d _RC_CACHE.get_standards()"},{"line_number":1047,"context_line":"        customs \u003d list(context.session.query(models.ResourceClass).all())"},{"line_number":1048,"context_line":"        return standards + customs"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    @base.remotable_classmethod"},{"line_number":1051,"context_line":"    def get_all(cls, context):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_f552c1dc","line":1048,"in_reply_to":"ba5da102_f74d5ec5","updated":"2016-11-07 16:56:38.000000000","message":"Not sure I understand what you\u0027re asking for outside of the content of the next patch. Could you be more specific?","commit_id":"328c45bd59227f7a06e96a4719510d0de3156cda"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1ba4e0decde3eafc2171c2405f2b4ec8706dbece","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"        _ensure_rc_cache(context)"},{"line_number":1046,"context_line":"        standards \u003d _RC_CACHE.get_standards()"},{"line_number":1047,"context_line":"        customs \u003d list(context.session.query(models.ResourceClass).all())"},{"line_number":1048,"context_line":"        return standards + customs"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    @base.remotable_classmethod"},{"line_number":1051,"context_line":"    def get_all(cls, context):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_f74d5ec5","line":1048,"in_reply_to":"ba5da102_f7dabe16","updated":"2016-11-04 22:21:23.000000000","message":"To make it clear, I looked at your next change and I understand that it\u0027s not possible to have the same ID given the custom classes IDs are \u003e10000 but I wonder if we should have some kind of conservative verification (that could be done in a functional test, maybe not in code) before squashing the two lists.","commit_id":"328c45bd59227f7a06e96a4719510d0de3156cda"}],"nova/tests/functional/db/test_resource_class_cache.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1449a394505af2d4df307e9972055e5095f04810","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def test_get_standards(self):"},{"line_number":47,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"},{"line_number":48,"context_line":"        standards \u003d cache.get_standards()"},{"line_number":49,"context_line":"        self.assertEqual(len(standards), len(fields.ResourceClass.STANDARD))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_rc_cache_custom(self):"},{"line_number":52,"context_line":"        \"\"\"Test that non-standard, custom resource classes hit the database and"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5da102_258680b9","line":49,"updated":"2016-10-31 13:40:54.000000000","message":"Is len sufficient here? or rather: Why not check the actual classes?","commit_id":"28d884078382c797964af453877264fa8f02036d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b3d3f1a2fb1bd78ff5815235e3bd3b5e294c670b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def test_get_standards(self):"},{"line_number":47,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"},{"line_number":48,"context_line":"        standards \u003d cache.get_standards()"},{"line_number":49,"context_line":"        self.assertEqual(len(standards), len(fields.ResourceClass.STANDARD))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_rc_cache_custom(self):"},{"line_number":52,"context_line":"        \"\"\"Test that non-standard, custom resource classes hit the database and"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5da102_511c1212","line":49,"in_reply_to":"ba5da102_258680b9","updated":"2016-10-31 15:16:18.000000000","message":"meh, ok I\u0027ll change it.","commit_id":"28d884078382c797964af453877264fa8f02036d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7db27d63e79f932dd5ebb54390080bdbafaa41eb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        cache \u003d rc_cache.ResourceClassCache(self.context)"},{"line_number":48,"context_line":"        standards \u003d cache.get_standards()"},{"line_number":49,"context_line":"        self.assertEqual(len(standards), len(fields.ResourceClass.STANDARD))"},{"line_number":50,"context_line":"        names \u003d (rc[\u0027name\u0027] for rc in standards)"},{"line_number":51,"context_line":"        for name in fields.ResourceClass.STANDARD:"},{"line_number":52,"context_line":"            self.assertIn(name, names)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test_rc_cache_custom(self):"},{"line_number":55,"context_line":"        \"\"\"Test that non-standard, custom resource classes hit the database and"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_b0e361d8","line":52,"range":{"start_line":50,"start_character":8,"end_line":52,"end_character":38},"updated":"2016-11-02 13:39:04.000000000","message":"Could also just use self.assertItemsEqual:\n\nhttps://docs.python.org/2/library/unittest.html#unittest.TestCase.assertItemsEqual\n\nI was recently tipped off to that one.","commit_id":"5120bf909e32a99d82fd9f817746cdf2107f69e9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1fcaaa9515ba45d36934aeea393b85f3711e8d73","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.assertEqual(len(standards), len(fields.ResourceClass.STANDARD))"},{"line_number":51,"context_line":"        names \u003d (rc[\u0027name\u0027] for rc in standards)"},{"line_number":52,"context_line":"        for name in fields.ResourceClass.STANDARD:"},{"line_number":53,"context_line":"            self.assertIn(name, names)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_rc_cache_custom(self):"},{"line_number":56,"context_line":"        \"\"\"Test that non-standard, custom resource classes hit the database and"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_f748fece","line":53,"updated":"2016-11-04 22:18:03.000000000","message":"I\u0027d have appreciated to also verify the ID, but that\u0027s a nit.","commit_id":"328c45bd59227f7a06e96a4719510d0de3156cda"}],"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":"ba11f3fc43b4f2062b984411b844b5beeec27872","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def setUp(self):"},{"line_number":46,"context_line":"        super(ResourceProviderBaseCase, self).setUp()"},{"line_number":47,"context_line":"        self.useFixture(fixtures.Database())"},{"line_number":48,"context_line":"        self.api_db \u003d self.useFixture(fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":49,"context_line":"        self.context \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _make_allocation(self, rp_uuid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_aac70644","line":48,"range":{"start_line":47,"start_character":8,"end_line":48,"end_character":72},"updated":"2016-10-27 07:51:29.000000000","message":"This seems redundant, I thought TestCase already had these DB fixtures.","commit_id":"84a08c96b605708598904b00e0987cef3fd7c3f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"02ca80970c3fdfd6ddd6316e20d17a474ac07add","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def setUp(self):"},{"line_number":46,"context_line":"        super(ResourceProviderBaseCase, self).setUp()"},{"line_number":47,"context_line":"        self.useFixture(fixtures.Database())"},{"line_number":48,"context_line":"        self.api_db \u003d self.useFixture(fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":49,"context_line":"        self.context \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _make_allocation(self, rp_uuid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_ed4bbc29","line":48,"range":{"start_line":47,"start_character":8,"end_line":48,"end_character":72},"in_reply_to":"ba5da102_a5e4970d","updated":"2016-10-28 08:20:00.000000000","message":"Done","commit_id":"84a08c96b605708598904b00e0987cef3fd7c3f9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"71a055fe9b7571a09b4e6ab00b77312b12f7f7b2","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def setUp(self):"},{"line_number":46,"context_line":"        super(ResourceProviderBaseCase, self).setUp()"},{"line_number":47,"context_line":"        self.useFixture(fixtures.Database())"},{"line_number":48,"context_line":"        self.api_db \u003d self.useFixture(fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":49,"context_line":"        self.context \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _make_allocation(self, rp_uuid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_a5e4970d","line":48,"range":{"start_line":47,"start_character":8,"end_line":48,"end_character":72},"in_reply_to":"ba5da102_aac70644","updated":"2016-10-27 07:55:09.000000000","message":"Yeah set USES_DB_SELF\u003dTrue and inherit NoDbTestCase:\n\nhttps://github.com/openstack/nova/blob/master/nova/test.py#L174","commit_id":"84a08c96b605708598904b00e0987cef3fd7c3f9"}]}
