)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bb23345cf60427dd0805c17dee535a0894e2f7c0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Commit 1fa07bd471bd675321021d213a80930ff44c6056 added support"},{"line_number":10,"context_line":"for objects. This patch ensure that the parsing of the instances"},{"line_number":11,"context_line":"is correct."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ib028baab4d4c823f22c371a83f7a813c24d77570"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_9989ccc9","line":11,"updated":"2014-08-08 15:13:57.000000000","message":"No it didn\u0027t. It simply changed the syntax by which we arrive at the object classes. Can you provide a bug or other justification for what you\u0027re changing here and what is fixed? I don\u0027t get it from a quick look.","commit_id":"89ff295746b59993c4b8bda47a02d199f5518636"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"54316a463d06cf5e4ca78b6789b795f38081a71f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Commit 1fa07bd471bd675321021d213a80930ff44c6056 added support"},{"line_number":10,"context_line":"for objects. This patch ensure that the parsing of the instances"},{"line_number":11,"context_line":"is correct."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ib028baab4d4c823f22c371a83f7a813c24d77570"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_1943fc6b","line":11,"in_reply_to":"baada198_9989ccc9","updated":"2014-08-08 15:15:25.000000000","message":"sure","commit_id":"89ff295746b59993c4b8bda47a02d199f5518636"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea57b1e04a906a6ba82372af41cce0b59e76ccd4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Commit 1023e703bd41c2a42b1159af0d9e907e94440b34 added support"},{"line_number":10,"context_line":"for objects. This patch ensures that the parsing of the instances"},{"line_number":11,"context_line":"is correct."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #1354664"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib028baab4d4c823f22c371a83f7a813c24d77570"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_37c5ef8f","line":12,"updated":"2014-08-11 14:29:33.000000000","message":"Can you please actually describe the fix? There is enough in this patch with all the renaming and test fixes that a year down the road, it will be really hard to tell what the actual functional change was.","commit_id":"d05862e216ad51257edd544d1cb566adeca48618"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3f11aa1e668b46345538f3f4a4ba15b8c4e72ae3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Commit 1023e703bd41c2a42b1159af0d9e907e94440b34 added support"},{"line_number":10,"context_line":"for objects. This patch ensures that the parsing of the instances"},{"line_number":11,"context_line":"is correct."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-bug: #1354664"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib028baab4d4c823f22c371a83f7a813c24d77570"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_1a65721c","line":12,"in_reply_to":"baada198_37c5ef8f","updated":"2014-08-11 15:11:12.000000000","message":"Done","commit_id":"d05862e216ad51257edd544d1cb566adeca48618"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"e5bed53c477a47c35e7a7bd9bfe444a31f454497","unresolved":false,"context_lines":[{"line_number":16,"context_line":"2. Fixes the bug mentioned below. The code was making a string from"},{"line_number":17,"context_line":"   None. This would lead to invalid image details."},{"line_number":18,"context_line":"3. Ensures that the unit tests actually pass instance objects instead"},{"line_number":19,"context_line":"   of an instance dict"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-bug: #1354664"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_b99b8262","line":19,"updated":"2014-08-12 16:18:24.000000000","message":"You could mention that it fixes the call order of some assertEqual()s.","commit_id":"3fef89e3a584a9874263b573eaa143605cf6eb48"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a95a16ba8a0f22ebc45e9176afb66a5cede447b6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"2. Fixes the bug mentioned below. The code was making a string from"},{"line_number":17,"context_line":"   None. This would lead to invalid image details."},{"line_number":18,"context_line":"3. Ensures that the unit tests actually pass instance objects instead"},{"line_number":19,"context_line":"   of an instance dict"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-bug: #1354664"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baada198_0a808e47","line":19,"in_reply_to":"baada198_b99b8262","updated":"2014-08-12 17:31:18.000000000","message":"Done","commit_id":"3fef89e3a584a9874263b573eaa143605cf6eb48"}],"nova/tests/virt/libvirt/test_imagecache.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"d09952139ddf7f2cf7ad9d8cebbd237b2e0f63a8","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                      \u0027vm_state\u0027: \u0027\u0027,"},{"line_number":625,"context_line":"                      \u0027task_state\u0027: \u0027\u0027}]"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        all_instances \u003d []"},{"line_number":628,"context_line":"        for instance in instances:"},{"line_number":629,"context_line":"            all_instances.append(fake_instance.fake_instance_obj("},{"line_number":630,"context_line":"                None, **instance))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ba52c633","line":627,"updated":"2014-08-11 15:05:11.000000000","message":"As it sounds like you\u0027re respinning anyway, how about:\n\nall_instances \u003d [fake_instance.fake_instance_obj(None, instance)\n                        for instance in instances]","commit_id":"d05862e216ad51257edd544d1cb566adeca48618"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"e85e5ba182d33155e2a6da4ffe384bbbad1b6b37","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        all_instances \u003d []"},{"line_number":628,"context_line":"        for instance in instances:"},{"line_number":629,"context_line":"            all_instances.append(fake_instance.fake_instance_obj("},{"line_number":630,"context_line":"                None, **instance))"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        image_cache_manager \u003d imagecache.ImageCacheManager()"},{"line_number":633,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_99715b7a","line":630,"updated":"2014-08-17 07:49:44.000000000","message":"Should have used list comprehension here too","commit_id":"23340b49b1adee5cb9592b8e6a8471969b9341c7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7889acd022f186cb39af9c3b7350e4b4dbf01113","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        all_instances \u003d []"},{"line_number":628,"context_line":"        for instance in instances:"},{"line_number":629,"context_line":"            all_instances.append(fake_instance.fake_instance_obj("},{"line_number":630,"context_line":"                None, **instance))"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        image_cache_manager \u003d imagecache.ImageCacheManager()"},{"line_number":633,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_39d84753","line":630,"in_reply_to":"1abeadc6_99715b7a","updated":"2014-08-17 08:13:33.000000000","message":"missed it - fixed in https://review.openstack.org/114815","commit_id":"23340b49b1adee5cb9592b8e6a8471969b9341c7"}],"nova/tests/virt/test_imagecache.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"e5bed53c477a47c35e7a7bd9bfe444a31f454497","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual((0, 1, [\u0027instance-00000003\u0027]),"},{"line_number":92,"context_line":"                         running[\u0027used_images\u0027][\u002722\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.assertIn(\u0027instance-00000001\u0027, running[\u0027instance_names\u0027])"},{"line_number":95,"context_line":"        self.assertIn(\u0027123\u0027, running[\u0027instance_names\u0027])"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        self.assertEqual(4, len(running[\u0027image_popularity\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_fe2320b8","line":94,"updated":"2014-08-12 16:18:24.000000000","message":"I\u0027d have put these in a separate patch because it\u0027s not related to the object conversion.","commit_id":"3fef89e3a584a9874263b573eaa143605cf6eb48"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a95a16ba8a0f22ebc45e9176afb66a5cede447b6","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.assertEqual((0, 1, [\u0027instance-00000003\u0027]),"},{"line_number":92,"context_line":"                         running[\u0027used_images\u0027][\u002722\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.assertIn(\u0027instance-00000001\u0027, running[\u0027instance_names\u0027])"},{"line_number":95,"context_line":"        self.assertIn(\u0027123\u0027, running[\u0027instance_names\u0027])"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        self.assertEqual(4, len(running[\u0027image_popularity\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0a2a4e2e","line":94,"in_reply_to":"baada198_fe2320b8","updated":"2014-08-12 17:31:18.000000000","message":"i mentioned this in the commit message - just changed them as i had to change a lot... that is the instance is\u0027d","commit_id":"3fef89e3a584a9874263b573eaa143605cf6eb48"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"80ed8c3de0f6ac8327b3f1cc2bc1f453bae8f514","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.assertEqual(1, running[\u0027image_popularity\u0027][\u00271\u0027])"},{"line_number":97,"context_line":"        self.assertEqual(2, running[\u0027image_popularity\u0027][\u00272\u0027])"},{"line_number":98,"context_line":"        self.assertEqual(1, running[\u0027image_popularity\u0027][\u002721\u0027])"},{"line_number":99,"context_line":"        self.assertEqual(1, running[\u0027image_popularity\u0027][\u002722\u0027])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_list_resizing_instances(self):"},{"line_number":102,"context_line":"        instances \u003d [{\u0027image_ref\u0027: \u00271\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ac7a964_ec4961d1","line":99,"updated":"2014-08-15 14:14:04.000000000","message":"I really think these should be in a different patch.","commit_id":"a949e4f503e8ebd60ab4e842470029648d806f65"}],"nova/tests/virt/vmwareapi/test_imagecache.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"e85e5ba182d33155e2a6da4ffe384bbbad1b6b37","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            all_instances \u003d []"},{"line_number":238,"context_line":"            for instance in instances:"},{"line_number":239,"context_line":"                all_instances.append(fake_instance.fake_instance_obj("},{"line_number":240,"context_line":"                    None, **instance))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            self.images \u003d set([\u00271\u0027, \u00272\u0027])"},{"line_number":243,"context_line":"            datastore \u003d ds_util.Datastore(name\u003d\u0027ds\u0027, ref\u003d\u0027fake-ds-ref\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_795d5fe9","line":240,"updated":"2014-08-17 07:49:44.000000000","message":"You didn\u0027t use mdbooth\u0027s list comprehension suggestion here","commit_id":"23340b49b1adee5cb9592b8e6a8471969b9341c7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7889acd022f186cb39af9c3b7350e4b4dbf01113","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            all_instances \u003d []"},{"line_number":238,"context_line":"            for instance in instances:"},{"line_number":239,"context_line":"                all_instances.append(fake_instance.fake_instance_obj("},{"line_number":240,"context_line":"                    None, **instance))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            self.images \u003d set([\u00271\u0027, \u00272\u0027])"},{"line_number":243,"context_line":"            datastore \u003d ds_util.Datastore(name\u003d\u0027ds\u0027, ref\u003d\u0027fake-ds-ref\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_b9e37704","line":240,"in_reply_to":"1abeadc6_795d5fe9","updated":"2014-08-17 08:13:33.000000000","message":"i did but i missed this - so you can see https://review.openstack.org/114815 where it is addressed.","commit_id":"23340b49b1adee5cb9592b8e6a8471969b9341c7"}],"nova/virt/imagecache.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea57b1e04a906a6ba82372af41cce0b59e76ccd4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            for image_key in [\u0027image_ref\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027]:"},{"line_number":90,"context_line":"                try:"},{"line_number":91,"context_line":"                    image_ref_str \u003d str(instance[image_key])"},{"line_number":92,"context_line":"                except KeyError:"},{"line_number":93,"context_line":"                    continue"},{"line_number":94,"context_line":"                local, remote, insts \u003d used_images.get(image_ref_str,"},{"line_number":95,"context_line":"                                                            (0, 0, []))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f7e7f743","side":"PARENT","line":92,"updated":"2014-08-11 14:29:33.000000000","message":"For other reviewers, I believe this is the crux of the fix: we stringify None if it\u0027s in the dict. This bug existed before objects, AFAICT, as a dict from sqlalchemy would have this key\u003dNone as well, but it would pass unit tests.","commit_id":"73677a887d4102f7c19afa3fc7a8ad286c1d722d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"089c01110ea0b522cc9d63fd00366abbefb8d7b4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                instance_names.add(instance.uuid + \u0027_resize\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            for image_key in [\u0027image_ref\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027]:"},{"line_number":89,"context_line":"                image_ref_str \u003d getattr(instance, image_key, None)"},{"line_number":90,"context_line":"                if image_ref_str is None:"},{"line_number":91,"context_line":"                    continue"},{"line_number":92,"context_line":"                local, remote, insts \u003d used_images.get(image_ref_str,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_790c8aeb","line":89,"updated":"2014-08-12 16:12:16.000000000","message":"Note that on an object, an attribute is always present from the point of view of hasattr() or getattr() in this case. Thus, the default of None doesn\u0027t make any sense, as far as I can tell. If you\u0027re trying to tell if a thing is loaded, then use obj.obj_attr_is_present(). However, none of the attributes you have listed here are optional, so they\u0027re always present. They may be None, but they don\u0027t need to be treated carefully in terms of being present or not.","commit_id":"3fef89e3a584a9874263b573eaa143605cf6eb48"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a95a16ba8a0f22ebc45e9176afb66a5cede447b6","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                instance_names.add(instance.uuid + \u0027_resize\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            for image_key in [\u0027image_ref\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027]:"},{"line_number":89,"context_line":"                image_ref_str \u003d getattr(instance, image_key, None)"},{"line_number":90,"context_line":"                if image_ref_str is None:"},{"line_number":91,"context_line":"                    continue"},{"line_number":92,"context_line":"                local, remote, insts \u003d used_images.get(image_ref_str,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_4a68c6bb","line":89,"in_reply_to":"baada198_790c8aeb","updated":"2014-08-12 17:31:18.000000000","message":"Done","commit_id":"3fef89e3a584a9874263b573eaa143605cf6eb48"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"e85e5ba182d33155e2a6da4ffe384bbbad1b6b37","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            for image_key in [\u0027image_ref\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027]:"},{"line_number":90,"context_line":"                try:"},{"line_number":91,"context_line":"                    image_ref_str \u003d str(instance[image_key])"},{"line_number":92,"context_line":"                except KeyError:"},{"line_number":93,"context_line":"                    continue"},{"line_number":94,"context_line":"                local, remote, insts \u003d used_images.get(image_ref_str,"},{"line_number":95,"context_line":"                                                            (0, 0, []))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_5958a3fa","side":"PARENT","line":92,"updated":"2014-08-17 07:49:44.000000000","message":"Thanks to Dan for pointing out the actual bug - https://review.openstack.org/#/c/111996/3/nova/virt/imagecache.py\n\nIdeally, the most simple and safe bug fix would have been the first patch in the series to make it a good backport candidate","commit_id":"1b8581855f2f287a56e40af31cc39523e33630b3"}]}
