)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"imagebackend and utils."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Flake8 F401 in test_libvirt.py has to be ignored since flake8 doesn\u0027t"},{"line_number":23,"context_line":"recognize use of an imported module in a @mock.patch decorator."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"blueprint rbd-clone-image-handler"},{"line_number":26,"context_line":"Change-Id: I92cd6b16fbd93b377fe47b15d22efbbf68d02513"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3ae8d1ca_7add3c14","line":23,"updated":"2014-05-27 18:56:03.000000000","message":"See comment on test_libvirt.py about not needing to use this ignore.","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c1fe7efeba92b0d0cff1a69d824e6854c6468b88","unresolved":false,"context_lines":[{"line_number":20,"context_line":"imagebackend and utils."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Flake8 F401 in test_libvirt.py has to be ignored since flake8 doesn\u0027t"},{"line_number":23,"context_line":"recognize use of an imported module in a @mock.patch decorator."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"blueprint rbd-clone-image-handler"},{"line_number":26,"context_line":"Change-Id: I92cd6b16fbd93b377fe47b15d22efbbf68d02513"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3ae8d1ca_5b7dad6d","line":23,"in_reply_to":"3ae8d1ca_7add3c14","updated":"2014-05-29 04:24:52.000000000","message":"Done","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b14ae4354f5d1fef83fe95440d54036359dfb431","unresolved":false,"context_lines":[{"line_number":19,"context_line":"different files, and minimizes impact of this fix on imports in"},{"line_number":20,"context_line":"imagebackend and utils."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"blueprint rbd-clone-image-handler"},{"line_number":23,"context_line":"Change-Id: I92cd6b16fbd93b377fe47b15d22efbbf68d02513"},{"line_number":24,"context_line":"Signed-off-by: Dmitry Borodaenko \u003cdborodaenko@mirantis.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"baada198_4779dffa","line":22,"updated":"2014-07-21 08:48:08.000000000","message":"Hmm, this is quite like a bug fix, lets get this in as a bug fix, while we wait for the blueprint to get sorted.","commit_id":"3143bbde56fb614f80300e4b7a2330bd3ceca5bb"}],"nova/tests/virt/libvirt/test_libvirt.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":5584,"context_line":"                    \"uuid\": \"875a8070-d0b9-4949-8b31-104d125c9a64\"}"},{"line_number":5585,"context_line":"        conn.destroy(self.context, instance, [])"},{"line_number":5586,"context_line":""},{"line_number":5587,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.rbd_utils.RBDDriver\u0027)"},{"line_number":5588,"context_line":"    def test_cleanup_rbd(self, mock_driver):"},{"line_number":5589,"context_line":"        driver \u003d mock_driver.return_value"},{"line_number":5590,"context_line":"        driver.cleanup_volumes \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_dacf30af","line":5587,"updated":"2014-05-27 18:56:03.000000000","message":"FYI, you can remove the # noqa tag above by doing this instead:\n\n @mock.patch.object(rbd_utils, \u0027RBDDriver\u0027)","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c1fe7efeba92b0d0cff1a69d824e6854c6468b88","unresolved":false,"context_lines":[{"line_number":5584,"context_line":"                    \"uuid\": \"875a8070-d0b9-4949-8b31-104d125c9a64\"}"},{"line_number":5585,"context_line":"        conn.destroy(self.context, instance, [])"},{"line_number":5586,"context_line":""},{"line_number":5587,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.rbd_utils.RBDDriver\u0027)"},{"line_number":5588,"context_line":"    def test_cleanup_rbd(self, mock_driver):"},{"line_number":5589,"context_line":"        driver \u003d mock_driver.return_value"},{"line_number":5590,"context_line":"        driver.cleanup_volumes \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_809d045c","line":5587,"in_reply_to":"3ae8d1ca_dacf30af","updated":"2014-05-29 04:24:52.000000000","message":"Done","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":5593,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":5594,"context_line":"        conn._cleanup_rbd(fake_instance)"},{"line_number":5595,"context_line":""},{"line_number":5596,"context_line":"        driver.cleanup_volumes.assert_called_with(fake_instance)"},{"line_number":5597,"context_line":""},{"line_number":5598,"context_line":"    def test_destroy_undefines_no_undefine_flags(self):"},{"line_number":5599,"context_line":"        mock \u003d self.mox.CreateMock(libvirt.virDomain)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_3a03b4b9","line":5596,"updated":"2014-05-27 18:56:03.000000000","message":"Please use assert_called_once_with()","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c1fe7efeba92b0d0cff1a69d824e6854c6468b88","unresolved":false,"context_lines":[{"line_number":5593,"context_line":"        conn \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":5594,"context_line":"        conn._cleanup_rbd(fake_instance)"},{"line_number":5595,"context_line":""},{"line_number":5596,"context_line":"        driver.cleanup_volumes.assert_called_with(fake_instance)"},{"line_number":5597,"context_line":""},{"line_number":5598,"context_line":"    def test_destroy_undefines_no_undefine_flags(self):"},{"line_number":5599,"context_line":"        mock \u003d self.mox.CreateMock(libvirt.virDomain)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_80b424d2","line":5596,"in_reply_to":"3ae8d1ca_3a03b4b9","updated":"2014-05-29 04:24:52.000000000","message":"Done","commit_id":"f99348b49884990766eca89858669492c4928f95"}],"nova/tests/virt/libvirt/test_rbd_utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        with mock.patch.object(rbd_utils, \u0027RADOSClient\u0027) as client_init:"},{"line_number":164,"context_line":"            client \u003d client_init.return_value"},{"line_number":165,"context_line":"            self.mock_rbd.RBD.list \u003d mock.Mock()"},{"line_number":166,"context_line":"            self.mock_rbd.RBD.list.return_value \u003d [\u002712345_test\u0027, \u0027111_test\u0027]"},{"line_number":167,"context_line":"            self.mock_rbd.RBD.remove \u003d mock.Mock()"},{"line_number":168,"context_line":"            self.driver.cleanup_volumes(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_1ae4380c","line":165,"updated":"2014-05-27 18:56:03.000000000","message":"line 165 should not be necessary, as mock_rbd.RBD is already a mock, and therefore RBD.list is a mock as well.","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c1fe7efeba92b0d0cff1a69d824e6854c6468b88","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        with mock.patch.object(rbd_utils, \u0027RADOSClient\u0027) as client_init:"},{"line_number":164,"context_line":"            client \u003d client_init.return_value"},{"line_number":165,"context_line":"            self.mock_rbd.RBD.list \u003d mock.Mock()"},{"line_number":166,"context_line":"            self.mock_rbd.RBD.list.return_value \u003d [\u002712345_test\u0027, \u0027111_test\u0027]"},{"line_number":167,"context_line":"            self.mock_rbd.RBD.remove \u003d mock.Mock()"},{"line_number":168,"context_line":"            self.driver.cleanup_volumes(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_3b9f01b6","line":165,"in_reply_to":"3ae8d1ca_1ae4380c","updated":"2014-05-29 04:24:52.000000000","message":"Done","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            client \u003d client_init.return_value"},{"line_number":165,"context_line":"            self.mock_rbd.RBD.list \u003d mock.Mock()"},{"line_number":166,"context_line":"            self.mock_rbd.RBD.list.return_value \u003d [\u002712345_test\u0027, \u0027111_test\u0027]"},{"line_number":167,"context_line":"            self.mock_rbd.RBD.remove \u003d mock.Mock()"},{"line_number":168,"context_line":"            self.driver.cleanup_volumes(instance)"},{"line_number":169,"context_line":"            self.mock_rbd.RBD.remove.assert_called_once_with("},{"line_number":170,"context_line":"                    client.ioctx, \u002712345_test\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_3af1f4cd","line":167,"updated":"2014-05-27 18:56:03.000000000","message":"ditto","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c1fe7efeba92b0d0cff1a69d824e6854c6468b88","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            client \u003d client_init.return_value"},{"line_number":165,"context_line":"            self.mock_rbd.RBD.list \u003d mock.Mock()"},{"line_number":166,"context_line":"            self.mock_rbd.RBD.list.return_value \u003d [\u002712345_test\u0027, \u0027111_test\u0027]"},{"line_number":167,"context_line":"            self.mock_rbd.RBD.remove \u003d mock.Mock()"},{"line_number":168,"context_line":"            self.driver.cleanup_volumes(instance)"},{"line_number":169,"context_line":"            self.mock_rbd.RBD.remove.assert_called_once_with("},{"line_number":170,"context_line":"                    client.ioctx, \u002712345_test\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_5ba68d11","line":167,"in_reply_to":"3ae8d1ca_3af1f4cd","updated":"2014-05-29 04:24:52.000000000","message":"Done","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            self.mock_rbd.RBD.remove.assert_called_once_with("},{"line_number":170,"context_line":"                    client.ioctx, \u002712345_test\u0027)"},{"line_number":171,"context_line":"            client.__enter__.assert_called_once()"},{"line_number":172,"context_line":"            client.__exit__.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_da2bb02e","line":172,"updated":"2014-05-27 18:56:03.000000000","message":"assert_called_once() is actually not a method of mock.Mock(). I think you want assert_called_once_with()","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c1fe7efeba92b0d0cff1a69d824e6854c6468b88","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            self.mock_rbd.RBD.remove.assert_called_once_with("},{"line_number":170,"context_line":"                    client.ioctx, \u002712345_test\u0027)"},{"line_number":171,"context_line":"            client.__enter__.assert_called_once()"},{"line_number":172,"context_line":"            client.__exit__.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_7ba989de","line":172,"in_reply_to":"3ae8d1ca_da2bb02e","updated":"2014-05-29 04:24:52.000000000","message":"Done","commit_id":"f99348b49884990766eca89858669492c4928f95"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"e160ebf1868ecf0902ae32c5ef1b19973ca87196","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        rbd \u003d mock_rbd.RBD.return_value"},{"line_number":179,"context_line":"        rbd.list.return_value \u003d [\u002712345_test\u0027, \u0027111_test\u0027]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        with mock.patch.object(rbd_utils, \u0027RADOSClient\u0027) as mock_client:"},{"line_number":182,"context_line":"            client \u003d mock_client.return_value"},{"line_number":183,"context_line":"            self.driver.cleanup_volumes(instance)"},{"line_number":184,"context_line":"            rbd.remove.assert_called_once_with(client.ioctx, \u002712345_test\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_cefb9379","line":181,"updated":"2014-06-11 04:35:47.000000000","message":"Please replace the context manager for the decorator.","commit_id":"d424886c7e4dc5558ab338262b19c379ea1cf400"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"b3cdb6e48df92f7157e345f962a19f7d2e16dcab","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        rbd \u003d mock_rbd.RBD.return_value"},{"line_number":179,"context_line":"        rbd.list.return_value \u003d [\u002712345_test\u0027, \u0027111_test\u0027]"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        with mock.patch.object(rbd_utils, \u0027RADOSClient\u0027) as mock_client:"},{"line_number":182,"context_line":"            client \u003d mock_client.return_value"},{"line_number":183,"context_line":"            self.driver.cleanup_volumes(instance)"},{"line_number":184,"context_line":"            rbd.remove.assert_called_once_with(client.ioctx, \u002712345_test\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_acf0ca91","line":181,"in_reply_to":"1ae5cdf2_cefb9379","updated":"2014-06-12 21:44:25.000000000","message":"Done","commit_id":"d424886c7e4dc5558ab338262b19c379ea1cf400"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"bf7e08402f614580481b0caa3fa0eabe5912af93","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        if self.driver.supports_layering():"},{"line_number":566,"context_line":"            args +\u003d [\u0027--new-format\u0027]"},{"line_number":567,"context_line":"        args +\u003d self.driver.ceph_args()"},{"line_number":568,"context_line":"        utils.execute(\u0027rbd\u0027, \u0027import\u0027, *args)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        base_size \u003d disk.get_disk_size(base)"},{"line_number":571,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"baada198_eed4cbbe","line":568,"updated":"2014-07-03 11:40:33.000000000","message":"This is a step backwards IMHO.  I have a general rule that we shouldn\u0027t inline calls to utils.execute. Any command we need to invoke should have a helper method that wraps utils.execute, so that arbitrary code isn\u0027t exposed to the details of the CLI syntax. So don\u0027t delete the import_rbd_image method, just move it from utils.py into the rbd_utils.py file instead.","commit_id":"eabd9ab32f1fb6132abfb2610dbc157204a4a11d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c797fe2319a615fb2729e5c3fdd96ef75e2163c1","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        if self.driver.supports_layering():"},{"line_number":565,"context_line":"            args +\u003d [\u0027--new-format\u0027]"},{"line_number":566,"context_line":"        args +\u003d self.driver.ceph_args()"},{"line_number":567,"context_line":"        utils.execute(\u0027rbd\u0027, \u0027import\u0027, *args)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        base_size \u003d disk.get_disk_size(base)"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"baada198_f61e320c","line":567,"updated":"2014-07-25 15:33:50.000000000","message":"Don\u0027t remove the \u0027import_rbd_image\u0027 method - just move it to the rbd.py file. We have a general cleanup goal to have all \u0027utils.execute\u0027 statements encapsulated in helper methods, rather than inlined everywhere.","commit_id":"0fee988425924a56458fc9f730efea2c3b44d0c5"}],"nova/virt/libvirt/rbd_utils.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"461b7ba4248ec020eedb6348adab0f9f460a4318","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            vol.resize(size)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def cleanup_volumes(self, instance):"},{"line_number":147,"context_line":"        with RADOSClient(self, self.pool) as client:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            def belongs_to_instance(disk):"},{"line_number":150,"context_line":"                return disk.startswith(instance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_259a9e14","line":147,"updated":"2014-05-22 07:29:14.000000000","message":"This is what pep8 is complaining about? where does this come from? I\u0027m assuming you meant \n  with self.client.open_Ioctx(...","commit_id":"e63bd07e08d6406d9959494ff2794462ec44753d"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"419b7fffa285dba8fd237d2c4d691a8a468c3a5e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            vol.resize(size)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def cleanup_volumes(self, instance):"},{"line_number":147,"context_line":"        with RADOSClient(self, self.pool) as client:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            def belongs_to_instance(disk):"},{"line_number":150,"context_line":"                return disk.startswith(instance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_8e20d29c","line":147,"in_reply_to":"7adec928_173159a2","updated":"2014-05-23 03:08:18.000000000","message":"Thanks, it is indeed an artifact of a bad re-split, fixed now.","commit_id":"e63bd07e08d6406d9959494ff2794462ec44753d"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"b4c2fead21a9d8fdd0b82fff52e84051a1d3df6a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            vol.resize(size)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def cleanup_volumes(self, instance):"},{"line_number":147,"context_line":"        with RADOSClient(self, self.pool) as client:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            def belongs_to_instance(disk):"},{"line_number":150,"context_line":"                return disk.startswith(instance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_173159a2","line":147,"in_reply_to":"7adec928_259a9e14","updated":"2014-05-22 07:37:38.000000000","message":"Aaaah no this is in the next patch you just didn\u0027t split it up properly - I gues that\u0027s what it is. Just make sure you add that hunk into this patch on the next respin.","commit_id":"e63bd07e08d6406d9959494ff2794462ec44753d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c68160861228b608e9f63e578e3b63364a41a65f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            vol.resize(size)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def cleanup_volumes(self, instance):"},{"line_number":149,"context_line":"        with RADOSClient(self, self.pool) as client:"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            def belongs_to_instance(disk):"},{"line_number":152,"context_line":"                return disk.startswith(instance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_7a8ffc23","line":149,"updated":"2014-05-27 18:56:03.000000000","message":"++ nice wrapping with the context manager.","commit_id":"f99348b49884990766eca89858669492c4928f95"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"aadc5b1d8d1663eb1e8c8d2c5daf424efb2d1246","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        out, err \u003d _run_rbd(\u0027rbd\u0027, \u0027-p\u0027, pool, \u0027ls\u0027)"},{"line_number":228,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":229,"context_line":"        # No problem when no volume in rbd pool"},{"line_number":230,"context_line":"        return []"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    return [line.strip() for line in out.splitlines()]"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_3950f6d3","side":"PARENT","line":230,"updated":"2014-07-10 12:30:16.000000000","message":"Interesting. So this would mask real errors.\nIf seems that it should at least be:\n\n    if not err:\n        return []\n    else:\n        raise\n\nThat\u0027s definitely a bug in `rbd ls`.\nAs a matter of interest, is the bug reported to the appropriate place?","commit_id":"ed86fa77d087f204c53903fab10e867dee36f711"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"27bbd1ac257af94e8795edd638f50535e343aa86","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        out, err \u003d _run_rbd(\u0027rbd\u0027, \u0027-p\u0027, pool, \u0027ls\u0027)"},{"line_number":228,"context_line":"    except processutils.ProcessExecutionError:"},{"line_number":229,"context_line":"        # No problem when no volume in rbd pool"},{"line_number":230,"context_line":"        return []"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    return [line.strip() for line in out.splitlines()]"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_91138a5b","side":"PARENT","line":230,"in_reply_to":"baada198_3950f6d3","updated":"2014-07-10 17:59:28.000000000","message":"Yes, this code masking real errors is precisely why we had to fix this.\n\nCeph bug http://tracker.ceph.com/issues/6693 was since fixed, latest versions of Dumpling (starting with 0.67.8) and onward (Emperor and Firefly) have it, but given the consequences, it\u0027s not safe to assume that everyone has recent enough Ceph.","commit_id":"ed86fa77d087f204c53903fab10e867dee36f711"},{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"aadc5b1d8d1663eb1e8c8d2c5daf424efb2d1246","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    for name in names:"},{"line_number":238,"context_line":"        rbd_remove \u003d [\u0027rbd\u0027, \u0027-p\u0027, pool, \u0027rm\u0027, name]"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            _run_rbd(*rbd_remove, attempts\u003d3, run_as_root\u003dTrue)"},{"line_number":241,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":242,"context_line":"            LOG.warn(_LW(\"rbd remove %(name)s in pool %(pool)s failed\"),"},{"line_number":243,"context_line":"                     {\u0027name\u0027: name, \u0027pool\u0027: pool})"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_b985e608","side":"PARENT","line":240,"updated":"2014-07-10 12:30:16.000000000","message":"We\u0027re losing the 3 attempts, but there is no mention of why this was done in the original commit. This could be just due to copy and paste of other code in this file which did also have attempts\u003d3?","commit_id":"ed86fa77d087f204c53903fab10e867dee36f711"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"27bbd1ac257af94e8795edd638f50535e343aa86","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    for name in names:"},{"line_number":238,"context_line":"        rbd_remove \u003d [\u0027rbd\u0027, \u0027-p\u0027, pool, \u0027rm\u0027, name]"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            _run_rbd(*rbd_remove, attempts\u003d3, run_as_root\u003dTrue)"},{"line_number":241,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":242,"context_line":"            LOG.warn(_LW(\"rbd remove %(name)s in pool %(pool)s failed\"),"},{"line_number":243,"context_line":"                     {\u0027name\u0027: name, \u0027pool\u0027: pool})"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_667c7b21","side":"PARENT","line":240,"in_reply_to":"baada198_b985e608","updated":"2014-07-10 17:59:28.000000000","message":"That would be my theory, too. librbd will raise an exception if it failed to remove a volume, and that doesn\u0027t happen in normal operation, so I don\u0027t think retries are needed anymore.","commit_id":"ed86fa77d087f204c53903fab10e867dee36f711"}]}
