)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"2ca228990235639fbbe3ab9aa882ab5b7879a925","unresolved":false,"context_lines":[{"line_number":28,"context_line":"Instead of calling disk.get_disk_size() directly from"},{"line_number":29,"context_line":"verify_base_size(), which assumes the disk is stored locally, add a new"},{"line_number":30,"context_line":"method that is overridden by the Rbd subclass to get the disk size."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Implements: blueprint rbd-clone-image-handler"},{"line_number":33,"context_line":"Closes-Bug: 1226351"},{"line_number":34,"context_line":"Co-Authored-By: Josh Durgin \u003cjosh.durgin@inktank.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"baada198_6245e0b2","line":31,"updated":"2014-07-27 21:44:26.000000000","message":"We should get a DocImpact tag on this as well so the docs team knows to tell people this works.","commit_id":"59b0e8791ab70fd9b6d3b0e38faa6ad37c8f707d"}],"nova/image/glance.py":[{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"f3c601f26972bd83b4117bc6114638b32bc95f10","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        image \u003d _translate_from_glance(image)"},{"line_number":312,"context_line":"        if include_locations:"},{"line_number":313,"context_line":"            locations \u003d getattr(image, \u0027locations\u0027, [])"},{"line_number":314,"context_line":"            du \u003d getattr(image, \u0027direct_url\u0027, None)"},{"line_number":315,"context_line":"            if du:"},{"line_number":316,"context_line":"                locations.append({\u0027url\u0027: du, \u0027metadata\u0027: {}})"}],"source_content_type":"text/x-python","patch_set":34,"id":"baada198_84d5f5e6","line":313,"updated":"2014-07-18 06:40:38.000000000","message":"You forgot that _translate_from_glance() in the line above would have converted the image object back into a dict.","commit_id":"5df290e2e36a1627c51a6fe39134063919e51cbf"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"f3c601f26972bd83b4117bc6114638b32bc95f10","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            image[\u0027locations\u0027] \u003d locations"},{"line_number":318,"context_line":"        else:"},{"line_number":319,"context_line":"            if \u0027locations\u0027 in image:"},{"line_number":320,"context_line":"                image.pop(\u0027locations\u0027)"},{"line_number":321,"context_line":"            if \u0027direct_url\u0027 in image:"},{"line_number":322,"context_line":"                image.pop(\u0027direct_url\u0027)"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"baada198_84ec15bd","line":320,"updated":"2014-07-18 06:40:38.000000000","message":"Replaced with image.pop(\u0027locations\u0027, None) for readability.","commit_id":"5df290e2e36a1627c51a6fe39134063919e51cbf"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"f3c601f26972bd83b4117bc6114638b32bc95f10","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            if \u0027locations\u0027 in image:"},{"line_number":320,"context_line":"                image.pop(\u0027locations\u0027)"},{"line_number":321,"context_line":"            if \u0027direct_url\u0027 in image:"},{"line_number":322,"context_line":"                image.pop(\u0027direct_url\u0027)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return image"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"baada198_844335ae","line":322,"updated":"2014-07-18 06:40:38.000000000","message":"Lines 304-322 duplicate _get_locations() one for one, and the only other place where _get_locations() is used is right in this class, so I just got rid of it and updated download() to use show(include_locations\u003dTrue).","commit_id":"5df290e2e36a1627c51a6fe39134063919e51cbf"}],"nova/tests/virt/libvirt/test_rbd_utils.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"956815e8e712be0a12d54c619363ea4d3b2addac","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":105,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":106,"context_line":"    def test_cloneable(self, mock_rados, mock_rbd):"},{"line_number":107,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":108,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":109,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://abc/pool/image/snap\u0027}"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_34f60690","line":106,"updated":"2014-06-11 06:40:34.000000000","message":"You don\u0027t need use context manager, use decorator:\n\n    @mock.patch.object(rbd_utils, \u0027rbd\u0027)\n    @mock.patch.object(rbd_utils, \u0027rados\u0027)\n    @mock.patch.object(rbd_utils.RBDDriver, \u0027_get_fsid\u0027)\n    def test_cloneable(self, mock_get_fsid, mock_rados, mock_rbd):","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"82ffa5f20069034ddd1f306081cd6484f3e72789","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":105,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":106,"context_line":"    def test_cloneable(self, mock_rados, mock_rbd):"},{"line_number":107,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":108,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":109,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://abc/pool/image/snap\u0027}"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_0c31be59","line":106,"in_reply_to":"1ae5cdf2_34f60690","updated":"2014-06-12 21:44:55.000000000","message":"Done","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"956815e8e712be0a12d54c619363ea4d3b2addac","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            self.assertTrue(mock_get_fsid.called)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_uncloneable_different_fsid(self):"},{"line_number":115,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":116,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":117,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://def/pool/image/snap\u0027}"},{"line_number":118,"context_line":"            self.assertFalse("}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_942c3a04","line":115,"updated":"2014-06-11 06:40:34.000000000","message":"ditto","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"82ffa5f20069034ddd1f306081cd6484f3e72789","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            self.assertTrue(mock_get_fsid.called)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def test_uncloneable_different_fsid(self):"},{"line_number":115,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":116,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":117,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://def/pool/image/snap\u0027}"},{"line_number":118,"context_line":"            self.assertFalse("}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_4c37464d","line":115,"in_reply_to":"1ae5cdf2_942c3a04","updated":"2014-06-12 21:44:55.000000000","message":"Done","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"956815e8e712be0a12d54c619363ea4d3b2addac","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":124,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":125,"context_line":"    def test_uncloneable_unreadable(self, mock_rados, mock_rbd, mock_proxy):"},{"line_number":126,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":127,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":128,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://abc/pool/image/snap\u0027}"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_b431365c","line":126,"updated":"2014-06-11 06:40:34.000000000","message":"ditto","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"82ffa5f20069034ddd1f306081cd6484f3e72789","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":124,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":125,"context_line":"    def test_uncloneable_unreadable(self, mock_rados, mock_rbd, mock_proxy):"},{"line_number":126,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":127,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":128,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://abc/pool/image/snap\u0027}"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_ec1492a1","line":126,"in_reply_to":"1ae5cdf2_b431365c","updated":"2014-06-12 21:44:55.000000000","message":"Done","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"956815e8e712be0a12d54c619363ea4d3b2addac","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self.assertTrue(mock_get_fsid.called)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_uncloneable_bad_format(self):"},{"line_number":138,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":139,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":140,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://abc/pool/image/snap\u0027}"},{"line_number":141,"context_line":"            formats \u003d [\u0027qcow2\u0027, \u0027vmdk\u0027, \u0027vdi\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_d432425d","line":138,"updated":"2014-06-11 06:40:34.000000000","message":"ditto","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"82ffa5f20069034ddd1f306081cd6484f3e72789","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self.assertTrue(mock_get_fsid.called)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_uncloneable_bad_format(self):"},{"line_number":138,"context_line":"        with mock.patch.object(self.driver, \u0027_get_fsid\u0027) as mock_get_fsid:"},{"line_number":139,"context_line":"            mock_get_fsid.return_value \u003d \u0027abc\u0027"},{"line_number":140,"context_line":"            location \u003d {\u0027url\u0027: \u0027rbd://abc/pool/image/snap\u0027}"},{"line_number":141,"context_line":"            formats \u003d [\u0027qcow2\u0027, \u0027vmdk\u0027, \u0027vdi\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_2f34ac48","line":138,"in_reply_to":"1ae5cdf2_d432425d","updated":"2014-06-12 21:44:55.000000000","message":"Done","commit_id":"295b9eac5e6edee8e97dde578405433b7db08cb0"}],"nova/virt/images.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"ed82e9bed8e0ff6f61a829e6218b0884c5a60293","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def get_meta(context, image_href):"},{"line_number":65,"context_line":"    \u0027\u0027\u0027Get image metadata and locations"},{"line_number":66,"context_line":"    \u0027\u0027\u0027"},{"line_number":67,"context_line":"    # NOTE(angdraug): keep consistent with fetch()"},{"line_number":68,"context_line":"    (image_service, image_id) \u003d glance.get_remote_image_service(context,"},{"line_number":69,"context_line":"                                                                image_href)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_9f3d85be","line":66,"updated":"2014-05-22 04:19:01.000000000","message":"We use double quotes for doc comments, and put the closing quotes at the end of the previous line.","commit_id":"bb168ad873a8b908d84a604b0a26918cf52d0bf3"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"25edcff25100f602537d980a18caf6111fc7b822","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                             \u0027disk_size\u0027: disk_size,"},{"line_number":126,"context_line":"                             \u0027size\u0027: max_size})"},{"line_number":127,"context_line":"            raise exception.FlavorDiskTooSmall()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if fmt !\u003d \"raw\" and CONF.force_raw_images:"},{"line_number":130,"context_line":"            staged \u003d \"%s.converted\" % path"},{"line_number":131,"context_line":"            LOG.debug(\"%s was %s, converting to raw\" % (image_href, fmt))"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_17095995","line":128,"updated":"2014-05-22 08:07:42.000000000","message":"This will probably trip you up - see: https://review.openstack.org/#/c/94322/ that tries to fix it and maybe get him to rebase on top of you.","commit_id":"62ecd6da5da9a69b1220932799f02b33377e80ec"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"bb32348be9d7e8fa4e130753a64a21b62d156cd0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                             \u0027disk_size\u0027: disk_size,"},{"line_number":126,"context_line":"                             \u0027size\u0027: max_size})"},{"line_number":127,"context_line":"            raise exception.FlavorDiskTooSmall()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if fmt !\u003d \"raw\" and CONF.force_raw_images:"},{"line_number":130,"context_line":"            staged \u003d \"%s.converted\" % path"},{"line_number":131,"context_line":"            LOG.debug(\"%s was %s, converting to raw\" % (image_href, fmt))"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_ee3b16c6","line":128,"in_reply_to":"7adec928_17095995","updated":"2014-05-23 03:13:50.000000000","message":"The way that patch looks at the moment, it doesn\u0027t need a rebase, there\u0027s no conflict, yet. It\u0027s also a relatively separate problem: clone or no clone, non-raw image is a problem, and if image is already raw, clone will work fine.\n\nImplementation wise, I\u0027m not sure I like to have another \"if rbd\" conditional here, I\u0027ll try wrap my head around the logic here and see if it can be streamlined, and comment on the other patch.","commit_id":"62ecd6da5da9a69b1220932799f02b33377e80ec"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"37504e8efc1af1eeb2aa4785d81753f1a3d08acf","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def get_meta(context, image_href):"},{"line_number":65,"context_line":"    \u0027\u0027\u0027Get image metadata and locations"},{"line_number":66,"context_line":"    \u0027\u0027\u0027"},{"line_number":67,"context_line":"    # NOTE(angdraug): keep consistent with fetch()"},{"line_number":68,"context_line":"    (image_service, image_id) \u003d glance.get_remote_image_service(context,"},{"line_number":69,"context_line":"                                                                image_href)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_5c833dcc","line":66,"updated":"2014-05-26 23:36:52.000000000","message":"Double quotes, one line please.","commit_id":"f1e976850d93e4906085550f08c63da32db43d1c"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"f3c601f26972bd83b4117bc6114638b32bc95f10","unresolved":false,"context_lines":[{"line_number":2686,"context_line":""},{"line_number":2687,"context_line":"            backend \u003d image(\u0027disk\u0027)"},{"line_number":2688,"context_line":"            if backend.SUPPORTS_CLONE:"},{"line_number":2689,"context_line":"                def clone_fallback_to_fetch(image_id_or_uri):"},{"line_number":2690,"context_line":"                    try:"},{"line_number":2691,"context_line":"                        backend.clone(context, image_id_or_uri)"},{"line_number":2692,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":34,"id":"baada198_a4875911","line":2689,"updated":"2014-07-18 06:40:38.000000000","message":"Not sure if it\u0027s safe to change signature of fetch_func like that, I\u0027ve made clone_fallback_to_fetch() fully transparent to avoid future breakage.","commit_id":"5df290e2e36a1627c51a6fe39134063919e51cbf"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"f3c601f26972bd83b4117bc6114638b32bc95f10","unresolved":false,"context_lines":[{"line_number":2689,"context_line":"                def clone_fallback_to_fetch(image_id_or_uri):"},{"line_number":2690,"context_line":"                    try:"},{"line_number":2691,"context_line":"                        backend.clone(context, image_id_or_uri)"},{"line_number":2692,"context_line":"                    except Exception:"},{"line_number":2693,"context_line":"                        libvirt_utils.fetch_image("},{"line_number":2694,"context_line":"                                context, image_id_or_uri,"},{"line_number":2695,"context_line":"                                user_id\u003dinstance[\u0027user_id\u0027],"}],"source_content_type":"text/x-python","patch_set":34,"id":"baada198_44767d40","line":2692,"updated":"2014-07-18 06:40:38.000000000","message":"Why would you mask all possible exceptions like that? If clone should have worked and didn\u0027t, such failure shouldn\u0027t be silently ignored.","commit_id":"5df290e2e36a1627c51a6fe39134063919e51cbf"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"f3c601f26972bd83b4117bc6114638b32bc95f10","unresolved":false,"context_lines":[{"line_number":2700,"context_line":"                              context\u003dcontext,"},{"line_number":2701,"context_line":"                              filename\u003droot_fname,"},{"line_number":2702,"context_line":"                              size\u003dsize,"},{"line_number":2703,"context_line":"                              image_id_or_uri\u003ddisk_images[\u0027image_id\u0027])"},{"line_number":2704,"context_line":"            else:"},{"line_number":2705,"context_line":"                backend.cache(fetch_func\u003dlibvirt_utils.fetch_image,"},{"line_number":2706,"context_line":"                              context\u003dcontext,"}],"source_content_type":"text/x-python","patch_set":34,"id":"baada198_e48151fc","line":2703,"updated":"2014-07-18 06:40:38.000000000","message":"Inconsistent code duplication like that is just asking for trouble, I\u0027ve extracted the call to backend.cache() out of the conditional.","commit_id":"5df290e2e36a1627c51a6fe39134063919e51cbf"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"25edcff25100f602537d980a18caf6111fc7b822","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        return True"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def direct_fetch(self, context, image_href):"},{"line_number":614,"context_line":"        if self.check_image_exists():"},{"line_number":615,"context_line":"            return"},{"line_number":616,"context_line":"        if not self.driver.supports_layering():"},{"line_number":617,"context_line":"            reason \u003d _(\u0027installed version of librbd does not support cloning\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_97fe4937","line":614,"updated":"2014-05-22 08:07:42.000000000","message":"Hmmm - we have these kind of checks in cache/create already dont\u0027t we? Do we need it here to in the fetch function?","commit_id":"62ecd6da5da9a69b1220932799f02b33377e80ec"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"bb32348be9d7e8fa4e130753a64a21b62d156cd0","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        return True"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def direct_fetch(self, context, image_href):"},{"line_number":614,"context_line":"        if self.check_image_exists():"},{"line_number":615,"context_line":"            return"},{"line_number":616,"context_line":"        if not self.driver.supports_layering():"},{"line_number":617,"context_line":"            reason \u003d _(\u0027installed version of librbd does not support cloning\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_0e4be259","line":614,"in_reply_to":"7adec928_97fe4937","updated":"2014-05-23 03:13:50.000000000","message":"Done","commit_id":"62ecd6da5da9a69b1220932799f02b33377e80ec"}],"nova/virt/libvirt/rbd_utils.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"ed82e9bed8e0ff6f61a829e6218b0884c5a60293","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        try:"},{"line_number":171,"context_line":"            fsid, pool, image, snapshot \u003d self.parse_url(url)"},{"line_number":172,"context_line":"        except exception.ImageUnacceptable as e:"},{"line_number":173,"context_line":"            LOG.debug(_(\u0027not cloneable: %s\u0027), e)"},{"line_number":174,"context_line":"            return False"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if self._get_fsid() !\u003d fsid:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_3f6e31ca","line":173,"updated":"2014-05-22 04:19:01.000000000","message":"We don\u0027t translate debug log messages any more. This is true for the other debug messages in this patchset.","commit_id":"bb168ad873a8b908d84a604b0a26918cf52d0bf3"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"25edcff25100f602537d980a18caf6111fc7b822","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return getattr(self.volume, attrib)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def ascii_str(s):"},{"line_number":66,"context_line":"    \"\"\"Convert a string to ascii, or return None if the input is None."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    This is useful when a parameter is None by default, or a string. LibRBD"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_17d87952","side":"PARENT","line":65,"updated":"2014-05-22 08:07:42.000000000","message":"As commented on the previous patch this should be dropped.","commit_id":"e63bd07e08d6406d9959494ff2794462ec44753d"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"bb32348be9d7e8fa4e130753a64a21b62d156cd0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return getattr(self.volume, attrib)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def ascii_str(s):"},{"line_number":66,"context_line":"    \"\"\"Convert a string to ascii, or return None if the input is None."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    This is useful when a parameter is None by default, or a string. LibRBD"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_6e9e26ba","side":"PARENT","line":65,"in_reply_to":"7adec928_17d87952","updated":"2014-05-23 03:13:50.000000000","message":"Done","commit_id":"e63bd07e08d6406d9959494ff2794462ec44753d"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"25edcff25100f602537d980a18caf6111fc7b822","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        return getattr(self.volume, attrib)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class RADOSClient(object):"},{"line_number":78,"context_line":"    \"\"\"Context manager to simplify error handling for connecting to ceph.\"\"\""},{"line_number":79,"context_line":"    def __init__(self, driver, pool\u003dNone):"},{"line_number":80,"context_line":"        self.driver \u003d driver"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_971c8915","line":77,"updated":"2014-05-22 08:07:42.000000000","message":"So this needs to go in the previous patch as it is used there along with it\u0027s tests.","commit_id":"62ecd6da5da9a69b1220932799f02b33377e80ec"},{"author":{"_account_id":8787,"name":"Dmitry Borodaenko","email":"angdraug@gmail.com","username":"angdraug"},"change_message_id":"bb32348be9d7e8fa4e130753a64a21b62d156cd0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        return getattr(self.volume, attrib)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class RADOSClient(object):"},{"line_number":78,"context_line":"    \"\"\"Context manager to simplify error handling for connecting to ceph.\"\"\""},{"line_number":79,"context_line":"    def __init__(self, driver, pool\u003dNone):"},{"line_number":80,"context_line":"        self.driver \u003d driver"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_4e740a9c","line":77,"in_reply_to":"7adec928_971c8915","updated":"2014-05-23 03:13:50.000000000","message":"Done","commit_id":"62ecd6da5da9a69b1220932799f02b33377e80ec"}]}
