)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4fdda145eacc032bb5ca8e1801afc7027e512571","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Most of the code is lifted as-is from imagebackend to ceph, resize() is"},{"line_number":13,"context_line":"fixed to take bytes instead of KiB."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"blueprint rbd-clone-image-handler"},{"line_number":16,"context_line":"Co-Authored-By: Dmitry Borodaenko \u003cdborodaenko@mirantis.com\u003e"},{"line_number":17,"context_line":"Signed-off-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e"},{"line_number":18,"context_line":"Signed-off-by: Dmitry Borodaenko \u003cdborodaenko@mirantis.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"baada198_a7ff1b65","line":15,"updated":"2014-07-21 08:46:50.000000000","message":"given this is really just clean up, if this moves to a bug, lets get this in now.","commit_id":"0ea21d027a1b7cc2d23b78c0e5c5dc4d153005f5"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"aa3f05f1b41776bad286ed20d4e2d27438918601","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Most of the code is lifted as-is from imagebackend to ceph, resize() is"},{"line_number":13,"context_line":"fixed to take bytes instead of KiB."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"blueprint rbd-clone-image-handler"},{"line_number":16,"context_line":"Co-Authored-By: Dmitry Borodaenko \u003cdborodaenko@mirantis.com\u003e"},{"line_number":17,"context_line":"Signed-off-by: Josh Durgin \u003cjosh.durgin@inktank.com\u003e"},{"line_number":18,"context_line":"Signed-off-by: Dmitry Borodaenko \u003cdborodaenko@mirantis.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"baada198_afb19102","line":15,"in_reply_to":"baada198_a7ff1b65","updated":"2014-07-21 22:27:52.000000000","message":"Actually the resize bug part has already been merged separately as https://review.openstack.org/44640 -- I just forgot to update commit message when I rebased over that. I\u0027ll fix the commit message.\n\nWith the resize fix no longer a part of this commit, this remains just a refactoring, so there\u0027s no bug to link it to. If this particular patch is good to go as it is, why, outside of feature freeze, should its association with bug or blueprint factor into the decision when to merge it?","commit_id":"0ea21d027a1b7cc2d23b78c0e5c5dc4d153005f5"}],"nova/tests/virt/libvirt/test_imagebackend.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f60772ccdcdd0cdec9508dd58fd99c108cc66e8f","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        self.flags(images_rbd_pool\u003dpool, group\u003d\u0027libvirt\u0027)"},{"line_number":843,"context_line":"        self.flags(images_rbd_ceph_conf\u003dconf, group\u003d\u0027libvirt\u0027)"},{"line_number":844,"context_line":"        self.mox.StubOutWithMock(rbd_utils, \u0027rbd\u0027)"},{"line_number":845,"context_line":"        self.mox.StubOutWithMock(rbd_utils, \u0027rados\u0027)"},{"line_number":846,"context_line":"        self._test_image(\u0027rbd\u0027, imagebackend.Rbd, imagebackend.Rbd)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_image_default(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_000a0a21","line":845,"updated":"2014-05-27 19:29:05.000000000","message":"Should not be necessary, due to these being run on lines 674-675","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c64d50ee7c386b0ed54b0a42851058763d04cade","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        self.flags(images_rbd_pool\u003dpool, group\u003d\u0027libvirt\u0027)"},{"line_number":843,"context_line":"        self.flags(images_rbd_ceph_conf\u003dconf, group\u003d\u0027libvirt\u0027)"},{"line_number":844,"context_line":"        self.mox.StubOutWithMock(rbd_utils, \u0027rbd\u0027)"},{"line_number":845,"context_line":"        self.mox.StubOutWithMock(rbd_utils, \u0027rados\u0027)"},{"line_number":846,"context_line":"        self._test_image(\u0027rbd\u0027, imagebackend.Rbd, imagebackend.Rbd)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    def test_image_default(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_007d7b1c","line":845,"in_reply_to":"3ae8d1ca_000a0a21","updated":"2014-05-29 04:21:58.000000000","message":"No. Lines 674-675 are in RbdTestCase, this is BackendTestCase.","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"}],"nova/tests/virt/libvirt/test_rbd_utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f60772ccdcdd0cdec9508dd58fd99c108cc66e8f","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.rbd_pool \u003d \u0027rbd\u0027"},{"line_number":71,"context_line":"        self.driver \u003d rbd_utils.RBDDriver(self.rbd_pool, None, None,"},{"line_number":72,"context_line":"                                          rbd_lib\u003dself.mock_rbd,"},{"line_number":73,"context_line":"                                          rados_lib\u003dself.mock_rados)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self.volume_name \u003d u\u0027volume-00000001\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_a07eb6ac","line":72,"updated":"2014-05-27 19:29:05.000000000","message":"Instead of using rbd_lib as a dependency injection to the RBDDriver constructor, it\u0027s probably easier to use this as a decorator on the RBDTestCase class:\n\n @mock.patch.object(rbd_utils, \u0027rbd\u0027)\n @mock.patch.object(rbd_utils. \u0027rados\u0027)\n class RBDTestCase(test.NoDBTestCase)\"\n     ...\n\nand then remove lines 56-68 and lines 71-72.\n\nYour test methods would then take two additional arguments, like so:\n\n def test_get_mon_addrs(self, rados_mock, rbd_mock):\n\nand you can set return value and method mocks according to the individual needs of the test cases.","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c64d50ee7c386b0ed54b0a42851058763d04cade","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.rbd_pool \u003d \u0027rbd\u0027"},{"line_number":71,"context_line":"        self.driver \u003d rbd_utils.RBDDriver(self.rbd_pool, None, None,"},{"line_number":72,"context_line":"                                          rbd_lib\u003dself.mock_rbd,"},{"line_number":73,"context_line":"                                          rados_lib\u003dself.mock_rados)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self.volume_name \u003d u\u0027volume-00000001\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_2f834357","line":72,"in_reply_to":"3ae8d1ca_a07eb6ac","updated":"2014-05-29 04:21:58.000000000","message":"Good point. I\u0027ve decided to go with patching individual test methods, works better this way. I also ended up needing self.mock_(rbd|rados) for test_connect_to_rados_* test methods, so I kept those lines, too.","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f60772ccdcdd0cdec9508dd58fd99c108cc66e8f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self.mock_rados.Rados.open_ioctx.side_effect \u003d self.mock_rados.Error"},{"line_number":137,"context_line":"        self.assertRaises(self.mock_rados.Error, self.driver._connect_to_rados)"},{"line_number":138,"context_line":"        self.mock_rados.Rados.open_ioctx.assert_called_once()"},{"line_number":139,"context_line":"        self.mock_rados.Rados.shutdown.assert_called_once()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def test_ceph_args(self):"},{"line_number":142,"context_line":"        self.driver.rbd_user \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_405ed246","line":139,"updated":"2014-05-27 19:29:05.000000000","message":"I recommend putting the above 4 blocks into separate test methods and using local mocks instead of mocks on self. That way you don\u0027t need any calls to reset_mock() and the test methods test independent code paths in a single unit","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c64d50ee7c386b0ed54b0a42851058763d04cade","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self.mock_rados.Rados.open_ioctx.side_effect \u003d self.mock_rados.Error"},{"line_number":137,"context_line":"        self.assertRaises(self.mock_rados.Error, self.driver._connect_to_rados)"},{"line_number":138,"context_line":"        self.mock_rados.Rados.open_ioctx.assert_called_once()"},{"line_number":139,"context_line":"        self.mock_rados.Rados.shutdown.assert_called_once()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def test_ceph_args(self):"},{"line_number":142,"context_line":"        self.driver.rbd_user \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_4fedef24","line":139,"in_reply_to":"3ae8d1ca_405ed246","updated":"2014-05-29 04:21:58.000000000","message":"Done","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b4fc4eb3eb6350cb37352e5f88968d2bb21eae51","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        mock_disconnect_from_rados.return_value \u003d (None, None)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        with rbd_utils.RBDVolumeProxy(self.driver, self.volume_name):"},{"line_number":110,"context_line":"            mock_connect_from_rados.assert_called_once()"},{"line_number":111,"context_line":"            self.assertFalse(mock_disconnect_from_rados.called)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        mock_disconnect_from_rados.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_af751cfb","line":110,"updated":"2014-06-12 21:49:23.000000000","message":"Ooops. assert_called_once() is not a valid method :) You meant assert_called_once_with()","commit_id":"4c82637772c886bd745c5080350587806645830c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"b1ea5469cbf41ceccfef4032612caacc2e8ea0f9","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        mock_disconnect_from_rados.return_value \u003d (None, None)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        with rbd_utils.RBDVolumeProxy(self.driver, self.volume_name):"},{"line_number":110,"context_line":"            mock_connect_from_rados.assert_called_once()"},{"line_number":111,"context_line":"            self.assertFalse(mock_disconnect_from_rados.called)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        mock_disconnect_from_rados.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_00297f89","line":110,"in_reply_to":"1ae5cdf2_af751cfb","updated":"2014-06-12 23:13:21.000000000","message":"Damn, I thought I get rid of all of them, good catch!","commit_id":"4c82637772c886bd745c5080350587806645830c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b4fc4eb3eb6350cb37352e5f88968d2bb21eae51","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            mock_connect_from_rados.assert_called_once()"},{"line_number":111,"context_line":"            self.assertFalse(mock_disconnect_from_rados.called)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        mock_disconnect_from_rados.assert_called_once()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":116,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_0f661051","line":113,"updated":"2014-06-12 21:49:23.000000000","message":"ditto","commit_id":"4c82637772c886bd745c5080350587806645830c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"b1ea5469cbf41ceccfef4032612caacc2e8ea0f9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            mock_connect_from_rados.assert_called_once()"},{"line_number":111,"context_line":"            self.assertFalse(mock_disconnect_from_rados.called)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        mock_disconnect_from_rados.assert_called_once()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":116,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_202cbb98","line":113,"in_reply_to":"1ae5cdf2_0f661051","updated":"2014-06-12 23:13:21.000000000","message":"Done","commit_id":"4c82637772c886bd745c5080350587806645830c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b4fc4eb3eb6350cb37352e5f88968d2bb21eae51","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.mock_rados.Rados.open_ioctx.side_effect \u003d self.mock_rados.Error"},{"line_number":139,"context_line":"        self.assertRaises(self.mock_rados.Error, self.driver._connect_to_rados)"},{"line_number":140,"context_line":"        self.mock_rados.Rados.open_ioctx.assert_called_once()"},{"line_number":141,"context_line":"        self.mock_rados.Rados.shutdown.assert_called_once()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_ceph_args_none(self):"},{"line_number":144,"context_line":"        self.driver.rbd_user \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_6f56b45d","line":141,"updated":"2014-06-12 21:49:23.000000000","message":"ditto ditto :)","commit_id":"4c82637772c886bd745c5080350587806645830c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"b1ea5469cbf41ceccfef4032612caacc2e8ea0f9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.mock_rados.Rados.open_ioctx.side_effect \u003d self.mock_rados.Error"},{"line_number":139,"context_line":"        self.assertRaises(self.mock_rados.Error, self.driver._connect_to_rados)"},{"line_number":140,"context_line":"        self.mock_rados.Rados.open_ioctx.assert_called_once()"},{"line_number":141,"context_line":"        self.mock_rados.Rados.shutdown.assert_called_once()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_ceph_args_none(self):"},{"line_number":144,"context_line":"        self.driver.rbd_user \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_401f075b","line":141,"in_reply_to":"1ae5cdf2_6f56b45d","updated":"2014-06-12 23:13:21.000000000","message":"Done","commit_id":"4c82637772c886bd745c5080350587806645830c"}],"nova/virt/libvirt/ceph.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"6b022c3f8c015bb5c1f5e0c139614a078533fe77","unresolved":false,"context_lines":[{"line_number":9,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"try:"},{"line_number":15,"context_line":"    import rados"}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_2c1932d1","line":12,"updated":"2014-07-21 08:15:08.000000000","message":"Given that the classes all use the \u0027RBD\u0027 name, this file should be called \u0027rbd.py\u0027 not \u0027ceph.py\u0027. Likewise change the test file name.","commit_id":"0ea21d027a1b7cc2d23b78c0e5c5dc4d153005f5"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"aa3f05f1b41776bad286ed20d4e2d27438918601","unresolved":false,"context_lines":[{"line_number":9,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"try:"},{"line_number":15,"context_line":"    import rados"}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_4f4635a8","line":12,"in_reply_to":"baada198_2c1932d1","updated":"2014-07-21 22:27:52.000000000","message":"Throughout this file, rbd is used to refer to the rbd module from python-ceph, having a module with exact same name inside Nova will introduce unnecessary confusion. Since this file wraps functionality of two modules from python-ceph (rbd and rados), using ceph as a name is more precise than just one of these two names.","commit_id":"0ea21d027a1b7cc2d23b78c0e5c5dc4d153005f5"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"6ae1cbbcd6567fa4898a2858163d31696f0c3a27","unresolved":false,"context_lines":[{"line_number":9,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"try:"},{"line_number":15,"context_line":"    import rados"}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_41c98824","line":12,"in_reply_to":"baada198_4f4635a8","updated":"2014-07-22 09:11:21.000000000","message":"The rest of the Nova code only cares about the existence of the in tree module, so won\u0027t be any significant cause for confusion.  All the methods and classes are named RBD and file they are in should match that naming. Please rename to rbd.py","commit_id":"0ea21d027a1b7cc2d23b78c0e5c5dc4d153005f5"}],"nova/virt/libvirt/rbd_utils.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"81473d2a34c628aaeef47550457e4c8626183378","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return getattr(self.volume, attrib)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def ascii_str(s):"},{"line_number":65,"context_line":"    \"\"\"Convert a string to ascii, or return None if the input is None."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    This is useful when a parameter is None by default, or a string. LibRBD"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_37b495f1","line":64,"updated":"2014-05-22 07:44:00.000000000","message":"oops I missed this on the first review - you need to drop this in this patch as it is not being used anymore. It contributes to unnecessary noise if you just leave it around and remove it in a completely unrelated patch (like you did 2 patches forward)","commit_id":"de39b907ae99df17b3d75ac980e054325b9b9c46"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"123e47204e8ac832505a05748d7ffeecd85f5c7a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return getattr(self.volume, attrib)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def ascii_str(s):"},{"line_number":65,"context_line":"    \"\"\"Convert a string to ascii, or return None if the input is None."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    This is useful when a parameter is None by default, or a string. LibRBD"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_ce12da57","line":64,"in_reply_to":"7adec928_37b495f1","updated":"2014-05-23 03:07:19.000000000","message":"Done","commit_id":"de39b907ae99df17b3d75ac980e054325b9b9c46"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f60772ccdcdd0cdec9508dd58fd99c108cc66e8f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"class RBDDriver(object):"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user,"},{"line_number":67,"context_line":"                 rbd_lib\u003dNone, rados_lib\u003dNone):"},{"line_number":68,"context_line":"        self.pool \u003d pool.encode(\u0027utf8\u0027)"},{"line_number":69,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":70,"context_line":"        # https://github.com/ceph/ceph/pull/1787"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_9a6848f7","line":67,"updated":"2014-05-27 19:29:05.000000000","message":"What is the purpose of rbd_lib parameter here? If it\u0027s for dependency injection, I think generally it would be better to use mock.patch\u0027ing rather than passing in \"fakes\"...","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c64d50ee7c386b0ed54b0a42851058763d04cade","unresolved":false,"context_lines":[{"line_number":64,"context_line":"class RBDDriver(object):"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user,"},{"line_number":67,"context_line":"                 rbd_lib\u003dNone, rados_lib\u003dNone):"},{"line_number":68,"context_line":"        self.pool \u003d pool.encode(\u0027utf8\u0027)"},{"line_number":69,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":70,"context_line":"        # https://github.com/ceph/ceph/pull/1787"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_6ff46bf2","line":67,"in_reply_to":"3ae8d1ca_9a6848f7","updated":"2014-05-29 04:21:58.000000000","message":"Done","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f60772ccdcdd0cdec9508dd58fd99c108cc66e8f","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        with RBDVolumeProxy(self, name) as vol:"},{"line_number":126,"context_line":"            return vol.size()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def resize(self, volume_name, size):"},{"line_number":129,"context_line":"        size \u003d int(size) * units.Ki"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        with RBDVolumeProxy(self, volume_name) as vol:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_2018e680","line":128,"updated":"2014-05-27 19:29:05.000000000","message":"Might be nice to put some docstrings on the methods in this class, including descriptions of expectations for the parameters (such as the fact that size is expected to be in KB here.)","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"c64d50ee7c386b0ed54b0a42851058763d04cade","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        with RBDVolumeProxy(self, name) as vol:"},{"line_number":126,"context_line":"            return vol.size()"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def resize(self, volume_name, size):"},{"line_number":129,"context_line":"        size \u003d int(size) * units.Ki"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        with RBDVolumeProxy(self, volume_name) as vol:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_5ae84bb4","line":128,"in_reply_to":"3ae8d1ca_2018e680","updated":"2014-05-29 04:21:58.000000000","message":"In fact units.Ki in this method is a bug inherited from imagebackend.py where it was moved from. Fix for this bug has landed on the wrong side of the split and is in https://review.openstack.org/94295. I\u0027ll pull it in.","commit_id":"7356dd69d49fdd8fd3e3619e6cf158b1b653521c"}]}
