)]}'
{"nova/tests/unit/virt/libvirt/storage/test_rbd.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5b1588facd1866df5b2de11de6ed4c03dc0f435","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":204,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":205,"context_line":"    def test_clone(self, mock_rados, mock_rbd, mock_client):"},{"line_number":206,"context_line":"        mock_rbd.ImageBusy \u003d FakeException"},{"line_number":207,"context_line":"        mock_rbd.ImageHasSnapshots \u003d FakeException"},{"line_number":208,"context_line":"        pool \u003d u\u0027images\u0027"},{"line_number":209,"context_line":"        image \u003d u\u0027image-name\u0027"},{"line_number":210,"context_line":"        snap \u003d u\u0027snapshot-name\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_10256ec1","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":50},"updated":"2016-12-08 10:14:42.000000000","message":"Could you give a little more detail in the commit message as to why this is necessary?","commit_id":"4b1786efc95f8abfa43e387ef4e8fe616c0b48d8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f6cf2854d3ecd364658d1f7bbe0a25899fd37ffb","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":204,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":205,"context_line":"    def test_clone(self, mock_rados, mock_rbd, mock_client):"},{"line_number":206,"context_line":"        mock_rbd.ImageBusy \u003d FakeException"},{"line_number":207,"context_line":"        mock_rbd.ImageHasSnapshots \u003d FakeException"},{"line_number":208,"context_line":"        pool \u003d u\u0027images\u0027"},{"line_number":209,"context_line":"        image \u003d u\u0027image-name\u0027"},{"line_number":210,"context_line":"        snap \u003d u\u0027snapshot-name\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_c17cca22","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":50},"in_reply_to":"3a71b18c_099fe403","updated":"2016-12-09 15:36:06.000000000","message":"Sounds fair. Maybe it could be done nicer than this but heck if I know how","commit_id":"4b1786efc95f8abfa43e387ef4e8fe616c0b48d8"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"07d56120afa60334f3220b07c6a164272cccfad2","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":204,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":205,"context_line":"    def test_clone(self, mock_rados, mock_rbd, mock_client):"},{"line_number":206,"context_line":"        mock_rbd.ImageBusy \u003d FakeException"},{"line_number":207,"context_line":"        mock_rbd.ImageHasSnapshots \u003d FakeException"},{"line_number":208,"context_line":"        pool \u003d u\u0027images\u0027"},{"line_number":209,"context_line":"        image \u003d u\u0027image-name\u0027"},{"line_number":210,"context_line":"        snap \u003d u\u0027snapshot-name\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_099fe403","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":50},"in_reply_to":"3a71b18c_10256ec1","updated":"2016-12-09 04:50:06.000000000","message":"without this, got error:\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    b\u0027Traceback (most recent call last):\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/nova/virt/libvirt/storage/rbd_utils.py\", line 351, in _cleanup_vol\u0027\n    b\u0027    raise loopingcall.LoopingCallDone(retvalue\u003dFalse)\u0027\n    b\u0027oslo_service.loopingcall.LoopingCallDone\u0027\n    b\u0027\u0027\n    b\u0027During handling of the above exception, another exception occurred:\u0027\n    b\u0027\u0027\n    b\u0027Traceback (most recent call last):\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/.tox/py34/lib/python3.4/site-packages/mock/mock.py\", line 1305, in patched\u0027\n    b\u0027    return func(*args, **keywargs)\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/nova/tests/unit/virt/libvirt/storage/test_rbd.py\", line 415, in test_cleanup_volumes_pending_resize\u0027\n    b\u0027    self.driver.cleanup_volumes(filter_fn)\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/nova/virt/libvirt/storage/rbd_utils.py\", line 380, in cleanup_volumes\u0027\n    b\u0027    self._destroy_volume(client, volume)\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/nova/virt/libvirt/storage/rbd_utils.py\", line 367, in _destroy_volume\u0027\n    b\u0027    timed_out \u003d timer.start(interval\u003d1).wait()\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/.tox/py34/lib/python3.4/site-packages/eventlet/event.py\", line 121, in wait\u0027\n    b\u0027    return hubs.get_hub().switch()\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/.tox/py34/lib/python3.4/site-packages/eventlet/hubs/hub.py\", line 294, in switch\u0027\n    b\u0027    return self.greenlet.switch()\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/.tox/py34/lib/python3.4/site-packages/oslo_service/loopingcall.py\", line 136, in _run_loop\u0027\n    b\u0027    result \u003d func(*self.args, **self.kw)\u0027\n    b\u0027  File \"/home/changboguo/code/os/nova/nova/virt/libvirt/storage/rbd_utils.py\", line 355, in _cleanup_vol\u0027\n    b\u0027    except (rbd.ImageBusy, rbd.ImageHasSnapshots):\u0027\n    b\u0027TypeError: catching classes that do not inherit from BaseException is not allowed\u0027\n    b\u0027\u0027","commit_id":"4b1786efc95f8abfa43e387ef4e8fe616c0b48d8"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"d0b3d36d83438739093bb8ab217222b6235c1c9e","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    @mock.patch.object(rbd_utils, \u0027rbd\u0027)"},{"line_number":204,"context_line":"    @mock.patch.object(rbd_utils, \u0027rados\u0027)"},{"line_number":205,"context_line":"    def test_clone(self, mock_rados, mock_rbd, mock_client):"},{"line_number":206,"context_line":"        mock_rbd.ImageBusy \u003d FakeException"},{"line_number":207,"context_line":"        mock_rbd.ImageHasSnapshots \u003d FakeException"},{"line_number":208,"context_line":"        pool \u003d u\u0027images\u0027"},{"line_number":209,"context_line":"        image \u003d u\u0027image-name\u0027"},{"line_number":210,"context_line":"        snap \u003d u\u0027snapshot-name\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_31d8c953","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":50},"in_reply_to":"3a71b18c_c17cca22","updated":"2016-12-13 09:00:46.000000000","message":"As I explained in other commits , statement \"except XXXX\" on Python 3 requires that XXXX is subclass of BaseException","commit_id":"4b1786efc95f8abfa43e387ef4e8fe616c0b48d8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5b1588facd1866df5b2de11de6ed4c03dc0f435","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        self.driver.clone(location, self.volume_name)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        if six.PY3:"},{"line_number":230,"context_line":"            args \u003d [client_stack[0].ioctx, b\u0027image-name\u0027, b\u0027snapshot-name\u0027,"},{"line_number":231,"context_line":"                    client_stack[1].ioctx, str(self.volume_name)]"},{"line_number":232,"context_line":"        else:"},{"line_number":233,"context_line":"            args \u003d [client_stack[0].ioctx, str(image), str(snap),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_5081a68e","line":230,"range":{"start_line":230,"start_character":43,"end_line":230,"end_character":74},"updated":"2016-12-08 10:14:42.000000000","message":"This sounds like something we could be using \u0027six.b\u0027 for?","commit_id":"4b1786efc95f8abfa43e387ef4e8fe616c0b48d8"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"07d56120afa60334f3220b07c6a164272cccfad2","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        self.driver.clone(location, self.volume_name)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        if six.PY3:"},{"line_number":230,"context_line":"            args \u003d [client_stack[0].ioctx, b\u0027image-name\u0027, b\u0027snapshot-name\u0027,"},{"line_number":231,"context_line":"                    client_stack[1].ioctx, str(self.volume_name)]"},{"line_number":232,"context_line":"        else:"},{"line_number":233,"context_line":"            args \u003d [client_stack[0].ioctx, str(image), str(snap),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_4ec48291","line":230,"range":{"start_line":230,"start_character":43,"end_line":230,"end_character":74},"in_reply_to":"3a71b18c_5081a68e","updated":"2016-12-09 04:50:06.000000000","message":"yes, six.b works well","commit_id":"4b1786efc95f8abfa43e387ef4e8fe616c0b48d8"}],"nova/virt/libvirt/storage/rbd_utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0aaadbdd54ac956b7498d09d514a86519e45d289","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.pool \u003d encodeutils.safe_decode(pool.encode(\u0027utf8\u0027))"},{"line_number":127,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":128,"context_line":"        # https://github.com/ceph/ceph/pull/1787"},{"line_number":129,"context_line":"        self.ceph_conf \u003d (encodeutils.safe_decode(ceph_conf.encode(\u0027utf8\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_d47d6c1d","line":126,"updated":"2016-12-14 14:35:57.000000000","message":"Yeah, why not just do:\n\n self.pool \u003d six.b(pool)\n\nsimilar for other treatment of variables below...","commit_id":"542553d3b8e3974f4ae114cf264faa04c060b0ea"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b9e509e7a301c841587994cd5e1723ce4ccaa0e8","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.pool \u003d encodeutils.safe_decode(pool.encode(\u0027utf8\u0027))"},{"line_number":127,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":128,"context_line":"        # https://github.com/ceph/ceph/pull/1787"},{"line_number":129,"context_line":"        self.ceph_conf \u003d (encodeutils.safe_decode(ceph_conf.encode(\u0027utf8\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_73cbc5a5","line":126,"in_reply_to":"1a6eadb0_5d9fb8b3","updated":"2016-12-14 17:15:05.000000000","message":"Apologies, I linked to the wrong repo. Looks like ceph is Python 3 compatible now so this whole thing can go away https://github.com/ceph/ceph/blob/master/src/pybind/rados/rados.pyx#L31-L36","commit_id":"542553d3b8e3974f4ae114cf264faa04c060b0ea"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"580885f354f228ec3930c533c33cb0fa2c46b3a7","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.pool \u003d encodeutils.safe_decode(pool.encode(\u0027utf8\u0027))"},{"line_number":127,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":128,"context_line":"        # https://github.com/ceph/ceph/pull/1787"},{"line_number":129,"context_line":"        self.ceph_conf \u003d (encodeutils.safe_decode(ceph_conf.encode(\u0027utf8\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_5d9fb8b3","line":126,"in_reply_to":"1a6eadb0_d47d6c1d","updated":"2016-12-14 16:53:51.000000000","message":"I don\u0027t think that works, because a bytestring isn\u0027t a string in python3. See the isinstance test in the library which is presumably the reason this exists:\n  https://github.com/angdraug/ceph/blob/master/src/pybind/rados.py#L212-L213","commit_id":"542553d3b8e3974f4ae114cf264faa04c060b0ea"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"62bec517f97cbcdc638cf063bf1cb325452a1770","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.pool \u003d encodeutils.safe_decode(pool.encode(\u0027utf8\u0027))"},{"line_number":127,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":128,"context_line":"        # https://github.com/ceph/ceph/pull/1787"},{"line_number":129,"context_line":"        self.ceph_conf \u003d (encodeutils.safe_decode(ceph_conf.encode(\u0027utf8\u0027))"},{"line_number":130,"context_line":"                          if ceph_conf else \u0027\u0027)"},{"line_number":131,"context_line":"        self.rbd_user \u003d (encodeutils.safe_decode(rbd_user.encode(\u0027utf8\u0027))"},{"line_number":132,"context_line":"                         if rbd_user else None)"},{"line_number":133,"context_line":"        if rbd is None:"},{"line_number":134,"context_line":"            raise RuntimeError(_(\u0027rbd python libraries not found\u0027))"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_a10d1992","line":132,"range":{"start_line":126,"start_character":0,"end_line":132,"end_character":47},"updated":"2016-12-14 12:48:43.000000000","message":"Ugh, Python 2. So I\u0027m curious as to why it was necessary to \u0027decode\u0027 this in the first place. From the docs [1], decode returns on a unicode string would return something like this:\n\n  \u003e\u003e\u003e u \u003d unichr(40960) + u\u0027abcd\u0027 + unichr(1972)\n  \u003e\u003e\u003e u.encode(\u0027utf-8\u0027)\n  \u0027\\xea\\x80\\x80abcd\\xde\\xb4\u0027\n\nthe \u0027safe_decode\u0027 function, on the other hand, would return a unicode string [2] (?), meaning we\u0027re essentially decoding only to reencode? The fact that I can safely remove all of the encode/safe_decode cruft and still have the tests pass supports this hypothesis:\n\n  self.pool \u003d pool\n  self.ceph_conf \u003d ceph_conf or \u0027\u0027\n  self.rbd_user \u003d rbd_user or \u0027\u0027\n\nSo if that\u0027s the case, why are we decoding in the first place? I would /think/ it\u0027s because the dependent library [3] is Python 2 compatible and expects byte strings. If this is the case, then we shouldn\u0027t be doing this simply to fix the tests because none of this code will actually work in the real world. \n\nFWIW, if we really wanted to handle decoding to utf-8 (not byte strings), then we could drop the \u0027encode\u0027 argument for all strings without issue. \n\n  self.pool \u003d encodeutils.safe_decode(pool)\n  # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:\n  # https://github.com/ceph/ceph/pull/1787\n  self.ceph_conf \u003d encodeutils.safe_decode(ceph_conf or \u0027\u0027)\n  self.rbd_user \u003d encodeutils.safe_decode(rbd_user or \u0027\u0027)\n\n[1] https://docs.python.org/2/howto/unicode.html#the-unicode-type\n[2] http://docs.openstack.org/developer/oslo.utils/api/encodeutils.html#oslo_utils.encodeutils.safe_decode\n[3] https://github.com/angdraug/ceph/blob/master/src/pybind/rados.py","commit_id":"542553d3b8e3974f4ae114cf264faa04c060b0ea"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"633050c99730213e8fd0afbc0717d8be487bd76c","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __init__(self, pool, ceph_conf, rbd_user):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.pool \u003d encodeutils.safe_decode(pool.encode(\u0027utf8\u0027))"},{"line_number":127,"context_line":"        # NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:"},{"line_number":128,"context_line":"        # https://github.com/ceph/ceph/pull/1787"},{"line_number":129,"context_line":"        self.ceph_conf \u003d (encodeutils.safe_decode(ceph_conf.encode(\u0027utf8\u0027))"},{"line_number":130,"context_line":"                          if ceph_conf else \u0027\u0027)"},{"line_number":131,"context_line":"        self.rbd_user \u003d (encodeutils.safe_decode(rbd_user.encode(\u0027utf8\u0027))"},{"line_number":132,"context_line":"                         if rbd_user else None)"},{"line_number":133,"context_line":"        if rbd is None:"},{"line_number":134,"context_line":"            raise RuntimeError(_(\u0027rbd python libraries not found\u0027))"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_5a517e0d","line":132,"range":{"start_line":126,"start_character":0,"end_line":132,"end_character":47},"in_reply_to":"1a6eadb0_a10d1992","updated":"2016-12-14 16:29:00.000000000","message":"git history diving: this conversion was originally added in https://review.openstack.org/#/c/44640/ . The ascii conversion doesn\u0027t seem to be related to the change, and there is no additional context in the associated bug. The only context is the code comment:\n\n  This is useful when a parameter is None by default, or a string. LibRBD\n  only accepts ascii, hence the need for conversion.\n\nIt was rewritten during the refactor in https://review.openstack.org/#/c/94293/ . The comment was lost, and it was changed to a utf-8 encode.","commit_id":"542553d3b8e3974f4ae114cf264faa04c060b0ea"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"44ede22cb83a664e9370d41c951926c49c3f1ff1","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        try:"},{"line_number":138,"context_line":"            client.connect()"},{"line_number":139,"context_line":"            pool_to_open \u003d pool or self.pool"},{"line_number":140,"context_line":"            ioctx \u003d client.open_ioctx(encodeutils.safe_decode("},{"line_number":141,"context_line":"                    pool_to_open.encode(\u0027utf-8\u0027)))"},{"line_number":142,"context_line":"            return client, ioctx"},{"line_number":143,"context_line":"        except rados.Error:"},{"line_number":144,"context_line":"            # shutdown cannot raise an exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_360e723b","line":141,"range":{"start_line":140,"start_character":12,"end_line":141,"end_character":50},"updated":"2016-12-15 12:37:59.000000000","message":"this can also go away - it\u0027s unnecessary and ceph can handle multiple string types now. See:\n\n  https://github.com/ceph/ceph/blob/master/src/pybind/rados/rados.pyx#L1122\n  https://github.com/ceph/ceph/blob/master/src/pybind/rados/rados.pyx#L467-L474","commit_id":"d55b092c173aaab04121c6ccbd67a1228b9415a3"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"11e46cd984b20f372da374de6fd0795e91789d69","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        try:"},{"line_number":138,"context_line":"            client.connect()"},{"line_number":139,"context_line":"            pool_to_open \u003d pool or self.pool"},{"line_number":140,"context_line":"            ioctx \u003d client.open_ioctx(encodeutils.safe_decode("},{"line_number":141,"context_line":"                    pool_to_open.encode(\u0027utf-8\u0027)))"},{"line_number":142,"context_line":"            return client, ioctx"},{"line_number":143,"context_line":"        except rados.Error:"},{"line_number":144,"context_line":"            # shutdown cannot raise an exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_d0b38198","line":141,"range":{"start_line":140,"start_character":12,"end_line":141,"end_character":50},"in_reply_to":"1a6eadb0_360e723b","updated":"2016-12-15 13:45:05.000000000","message":"Gah!","commit_id":"d55b092c173aaab04121c6ccbd67a1228b9415a3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"731fb02f622a442a90743d84b38fe185ad36f045","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                 read_only\u003dFalse):"},{"line_number":69,"context_line":"        client, ioctx \u003d driver._connect_to_rados(pool)"},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            snap_name \u003d snapshot.encode(\u0027utf8\u0027) if snapshot else None"},{"line_number":72,"context_line":"            self.volume \u003d tpool.Proxy(rbd.Image(ioctx, name.encode(\u0027utf8\u0027),"},{"line_number":73,"context_line":"                                      snapshot\u003dsnap_name,"},{"line_number":74,"context_line":"                                      read_only\u003dread_only))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_dc2f1386","line":71,"range":{"start_line":71,"start_character":32,"end_line":71,"end_character":47},"updated":"2016-12-15 15:34:17.000000000","message":"Can this go (we\u0027re probably not testing it :/)","commit_id":"ba81d2458f78915b7d523dd093ef21326229d104"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"731fb02f622a442a90743d84b38fe185ad36f045","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        client, ioctx \u003d driver._connect_to_rados(pool)"},{"line_number":70,"context_line":"        try:"},{"line_number":71,"context_line":"            snap_name \u003d snapshot.encode(\u0027utf8\u0027) if snapshot else None"},{"line_number":72,"context_line":"            self.volume \u003d tpool.Proxy(rbd.Image(ioctx, name.encode(\u0027utf8\u0027),"},{"line_number":73,"context_line":"                                      snapshot\u003dsnap_name,"},{"line_number":74,"context_line":"                                      read_only\u003dread_only))"},{"line_number":75,"context_line":"        except rbd.ImageNotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_3c1e475f","line":72,"range":{"start_line":72,"start_character":59,"end_line":72,"end_character":74},"updated":"2016-12-15 15:34:17.000000000","message":"this one too","commit_id":"ba81d2458f78915b7d523dd093ef21326229d104"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"731fb02f622a442a90743d84b38fe185ad36f045","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            with RADOSClient(self, dest_pool) as dest_client:"},{"line_number":235,"context_line":"                try:"},{"line_number":236,"context_line":"                    RbdProxy().clone(src_client.ioctx,"},{"line_number":237,"context_line":"                                     image.encode(\u0027utf-8\u0027),"},{"line_number":238,"context_line":"                                     snapshot.encode(\u0027utf-8\u0027),"},{"line_number":239,"context_line":"                                     dest_client.ioctx,"},{"line_number":240,"context_line":"                                     str(dest_name),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_dc46334e","line":237,"range":{"start_line":237,"start_character":42,"end_line":237,"end_character":59},"updated":"2016-12-15 15:34:17.000000000","message":"numero tre","commit_id":"ba81d2458f78915b7d523dd093ef21326229d104"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"83e16701e823b2fa36ed2d2ecfd5edbd0cc9d712","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            with RADOSClient(self, dest_pool) as dest_client:"},{"line_number":235,"context_line":"                try:"},{"line_number":236,"context_line":"                    RbdProxy().clone(src_client.ioctx,"},{"line_number":237,"context_line":"                                     image.encode(\u0027utf-8\u0027),"},{"line_number":238,"context_line":"                                     snapshot.encode(\u0027utf-8\u0027),"},{"line_number":239,"context_line":"                                     dest_client.ioctx,"},{"line_number":240,"context_line":"                                     str(dest_name),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_51590a8d","line":237,"range":{"start_line":237,"start_character":42,"end_line":237,"end_character":59},"in_reply_to":"1a6eadb0_dc46334e","updated":"2016-12-16 09:51:21.000000000","message":"Yeah, I noticed these too. They don\u0027t seem to be affecting the py3 tests, though, so I\u0027d prefer to deal with them separately.","commit_id":"ba81d2458f78915b7d523dd093ef21326229d104"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"731fb02f622a442a90743d84b38fe185ad36f045","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                try:"},{"line_number":236,"context_line":"                    RbdProxy().clone(src_client.ioctx,"},{"line_number":237,"context_line":"                                     image.encode(\u0027utf-8\u0027),"},{"line_number":238,"context_line":"                                     snapshot.encode(\u0027utf-8\u0027),"},{"line_number":239,"context_line":"                                     dest_client.ioctx,"},{"line_number":240,"context_line":"                                     str(dest_name),"},{"line_number":241,"context_line":"                                     features\u003dsrc_client.features)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_1c7b4b8d","line":238,"range":{"start_line":238,"start_character":45,"end_line":238,"end_character":61},"updated":"2016-12-15 15:34:17.000000000","message":"quattro","commit_id":"ba81d2458f78915b7d523dd093ef21326229d104"}]}
