)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"d28d3e8f961e0a4af6ca1b625433073d6cde2a46","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Mostly switched from dictionary notation (obj[\u0027prop\u0027]) to object"},{"line_number":10,"context_line":"notation (obj.prop)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":"Change-Id: I98dd519e6dc84315df6caa768ce3f5fc4274431c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a41bdd9_56acffec","line":12,"updated":"2015-07-17 13:02:28.000000000","message":"This link doesn\u0027t seem to work. It directs to a failed launchpad search.","commit_id":"ea6a6a904db35d590309c895e8df7591a0287ff5"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"0188aecf19b91f52864aebbfea0e9e1c720b8f03","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Mostly switched from dictionary notation (obj[\u0027prop\u0027]) to object"},{"line_number":10,"context_line":"notation (obj.prop)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":"Change-Id: I98dd519e6dc84315df6caa768ce3f5fc4274431c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a41bdd9_d67d6fe8","line":12,"in_reply_to":"9a41bdd9_56acffec","updated":"2015-07-17 13:10:56.000000000","message":"This has been brought up before in another cinder-object reviews.  The gerrit link does not properly resolve.  The actual link is https://blueprints.launchpad.net/cinder/+spec/cinder-objects.  We can re-use this blueprint for cinder-object work.","commit_id":"ea6a6a904db35d590309c895e8df7591a0287ff5"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"b1d54dd0dee7dc07916d946d1e6b52c9b4a44abc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Cleanup for SnapshotObject"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Mostly switched from dictionary notation (obj[\u0027prop\u0027]) to object"},{"line_number":10,"context_line":"notation (obj.prop)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":"Change-Id: I98dd519e6dc84315df6caa768ce3f5fc4274431c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a4dcd0f_2dbb1977","line":10,"updated":"2015-08-14 20:52:24.000000000","message":"To address Gorka\u0027s comments - you should put a comment in that driver maintainers should be doing the object conversion themselves, and this patch does not include drivers.","commit_id":"22235f9436b326f20327e164d387fa257f1eaebd"}],"cinder/objects/snapshot.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"b1d54dd0dee7dc07916d946d1e6b52c9b4a44abc","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            self.volume \u003d objects.Volume.get_by_id(self._context,"},{"line_number":184,"context_line":"                                                   self.volume_id)"},{"line_number":185,"context_line":"        # elif attrname \u003d\u003d \u0027metadata\u0027:"},{"line_number":186,"context_line":"        #     self.metadata \u003d db.snapshot_metadata_get(self._context, self.id)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self.obj_reset_changes(fields\u003d[attrname])"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_0dd3bdd6","line":186,"updated":"2015-08-14 20:52:24.000000000","message":"You should remove this dead code.","commit_id":"22235f9436b326f20327e164d387fa257f1eaebd"}],"cinder/tests/unit/api/contrib/test_admin_actions.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d3076f8d3bf4b670e73dc66e8b3b3e517ead81fa","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                                        \u0027provider_location\u0027: \u0027\u0027, \u0027size\u0027: 1})"},{"line_number":369,"context_line":"        snapshot \u003d objects.Snapshot(ctx, status\u003d\u0027available\u0027,"},{"line_number":370,"context_line":"                                    volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":371,"context_line":"        snapshot.create()"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        resp \u003d self._issue_snapshot_reset(ctx,"},{"line_number":374,"context_line":"                                          snapshot,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_74960896","line":371,"updated":"2015-08-17 12:51:44.000000000","message":"It\u0027s always better to add cleanup than to do a destroy at the end of the test.  Because a test failure means snapshot entry is not destroyed.","commit_id":"728a0d564b6a9e4f9184b4f4be1ddfee2a2b4ac9"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d3076f8d3bf4b670e73dc66e8b3b3e517ead81fa","unresolved":false,"context_lines":[{"line_number":864,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":865,"context_line":"        volume \u003d self._migrate_volume_prep()"},{"line_number":866,"context_line":"        snap \u003d objects.Snapshot(ctx, volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":867,"context_line":"        snap.create()"},{"line_number":868,"context_line":"        self._migrate_volume_exec(ctx, volume, host, expected_status)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def test_migrate_volume_bad_force_host_copy(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_54e4243a","line":867,"updated":"2015-08-17 12:51:44.000000000","message":"No destroy?  Does it get destroyed in _migrate_volume_exec?","commit_id":"728a0d564b6a9e4f9184b4f4be1ddfee2a2b4ac9"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"3a34786195e044ebbf5d02800baa5ad11d471360","unresolved":false,"context_lines":[{"line_number":864,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"},{"line_number":865,"context_line":"        volume \u003d self._migrate_volume_prep()"},{"line_number":866,"context_line":"        snap \u003d objects.Snapshot(ctx, volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":867,"context_line":"        snap.create()"},{"line_number":868,"context_line":"        self._migrate_volume_exec(ctx, volume, host, expected_status)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def test_migrate_volume_bad_force_host_copy(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_02465c23","line":867,"in_reply_to":"fa1b9901_54e4243a","updated":"2015-08-17 18:02:23.000000000","message":"Volume should be destroyed as well","commit_id":"728a0d564b6a9e4f9184b4f4be1ddfee2a2b4ac9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"05e75deba17c03ddadc8acde348ce0f349029a86","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                       \u0027create_iscsi_target\u0027,"},{"line_number":70,"context_line":"                       self._fake_create_iscsi_target)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def tearDown(self):"},{"line_number":73,"context_line":"        super(AdminActionsTest, self).tearDown()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        ctxt \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, is_admin\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_a0604ea6","line":72,"updated":"2015-08-29 02:43:36.000000000","message":"Please use addCleanup in stead of tearDown.","commit_id":"4ffea782b478e50f513d4cac457ed7c0f521ea17"}],"cinder/tests/unit/fake_snapshot.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11c5342f374050025d33f7579991b58e44e09ff3","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    if updates:"},{"line_number":70,"context_line":"        db_snapshot.update(updates)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    return db_snapshot"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_ac25210b","side":"PARENT","line":71,"updated":"2015-07-06 02:52:01.000000000","message":"This line should be there for better readability.","commit_id":"2cd5904eb809c117e849d4e5c1794ac8079ee14c"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11c5342f374050025d33f7579991b58e44e09ff3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"from cinder.tests.unit.brick import fake_lvm"},{"line_number":58,"context_line":"from cinder.tests.unit import conf_fixture"},{"line_number":59,"context_line":"from cinder.tests.unit import fake_driver"},{"line_number":60,"context_line":"from cinder.tests.unit.fake_snapshot import fake_snapshot_obj"},{"line_number":61,"context_line":"from cinder.tests.unit.image import fake as fake_image"},{"line_number":62,"context_line":"from cinder.tests.unit.keymgr import fake as fake_keymgr"},{"line_number":63,"context_line":"from cinder.tests.unit import utils as tests_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_0c876dd8","line":60,"updated":"2015-07-06 02:52:01.000000000","message":"Better to use \"from cinder.tests.unit import fake_snapshot\" than to import the function.","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1d059cc17cb3aeec8e522708bc53e3c9e6656202","unresolved":false,"context_lines":[{"line_number":1298,"context_line":"                          self.volume.create_snapshot,"},{"line_number":1299,"context_line":"                          self.context, volume_src[\u0027id\u0027], snapshot_obj)"},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"        # NOTE(flaper87): The volume status should be error."},{"line_number":1302,"context_line":"        snapshot \u003d db.snapshot_get(context.get_admin_context(), snapshot_id)"},{"line_number":1303,"context_line":"        self.assertEqual(\"error\", snapshot.status)"},{"line_number":1304,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_be2a0c8f","line":1301,"updated":"2015-08-14 11:00:37.000000000","message":"This needs to use versioned objects","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1d059cc17cb3aeec8e522708bc53e3c9e6656202","unresolved":false,"context_lines":[{"line_number":1577,"context_line":"        snapshot_obj \u003d objects.Snapshot.get_by_id(self.context, snapshot_id)"},{"line_number":1578,"context_line":"        self.volume.create_snapshot(self.context, src_vol[\u0027id\u0027], snapshot_obj)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"        # ensure that status of snapshot is \u0027available\u0027"},{"line_number":1581,"context_line":"        snapshot_ref \u003d db.snapshot_get(self.context, snapshot_id)[\u0027status\u0027]"},{"line_number":1582,"context_line":"        self.assertEqual(\u0027available\u0027, snapshot_ref)"},{"line_number":1583,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_de0a7827","line":1580,"updated":"2015-08-14 11:00:37.000000000","message":"This needs to use versioned objects","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"}],"cinder/tests/unit/test_volume_utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"38b372308c3ea4eea7bea3d370043a3c445d4997","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            \u0027expected_attrs\u0027: [\u0027metadata\u0027]"},{"line_number":223,"context_line":"        }"},{"line_number":224,"context_line":"        _obj_metadata.return_value \u003d {\u0027fake_snap_meta_key\u0027:"},{"line_number":225,"context_line":"                                      six.text_type(\u0027fake_snap_meta_value\u0027)}"},{"line_number":226,"context_line":"        snapshot_obj \u003d fake_snapshot_obj(ctxt, **raw_snapshot)"},{"line_number":227,"context_line":"        usage_info \u003d volume_utils._usage_from_snapshot(snapshot_obj)"},{"line_number":228,"context_line":"        expected_snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_60cdf285","line":225,"updated":"2015-07-03 16:21:26.000000000","message":"You don\u0027t need to use the six.text_type method, just use u\u0027fake_snap_meta_value\u0027","commit_id":"83856db24d781f720a57830022c3e1daedab1887"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"91bd885a95bb6e9d4f5d1c139704a7a57bf9abde","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            \u0027expected_attrs\u0027: [\u0027metadata\u0027]"},{"line_number":223,"context_line":"        }"},{"line_number":224,"context_line":"        _obj_metadata.return_value \u003d {\u0027fake_snap_meta_key\u0027:"},{"line_number":225,"context_line":"                                      six.text_type(\u0027fake_snap_meta_value\u0027)}"},{"line_number":226,"context_line":"        snapshot_obj \u003d fake_snapshot_obj(ctxt, **raw_snapshot)"},{"line_number":227,"context_line":"        usage_info \u003d volume_utils._usage_from_snapshot(snapshot_obj)"},{"line_number":228,"context_line":"        expected_snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_5d452cb1","line":225,"in_reply_to":"ba3cc151_60cdf285","updated":"2015-07-06 10:55:58.000000000","message":"Done","commit_id":"83856db24d781f720a57830022c3e1daedab1887"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"38b372308c3ea4eea7bea3d370043a3c445d4997","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":237,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":238,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":239,"context_line":"            \u0027metadata\u0027: str({\u0027fake_snap_meta_key\u0027: six.text_type("},{"line_number":240,"context_line":"                \u0027fake_snap_meta_value\u0027)}),"},{"line_number":241,"context_line":"        }"},{"line_number":242,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_20acca8b","line":239,"updated":"2015-07-03 16:21:26.000000000","message":"This change makes it a lot harder to read, and using str to convert the whole string defeats the purpose of six.text_type.","commit_id":"83856db24d781f720a57830022c3e1daedab1887"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"91bd885a95bb6e9d4f5d1c139704a7a57bf9abde","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":237,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":238,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":239,"context_line":"            \u0027metadata\u0027: str({\u0027fake_snap_meta_key\u0027: six.text_type("},{"line_number":240,"context_line":"                \u0027fake_snap_meta_value\u0027)}),"},{"line_number":241,"context_line":"        }"},{"line_number":242,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_fd10c0ad","line":239,"in_reply_to":"ba3cc151_20acca8b","updated":"2015-07-06 10:55:58.000000000","message":"Done","commit_id":"83856db24d781f720a57830022c3e1daedab1887"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11c5342f374050025d33f7579991b58e44e09ff3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder import context"},{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder import test"},{"line_number":29,"context_line":"from cinder.tests.unit.fake_snapshot import fake_snapshot_obj"},{"line_number":30,"context_line":"from cinder.tests.unit.fake_volume import fake_volume_obj"},{"line_number":31,"context_line":"from cinder import utils"},{"line_number":32,"context_line":"from cinder.volume import throttling"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_cc698527","line":29,"updated":"2015-07-06 02:52:01.000000000","message":"Better to use \"from cinder.tests.unit import fake_snapshot\" than to import the function.","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11c5342f374050025d33f7579991b58e44e09ff3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder import exception"},{"line_number":28,"context_line":"from cinder import test"},{"line_number":29,"context_line":"from cinder.tests.unit.fake_snapshot import fake_snapshot_obj"},{"line_number":30,"context_line":"from cinder.tests.unit.fake_volume import fake_volume_obj"},{"line_number":31,"context_line":"from cinder import utils"},{"line_number":32,"context_line":"from cinder.volume import throttling"},{"line_number":33,"context_line":"from cinder.volume import utils as volume_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_6c763908","line":30,"updated":"2015-07-06 02:52:01.000000000","message":"Better to use \"from cinder.tests.unit import fake_volume\" than to import the function.","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee2b4323b3c06b01d00f7691fab122b47244621","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":236,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":237,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":238,"context_line":"            \u0027metadata\u0027: str({\u0027fake_snap_meta_key\u0027: u\u0027fake_snap_meta_value\u0027}),"},{"line_number":239,"context_line":"        }"},{"line_number":240,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_c3f86bc7","line":238,"updated":"2015-07-06 09:14:07.000000000","message":"I still don\u0027t see why this change is necessary.","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cb687deb110571a0a7f9d21c896701d185257d41","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder import context"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import test"},{"line_number":30,"context_line":"from cinder.tests.unit.fake_snapshot import fake_snapshot_obj"},{"line_number":31,"context_line":"from cinder.tests.unit.fake_volume import fake_volume_obj"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import throttling"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_1a6e5f96","line":30,"updated":"2015-07-07 18:42:37.000000000","message":"Why did you change this in test_volume_utils like Thang asked but didn\u0027t change it here?","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"9bf1abd3eb69fe738d36a6278560427d7c9961a2","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder import context"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import test"},{"line_number":30,"context_line":"from cinder.tests.unit.fake_snapshot import fake_snapshot_obj"},{"line_number":31,"context_line":"from cinder.tests.unit.fake_volume import fake_volume_obj"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import throttling"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_9550000c","line":30,"in_reply_to":"ba3cc151_1a6e5f96","updated":"2015-07-07 18:57:25.000000000","message":"I was sure that I fixed it. I will do it in next patchset.","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ad55941bb785eadb64ef9ec5596b399400a19df6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder import context"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import test"},{"line_number":30,"context_line":"from cinder.tests.unit.fake_snapshot import fake_snapshot_obj"},{"line_number":31,"context_line":"from cinder.tests.unit.fake_volume import fake_volume_obj"},{"line_number":32,"context_line":"from cinder import utils"},{"line_number":33,"context_line":"from cinder.volume import throttling"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_35ab348b","line":30,"in_reply_to":"ba3cc151_9550000c","updated":"2015-07-07 19:07:46.000000000","message":"I hate it when that happens to me. ;-)","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cb687deb110571a0a7f9d21c896701d185257d41","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":239,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":240,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":241,"context_line":"            \u0027metadata\u0027: six.text_type({\u0027fake_snap_meta_key\u0027:"},{"line_number":242,"context_line":"                                      u\u0027fake_snap_meta_value\u0027}),"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_ba55f3c6","line":241,"updated":"2015-07-07 18:42:37.000000000","message":"I still don\u0027t see the reason behind this change.","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ad55941bb785eadb64ef9ec5596b399400a19df6","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":239,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":240,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":241,"context_line":"            \u0027metadata\u0027: six.text_type({\u0027fake_snap_meta_key\u0027:"},{"line_number":242,"context_line":"                                      u\u0027fake_snap_meta_value\u0027}),"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_b576643c","line":241,"in_reply_to":"ba3cc151_9af10f6d","updated":"2015-07-07 19:07:46.000000000","message":"And wouldn\u0027t it be solved just by adding u before the original string to force it to be unicode?","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"ac3417ce1bae1294f0fd527c607f480d2ae5c0f6","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":239,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":240,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":241,"context_line":"            \u0027metadata\u0027: six.text_type({\u0027fake_snap_meta_key\u0027:"},{"line_number":242,"context_line":"                                      u\u0027fake_snap_meta_value\u0027}),"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_f21b971a","line":241,"in_reply_to":"ba3cc151_b576643c","updated":"2015-07-07 23:00:58.000000000","message":"I was trying to approach this problem in many ways and I always have the same problem py27 and py34 other interpret this nested string. This was the only way, but i will investigate it again tomorrow. Maybe I\u0027m wrong. :)","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"9bf1abd3eb69fe738d36a6278560427d7c9961a2","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":239,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":240,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":241,"context_line":"            \u0027metadata\u0027: six.text_type({\u0027fake_snap_meta_key\u0027:"},{"line_number":242,"context_line":"                                      u\u0027fake_snap_meta_value\u0027}),"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_9af10f6d","line":241,"in_reply_to":"ba3cc151_ba55f3c6","updated":"2015-07-07 18:57:25.000000000","message":"I add this because i want to avoid a missmatch version in py27 and py34.","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"687488a3dc08a15675cb4e52789050ae902cf7dc","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            \u0027created_at\u0027: \u0027DONTCARE\u0027,"},{"line_number":239,"context_line":"            \u0027status\u0027: \u0027pause\u0027,"},{"line_number":240,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":241,"context_line":"            \u0027metadata\u0027: six.text_type({\u0027fake_snap_meta_key\u0027:"},{"line_number":242,"context_line":"                                      u\u0027fake_snap_meta_value\u0027}),"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        self.assertDictMatch(expected_snapshot, usage_info)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_d7318cee","line":241,"in_reply_to":"ba3cc151_f21b971a","updated":"2015-07-08 11:39:49.000000000","message":"This is only a test, and you probably know best since you\u0027ve been fighting with it, so I\u0027ll stop nagging you about this. ;-)","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"588c28eccf8b2de3592a9c792dcf03054d71f5fa","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            \u0027expected_attrs\u0027: [\u0027metadata\u0027],"},{"line_number":222,"context_line":"        }"},{"line_number":223,"context_line":"        _obj_metadata.return_value \u003d {\u0027fake_snap_meta_key\u0027:"},{"line_number":224,"context_line":"                                      u\u0027fake_snap_meta_value\u0027}"},{"line_number":225,"context_line":"        snapshot_obj \u003d fake_snapshot.fake_snapshot_obj(ctxt, **raw_snapshot)"},{"line_number":226,"context_line":"        usage_info \u003d volume_utils._usage_from_snapshot(snapshot_obj)"},{"line_number":227,"context_line":"        expected_snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_be935a5a","line":224,"updated":"2015-08-12 13:55:04.000000000","message":"I do not believe you need to mock cinder.db.snapshot_metadata_get, since you already have the snapshot_metadata in your dict here.","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"}],"cinder/tests/unit/utils.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"6add3fc47e84ff23ce4abea911c7139a49458125","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                    **kwargs):"},{"line_number":93,"context_line":"    vol \u003d db.volume_get(ctxt, volume_id)"},{"line_number":94,"context_line":"    snap \u003d objects.Snapshot(ctxt)"},{"line_number":95,"context_line":"    snap.volume_id \u003d volume_id"},{"line_number":96,"context_line":"    snap.user_id \u003d ctxt.user_id or \u0027fake_user_id\u0027"},{"line_number":97,"context_line":"    snap.project_id \u003d ctxt.project_id or \u0027fake_project_id\u0027"},{"line_number":98,"context_line":"    snap.status \u003d status"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_e47c4aed","line":95,"updated":"2015-08-25 01:15:56.000000000","message":"You could put all of these properties in a dict and pass it in as objects.Snapshot(context\u003dctxt, **db_snapshot).  Just another way to do it.","commit_id":"7ec96d9aa7608b517a6c43da480486ffa802fb1e"}],"cinder/volume/manager.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"38b372308c3ea4eea7bea3d370043a3c445d4997","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        self._notify_about_snapshot_usage(context, snapshot, \"create.end\")"},{"line_number":688,"context_line":"        LOG.info(_LI(\"Create snapshot completed successfully\"),"},{"line_number":689,"context_line":"                 resource\u003dsnapshot)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    @locked_snapshot_operation"},{"line_number":692,"context_line":"    def delete_snapshot(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_c0015e6c","line":689,"updated":"2015-07-03 16:21:26.000000000","message":"You forgot to return something ;-)","commit_id":"83856db24d781f720a57830022c3e1daedab1887"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"91bd885a95bb6e9d4f5d1c139704a7a57bf9abde","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        self._notify_about_snapshot_usage(context, snapshot, \"create.end\")"},{"line_number":688,"context_line":"        LOG.info(_LI(\"Create snapshot completed successfully\"),"},{"line_number":689,"context_line":"                 resource\u003dsnapshot)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    @locked_snapshot_operation"},{"line_number":692,"context_line":"    def delete_snapshot(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_7d7b502a","line":689,"in_reply_to":"ba3cc151_c0015e6c","updated":"2015-07-06 10:55:58.000000000","message":"It was deliberate remove. It was useless return. ;]","commit_id":"83856db24d781f720a57830022c3e1daedab1887"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ee2b4323b3c06b01d00f7691fab122b47244621","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        self._notify_about_snapshot_usage(context, snapshot, \"create.end\")"},{"line_number":688,"context_line":"        LOG.info(_LI(\"Create snapshot completed successfully\"),"},{"line_number":689,"context_line":"                 resource\u003dsnapshot)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    @locked_snapshot_operation"},{"line_number":692,"context_line":"    def delete_snapshot(self, context, snapshot):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_a3ff67a9","line":689,"updated":"2015-07-06 09:14:07.000000000","message":"And you are still not returning anything here...","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11c5342f374050025d33f7579991b58e44e09ff3","unresolved":false,"context_lines":[{"line_number":2413,"context_line":"            if snapshots:"},{"line_number":2414,"context_line":"                for snapshot in snapshots:"},{"line_number":2415,"context_line":"                    # Update db if status is error"},{"line_number":2416,"context_line":"                    if snapshot.status \u003d\u003d \u0027error\u0027:"},{"line_number":2417,"context_line":"                        update \u003d {\u0027status\u0027: snapshot.status}"},{"line_number":2418,"context_line":""},{"line_number":2419,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_acda01e8","line":2416,"updated":"2015-07-06 02:52:01.000000000","message":"You cannot do this.  L2411 returns a dict, not an object.  We need to wait until drivers that use create_cgsnapshot are updated to return objects - https://bugs.launchpad.net/cinder/+bugs?field.tag\u003dcgsnapshot-objects","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11c5342f374050025d33f7579991b58e44e09ff3","unresolved":false,"context_lines":[{"line_number":2506,"context_line":""},{"line_number":2507,"context_line":"            if snapshots:"},{"line_number":2508,"context_line":"                for snapshot in snapshots:"},{"line_number":2509,"context_line":"                    update \u003d {\u0027status\u0027: snapshot.status}"},{"line_number":2510,"context_line":""},{"line_number":2511,"context_line":"                    # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2512,"context_line":"                    # after cgsnapshot has been switched over to objects"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_ccd745be","line":2509,"updated":"2015-07-06 02:52:01.000000000","message":"Ditto","commit_id":"ca1d11d6b0ca79fbc6fcb71fe49756dd26267f4a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cb687deb110571a0a7f9d21c896701d185257d41","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"                snapshot.context \u003d caller_context"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2414,"context_line":"                self.driver.create_cgsnapshot(context, cgsnapshot_ref)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"            if snapshots:"},{"line_number":2417,"context_line":"                for snapshot in snapshots:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_7aba0be3","line":2414,"updated":"2015-07-07 18:42:37.000000000","message":"You could have mapped all snapshots to objects and that way once all drivers implemented the change we would only need to remove the mapping.","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"687488a3dc08a15675cb4e52789050ae902cf7dc","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"                snapshot.context \u003d caller_context"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2414,"context_line":"                self.driver.create_cgsnapshot(context, cgsnapshot_ref)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"            if snapshots:"},{"line_number":2417,"context_line":"                for snapshot in snapshots:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_d71aec6e","line":2414,"in_reply_to":"ba3cc151_173b8dec","updated":"2015-07-08 11:39:49.000000000","message":"You don\u0027t need to do any additional DB calls, you can convert the ORM object to VersionedObject without saving it to the DB or reading it again from the DB.  ;-)\n\nAnyway, this is good.","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"ac3417ce1bae1294f0fd527c607f480d2ae5c0f6","unresolved":false,"context_lines":[{"line_number":2411,"context_line":"                snapshot.context \u003d caller_context"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2414,"context_line":"                self.driver.create_cgsnapshot(context, cgsnapshot_ref)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"            if snapshots:"},{"line_number":2417,"context_line":"                for snapshot in snapshots:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_173b8dec","line":2414,"in_reply_to":"ba3cc151_7aba0be3","updated":"2015-07-07 23:00:58.000000000","message":"I thought about this solution but Michal said that we shouldn\u0027t do it. We don\u0027t want to make a lot of db calls in this place. That why I placed a comments to don\u0027t forget about those changes. But if you think that we shouldn\u0027t take care about this I can change it :).","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cb687deb110571a0a7f9d21c896701d185257d41","unresolved":false,"context_lines":[{"line_number":2510,"context_line":""},{"line_number":2511,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2512,"context_line":"                self.driver.delete_cgsnapshot(context, cgsnapshot_ref)"},{"line_number":2513,"context_line":""},{"line_number":2514,"context_line":"            if snapshots:"},{"line_number":2515,"context_line":"                for snapshot in snapshots:"},{"line_number":2516,"context_line":"                    update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_ba76533c","line":2513,"updated":"2015-07-07 18:42:37.000000000","message":"You could have mapped snapshots to objects here as well.","commit_id":"bdd83c0789b61c3478977121a4835605bf51840f"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"6686d6861f6288803f844987a6f7ee4da1856a1d","unresolved":false,"context_lines":[{"line_number":2493,"context_line":"            context, cgsnapshot_ref, \"delete.start\")"},{"line_number":2494,"context_line":""},{"line_number":2495,"context_line":"        # TODO(DTadrzak): Switch over to use object notation instead of dict"},{"line_number":2496,"context_line":"        # notation after drivers that use create_cgsnapshot are updated to"},{"line_number":2497,"context_line":"        # return objects"},{"line_number":2498,"context_line":"        try:"},{"line_number":2499,"context_line":"            utils.require_driver_initialized(self.driver)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_8cf773d2","line":2496,"updated":"2015-07-08 14:01:12.000000000","message":"s/create_cgsnapshot/delete_cgsnapshot/","commit_id":"8c6afb2a518f2b131d1a24a09805a58a9f46e85d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1d059cc17cb3aeec8e522708bc53e3c9e6656202","unresolved":false,"context_lines":[{"line_number":738,"context_line":"            volume_ref \u003d self.db.volume_get(context, snapshot.volume_id)"},{"line_number":739,"context_line":"            QUOTAS.add_volume_type_opts(context, reserve_opts,"},{"line_number":740,"context_line":"                                        volume_ref.get(\u0027volume_type_id\u0027))"},{"line_number":741,"context_line":"            reservations \u003d QUOTAS.reserve(context, project_id\u003dproject_id,"},{"line_number":742,"context_line":"                                          **reserve_opts)"},{"line_number":743,"context_line":"        except Exception:"},{"line_number":744,"context_line":"            reservations \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_be9a0c6d","line":741,"updated":"2015-08-14 11:00:37.000000000","message":"Unlike in line 704, there was no need for these 2 changes.  It is a valid format to place each argument in a different line if they all cannot fit into one line.","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"588c28eccf8b2de3592a9c792dcf03054d71f5fa","unresolved":false,"context_lines":[{"line_number":2457,"context_line":""},{"line_number":2458,"context_line":"        # TODO(DTadrzak): Switch over to use object notation instead of dict"},{"line_number":2459,"context_line":"        # notation after drivers that use create_cgsnapshot are updated to"},{"line_number":2460,"context_line":"        # return objects"},{"line_number":2461,"context_line":"        try:"},{"line_number":2462,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":2463,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_199ce8be","line":2460,"updated":"2015-08-12 13:55:04.000000000","message":"Not sure why this comment is needed when the same thing is said in L2482.","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1d059cc17cb3aeec8e522708bc53e3c9e6656202","unresolved":false,"context_lines":[{"line_number":2457,"context_line":""},{"line_number":2458,"context_line":"        # TODO(DTadrzak): Switch over to use object notation instead of dict"},{"line_number":2459,"context_line":"        # notation after drivers that use create_cgsnapshot are updated to"},{"line_number":2460,"context_line":"        # return objects"},{"line_number":2461,"context_line":"        try:"},{"line_number":2462,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":2463,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_bea8cc78","line":2460,"in_reply_to":"1a4dcd0f_199ce8be","updated":"2015-08-14 11:00:37.000000000","message":"I agree, this is not needed.","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"588c28eccf8b2de3592a9c792dcf03054d71f5fa","unresolved":false,"context_lines":[{"line_number":2555,"context_line":""},{"line_number":2556,"context_line":"        # TODO(DTadrzak): Switch over to use object notation instead of dict"},{"line_number":2557,"context_line":"        # notation after drivers that use delete_cgsnapshot are updated to"},{"line_number":2558,"context_line":"        # return objects"},{"line_number":2559,"context_line":"        try:"},{"line_number":2560,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":2561,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_99b0f844","line":2558,"updated":"2015-08-12 13:55:04.000000000","message":"Ditto","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"657c4a18da142802b9d62570bcf59f2b8807ae1e","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _sync_provider_info(self, ctxt, volumes):"},{"line_number":294,"context_line":"        # NOTE(jdg): For now this just updates provider_id, we can add more"},{"line_number":295,"context_line":"        # add more items to the update if theyr\u0027e releveant but we need"},{"line_number":296,"context_line":"        # to be safe in what we allow and add a list of allowed keys"},{"line_number":297,"context_line":"        # things that make sense are provider_*, replication_status etc"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_7332d2a8","line":295,"updated":"2015-08-31 19:04:45.000000000","message":"theyr\u0027e -\u003e they\u0027re","commit_id":"200a65fa26415b9aa9f3ea7afc7fa2b8f2aee4b5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dea0710dd8d8692f6289da9208c0b4153def2b68","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def _sync_provider_info(self, ctxt, volumes):"},{"line_number":294,"context_line":"        # NOTE(jdg): For now this just updates provider_id, we can add more"},{"line_number":295,"context_line":"        # add more items to the update if theyr\u0027e releveant but we need"},{"line_number":296,"context_line":"        # to be safe in what we allow and add a list of allowed keys"},{"line_number":297,"context_line":"        # things that make sense are provider_*, replication_status etc"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_7a1efe0c","line":295,"in_reply_to":"da20952f_7332d2a8","updated":"2015-09-01 12:08:59.000000000","message":"That\u0027s not from this patch.","commit_id":"200a65fa26415b9aa9f3ea7afc7fa2b8f2aee4b5"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"657c4a18da142802b9d62570bcf59f2b8807ae1e","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"                self.update_service_capabilities(volume_stats)"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"                if volume_stats.get(\u0027replication_enabled\u0027, False):"},{"line_number":1650,"context_line":"                    # replciation_status provides a concise update of"},{"line_number":1651,"context_line":"                    # replicating volumes and any error conditions"},{"line_number":1652,"context_line":"                    # detected by the driver.  The intent is we don\u0027t"},{"line_number":1653,"context_line":"                    # expect/worry about updates so long as nothing"}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_136cb606","line":1650,"updated":"2015-08-31 19:04:45.000000000","message":"replciation_status -\u003e replication_status","commit_id":"200a65fa26415b9aa9f3ea7afc7fa2b8f2aee4b5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dea0710dd8d8692f6289da9208c0b4153def2b68","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"                self.update_service_capabilities(volume_stats)"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"                if volume_stats.get(\u0027replication_enabled\u0027, False):"},{"line_number":1650,"context_line":"                    # replciation_status provides a concise update of"},{"line_number":1651,"context_line":"                    # replicating volumes and any error conditions"},{"line_number":1652,"context_line":"                    # detected by the driver.  The intent is we don\u0027t"},{"line_number":1653,"context_line":"                    # expect/worry about updates so long as nothing"}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_3a1406e7","line":1650,"in_reply_to":"da20952f_136cb606","updated":"2015-09-01 12:08:59.000000000","message":"That\u0027s not from this patch.","commit_id":"200a65fa26415b9aa9f3ea7afc7fa2b8f2aee4b5"}],"cinder/volume/utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1d059cc17cb3aeec8e522708bc53e3c9e6656202","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                                          usage_info)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def _usage_from_snapshot(snapshot_ref, **extra_usage_info):"},{"line_number":138,"context_line":"    usage_info \u003d {"},{"line_number":139,"context_line":"        \u0027tenant_id\u0027: snapshot_ref.project_id,"},{"line_number":140,"context_line":"        \u0027user_id\u0027: snapshot_ref.user_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_1efc6071","line":137,"updated":"2015-08-14 11:00:37.000000000","message":"snapshot_ref should be changed to snapshot since now this is a versioned object.","commit_id":"9ad880d7f0e22fe0f06bce49de117c4ea06a3a19"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"657c4a18da142802b9d62570bcf59f2b8807ae1e","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        resultant_dict \u003d ast.literal_eval(st)"},{"line_number":595,"context_line":"    except Exception:"},{"line_number":596,"context_line":"        LOG.warning(_LW(\"Error encountered translating config_string: \""},{"line_number":597,"context_line":"                        \"%(config_string)s to dict\"),"},{"line_number":598,"context_line":"                    {\u0027config_string\u0027: config_string})"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    return resultant_dict"}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_0eaa4985","line":597,"updated":"2015-08-31 19:04:45.000000000","message":"\".\" at EOL","commit_id":"200a65fa26415b9aa9f3ea7afc7fa2b8f2aee4b5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dea0710dd8d8692f6289da9208c0b4153def2b68","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        resultant_dict \u003d ast.literal_eval(st)"},{"line_number":595,"context_line":"    except Exception:"},{"line_number":596,"context_line":"        LOG.warning(_LW(\"Error encountered translating config_string: \""},{"line_number":597,"context_line":"                        \"%(config_string)s to dict\"),"},{"line_number":598,"context_line":"                    {\u0027config_string\u0027: config_string})"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    return resultant_dict"}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_9ab2f204","line":597,"in_reply_to":"da20952f_0eaa4985","updated":"2015-09-01 12:08:59.000000000","message":"That\u0027s not from this patch.","commit_id":"200a65fa26415b9aa9f3ea7afc7fa2b8f2aee4b5"}]}
