)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"702db536e38c7356ed26c2da41cbea87627858c7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mitsuhiro Tanino \u003cmitsuhiro.tanino@hds.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-06 20:09:36 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LVM: Support a volume-gorup on shared storage v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently LVM driver uses software iSCSI target to export a"},{"line_number":10,"context_line":"volume-group. This patch adds a feature to support a volume-group on"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_86245ec7","line":7,"updated":"2014-06-09 17:34:43.000000000","message":"s/gorup/group/","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mitsuhiro Tanino \u003cmitsuhiro.tanino@hds.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-06 20:09:36 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"LVM: Support a volume-gorup on shared storage v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently LVM driver uses software iSCSI target to export a"},{"line_number":10,"context_line":"volume-group. This patch adds a feature to support a volume-group on"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_ed07c816","line":7,"in_reply_to":"1ae5cdf2_86245ec7","updated":"2014-06-16 22:14:45.000000000","message":"Thank you for your review. I fixed this at v3 patch.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"702db536e38c7356ed26c2da41cbea87627858c7","unresolved":false,"context_lines":[{"line_number":28,"context_line":" - Fixed some typos."},{"line_number":29,"context_line":" - Change comment format."},{"line_number":30,"context_line":" - Remove unnecessary return."},{"line_number":31,"context_line":" - Remove marker function from debug level logs."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Change-Id: Ic280e569d963c25f424d5dbc329bcb08fdaba04c"},{"line_number":34,"context_line":"Signed-off-by: Mitsuhiro Tanino \u003cmitsuhiro.tanino@hds.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_7a128259","line":31,"updated":"2014-06-09 17:34:43.000000000","message":"No need to put these \"sausage-making\" comments in your commit message. Please git commit --amend to remove them.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":28,"context_line":" - Fixed some typos."},{"line_number":29,"context_line":" - Change comment format."},{"line_number":30,"context_line":" - Remove unnecessary return."},{"line_number":31,"context_line":" - Remove marker function from debug level logs."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Change-Id: Ic280e569d963c25f424d5dbc329bcb08fdaba04c"},{"line_number":34,"context_line":"Signed-off-by: Mitsuhiro Tanino \u003cmitsuhiro.tanino@hds.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_0d0dd437","line":31,"in_reply_to":"1ae5cdf2_7a128259","updated":"2014-06-16 22:14:45.000000000","message":"I removed this from v3 patch commit message.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"}],"nova/tests/virt/libvirt/test_lvm.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        mock_execute.side_effect \u003d ["},{"line_number":175,"context_line":"            processutils.ProcessExecutionError,"},{"line_number":176,"context_line":"            mock.DEFAULT,"},{"line_number":177,"context_line":"        ]"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        mock_execute.assert_has_calls(["},{"line_number":180,"context_line":"            mock.call(\u0027lvchange\u0027, \u0027-a\u0027, \u0027y\u0027, \u0027--yes\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_03c2a658","line":177,"updated":"2014-07-03 17:41:44.000000000","message":"You need to define the mock\u0027s side effects *before* you call lvm.activate_lv() above on line 173...\n\nWhen you do that, you will likely notice that your asserts will fail, because the ProcessExecutionError side_effect will need to be *second* in the side_effect list, not first.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        mock_execute.side_effect \u003d ["},{"line_number":175,"context_line":"            processutils.ProcessExecutionError,"},{"line_number":176,"context_line":"            mock.DEFAULT,"},{"line_number":177,"context_line":"        ]"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        mock_execute.assert_has_calls(["},{"line_number":180,"context_line":"            mock.call(\u0027lvchange\u0027, \u0027-a\u0027, \u0027y\u0027, \u0027--yes\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_64560507","line":177,"in_reply_to":"baada198_03c2a658","updated":"2014-08-08 19:57:48.000000000","message":"Thanks. I modified. Also I divided this to two test cases that are normal and exception case.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            mock.call(\u0027lvchange\u0027, \u0027-a\u0027, \u0027y\u0027, \u0027--yes\u0027,"},{"line_number":181,"context_line":"                      \u0027vg/volume-xyz\u0027, run_as_root\u003dTrue)"},{"line_number":182,"context_line":"        ])"},{"line_number":183,"context_line":"        self.assertEqual(1, mock_execute.call_count)"},{"line_number":184,"context_line":"        self.assertRaises(processutils.ProcessExecutionError,"},{"line_number":185,"context_line":"                          lvm.activate_lv, \u0027vg\u0027, \u0027volume-xyz\u0027)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e3df720b","line":183,"updated":"2014-07-03 17:41:44.000000000","message":"You can combine lines 179 through 183 into just this:\n\n mock_execute.assert_called_once_with(\u0027lvchange\u0027, \u0027-a\u0027, \u0027y\u0027, \u0027--yes\u0027,\n                                      \u0027vg/volume-xyz\u0027, run_as_root\u003dTrue)","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            mock.call(\u0027lvchange\u0027, \u0027-a\u0027, \u0027y\u0027, \u0027--yes\u0027,"},{"line_number":181,"context_line":"                      \u0027vg/volume-xyz\u0027, run_as_root\u003dTrue)"},{"line_number":182,"context_line":"        ])"},{"line_number":183,"context_line":"        self.assertEqual(1, mock_execute.call_count)"},{"line_number":184,"context_line":"        self.assertRaises(processutils.ProcessExecutionError,"},{"line_number":185,"context_line":"                          lvm.activate_lv, \u0027vg\u0027, \u0027volume-xyz\u0027)"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_441ae16b","line":183,"in_reply_to":"baada198_e3df720b","updated":"2014-08-08 19:57:48.000000000","message":"Changed.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                          lvm.activate_lv, \u0027vg\u0027, \u0027volume-xyz\u0027)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @mock.patch(\u0027nova.utils.execute\u0027)"},{"line_number":188,"context_line":"    def test_deactivate_lv(self, mock_execute):"},{"line_number":189,"context_line":"        lvm.deactivate_lv(\u0027vg\u0027, \u0027volume-xyz\u0027)"},{"line_number":190,"context_line":"        mock_execute.side_effect \u003d ["},{"line_number":191,"context_line":"            processutils.ProcessExecutionError,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_03338663","line":188,"updated":"2014-07-03 17:41:44.000000000","message":"ditto comments from above for this and below test case.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"}],"nova/tests/virt/libvirt/test_volume.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"702db536e38c7356ed26c2da41cbea87627858c7","unresolved":false,"context_lines":[{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"    def test_libvirt_shared_driver(self):"},{"line_number":1012,"context_line":"        # NOTE(vish) exists is to make driver assume connecting worked"},{"line_number":1013,"context_line":"        self.stubs.Set(os.path, \u0027exists\u0027, lambda x: True)"},{"line_number":1014,"context_line":"        libvirt_driver \u003d volume.LibvirtSharedLvmDriver(self.fake_conn)"},{"line_number":1015,"context_line":"        connection_info \u003d self.shared_lvm_connection(self.name, self.uuid)"},{"line_number":1016,"context_line":"        conf \u003d libvirt_driver.connect_volume(connection_info, self.disk_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5a14e6f4","line":1013,"updated":"2014-06-09 17:34:43.000000000","message":"Please use mock for new unit tests where possible. For this test case, it should look like this:\n\n @mock.patch(os.path.exists, return_value\u003dTrue)\n def test_libvirt_shared_driver(self, _mocked):\n     ...","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"    def test_libvirt_shared_driver(self):"},{"line_number":1012,"context_line":"        # NOTE(vish) exists is to make driver assume connecting worked"},{"line_number":1013,"context_line":"        self.stubs.Set(os.path, \u0027exists\u0027, lambda x: True)"},{"line_number":1014,"context_line":"        libvirt_driver \u003d volume.LibvirtSharedLvmDriver(self.fake_conn)"},{"line_number":1015,"context_line":"        connection_info \u003d self.shared_lvm_connection(self.name, self.uuid)"},{"line_number":1016,"context_line":"        conf \u003d libvirt_driver.connect_volume(connection_info, self.disk_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ad4b005e","line":1013,"in_reply_to":"1ae5cdf2_5a14e6f4","updated":"2014-06-16 22:14:45.000000000","message":"I noticed that the stubs was unnecessary. I removed it.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"702db536e38c7356ed26c2da41cbea87627858c7","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"        expected_commands \u003d [(\u0027lvs\u0027,),"},{"line_number":1024,"context_line":"                             (\u0027lvchange\u0027, \u0027-ay\u0027, dev_str),"},{"line_number":1025,"context_line":"                             (\u0027lvchange\u0027, \u0027-an\u0027, dev_str)]"},{"line_number":1026,"context_line":"        self.assertEqual(self.executes, expected_commands)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_bac7aa63","line":1026,"updated":"2014-06-09 17:34:43.000000000","message":"nit: here and above, assertEqual() arguments should be (expected, actual), not (actual, expected)","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"        expected_commands \u003d [(\u0027lvs\u0027,),"},{"line_number":1024,"context_line":"                             (\u0027lvchange\u0027, \u0027-ay\u0027, dev_str),"},{"line_number":1025,"context_line":"                             (\u0027lvchange\u0027, \u0027-an\u0027, dev_str)]"},{"line_number":1026,"context_line":"        self.assertEqual(self.executes, expected_commands)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_2d6610ef","line":1026,"in_reply_to":"1ae5cdf2_bac7aa63","updated":"2014-06-16 22:14:45.000000000","message":"I changed assertEqual() arguments order. (expected, actual)","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":1783,"context_line":"            raise exception.NovaException(_(\u0027snapshot_id required \u0027"},{"line_number":1784,"context_line":"                                            \u0027in create_info\u0027))"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"        if create_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027 and create_info[\u0027type\u0027] !\u003d \u0027lvm\u0027:"},{"line_number":1787,"context_line":"            raise exception.NovaException(_(\u0027Unknown type: %s\u0027) %"},{"line_number":1788,"context_line":"                                            create_info[\u0027type\u0027])"},{"line_number":1789,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_bf1a1116","line":1786,"updated":"2014-12-17 18:55:08.000000000","message":"Alternately:\n\n if create_info[\u0027type\u0027] not in (\u0027qcow2\u0027, \u0027lvm\u0027):","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":1792,"context_line":"                self._volume_snapshot_create_qcow2(context, instance, virt_dom,"},{"line_number":1793,"context_line":"                                                   volume_id,"},{"line_number":1794,"context_line":"                                                   create_info[\u0027new_file\u0027])"},{"line_number":1795,"context_line":"            elif create_info[\u0027type\u0027] \u003d\u003d \u0027lvm\u0027:"},{"line_number":1796,"context_line":"                self._volume_snapshot_create_lvm(context, snapshot_id,"},{"line_number":1797,"context_line":"                                                 volume_id,"},{"line_number":1798,"context_line":"                                                 create_info)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_df199d23","line":1795,"updated":"2014-12-17 18:55:08.000000000","message":"Could just use else: here, since like 1786 ensures only qcow2 or lvm is used.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8cf9c310e7eda41874c7df2867d3b7ca75edc4b6","unresolved":false,"context_lines":[{"line_number":1796,"context_line":"                self._volume_snapshot_create_lvm(context, snapshot_id,"},{"line_number":1797,"context_line":"                                                 volume_id,"},{"line_number":1798,"context_line":"                                                 create_info)"},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        except Exception:"},{"line_number":1801,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1802,"context_line":"                LOG.exception(_LE(\u0027Error occurred during \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_a0fea703","line":1799,"updated":"2015-03-11 10:06:58.000000000","message":"I really hate the way we\u0027re going to end up with driver.py full of  if image_type \u003d blah else if image_type \u003d foo ....  conditionals and functions.  The imagebackend.py class exists explicitly to avoid this kind of conditional code in driver.py   So I really want to see imagebackend.py extended to cope with the needs to snapshotting, and not pollute driver.py with this any more.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":2055,"context_line":"                                     target LV (lvm only)"},{"line_number":2056,"context_line":"        \"\"\""},{"line_number":2057,"context_line":""},{"line_number":2058,"context_line":"        if delete_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027 and delete_info[\u0027type\u0027] !\u003d \u0027lvm\u0027:"},{"line_number":2059,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info[\u0027type\u0027]"},{"line_number":2060,"context_line":"            raise exception.NovaException(msg)"},{"line_number":2061,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_ff1499ea","line":2058,"updated":"2014-12-17 18:55:08.000000000","message":"Same comment as above.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":2065,"context_line":"                                                   volume_id,"},{"line_number":2066,"context_line":"                                                   snapshot_id,"},{"line_number":2067,"context_line":"                                                   delete_info\u003ddelete_info)"},{"line_number":2068,"context_line":"            elif delete_info[\u0027type\u0027] \u003d\u003d \u0027lvm\u0027:"},{"line_number":2069,"context_line":"                self._volume_snapshot_delete_lvm(context, instance, volume_id,"},{"line_number":2070,"context_line":"                                                 snapshot_id,"},{"line_number":2071,"context_line":"                                                 delete_info\u003ddelete_info)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_1fd32539","line":2068,"updated":"2014-12-17 18:55:08.000000000","message":"ditto.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"}],"nova/virt/libvirt/lvm.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e077942c6dd3e482c31ebe3129445fc58b54cf84","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    \"\"\"Run lvs and update information about logical volumes on"},{"line_number":244,"context_line":"    nova compute node."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    :param kwargs: exit_code"},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    # Note: If lvmetad manages devices which includes volume group"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5d546ac5","line":246,"updated":"2014-06-19 10:04:36.000000000","message":"Both of these functions are really missing the point of having this LVM API module.  The other functions in this file are all nice high level operations \"clear_logical_volume\", \"delete_logical_volume\", etc which isolate the calling code from having to know anything about LVM CLI tool syntax.\n\nAdding \"run_lvs\" and \"run_lvchange\" provides little added value in terms of API usage. ie you should have \"activate_volume\" and \"deactivate_volume\" not \"run_lvchange\", and similar high level method for whatever you need \u0027run_lvs\u0027 to do","commit_id":"61ff488cdcf669fe6257a9b9679d37654dafa501"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"6cb10c7ceee60b58b2eb348ee45cfb1088e944b9","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    \"\"\"Run lvs and update information about logical volumes on"},{"line_number":244,"context_line":"    nova compute node."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    :param kwargs: exit_code"},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    # Note: If lvmetad manages devices which includes volume group"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_6227ab12","line":246,"in_reply_to":"1ae5cdf2_5d546ac5","updated":"2014-06-19 23:53:20.000000000","message":"I implemented these three high level methods instead of run_lvchange and run_lvs. Please confirm these.\n- activate_lv()\n- deactivate_lv()\n- update_metadata()","commit_id":"61ff488cdcf669fe6257a9b9679d37654dafa501"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"708e06f41f1f0edc3a48f1d84e8f13f4a31221eb","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        lvremove \u003d (\u0027lvremove\u0027, \u0027-f\u0027, path)"},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            utils.execute(*lvremove, attempts\u003d3, run_as_root\u003dTrue)"},{"line_number":237,"context_line":"        except processutils.ProcessExecutionError as exp:"},{"line_number":238,"context_line":"            errors.append(str(exp))"},{"line_number":239,"context_line":"    if errors:"},{"line_number":240,"context_line":"        raise exception.VolumesNotRemoved(reason\u003d(\u0027, \u0027).join(errors))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_504ed96f","line":237,"updated":"2014-06-20 19:08:55.000000000","message":"like here...","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"708e06f41f1f0edc3a48f1d84e8f13f4a31221eb","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    try:"},{"line_number":267,"context_line":"        utils.execute(*cmd,"},{"line_number":268,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":269,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":270,"context_line":"        LOG.exception(_(\u0027Error activating LV\u0027))"},{"line_number":271,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_50833955","line":268,"updated":"2014-06-20 19:08:55.000000000","message":"This could be in a single line.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"20e89200eb3380439e008472cc66f60de7b88784","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    try:"},{"line_number":267,"context_line":"        utils.execute(*cmd,"},{"line_number":268,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":269,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":270,"context_line":"        LOG.exception(_(\u0027Error activating LV\u0027))"},{"line_number":271,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_d07ca922","line":268,"in_reply_to":"1ae5cdf2_50833955","updated":"2014-06-20 19:29:34.000000000","message":"fixed.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"708e06f41f1f0edc3a48f1d84e8f13f4a31221eb","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    try:"},{"line_number":267,"context_line":"        utils.execute(*cmd,"},{"line_number":268,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":269,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":270,"context_line":"        LOG.exception(_(\u0027Error activating LV\u0027))"},{"line_number":271,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":272,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_d03ae9cb","line":269,"updated":"2014-06-20 19:08:55.000000000","message":"And this should be except processutils.ProcessExecutionError.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"20e89200eb3380439e008472cc66f60de7b88784","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    try:"},{"line_number":267,"context_line":"        utils.execute(*cmd,"},{"line_number":268,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":269,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":270,"context_line":"        LOG.exception(_(\u0027Error activating LV\u0027))"},{"line_number":271,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":272,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_50909942","line":269,"in_reply_to":"1ae5cdf2_d03ae9cb","updated":"2014-06-20 19:29:34.000000000","message":"Changed the except to \"processutils.ProcessExecutionError.\"","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"20e89200eb3380439e008472cc66f60de7b88784","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    try:"},{"line_number":293,"context_line":"        utils.execute(*cmd,"},{"line_number":294,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":295,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":296,"context_line":"        LOG.exception(_(\u0027Error deactivating LV\u0027))"},{"line_number":297,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_70baf5c0","line":294,"updated":"2014-06-20 19:29:34.000000000","message":"fixed.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"708e06f41f1f0edc3a48f1d84e8f13f4a31221eb","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    try:"},{"line_number":293,"context_line":"        utils.execute(*cmd,"},{"line_number":294,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":295,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":296,"context_line":"        LOG.exception(_(\u0027Error deactivating LV\u0027))"},{"line_number":297,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":298,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_702af57e","line":295,"updated":"2014-06-20 19:08:55.000000000","message":"ditto.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"20e89200eb3380439e008472cc66f60de7b88784","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    try:"},{"line_number":293,"context_line":"        utils.execute(*cmd,"},{"line_number":294,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":295,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":296,"context_line":"        LOG.exception(_(\u0027Error deactivating LV\u0027))"},{"line_number":297,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":298,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_b099dd6e","line":295,"in_reply_to":"1ae5cdf2_702af57e","updated":"2014-06-20 19:29:34.000000000","message":"Changed the except to \"processutils.ProcessExecutionError.\"","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"20e89200eb3380439e008472cc66f60de7b88784","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    cmd \u003d [\u0027lvs\u0027]"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    try:"},{"line_number":312,"context_line":"        utils.execute(*cmd,"},{"line_number":313,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":314,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":315,"context_line":"        LOG.exception(_(\u0027Error updating LVM metadata\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_90adc186","line":312,"updated":"2014-06-20 19:29:34.000000000","message":"fixed.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":9176,"name":"Tomoki Sekiyama","email":"tomoki.sekiyama@gmail.com","username":"tsekiyama"},"change_message_id":"708e06f41f1f0edc3a48f1d84e8f13f4a31221eb","unresolved":false,"context_lines":[{"line_number":311,"context_line":"    try:"},{"line_number":312,"context_line":"        utils.execute(*cmd,"},{"line_number":313,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":314,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":315,"context_line":"        LOG.exception(_(\u0027Error updating LVM metadata\u0027))"},{"line_number":316,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":317,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_9054e1fe","line":314,"updated":"2014-06-20 19:08:55.000000000","message":"ditto.","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"20e89200eb3380439e008472cc66f60de7b88784","unresolved":false,"context_lines":[{"line_number":311,"context_line":"    try:"},{"line_number":312,"context_line":"        utils.execute(*cmd,"},{"line_number":313,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":314,"context_line":"    except utils.ProcessExecutionError as err:"},{"line_number":315,"context_line":"        LOG.exception(_(\u0027Error updating LVM metadata\u0027))"},{"line_number":316,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":317,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_10aa9170","line":314,"in_reply_to":"1ae5cdf2_9054e1fe","updated":"2014-06-20 19:29:34.000000000","message":"Changed the except to \"processutils.ProcessExecutionError.\"","commit_id":"1a1ff2070f279bf45bfb19fdbadc238f39832d49"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        LOG.exception(_(\u0027Error activating LV\u0027))"},{"line_number":270,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":271,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"},{"line_number":272,"context_line":"        LOG.error(_(\u0027StdErr  :%s\u0027) % err.stderr)"},{"line_number":273,"context_line":"        raise"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_ee06791c","line":272,"updated":"2014-07-03 17:41:44.000000000","message":"A few things are wrong with the above logging statements.\n\n1) Please combine the 4 into a single log message\n\nDon\u0027t use multiple log statements for a single related event. The reason is because in a multiplexed worker daemon, the 4 lines can be spread out, mixed in between other another process\u0027 log lines, making it difficult for the operator to tell that the 4 lines are related to each other. You can, of course, put all the stdout and stderr information in the message, separated by some separator like newline.\n\n2) Use the _LE() contextual i18n wrapper please\n\n3) You don\u0027t need to have the Cmd put into the logs. This is already DEBUG-logged in the execute() call:\n\nhttps://github.com/openstack/nova/blob/master/nova/openstack/common/processutils.py#L159-L160","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        LOG.exception(_(\u0027Error activating LV\u0027))"},{"line_number":270,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":271,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"},{"line_number":272,"context_line":"        LOG.error(_(\u0027StdErr  :%s\u0027) % err.stderr)"},{"line_number":273,"context_line":"        raise"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_237deae6","line":272,"in_reply_to":"baada198_ee06791c","updated":"2014-08-08 19:57:48.000000000","message":"Thank you for your explanation.\nI removed command outputs from here.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        raise"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"def update_metadata():"},{"line_number":302,"context_line":"    \"\"\"Update information about logical volumes on nova compute"},{"line_number":303,"context_line":"    node using \u0027lvs\u0027."},{"line_number":304,"context_line":"    :raises: processutils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_4e3cc5c8","line":301,"updated":"2014-07-03 17:41:44.000000000","message":"there are a number of functions in Nova called \"update_metadata\" (or similar) that do something very different than this function :)\n\nI recommend calling this function \"update_lv_metadata()\" to distinguish from the others.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        raise"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"def update_metadata():"},{"line_number":302,"context_line":"    \"\"\"Update information about logical volumes on nova compute"},{"line_number":303,"context_line":"    node using \u0027lvs\u0027."},{"line_number":304,"context_line":"    :raises: processutils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_232faaf6","line":301,"in_reply_to":"baada198_4e3cc5c8","updated":"2014-08-08 19:57:48.000000000","message":"Thanks. I changed the function name to \"update_lv_metadata()\".","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        LOG.exception(_(\u0027Error updating LVM metadata\u0027))"},{"line_number":313,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":314,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"},{"line_number":315,"context_line":"        LOG.error(_(\u0027StdErr  :%s\u0027) % err.stderr)"},{"line_number":316,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_4e15a53e","line":315,"updated":"2014-07-03 17:41:44.000000000","message":"Here and deactivate_lv(), please see comments about logging.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        LOG.exception(_(\u0027Error updating LVM metadata\u0027))"},{"line_number":313,"context_line":"        LOG.error(_(\u0027Cmd     :%s\u0027) % err.cmd)"},{"line_number":314,"context_line":"        LOG.error(_(\u0027StdOut  :%s\u0027) % err.stdout)"},{"line_number":315,"context_line":"        LOG.error(_(\u0027StdErr  :%s\u0027) % err.stderr)"},{"line_number":316,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_636a821c","line":315,"in_reply_to":"baada198_4e15a53e","updated":"2014-08-08 19:57:48.000000000","message":"Done.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    :raises: processutils.ProcessExecutionError"},{"line_number":131,"context_line":"    \"\"\""},{"line_number":132,"context_line":"    if volume_path is None:"},{"line_number":133,"context_line":"        LOG.error(_(\"Trying to create snapshot by non-existent LV: %s\")"},{"line_number":134,"context_line":"                  % volume_path)"},{"line_number":135,"context_line":"        raise exception.VolumeNotFound(device\u003dvolume_path)"},{"line_number":136,"context_line":"    cmd \u003d [\u0027lvcreate\u0027, \u0027--name\u0027, name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_5fddad41","line":133,"updated":"2014-12-17 18:55:08.000000000","message":"This should really be LOG.debug(). LOG.error is meant for errors that should cause a sysadmin to check the Nova system for major problems. In this case, it\u0027s a mere validation error, which should just be logged as DEBUG. Note that there is no need to i18n DEBUG level messages.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    except processutils.ProcessExecutionError as err:"},{"line_number":170,"context_line":"        mesg \u003d (_(\u0027Error reported running lvremove: CMD: %(command)s, \u0027"},{"line_number":171,"context_line":"                  \u0027RESPONSE: %(response)s\u0027) %"},{"line_number":172,"context_line":"                {\u0027command\u0027: err.cmd, \u0027response\u0027: err.stderr})"},{"line_number":173,"context_line":"        LOG.debug(mesg)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        LOG.debug(\u0027Attempting udev settle and retry of lvremove...\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_7fe0a9fa","line":172,"updated":"2014-12-17 18:55:08.000000000","message":"No need to i18n DEBUG messages.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":11676,"name":"wuyuting","email":"wytdahu@gmail.com","username":"wuyuting"},"change_message_id":"3c5a51e0d8ef616a4f1f40afa3fdda933d05375b","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        raise"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def deactivate_lv(vg_name, lv_name):"},{"line_number":383,"context_line":"    \"\"\"Ensure that logical volume is deactivated."},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    :param vg_name: Name of VG including target LV"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_12726ee5","line":382,"updated":"2015-03-11 06:54:44.000000000","message":"If the shared lvm mounted to different instances at the same host,\nwhen umount the volume from one instance at the first, this command will failed. This is because the lvm is still in use by another instance.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"},{"author":{"_account_id":11676,"name":"wuyuting","email":"wytdahu@gmail.com","username":"wuyuting"},"change_message_id":"d5c2f6f5c288f49ad76975448f6fffc79f034e96","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        raise"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def deactivate_lv(vg_name, lv_name):"},{"line_number":383,"context_line":"    \"\"\"Ensure that logical volume is deactivated."},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    :param vg_name: Name of VG including target LV"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_bd81734f","line":382,"in_reply_to":"9a80dd14_12726ee5","updated":"2015-03-11 07:03:18.000000000","message":"The above error is based on this commit:https://review.openstack.org/#/c/85847/","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"}],"nova/virt/libvirt/volume.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"class LibvirtSharedLvmDriver(LibvirtBaseVolumeDriver):"},{"line_number":184,"context_line":"    \"\"\"Class for volumes backed by local file.\"\"\""},{"line_number":185,"context_line":"    def __init__(self, connection):"},{"line_number":186,"context_line":"        super(LibvirtSharedLvmDriver,"},{"line_number":187,"context_line":"              self).__init__(connection, is_block_dev\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_9e3a1235","line":184,"updated":"2014-05-07 19:14:51.000000000","message":"Is that docstring correct? Do you mean volumes backed by a shared LVM volume group?","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"class LibvirtSharedLvmDriver(LibvirtBaseVolumeDriver):"},{"line_number":184,"context_line":"    \"\"\"Class for volumes backed by local file.\"\"\""},{"line_number":185,"context_line":"    def __init__(self, connection):"},{"line_number":186,"context_line":"        super(LibvirtSharedLvmDriver,"},{"line_number":187,"context_line":"              self).__init__(connection, is_block_dev\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_8baf072b","line":184,"in_reply_to":"7adec928_9e3a1235","updated":"2014-06-09 15:36:34.000000000","message":"Thank you for your review. \"shared LVM\" is right explanation. fixed at v2.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    def _run_lvs(self, **kwargs):"},{"line_number":190,"context_line":"    # Update information about logical volumes of a nova compute node."},{"line_number":191,"context_line":"    # Note: If lvmetad manages devices which includes volume group for"},{"line_number":192,"context_line":"    #       cinder, this information does not be updated."},{"line_number":193,"context_line":"    #       Please exclude target devices from lvmetad configration."},{"line_number":194,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":195,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1e1d22be","line":192,"updated":"2014-05-07 19:14:51.000000000","message":"did you mean \"does not *need* to be updated\"?","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    def _run_lvs(self, **kwargs):"},{"line_number":190,"context_line":"    # Update information about logical volumes of a nova compute node."},{"line_number":191,"context_line":"    # Note: If lvmetad manages devices which includes volume group for"},{"line_number":192,"context_line":"    #       cinder, this information does not be updated."},{"line_number":193,"context_line":"    #       Please exclude target devices from lvmetad configration."},{"line_number":194,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":195,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_cb802f8e","line":192,"in_reply_to":"7adec928_1e1d22be","updated":"2014-06-09 15:36:34.000000000","message":"\"this information is not updated\" is right. fixed at v2.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    # Update information about logical volumes of a nova compute node."},{"line_number":191,"context_line":"    # Note: If lvmetad manages devices which includes volume group for"},{"line_number":192,"context_line":"    #       cinder, this information does not be updated."},{"line_number":193,"context_line":"    #       Please exclude target devices from lvmetad configration."},{"line_number":194,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":195,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"},{"line_number":196,"context_line":"                                   run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_5e308a56","line":193,"updated":"2014-05-07 19:14:51.000000000","message":"Please indent the above comments one level (same for below)\n\nAlso, s/configration/configuration/","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    # Update information about logical volumes of a nova compute node."},{"line_number":191,"context_line":"    # Note: If lvmetad manages devices which includes volume group for"},{"line_number":192,"context_line":"    #       cinder, this information does not be updated."},{"line_number":193,"context_line":"    #       Please exclude target devices from lvmetad configration."},{"line_number":194,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":195,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"},{"line_number":196,"context_line":"                                   run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_26ee2a23","line":193,"in_reply_to":"7adec928_5e308a56","updated":"2014-06-09 15:36:34.000000000","message":"Fixed comment level.\nI missed to fix spelling miss. I will fix this next version.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"},{"line_number":196,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":197,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":198,"context_line":"        LOG.debug(_(\"lvs: stdout\u003d%(out)s stderr\u003d%(err)s\"),"},{"line_number":199,"context_line":"                  {\u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":200,"context_line":"        return (out, err)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ded73abe","line":198,"updated":"2014-05-07 19:14:51.000000000","message":"DEBUG level log messages do not need i18n\u0027ing (here and throughout). Please see here for current guidelines on logging:\n\nhttps://wiki.openstack.org/wiki/LoggingStandards#Guidelines","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"},{"line_number":196,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":197,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":198,"context_line":"        LOG.debug(_(\"lvs: stdout\u003d%(out)s stderr\u003d%(err)s\"),"},{"line_number":199,"context_line":"                  {\u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":200,"context_line":"        return (out, err)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_26a0eaf3","line":198,"in_reply_to":"7adec928_ded73abe","updated":"2014-06-09 15:36:34.000000000","message":"Thank you for your information. I removed marker function from debug level logs.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    def _run_lvchange(self, lvchange_command, **kwargs):"},{"line_number":203,"context_line":"    # When a SAN volume is attached to multiple compute nodes, device"},{"line_number":204,"context_line":"    # file of logical volume is not created automatically without"},{"line_number":205,"context_line":"    # executing \"lvs\". Therefore, compute node needs to crete a device"},{"line_number":206,"context_line":"    # file in order to attach the cinder volume to a guest instance."},{"line_number":207,"context_line":"    # Device file: /dev/volume group/logical volume"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1e90c2eb","line":205,"updated":"2014-05-07 19:14:51.000000000","message":"s/crete/create/","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    def _run_lvchange(self, lvchange_command, **kwargs):"},{"line_number":203,"context_line":"    # When a SAN volume is attached to multiple compute nodes, device"},{"line_number":204,"context_line":"    # file of logical volume is not created automatically without"},{"line_number":205,"context_line":"    # executing \"lvs\". Therefore, compute node needs to crete a device"},{"line_number":206,"context_line":"    # file in order to attach the cinder volume to a guest instance."},{"line_number":207,"context_line":"    # Device file: /dev/volume group/logical volume"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_662592aa","line":205,"in_reply_to":"7adec928_1e90c2eb","updated":"2014-06-09 15:36:34.000000000","message":"fixed.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        conf.source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":233,"context_line":"        \"\"\" If these commands return other than 0,"},{"line_number":234,"context_line":"            exception \"Unexpected error while running command\" is returned."},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        self._run_lvs(check_exit_code\u003d[0])"},{"line_number":237,"context_line":"        self._run_lvchange((\u0027-ay\u0027, conf.source_path), check_exit_code\u003d[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_7e6d4604","line":234,"updated":"2014-05-07 19:14:51.000000000","message":"The above should be # comments, not a docstring...","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        conf.source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":233,"context_line":"        \"\"\" If these commands return other than 0,"},{"line_number":234,"context_line":"            exception \"Unexpected error while running command\" is returned."},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        self._run_lvs(check_exit_code\u003d[0])"},{"line_number":237,"context_line":"        self._run_lvchange((\u0027-ay\u0027, conf.source_path), check_exit_code\u003d[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_86129e56","line":234,"in_reply_to":"7adec928_7e6d4604","updated":"2014-06-09 15:36:34.000000000","message":"Changed # comments from docstring.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":249,"context_line":"        \"\"\" If the command returns other than 0,"},{"line_number":250,"context_line":"            exception \"Unexpected error while running command\" is returned."},{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        self._run_lvchange((\u0027-an\u0027, source_path), check_exit_code\u003d[0])"},{"line_number":253,"context_line":"        return"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_fe579624","line":251,"updated":"2014-05-07 19:14:51.000000000","message":"The above should be # comments, not a docstring...","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":249,"context_line":"        \"\"\" If the command returns other than 0,"},{"line_number":250,"context_line":"            exception \"Unexpected error while running command\" is returned."},{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        self._run_lvchange((\u0027-an\u0027, source_path), check_exit_code\u003d[0])"},{"line_number":253,"context_line":"        return"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_4620969b","line":251,"in_reply_to":"7adec928_fe579624","updated":"2014-06-09 15:36:34.000000000","message":"Changed # comments from docstring.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"148db6d10fd814c967a64bf58382f8c25b8a3a2b","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            exception \"Unexpected error while running command\" is returned."},{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        self._run_lvchange((\u0027-an\u0027, source_path), check_exit_code\u003d[0])"},{"line_number":253,"context_line":"        return"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"class LibvirtFakeVolumeDriver(LibvirtBaseVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_b95c4827","line":253,"updated":"2014-05-07 19:14:51.000000000","message":"return is unneeded here.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"35891ae0ec36c781247dbfc0ac6ae46307c85ef4","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            exception \"Unexpected error while running command\" is returned."},{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        self._run_lvchange((\u0027-an\u0027, source_path), check_exit_code\u003d[0])"},{"line_number":253,"context_line":"        return"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"class LibvirtFakeVolumeDriver(LibvirtBaseVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_262b8a83","line":253,"in_reply_to":"7adec928_b95c4827","updated":"2014-06-09 15:36:34.000000000","message":"I removed unnecessary return.","commit_id":"91785b00c0f50ba4892bab68e0d86b539e4336f9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"702db536e38c7356ed26c2da41cbea87627858c7","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # Note:"},{"line_number":192,"context_line":"        # If lvmetad manages devices which includes volume group for"},{"line_number":193,"context_line":"        # cinder, this information is not updated. Please exclude"},{"line_number":194,"context_line":"        # target devices from lvmetad configration."},{"line_number":195,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":196,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"},{"line_number":197,"context_line":"                                   run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_1a941e36","line":194,"updated":"2014-06-09 17:34:43.000000000","message":"s/configration/configuration/","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # Note:"},{"line_number":192,"context_line":"        # If lvmetad manages devices which includes volume group for"},{"line_number":193,"context_line":"        # cinder, this information is not updated. Please exclude"},{"line_number":194,"context_line":"        # target devices from lvmetad configration."},{"line_number":195,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, 0)"},{"line_number":196,"context_line":"        (out, err) \u003d utils.execute(\u0027lvs\u0027,"},{"line_number":197,"context_line":"                                   run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_6d8e587b","line":194,"in_reply_to":"1ae5cdf2_1a941e36","updated":"2014-06-16 22:14:45.000000000","message":"I fixed this at v3 patch.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"702db536e38c7356ed26c2da41cbea87627858c7","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":198,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":199,"context_line":"        LOG.debug(\"lvs: stdout\u003d%(out)s stderr\u003d%(err)s\","},{"line_number":200,"context_line":"                  {\u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":201,"context_line":"        return (out, err)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _run_lvchange(self, lvchange_command, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_8ef550cd","line":200,"updated":"2014-06-09 17:34:43.000000000","message":"I just realized that you don\u0027t need these log messages, as utils.execute() already has three separate log messages with this information:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/openstack/common/processutils.py#n154","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                                   run_as_root\u003dTrue,"},{"line_number":198,"context_line":"                                   check_exit_code\u003dcheck_exit_code)"},{"line_number":199,"context_line":"        LOG.debug(\"lvs: stdout\u003d%(out)s stderr\u003d%(err)s\","},{"line_number":200,"context_line":"                  {\u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":201,"context_line":"        return (out, err)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _run_lvchange(self, lvchange_command, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_8db9e417","line":200,"in_reply_to":"1ae5cdf2_8ef550cd","updated":"2014-06-16 22:14:45.000000000","message":"I understand. I removed debug message from run_lvs and run_lvchange.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"a8fd7fc57fb20b8f4ee72617f891ad9a43eae106","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":249,"context_line":"        # If the command returns other than 0,"},{"line_number":250,"context_line":"        # exception \"Unexpected error while running command\" is returned."},{"line_number":251,"context_line":"        self._run_lvchange((\u0027-an\u0027, source_path), check_exit_code\u003d[0])"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class LibvirtFakeVolumeDriver(LibvirtBaseVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_a34650be","line":251,"updated":"2014-06-11 13:50:19.000000000","message":"I\u0027d like to suggest that it is time to create a \u0027nova/virt/libvirt/lvm.py\u0027 module containing helper APIs for interacting with LVM. ie all execution of commands \u0026 parsing of their output should be hidden away in the lvm.py module, so this volume.py code can merely call the APIs. This will make this code clearer to understand.\n\nThere\u0027s a few LVM calls in utils.py already that could be usefully put into the lvm.py module too.\n\nI\u0027d suggest that creation of lvm.py and moving of existing bits in utils.py be done as a separate commit/patch from this one.","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4874652da0a51b829545c6a89c8fd4092fbae556","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":249,"context_line":"        # If the command returns other than 0,"},{"line_number":250,"context_line":"        # exception \"Unexpected error while running command\" is returned."},{"line_number":251,"context_line":"        self._run_lvchange((\u0027-an\u0027, source_path), check_exit_code\u003d[0])"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class LibvirtFakeVolumeDriver(LibvirtBaseVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_cd2f6c3d","line":251,"in_reply_to":"1ae5cdf2_a34650be","updated":"2014-06-16 22:14:45.000000000","message":"Thank you for your proposal.\n\nI proposed following patch to move LVM features from utils.py to lvm.py.\nhttps://review.openstack.org/#/c/100369/","commit_id":"898be5f080c7482f0c125f09170b3857d87fb5bc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        conf.source_type \u003d \"block\""},{"line_number":185,"context_line":"        lvm_properties \u003d connection_info[\u0027data\u0027]"},{"line_number":186,"context_line":"        for key in lvm_properties:"},{"line_number":187,"context_line":"            LOG.debug(\"lvm_properties: %s\" % key)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # volume_path: /dev/vg/volume-xyz"},{"line_number":190,"context_line":"        conf.source_path \u003d lvm_properties[\u0027volume_path\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_aeb48135","line":187,"updated":"2014-07-03 17:41:44.000000000","message":"We\u0027re trying to avoid this pattern of logging. Can you just do a single LOG.debug() line with all of the lvm_properties instead of multiple log lines?","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        conf.source_type \u003d \"block\""},{"line_number":185,"context_line":"        lvm_properties \u003d connection_info[\u0027data\u0027]"},{"line_number":186,"context_line":"        for key in lvm_properties:"},{"line_number":187,"context_line":"            LOG.debug(\"lvm_properties: %s\" % key)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # volume_path: /dev/vg/volume-xyz"},{"line_number":190,"context_line":"        conf.source_path \u003d lvm_properties[\u0027volume_path\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_83f23699","line":187,"in_reply_to":"baada198_aeb48135","updated":"2014-08-08 19:57:48.000000000","message":"I understood. I agree this pattern of logging is difficult to analyze for admin. I changed the debug log to output single line.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        conf.source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":191,"context_line":"        lvm.update_metadata()"},{"line_number":192,"context_line":"        vg_name \u003d conf.source_path.split(\u0027/\u0027)[2]"},{"line_number":193,"context_line":"        lv_name \u003d conf.source_path.split(\u0027/\u0027)[3]"},{"line_number":194,"context_line":"        lvm.activate_lv(vg_name, lv_name)"},{"line_number":195,"context_line":"        return conf"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_2e7231ad","line":193,"updated":"2014-07-03 17:41:44.000000000","message":"Here and below, how about a single call to source_path.split(), and just do this:\n\n path_parts \u003d conf.source_path.split(\u0027/\u0027)\n vg_name \u003d path_parts[2]\n lv_name \u003d path_parts[3]","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        conf.source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":191,"context_line":"        lvm.update_metadata()"},{"line_number":192,"context_line":"        vg_name \u003d conf.source_path.split(\u0027/\u0027)[2]"},{"line_number":193,"context_line":"        lv_name \u003d conf.source_path.split(\u0027/\u0027)[3]"},{"line_number":194,"context_line":"        lvm.activate_lv(vg_name, lv_name)"},{"line_number":195,"context_line":"        return conf"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_63ce025d","line":193,"in_reply_to":"baada198_2e7231ad","updated":"2014-08-08 19:57:48.000000000","message":"Done.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        LOG.debug(\u0027Disconnect the volume from the guest instance.\u0027)"},{"line_number":200,"context_line":"        lvm_properties \u003d connection_info[\u0027data\u0027]"},{"line_number":201,"context_line":"        for key in lvm_properties:"},{"line_number":202,"context_line":"            LOG.debug(\"lvm_properties: %s\" % key)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # volume_path: /dev/vg/volume-xyz"},{"line_number":205,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_ee891976","line":202,"updated":"2014-07-03 17:41:44.000000000","message":"ditto as above.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        LOG.debug(\u0027Disconnect the volume from the guest instance.\u0027)"},{"line_number":200,"context_line":"        lvm_properties \u003d connection_info[\u0027data\u0027]"},{"line_number":201,"context_line":"        for key in lvm_properties:"},{"line_number":202,"context_line":"            LOG.debug(\"lvm_properties: %s\" % key)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # volume_path: /dev/vg/volume-xyz"},{"line_number":205,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_23f88a7d","line":202,"in_reply_to":"baada198_ee891976","updated":"2014-08-08 19:57:48.000000000","message":"Changed.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"92fcb4b2e49a03b8a5e23b35959d7f4d60f51d0d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        # volume_path: /dev/vg/volume-xyz"},{"line_number":205,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":206,"context_line":"        vg_name \u003d source_path.split(\u0027/\u0027)[2]"},{"line_number":207,"context_line":"        lv_name \u003d source_path.split(\u0027/\u0027)[3]"},{"line_number":208,"context_line":"        lvm.deactivate_lv(vg_name, lv_name)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_0e7bad7b","line":207,"updated":"2014-07-03 17:41:44.000000000","message":"same as above.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e128afaca9baa56722957245b9dcc31f97c89f40","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        # volume_path: /dev/vg/volume-xyz"},{"line_number":205,"context_line":"        source_path \u003d lvm_properties[\u0027volume_path\u0027]"},{"line_number":206,"context_line":"        vg_name \u003d source_path.split(\u0027/\u0027)[2]"},{"line_number":207,"context_line":"        lv_name \u003d source_path.split(\u0027/\u0027)[3]"},{"line_number":208,"context_line":"        lvm.deactivate_lv(vg_name, lv_name)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_63f52283","line":207,"in_reply_to":"baada198_0e7bad7b","updated":"2014-08-08 19:57:48.000000000","message":"Done.","commit_id":"4a91a1bfe116a13e64e5cf232c1907d25097e7c0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7db147e7ecf78fa3a67a8f1ba4c79c1584646bec","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        path_parts \u003d source_path.split(\u0027/\u0027)"},{"line_number":233,"context_line":"        vg_name \u003d path_parts[2]"},{"line_number":234,"context_line":"        lv_name \u003d path_parts[3]"},{"line_number":235,"context_line":"        lvm.deactivate_lv(vg_name, lv_name)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"class LibvirtFakeVolumeDriver(LibvirtBaseVolumeDriver):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_3fd62128","line":235,"updated":"2014-12-17 18:55:08.000000000","message":"Here and in connect_volume() above, would be nice to have a LOG.info() message saying that the volume was activated/deactivated.","commit_id":"ad39a0b61fe715a6f10a5a0a9bbce5153fbc57a0"}]}
