)]}'
{"cinder/api/contrib/admin_actions.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ecd438ea83e5773b3e96bde845d7c23adc1b6799","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            attachments \u003d ("},{"line_number":86,"context_line":"                db.volume_attachment_get_used_by_volume_id(context, id))"},{"line_number":87,"context_line":"            for attachment in attachments:"},{"line_number":88,"context_line":"                db.volume_detached(context, id, attachment.get(\u0027id\u0027))"},{"line_number":89,"context_line":"                db.volume_admin_metadata_delete(context, id,"},{"line_number":90,"context_line":"                                                \u0027attached_mode\u0027)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_d35b542d","line":88,"range":{"start_line":88,"start_character":48,"end_line":88,"end_character":68},"updated":"2016-04-15 09:20:18.000000000","message":"-1: attachment is an ORM object, please access its attribute instead of using it as a dict\n\n attachment.id","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"90548b46aa2cd10fe468cc2653d5cfd9fa8cbed9","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            attachments \u003d ("},{"line_number":86,"context_line":"                db.volume_attachment_get_used_by_volume_id(context, id))"},{"line_number":87,"context_line":"            for attachment in attachments:"},{"line_number":88,"context_line":"                db.volume_detached(context, id, attachment.get(\u0027id\u0027))"},{"line_number":89,"context_line":"                db.volume_admin_metadata_delete(context, id,"},{"line_number":90,"context_line":"                                                \u0027attached_mode\u0027)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_807200e4","line":88,"range":{"start_line":88,"start_character":48,"end_line":88,"end_character":68},"in_reply_to":"1a122d0e_d35b542d","updated":"2016-04-15 23:42:35.000000000","message":"Done","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ecd438ea83e5773b3e96bde845d7c23adc1b6799","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                db.volume_attachment_get_used_by_volume_id(context, id))"},{"line_number":87,"context_line":"            for attachment in attachments:"},{"line_number":88,"context_line":"                db.volume_detached(context, id, attachment.get(\u0027id\u0027))"},{"line_number":89,"context_line":"                db.volume_admin_metadata_delete(context, id,"},{"line_number":90,"context_line":"                                                \u0027attached_mode\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_3313a85e","line":89,"updated":"2016-04-15 09:20:18.000000000","message":"-1: This should be out of the loop.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"90548b46aa2cd10fe468cc2653d5cfd9fa8cbed9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                db.volume_attachment_get_used_by_volume_id(context, id))"},{"line_number":87,"context_line":"            for attachment in attachments:"},{"line_number":88,"context_line":"                db.volume_detached(context, id, attachment.get(\u0027id\u0027))"},{"line_number":89,"context_line":"                db.volume_admin_metadata_delete(context, id,"},{"line_number":90,"context_line":"                                                \u0027attached_mode\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_e07774d2","line":89,"in_reply_to":"1a122d0e_3313a85e","updated":"2016-04-15 23:42:35.000000000","message":"I completely agree about this.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"349b504c38ac4a4bd9850cab9f8c7d0b51a911df","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            for attachment in attachments:"},{"line_number":88,"context_line":"                db.volume_detached(context, id, attachment.get(\u0027id\u0027))"},{"line_number":89,"context_line":"                db.volume_admin_metadata_delete(context, id,"},{"line_number":90,"context_line":"                                                \u0027attached_mode\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":93,"context_line":"        self.authorize(context, \u0027reset_status\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_c8739bb3","line":90,"range":{"start_line":90,"start_character":62,"end_line":90,"end_character":64},"updated":"2016-04-15 12:00:20.000000000","message":"Agree with Gorka\u0027s comment it should be out of the loop.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"}],"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":"ecd438ea83e5773b3e96bde845d7c23adc1b6799","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        volume.create()"},{"line_number":67,"context_line":"        return volume"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _create_volume_attachment(self, context, updates\u003dNone):"},{"line_number":70,"context_line":"        db_volume_attachment \u003d {\u0027mountpoint\u0027: \u0027/dev/vdb\u0027,"},{"line_number":71,"context_line":"                                \u0027attach_mode\u0027: \u0027rw\u0027,"},{"line_number":72,"context_line":"                                \u0027volume_id\u0027: \u0027fake_id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_b35df8ee","line":69,"updated":"2016-04-15 09:20:18.000000000","message":"-1: This is not used.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"90548b46aa2cd10fe468cc2653d5cfd9fa8cbed9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        volume.create()"},{"line_number":67,"context_line":"        return volume"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _create_volume_attachment(self, context, updates\u003dNone):"},{"line_number":70,"context_line":"        db_volume_attachment \u003d {\u0027mountpoint\u0027: \u0027/dev/vdb\u0027,"},{"line_number":71,"context_line":"                                \u0027attach_mode\u0027: \u0027rw\u0027,"},{"line_number":72,"context_line":"                                \u0027volume_id\u0027: \u0027fake_id\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_e06db433","line":69,"in_reply_to":"1a122d0e_b35df8ee","updated":"2016-04-15 23:42:35.000000000","message":"Done","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ecd438ea83e5773b3e96bde845d7c23adc1b6799","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        cast_as_call.mock_cast_as_call(self.volume_api.volume_rpcapi.client)"},{"line_number":95,"context_line":"        cast_as_call.mock_cast_as_call(self.volume_api.scheduler_rpcapi.client)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # start service to handle rpc messages for attach requests"},{"line_number":98,"context_line":"        self.svc \u003d self.start_service(\u0027volume\u0027, host\u003d\u0027test\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_33960895","line":97,"updated":"2016-04-15 09:20:18.000000000","message":"nit: This is only needed by the new test, so it should not be included in setUp.  But I\u0027m ok if you leave it like this for future tests.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"90548b46aa2cd10fe468cc2653d5cfd9fa8cbed9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        cast_as_call.mock_cast_as_call(self.volume_api.volume_rpcapi.client)"},{"line_number":95,"context_line":"        cast_as_call.mock_cast_as_call(self.volume_api.scheduler_rpcapi.client)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # start service to handle rpc messages for attach requests"},{"line_number":98,"context_line":"        self.svc \u003d self.start_service(\u0027volume\u0027, host\u003d\u0027test\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_60608436","line":97,"in_reply_to":"1a122d0e_33960895","updated":"2016-04-15 23:42:35.000000000","message":"yes, leave this for future tests.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10485,"name":"Ankit Agrawal","email":"ankitagrawal8188@gmail.com","username":"ankitagrawal"},"change_message_id":"349b504c38ac4a4bd9850cab9f8c7d0b51a911df","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        admin_metadata \u003d volume[\u0027volume_admin_metadata\u0027]"},{"line_number":351,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":352,"context_line":"        self.assertEqual(\u0027readonly\u0027, admin_metadata[0][\u0027key\u0027])"},{"line_number":353,"context_line":"        self.assertEqual(\u0027False\u0027, admin_metadata[0][\u0027value\u0027])"},{"line_number":354,"context_line":"        self.assertEqual(\u0027attached_mode\u0027, admin_metadata[1][\u0027key\u0027])"},{"line_number":355,"context_line":"        self.assertEqual(\u0027rw\u0027, admin_metadata[1][\u0027value\u0027])"},{"line_number":356,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_0d448572","line":353,"range":{"start_line":353,"start_character":26,"end_line":353,"end_character":31},"updated":"2016-04-15 12:00:20.000000000","message":"Use assertFalse() instead.","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"90548b46aa2cd10fe468cc2653d5cfd9fa8cbed9","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        admin_metadata \u003d volume[\u0027volume_admin_metadata\u0027]"},{"line_number":351,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":352,"context_line":"        self.assertEqual(\u0027readonly\u0027, admin_metadata[0][\u0027key\u0027])"},{"line_number":353,"context_line":"        self.assertEqual(\u0027False\u0027, admin_metadata[0][\u0027value\u0027])"},{"line_number":354,"context_line":"        self.assertEqual(\u0027attached_mode\u0027, admin_metadata[1][\u0027key\u0027])"},{"line_number":355,"context_line":"        self.assertEqual(\u0027rw\u0027, admin_metadata[1][\u0027value\u0027])"},{"line_number":356,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_a03bbcea","line":353,"range":{"start_line":353,"start_character":26,"end_line":353,"end_character":31},"in_reply_to":"1a122d0e_0d448572","updated":"2016-04-15 23:42:35.000000000","message":"I tried, but due to the value is string(not boolean), asserFalse was failed. Am I missing something?","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"ecd438ea83e5773b3e96bde845d7c23adc1b6799","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self.assertEqual(\u0027available\u0027, volume[\u0027status\u0027])"},{"line_number":369,"context_line":"        self.assertRaises(exception.VolumeAttachmentNotFound,"},{"line_number":370,"context_line":"                          db.volume_attachment_get,"},{"line_number":371,"context_line":"                          self.ctx, attachment[\u0027id\u0027])"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def test_invalid_reset_attached_status(self):"},{"line_number":374,"context_line":"        volume \u003d db.volume_create(self.ctx,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_33e72814","line":371,"updated":"2016-04-15 09:20:18.000000000","message":"-1: Missing check for attached_mode in admin metadata","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"90548b46aa2cd10fe468cc2653d5cfd9fa8cbed9","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self.assertEqual(\u0027available\u0027, volume[\u0027status\u0027])"},{"line_number":369,"context_line":"        self.assertRaises(exception.VolumeAttachmentNotFound,"},{"line_number":370,"context_line":"                          db.volume_attachment_get,"},{"line_number":371,"context_line":"                          self.ctx, attachment[\u0027id\u0027])"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def test_invalid_reset_attached_status(self):"},{"line_number":374,"context_line":"        volume \u003d db.volume_create(self.ctx,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_a05a9c81","line":371,"in_reply_to":"1a122d0e_33e72814","updated":"2016-04-15 23:42:35.000000000","message":"Done","commit_id":"570691c9c493f5c658926028b7993db109a0114e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cad1d12dedb26da3192e039818f2df2329360d9f","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        admin_metadata \u003d volume[\u0027volume_admin_metadata\u0027]"},{"line_number":339,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":340,"context_line":"        self.assertEqual(\u0027readonly\u0027, admin_metadata[0][\u0027key\u0027])"},{"line_number":341,"context_line":"        self.assertEqual(\u0027False\u0027, admin_metadata[0][\u0027value\u0027])"},{"line_number":342,"context_line":"        self.assertEqual(\u0027attached_mode\u0027, admin_metadata[1][\u0027key\u0027])"},{"line_number":343,"context_line":"        self.assertEqual(\u0027rw\u0027, admin_metadata[1][\u0027value\u0027])"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_3aafb095","line":341,"updated":"2016-04-18 11:34:30.000000000","message":"nit: It would be better if we also checked that the other entry is attached_mode so we know that when we check on L358 that there\u0027s only 1 entry and that it is readonly metadata we have successfully removed the one we wanted.","commit_id":"ea19c4a5431c445e7199a64062210188dd2b0137"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2e65068337e121d5e87eba0ea38ca5f38378cf3","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        admin_metadata \u003d volume[\u0027volume_admin_metadata\u0027]"},{"line_number":339,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":340,"context_line":"        self.assertEqual(\u0027readonly\u0027, admin_metadata[0][\u0027key\u0027])"},{"line_number":341,"context_line":"        self.assertEqual(\u0027False\u0027, admin_metadata[0][\u0027value\u0027])"},{"line_number":342,"context_line":"        self.assertEqual(\u0027attached_mode\u0027, admin_metadata[1][\u0027key\u0027])"},{"line_number":343,"context_line":"        self.assertEqual(\u0027rw\u0027, admin_metadata[1][\u0027value\u0027])"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_a658a233","line":341,"in_reply_to":"1a122d0e_0c9d5459","updated":"2016-04-19 08:13:28.000000000","message":"Well, apparently I was blind yesterday, because I didn\u0027t see it (don\u0027t ask me how).\n\nThat check is perfect, and that\u0027s what I was asking for. :-)","commit_id":"ea19c4a5431c445e7199a64062210188dd2b0137"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"37497146a7263eb61d0ddc63a9ef5e7210f9486e","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        admin_metadata \u003d volume[\u0027volume_admin_metadata\u0027]"},{"line_number":339,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":340,"context_line":"        self.assertEqual(\u0027readonly\u0027, admin_metadata[0][\u0027key\u0027])"},{"line_number":341,"context_line":"        self.assertEqual(\u0027False\u0027, admin_metadata[0][\u0027value\u0027])"},{"line_number":342,"context_line":"        self.assertEqual(\u0027attached_mode\u0027, admin_metadata[1][\u0027key\u0027])"},{"line_number":343,"context_line":"        self.assertEqual(\u0027rw\u0027, admin_metadata[1][\u0027value\u0027])"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_0c9d5459","line":341,"in_reply_to":"1a122d0e_3aafb095","updated":"2016-04-18 16:12:35.000000000","message":"Hi Gorka,\n\nThank you for your review.\nI think L342 checks that the other entry is attached_mode.\nWhat check would be better to add here?","commit_id":"ea19c4a5431c445e7199a64062210188dd2b0137"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"d51f96851ac2017d1296b10bd4ad5a5f76bd6d9f","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        admin_metadata \u003d volume[\u0027volume_admin_metadata\u0027]"},{"line_number":339,"context_line":"        self.assertEqual(2, len(admin_metadata))"},{"line_number":340,"context_line":"        self.assertEqual(\u0027readonly\u0027, admin_metadata[0][\u0027key\u0027])"},{"line_number":341,"context_line":"        self.assertEqual(\u0027False\u0027, admin_metadata[0][\u0027value\u0027])"},{"line_number":342,"context_line":"        self.assertEqual(\u0027attached_mode\u0027, admin_metadata[1][\u0027key\u0027])"},{"line_number":343,"context_line":"        self.assertEqual(\u0027rw\u0027, admin_metadata[1][\u0027value\u0027])"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_d6c8be24","line":341,"in_reply_to":"1a122d0e_a658a233","updated":"2016-04-20 00:46:09.000000000","message":"Now I understand what\u0027s happened :)","commit_id":"ea19c4a5431c445e7199a64062210188dd2b0137"}]}
