)]}'
{"etc/nova/nova.conf.sample":[{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":2606,"context_line":""},{"line_number":2607,"context_line":"# Ceph configuration file path. (string value)"},{"line_number":2608,"context_line":"#rbd_ceph_conf\u003d"},{"line_number":2609,"context_line":""},{"line_number":2610,"context_line":""},{"line_number":2611,"context_line":"[conductor]"},{"line_number":2612,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAASn%2F%2FofA%3D","line":2609,"updated":"2013-09-02 06:20:22.000000000","message":"I think you can use rbd_ceph_conf and rbd_user from other place such as https://review.openstack.org/#/c/36042/24/etc/nova/nova.conf.sample","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"491df7971191d835f70347f72c1335974b258fee","unresolved":false,"context_lines":[{"line_number":909,"context_line":"# megabytes). For best performance, this should be a power of"},{"line_number":910,"context_line":"# two. (integer value)"},{"line_number":911,"context_line":"#rbd_chunk_size\u003d4"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"#"},{"line_number":915,"context_line":"# Options defined in nova.image.glance"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAASn%2F%2FAhI%3D","line":912,"updated":"2013-09-13 17:09:11.000000000","message":"this should be put together with the other rbd conf options like rbd_user.","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"b8dfad87526df436c2e6e54b8b606c95a6fcc909","unresolved":false,"context_lines":[{"line_number":909,"context_line":"# megabytes). For best performance, this should be a power of"},{"line_number":910,"context_line":"# two. (integer value)"},{"line_number":911,"context_line":"#rbd_chunk_size\u003d4"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"#"},{"line_number":915,"context_line":"# Options defined in nova.image.glance"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAS3%2F%2F%2Fw8%3D","line":912,"in_reply_to":"AAAASn%2F%2FAhI%3D","updated":"2013-09-15 02:06:44.000000000","message":"rbd_user was defined in nova.virt.libvirt.volume already. rbd_chunk_size is defined in nova.image.download.rbd and will be used only in this module. Will it be relevant if I add this config option in a module which will not use it at all? Kindly advice.","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"}],"nova/image/download/rbd.py":[{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"except ImportError:"},{"line_number":33,"context_line":"    rados \u003d None"},{"line_number":34,"context_line":"    rbd \u003d None"},{"line_number":35,"context_line":"    pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RBD_DEFAULT_CHUNKSIZE \u003d 4  # MB"},{"line_number":38,"context_line":"RBD_DEFAULT_POOL \u003d \u0027rbd\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Foes%3D","line":35,"updated":"2013-09-02 06:20:22.000000000","message":"\"pass\" can be removed","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"RBD_DEFAULT_POOL \u003d \u0027rbd\u0027"},{"line_number":39,"context_line":"RBD_DEFAULT_CONFFILE \u003d \u0027\u0027"},{"line_number":40,"context_line":"RBD_DEFAULT_USER \u003d \u0027\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"CONF \u003d cfg.CONF"},{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Foeo%3D","line":41,"updated":"2013-09-02 06:20:22.000000000","message":"As I mentioned at example configuration file, you may consider to remove some default values.","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"rbd_opts \u003d ["},{"line_number":46,"context_line":"    cfg.IntOpt(\u0027rbd_chunk_size\u0027, default\u003dRBD_DEFAULT_CHUNKSIZE,"},{"line_number":47,"context_line":"               help\u003d\u0027Images will be chunked into objects of this size \u0027"},{"line_number":48,"context_line":"                      \u0027(in megabytes). For best performance, this should be \u0027"},{"line_number":49,"context_line":"                      \u0027a power of two.\u0027),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027rbd_pool\u0027, default\u003dRBD_DEFAULT_POOL,"},{"line_number":51,"context_line":"               help\u003d\u0027RADOS pool in which images are stored.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoeY%3D","line":48,"updated":"2013-09-02 06:20:22.000000000","message":"It seemed a extra black at the head of the line","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self.conf_file \u003d CONF.image_rbd_url.rbd_ceph_conf"},{"line_number":73,"context_line":"            self.chunk_size \u003d CONF.image_rbd_url.rbd_chunk_size * 1024 * 1024"},{"line_number":74,"context_line":"        except cfg.ConfigFileValueError as e:"},{"line_number":75,"context_line":"            msg \u003d \"Error in store configuration: %s\" % e"},{"line_number":76,"context_line":"            LOG.error(msg)"},{"line_number":77,"context_line":"            raise exception.ImageDownloadModuleConfigurationError("},{"line_number":78,"context_line":"                    module\u003dstr(self), reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoeM%3D","line":75,"updated":"2013-09-02 06:20:22.000000000","message":"msg \u003d _(\"Error in store configuration: %s\") % e","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                      urllib.unquote(url_parts.path)).encode(\u0027ascii\u0027, \u0027ignore\u0027)"},{"line_number":99,"context_line":"            split_list \u003d path.split(\u0027/\u0027)"},{"line_number":100,"context_line":"            if (len(split_list) !\u003d 4):"},{"line_number":101,"context_line":"                msg \u003d \u0027Invalid url format\u0027"},{"line_number":102,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":103,"context_line":"            return (split_list[1],  # pool name"},{"line_number":104,"context_line":"                    split_list[2],  # image name"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fod8%3D","line":101,"updated":"2013-09-02 06:20:22.000000000","message":"msg \u003d _(\u0027Invalid url format: %s\u0027) % path","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":7593,"name":"Haomai Wang","email":"haomaiwang@gmail.com","username":"HaomaiWang"},"change_message_id":"2d42951d56635e7df15f20e3f221c4cd2a5b75c0","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                dest.write(data)"},{"line_number":125,"context_line":"        except self.rbd.ImageNotFound:"},{"line_number":126,"context_line":"            raise exception.NotFound("},{"line_number":127,"context_line":"                \u0027RBD image %s does not exist\u0027 % _image)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def get_download_hander(**kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fod0%3D","line":127,"updated":"2013-09-02 06:20:22.000000000","message":"ibid","commit_id":"b24a105ecf532ae3e9ab30bb1bb70b48de4942ba"},{"author":{"_account_id":2481,"name":"Rongze Zhu","email":"zrzhit@gmail.com","username":"zrzhit"},"change_message_id":"6dc06aa02cd9dfc765cecb58442596a08123d8ee","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    rbd \u003d None"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RBD_DEFAULT_CHUNKSIZE \u003d 4  # MB"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CONF \u003d cfg.CONF"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FPGc%3D","line":38,"updated":"2013-09-09 15:00:33.000000000","message":"I think this constant is not necessary.. you could remove it..","commit_id":"bd4fe27d2312b4826c5512140d4d936c2f573128"},{"author":{"_account_id":2481,"name":"Rongze Zhu","email":"zrzhit@gmail.com","username":"zrzhit"},"change_message_id":"6dc06aa02cd9dfc765cecb58442596a08123d8ee","unresolved":false,"context_lines":[{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"rbd_opts \u003d ["},{"line_number":43,"context_line":"    cfg.IntOpt(\u0027rbd_chunk_size\u0027, default\u003dRBD_DEFAULT_CHUNKSIZE,"},{"line_number":44,"context_line":"               help\u003d_(\u0027Images will be chunked into objects of this size \u0027"},{"line_number":45,"context_line":"                      \u0027(in megabytes). For best performance, this should be \u0027"},{"line_number":46,"context_line":"                      \u0027a power of two.\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FPGY%3D","line":43,"updated":"2013-09-09 15:00:33.000000000","message":"You cloud directly set default\u003d4. You should put \"default\u003d4\" on new line, it will be more standardized ??","commit_id":"bd4fe27d2312b4826c5512140d4d936c2f573128"},{"author":{"_account_id":2481,"name":"Rongze Zhu","email":"zrzhit@gmail.com","username":"zrzhit"},"change_message_id":"6dc06aa02cd9dfc765cecb58442596a08123d8ee","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":93,"context_line":"            return (split_list[1],  # pool name"},{"line_number":94,"context_line":"                    split_list[2],  # image name"},{"line_number":95,"context_line":"                    split_list[3])  # snapshot name"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def download(self, context, url_parts, destination, metadata, **kwargs):"},{"line_number":98,"context_line":"        self._read_config()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FPIs%3D","line":95,"updated":"2013-09-09 15:00:33.000000000","message":"There is a problem...\n\n\u003e\u003e\u003e url \u003d \"rbd://fsid/pool/image/snapshot\"\n\n\u003e\u003e\u003e url.split(\u0027/\u0027)\n\n[\u0027rbd:\u0027, \u0027\u0027, \u0027fsid\u0027, \u0027pool\u0027, \u0027image\u0027, \u0027snapshot\u0027]\n\n\u003e\u003e\u003e\n\nYou shoul cut the head \u0027rbd://\u0027 of the url before split operation.\n\n\u003e\u003e\u003e path \u003d url[len(\u0027rbd://\u0027):]\n\n\u003e\u003e\u003e path.split(\u0027/\u0027)\n\n[\u0027fsid\u0027, \u0027pool\u0027, \u0027image\u0027, \u0027snapshot\u0027]\n\n\u003e\u003e\u003e","commit_id":"bd4fe27d2312b4826c5512140d4d936c2f573128"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"fd918d2c37e12d8113268cf9acf8861254cf4443","unresolved":false,"context_lines":[{"line_number":40,"context_line":"rbd_opts \u003d ["},{"line_number":41,"context_line":"    cfg.IntOpt(\u0027rbd_chunk_size\u0027,"},{"line_number":42,"context_line":"               default\u003d4,"},{"line_number":43,"context_line":"               help\u003d_(\u0027Images will be chunked into objects of this size \u0027"},{"line_number":44,"context_line":"                      \u0027(in megabytes). For best performance, this should be \u0027"},{"line_number":45,"context_line":"                      \u0027a power of two.\u0027))"},{"line_number":46,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2F8Kg%3D","line":43,"updated":"2013-09-16 21:02:08.000000000","message":"this transfer mechanism isn\u0027t creating any images, it\u0027s just downloading them.\nInstead of having this option, it\u0027d be better to auto-detect the best chunk size based on the image. This would be stripe_count * object_size to avoid any partial object reads.","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"fd918d2c37e12d8113268cf9acf8861254cf4443","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            self.pool \u003d CONF.libvirt_images_rbd_pool"},{"line_number":60,"context_line":"            self.user \u003d CONF.rbd_user"},{"line_number":61,"context_line":"            self.conf_file \u003d CONF.libvirt_images_rbd_ceph_conf"},{"line_number":62,"context_line":"            self.chunk_size \u003d CONF.rbd_chunk_size * 1024 * 1024"},{"line_number":63,"context_line":"        except cfg.ConfigFileValueError as e:"},{"line_number":64,"context_line":"            msg \u003d _(\"Error in store configuration: %s\") % e"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2F8MI%3D","line":61,"updated":"2013-09-16 21:02:08.000000000","message":"these string values end up getting passed to librbd or librados, which can\u0027t handle non-utf8 unicode. They should be encoded as utf8.","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"fd918d2c37e12d8113268cf9acf8861254cf4443","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        if (url_parts.path \u003d\u003d \u0027\u0027):"},{"line_number":82,"context_line":"            loc \u003d unicodedata.normalize(\u0027NFKD\u0027,"},{"line_number":83,"context_line":"                    urllib.unquote(url_parts.netloc)).encode(\u0027ascii\u0027, \u0027ignore\u0027)"},{"line_number":84,"context_line":"            return (self.pool, loc, None)"},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            path \u003d unicodedata.normalize(\u0027NFKD\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2F8L8%3D","line":83,"updated":"2013-09-16 21:02:08.000000000","message":"you can use utf8 and not ignore errors here and below","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"fd918d2c37e12d8113268cf9acf8861254cf4443","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if (len(split_list) !\u003d 4):"},{"line_number":90,"context_line":"                msg \u003d _(\u0027Invalid url format\u0027)"},{"line_number":91,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":92,"context_line":"            return (split_list[1],  # pool name"},{"line_number":93,"context_line":"                    split_list[2],  # image name"},{"line_number":94,"context_line":"                    split_list[3])  # snapshot name"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2F8Lo%3D","line":92,"updated":"2013-09-16 21:02:08.000000000","message":"It\u0027d be good to check that the fsid from the image matches the fsid of the configured cluster like the cinder driver does","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"8679fba6cbc797d0334b431fa99060d245f75dcd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if (len(split_list) !\u003d 4):"},{"line_number":90,"context_line":"                msg \u003d _(\u0027Invalid url format\u0027)"},{"line_number":91,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":92,"context_line":"            return (split_list[1],  # pool name"},{"line_number":93,"context_line":"                    split_list[2],  # image name"},{"line_number":94,"context_line":"                    split_list[3])  # snapshot name"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FO1U%3D","line":92,"updated":"2013-09-09 16:05:10.000000000","message":"Url_parts is already a parsed url. It\u0027s an object of urlparse.urlparse.\nThe path attribute will contain just fsid/pool/image/snapshot.","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"5a2bd16dd266b66730515858633aaef923b6d6e1","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if (len(split_list) !\u003d 4):"},{"line_number":90,"context_line":"                msg \u003d _(\u0027Invalid url format\u0027)"},{"line_number":91,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":92,"context_line":"            return (split_list[1],  # pool name"},{"line_number":93,"context_line":"                    split_list[2],  # image name"},{"line_number":94,"context_line":"                    split_list[3])  # snapshot name"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FJlo%3D","line":92,"in_reply_to":"AAAASn%2F%2FMio%3D","updated":"2013-09-11 03:22:44.000000000","message":"Do you have any suggestions on how to make it more clear?","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":2481,"name":"Rongze Zhu","email":"zrzhit@gmail.com","username":"zrzhit"},"change_message_id":"abe444005bc3f32b3df82591a8271aaf3bc03e64","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if (len(split_list) !\u003d 4):"},{"line_number":90,"context_line":"                msg \u003d _(\u0027Invalid url format\u0027)"},{"line_number":91,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":92,"context_line":"            return (split_list[1],  # pool name"},{"line_number":93,"context_line":"                    split_list[2],  # image name"},{"line_number":94,"context_line":"                    split_list[3])  # snapshot name"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FNL4%3D","line":92,"in_reply_to":"AAAASn%2F%2FO1U%3D","updated":"2013-09-10 01:06:11.000000000","message":"Good.\n\nYou should reply me in patch 5, you could try it :)","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"},{"author":{"_account_id":2481,"name":"Rongze Zhu","email":"zrzhit@gmail.com","username":"zrzhit"},"change_message_id":"9bfd077f030d7fa97b5a773734880b8a396814cc","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if (len(split_list) !\u003d 4):"},{"line_number":90,"context_line":"                msg \u003d _(\u0027Invalid url format\u0027)"},{"line_number":91,"context_line":"                raise exception.InvalidParameterValue(reason\u003dmsg)"},{"line_number":92,"context_line":"            return (split_list[1],  # pool name"},{"line_number":93,"context_line":"                    split_list[2],  # image name"},{"line_number":94,"context_line":"                    split_list[3])  # snapshot name"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FMio%3D","line":92,"in_reply_to":"AAAASn%2F%2FO1U%3D","updated":"2013-09-10 07:17:51.000000000","message":"your _parse_url method\u0027s doc confuse me...","commit_id":"48c9eb5e44c26ee8d4d3b17bac84f79991ce8573"}]}
