)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ab329ccdc11d61405a2f3dab74a014e0f4a41646","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Joshua Huber \u003cjhuber@blockbridge.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-28 13:07:24 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint blockbridge-eps-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for Blockbridge EPS as a Cinder volume backend. This initial"},{"line_number":10,"context_line":"commit includes support for the minimum required volume operations:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5ad0253b_3474e9fb","line":7,"updated":"2015-04-28 19:47:51.000000000","message":"Please move the blueprint line to right above the Change-Id.\n\nYou should have a title here instead.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Joshua Huber \u003cjhuber@blockbridge.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-28 13:07:24 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint blockbridge-eps-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for Blockbridge EPS as a Cinder volume backend. This initial"},{"line_number":10,"context_line":"commit includes support for the minimum required volume operations:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5ad0253b_c65e2245","line":7,"in_reply_to":"5ad0253b_3474e9fb","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3b75024790c28a022388d2f47c6f5b611c989498","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-04-28 13:07:24 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint blockbridge-eps-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for Blockbridge EPS as a Cinder volume backend. This initial"},{"line_number":10,"context_line":"commit includes support for the minimum required volume operations:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5ad0253b_a1955941","line":8,"updated":"2015-04-28 19:23:23.000000000","message":"Please, change commit message according to the guidelines: https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-04-28 13:07:24 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint blockbridge-eps-driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for Blockbridge EPS as a Cinder volume backend. This initial"},{"line_number":10,"context_line":"commit includes support for the minimum required volume operations:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5ad0253b_a65b2654","line":8,"in_reply_to":"5ad0253b_a1955941","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"}],"cinder/exception.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"973efd0ac614fdf788fd246e9f38afa6f2349e09","unresolved":false,"context_lines":[{"line_number":928,"context_line":"    message \u003d _(\"No active iscsi portals with supplied iscsi ips\")"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"# Blockbridge driver"},{"line_number":931,"context_line":"class BlockbridgeAPIException(VolumeBackendAPIException):"},{"line_number":932,"context_line":"    message \u003d \"%(detail)s\""},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_cb324210","line":931,"updated":"2015-06-08 19:32:41.000000000","message":"This exception is used only in one place. Do we really need it?","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"be8e95850be6f8cde4d064dcc40ea28780a34e4a","unresolved":false,"context_lines":[{"line_number":928,"context_line":"    message \u003d _(\"No active iscsi portals with supplied iscsi ips\")"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"# Blockbridge driver"},{"line_number":931,"context_line":"class BlockbridgeAPIException(VolumeBackendAPIException):"},{"line_number":932,"context_line":"    message \u003d \"%(detail)s\""},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_0430b6e7","line":931,"in_reply_to":"3afb71cf_cb324210","updated":"2015-06-11 14:03:25.000000000","message":"Nope! I\u0027m taking it out and cleaning up the exception handling in the driver itself. Thanks for the tip. :)","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f4e94cc2a23a3ce1d12f70679ad951f40cec29ac","unresolved":false,"context_lines":[{"line_number":981,"context_line":"class XtremIOAlreadyMappedError(CinderException):"},{"line_number":982,"context_line":"    message \u003d _(\"Volume to Initiator Group mapping already exists\")"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"# DOTHILL"},{"line_number":986,"context_line":"class DotHillInvalidBackend(CinderException):"},{"line_number":987,"context_line":"    message \u003d _(\"Backend doesn\u0027t exist (%(backend)s)\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_637c0221","line":984,"updated":"2015-06-11 21:22:57.000000000","message":"DotHill exceptions picked up from merge? Need to be removed.","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"d06d7c2b57cc6eec5b9a414cfb92fd19f2eb32d3","unresolved":false,"context_lines":[{"line_number":981,"context_line":"class XtremIOAlreadyMappedError(CinderException):"},{"line_number":982,"context_line":"    message \u003d _(\"Volume to Initiator Group mapping already exists\")"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"# DOTHILL"},{"line_number":986,"context_line":"class DotHillInvalidBackend(CinderException):"},{"line_number":987,"context_line":"    message \u003d _(\"Backend doesn\u0027t exist (%(backend)s)\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_32c88e74","line":984,"in_reply_to":"1af86dd1_637c0221","updated":"2015-06-12 00:07:58.000000000","message":"Arg, thanks. I knew something was wrong there...","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"951fce4391ef6416d4b7514c2e89a8b3c18bebdd","unresolved":false,"context_lines":[{"line_number":981,"context_line":"class XtremIOAlreadyMappedError(CinderException):"},{"line_number":982,"context_line":"    message \u003d _(\"Volume to Initiator Group mapping already exists\")"},{"line_number":983,"context_line":""},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"# DOTHILL"},{"line_number":986,"context_line":"class DotHillInvalidBackend(CinderException):"},{"line_number":987,"context_line":"    message \u003d _(\"Backend doesn\u0027t exist (%(backend)s)\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_a698c86b","line":984,"in_reply_to":"1af86dd1_637c0221","updated":"2015-06-11 22:00:46.000000000","message":"yah looks like this needs a rebase cleanup.","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"}],"cinder/tests/unit/test_blockbridge.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ab329ccdc11d61405a2f3dab74a014e0f4a41646","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.stdout_ch.setFormatter(formatter)"},{"line_number":135,"context_line":"            self.root_logger.addHandler(self.stdout_ch)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def tearDown(self):"},{"line_number":138,"context_line":"        super(BlockbridgeISCSIDriverTestCase, self).tearDown()"},{"line_number":139,"context_line":"        if self.log_stdout:"},{"line_number":140,"context_line":"            self.root_logger.removeHandler(self.stdout_ch)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_d4d015cc","line":137,"updated":"2015-04-28 19:47:51.000000000","message":"Please use addCleanup instead of tearDown.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            self.stdout_ch.setFormatter(formatter)"},{"line_number":135,"context_line":"            self.root_logger.addHandler(self.stdout_ch)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def tearDown(self):"},{"line_number":138,"context_line":"        super(BlockbridgeISCSIDriverTestCase, self).tearDown()"},{"line_number":139,"context_line":"        if self.log_stdout:"},{"line_number":140,"context_line":"            self.root_logger.removeHandler(self.stdout_ch)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_69b6ff3e","line":137,"in_reply_to":"5ad0253b_d4d015cc","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"eae2ec26625f68ea9a6a2be5bccc412a41343a63","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self.connector \u003d dict("},{"line_number":125,"context_line":"            initiator\u003d\u0027iqn.1994-05.com.redhat:6a528422b61\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # self.enable_log_stdout()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        self.driver.do_setup(context.get_admin_context())"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_04336b15","line":127,"updated":"2015-05-20 16:26:12.000000000","message":"Please remove commented out code.\n\nI see where this could be useful for your development and testing, but for a final version I think this and enable_log_stdout should be removed.","commit_id":"a72c332383de8da2d3ef5a67ba65dbf24c9f877e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"6e65719e03123d9f63d9a3583a5e25e587805597","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self.connector \u003d dict("},{"line_number":125,"context_line":"            initiator\u003d\u0027iqn.1994-05.com.redhat:6a528422b61\u0027)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # self.enable_log_stdout()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        self.driver.do_setup(context.get_admin_context())"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_158a771b","line":127,"in_reply_to":"7a016987_04336b15","updated":"2015-05-20 18:09:49.000000000","message":"Thanks Sean, I\u0027ll take it out!","commit_id":"a72c332383de8da2d3ef5a67ba65dbf24c9f877e"}],"cinder/volume/drivers/blockbridge.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"eda36549fbb9ddb8916dc73f713f09df273975bb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Blockbridge EPS iSCSI Volume Driver"},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from __future__ import print_function"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import base64"},{"line_number":21,"context_line":"import httplib"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_a9bae56c","line":18,"updated":"2015-04-28 17:34:19.000000000","message":"Please don\u0027t use print in openstack code. In this case it looks like an unused import?","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"551d603ce619d826cfec20dc2fba7a10fea5ae72","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Blockbridge EPS iSCSI Volume Driver"},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from __future__ import print_function"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import base64"},{"line_number":21,"context_line":"import httplib"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_ea51eb0f","line":18,"in_reply_to":"5ad0253b_a9bae56c","updated":"2015-04-28 18:21:00.000000000","message":"Huh, you\u0027re right. Must have been leftover cruft. Shouldn\u0027t hacking have caught this one? (it\u0027s definitely complained about other unused imports.)","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3b75024790c28a022388d2f47c6f5b611c989498","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        cfg \u003d self._get_api_cfg()"},{"line_number":127,"context_line":"        if cfg is None:"},{"line_number":128,"context_line":"            msg \u003d _(\"failed to determine blockbridge api configuration\")"},{"line_number":129,"context_line":"            LOG.error(msg)"},{"line_number":130,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_e10b517c","line":128,"updated":"2015-04-28 19:23:23.000000000","message":"Please, start messages with upper-case letter","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        cfg \u003d self._get_api_cfg()"},{"line_number":127,"context_line":"        if cfg is None:"},{"line_number":128,"context_line":"            msg \u003d _(\"failed to determine blockbridge api configuration\")"},{"line_number":129,"context_line":"            LOG.error(msg)"},{"line_number":130,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_a993f7a2","line":128,"in_reply_to":"5ad0253b_e10b517c","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3b75024790c28a022388d2f47c6f5b611c989498","unresolved":false,"context_lines":[{"line_number":183,"context_line":"class BlockbridgeISCSIDriver(driver.ISCSIDriver):"},{"line_number":184,"context_line":"    \"\"\"Manages volumes hosted on Blockbridge EPS.\"\"\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    VERSION \u003d \"1.3.0\""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":189,"context_line":"        super(BlockbridgeISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_c1ecd591","line":186,"updated":"2015-04-28 19:23:23.000000000","message":"Why do you start with 1.3.0?","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":183,"context_line":"class BlockbridgeISCSIDriver(driver.ISCSIDriver):"},{"line_number":184,"context_line":"    \"\"\"Manages volumes hosted on Blockbridge EPS.\"\"\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    VERSION \u003d \"1.3.0\""},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":189,"context_line":"        super(BlockbridgeISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_4937c3b0","line":186,"in_reply_to":"5ad0253b_c1ecd591","updated":"2015-04-29 17:57:32.000000000","message":"Historical reasons. We\u0027ve been using the driver in various forms internally for a while now. Is this a problem? Since this is the first real public release of the driver, it\u0027s a relatively arbitrary version.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3b75024790c28a022388d2f47c6f5b611c989498","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        rel_url \u003d \"/volumes/%s/exports/%s\" % (vol_id, ini_name)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        if action:"},{"line_number":300,"context_line":"            rel_url +\u003d \"/actions/%s\" % action"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        return self.client.submit(rel_url, **kwargs)"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_a15e7943","line":300,"updated":"2015-04-28 19:23:23.000000000","message":"This lines of code is similar in 3 methods. Could we mote it to a separate method?","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        rel_url \u003d \"/volumes/%s/exports/%s\" % (vol_id, ini_name)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        if action:"},{"line_number":300,"context_line":"            rel_url +\u003d \"/actions/%s\" % action"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        return self.client.submit(rel_url, **kwargs)"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_89c83b76","line":300,"in_reply_to":"5ad0253b_a15e7943","updated":"2015-04-29 17:57:32.000000000","message":"Yes, good idea.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3b75024790c28a022388d2f47c6f5b611c989498","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _get_dbref_name(self, ref):"},{"line_number":317,"context_line":"        display_name \u003d ref.get(\"display_name\")"},{"line_number":318,"context_line":"        if display_name is None or len(display_name) \u003d\u003d 0:"},{"line_number":319,"context_line":"            return ref.get(\"name\")"},{"line_number":320,"context_line":"        return display_name"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_e111115f","line":318,"updated":"2015-04-28 19:23:23.000000000","message":"Could be simplified to:\nif not display_name:","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _get_dbref_name(self, ref):"},{"line_number":317,"context_line":"        display_name \u003d ref.get(\"display_name\")"},{"line_number":318,"context_line":"        if display_name is None or len(display_name) \u003d\u003d 0:"},{"line_number":319,"context_line":"            return ref.get(\"name\")"},{"line_number":320,"context_line":"        return display_name"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_49a103a9","line":318,"in_reply_to":"5ad0253b_e111115f","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ab329ccdc11d61405a2f3dab74a014e0f4a41646","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                                   project_id\u003dvolume[\"project_id\"])"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":428,"context_line":"        \"\"\"Delete volume\"s snapshot.."},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        :param snapshot: shapshot reference"},{"line_number":431,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_f72af37d","line":428,"updated":"2015-04-28 19:47:51.000000000","message":"Please use single quote after volume and remove extra period at the end.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                                   project_id\u003dvolume[\"project_id\"])"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":428,"context_line":"        \"\"\"Delete volume\"s snapshot.."},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        :param snapshot: shapshot reference"},{"line_number":431,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_c9951341","line":428,"in_reply_to":"5ad0253b_f72af37d","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"eda36549fbb9ddb8916dc73f713f09df273975bb","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        \"\"\"Generates random_string to use for CHAP password.\"\"\""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        char_set \u003d string.ascii_letters + string.digits"},{"line_number":466,"context_line":"        return \"\".join(random.sample(char_set, length))"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":469,"context_line":"        \"\"\"Attach volume to initiator/host. Creates a profile for the"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_c93ac1e7","line":466,"updated":"2015-04-28 17:34:19.000000000","message":"There are helper functions for this that avoid security concerns around which random function to use","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"551d603ce619d826cfec20dc2fba7a10fea5ae72","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        \"\"\"Generates random_string to use for CHAP password.\"\"\""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        char_set \u003d string.ascii_letters + string.digits"},{"line_number":466,"context_line":"        return \"\".join(random.sample(char_set, length))"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":469,"context_line":"        \"\"\"Attach volume to initiator/host. Creates a profile for the"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_4a345fdd","line":466,"in_reply_to":"5ad0253b_c93ac1e7","updated":"2015-04-28 18:21:00.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ab329ccdc11d61405a2f3dab74a014e0f4a41646","unresolved":false,"context_lines":[{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":469,"context_line":"        \"\"\"Attach volume to initiator/host. Creates a profile for the"},{"line_number":470,"context_line":"        initiator, and adds the new profile to the target ACL."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_b7723bac","line":470,"updated":"2015-04-28 19:47:51.000000000","message":"http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":469,"context_line":"        \"\"\"Attach volume to initiator/host. Creates a profile for the"},{"line_number":470,"context_line":"        initiator, and adds the new profile to the target ACL."},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_69aa7f72","line":470,"in_reply_to":"5ad0253b_b7723bac","updated":"2015-04-29 17:57:32.000000000","message":"Done","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ab329ccdc11d61405a2f3dab74a014e0f4a41646","unresolved":false,"context_lines":[{"line_number":573,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":574,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":575,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":576,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":577,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":578,"context_line":"        data[\"QoS_support\"] \u003d False"},{"line_number":579,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5ad0253b_f7867364","line":576,"updated":"2015-04-28 19:47:51.000000000","message":"Do you have a way to calculate capacities?  If you support thin provisioning, we have oversubscription support now.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f029740529b943835442de5a7ab9bff34234dfc","unresolved":false,"context_lines":[{"line_number":573,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":574,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":575,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":576,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":577,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":578,"context_line":"        data[\"QoS_support\"] \u003d False"},{"line_number":579,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9af37de9_7572807e","line":576,"in_reply_to":"3acd31a7_542081f7","updated":"2015-05-10 03:21:21.000000000","message":"See how the LVM driver reports capabilities/capacities to support thin provisioning:  \n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py line #236-240\n\nHere is the updated cinder-spec on over subscription support which was added in Kilo:\n\nhttps://github.com/openstack/cinder-specs/blob/master/specs/kilo/over-subscription-in-thin-provisioning.rst","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"cffd7309db93d7e6918c189cd6745da3da1a1f2f","unresolved":false,"context_lines":[{"line_number":573,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":574,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":575,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":576,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":577,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":578,"context_line":"        data[\"QoS_support\"] \u003d False"},{"line_number":579,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3acd31a7_542081f7","line":576,"in_reply_to":"5ad0253b_f7867364","updated":"2015-04-29 17:57:32.000000000","message":"We do support thin provisioning, and I\u0027m looking into how best to gather and expose utilization data to Cinder.\n\nThis feature requires some more design and discussion, so it\u0027ll be covered by a subsequent blueprint.","commit_id":"ca4c92f7e14bdd7f33e484a89c8af3e0b225e88a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5b13555d35b4b4f630b51f4e0496465861951a7e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"blockbridge_opts \u003d ["},{"line_number":39,"context_line":"    # API endpoint configuration"},{"line_number":40,"context_line":"    cfg.StrOpt(\"blockbridge_api_host\","},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d_(\"IP address/hostname of Blockbridge API.\")),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aca2d91_36f6a9f9","line":39,"updated":"2015-05-09 09:54:23.000000000","message":"IMO, these comments is unnecessary, but I won\u0027t -1 for it","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"blockbridge_opts \u003d ["},{"line_number":39,"context_line":"    # API endpoint configuration"},{"line_number":40,"context_line":"    cfg.StrOpt(\"blockbridge_api_host\","},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d_(\"IP address/hostname of Blockbridge API.\")),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_48ef9b87","line":39,"in_reply_to":"1aca2d91_36f6a9f9","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2183f9fc375ddc8e84786fb8ba41078cb92cbf70","unresolved":false,"context_lines":[{"line_number":78,"context_line":"CONF.register_opts(blockbridge_opts)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class BlockbridgeAPIException(exception.VolumeBackendAPIException):"},{"line_number":82,"context_line":"    message \u003d \"%(detail)s\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_15e45439","line":81,"updated":"2015-05-10 03:15:19.000000000","message":"This custom exception class should be moved to cinder/exception.py.","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"CONF.register_opts(blockbridge_opts)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class BlockbridgeAPIException(exception.VolumeBackendAPIException):"},{"line_number":82,"context_line":"    message \u003d \"%(detail)s\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_68f8174a","line":81,"in_reply_to":"9af37de9_15e45439","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"a7bdd2b1048e7f05ee68ea6039fb044abfe7322b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self._random_user_chars \u003d string.ascii_letters + string.digits"},{"line_number":200,"context_line":"        self._random_password_chars \u003d (string.ascii_letters + string.digits +"},{"line_number":201,"context_line":"                                       string.punctuation)"},{"line_number":202,"context_line":"        self._random \u003d random.SystemRandom()"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def do_setup(self, context):"},{"line_number":205,"context_line":"        \"\"\"Set up the Blockbridge volume driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_7895d53e","line":202,"updated":"2015-05-10 10:07:36.000000000","message":"Please consider using cinder.volume.utils.generate_password rather than rolling your own, or add a comment about why it isn\u0027t suitable... we get periodic security reviews that spend ages arguing about which  random generator is safe for what purpose, so having it all centralised in one place makes it easier to fix up","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self._random_user_chars \u003d string.ascii_letters + string.digits"},{"line_number":200,"context_line":"        self._random_password_chars \u003d (string.ascii_letters + string.digits +"},{"line_number":201,"context_line":"                                       string.punctuation)"},{"line_number":202,"context_line":"        self._random \u003d random.SystemRandom()"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def do_setup(self, context):"},{"line_number":205,"context_line":"        \"\"\"Set up the Blockbridge volume driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_a873afe6","line":202,"in_reply_to":"9af37de9_7895d53e","updated":"2015-05-15 14:46:04.000000000","message":"Sounds great. I wasn\u0027t aware of the utils function, I\u0027ll change over to use that instead.","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2183f9fc375ddc8e84786fb8ba41078cb92cbf70","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            LOG.error(msg)"},{"line_number":244,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        # everything checks out..."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _vol_api_submit(self, vol_id, **kwargs):"},{"line_number":249,"context_line":"        vol_id \u003d urllib.quote(vol_id, \"\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_15bb3410","line":246,"updated":"2015-05-10 03:15:19.000000000","message":"Not sure what this comment is about. It\u0027s better to remove it.","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            LOG.error(msg)"},{"line_number":244,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        # everything checks out..."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _vol_api_submit(self, vol_id, **kwargs):"},{"line_number":249,"context_line":"        vol_id \u003d urllib.quote(vol_id, \"\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_03106400","line":246,"in_reply_to":"9af37de9_15bb3410","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2183f9fc375ddc8e84786fb8ba41078cb92cbf70","unresolved":false,"context_lines":[{"line_number":539,"context_line":"                            project_id\u003dvolume[\"project_id\"])"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":542,"context_line":"        \"\"\"Get volume status."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        If \"refresh\" is True, run update the stats first."},{"line_number":545,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_754ba02c","line":542,"updated":"2015-05-10 03:15:19.000000000","message":"status -\u003e stats\n\nstats means statistics.","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":539,"context_line":"                            project_id\u003dvolume[\"project_id\"])"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":542,"context_line":"        \"\"\"Get volume status."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        If \"refresh\" is True, run update the stats first."},{"line_number":545,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_c3b00c46","line":542,"in_reply_to":"9af37de9_754ba02c","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2183f9fc375ddc8e84786fb8ba41078cb92cbf70","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        return self._stats"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def _update_driver_status(self):"},{"line_number":552,"context_line":"        \"\"\"Retrieve status info for underlying Blockbridge storage.\"\"\""},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_55489c2d","line":551,"updated":"2015-05-10 03:15:19.000000000","message":"Should be renamed to _update_driver_stats because it is about driver statistics.","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        return self._stats"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def _update_driver_status(self):"},{"line_number":552,"context_line":"        \"\"\"Retrieve status info for underlying Blockbridge storage.\"\"\""},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_a3abd0d5","line":551,"in_reply_to":"9af37de9_55489c2d","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2183f9fc375ddc8e84786fb8ba41078cb92cbf70","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        return self._stats"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def _update_driver_status(self):"},{"line_number":552,"context_line":"        \"\"\"Retrieve status info for underlying Blockbridge storage.\"\"\""},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        data \u003d {}"},{"line_number":555,"context_line":"        backend_name \u003d self.__class__.__name__"}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_355518c6","line":552,"updated":"2015-05-10 03:15:19.000000000","message":"status -\u003e stats","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        return self._stats"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def _update_driver_status(self):"},{"line_number":552,"context_line":"        \"\"\"Retrieve status info for underlying Blockbridge storage.\"\"\""},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        data \u003d {}"},{"line_number":555,"context_line":"        backend_name \u003d self.__class__.__name__"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_83ba1422","line":552,"in_reply_to":"9af37de9_355518c6","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2183f9fc375ddc8e84786fb8ba41078cb92cbf70","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            \"backend_name\": backend_name,"},{"line_number":564,"context_line":"        }"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        LOG.debug(\"Updating volume driver status\","},{"line_number":567,"context_line":"                  resource\u003d{\u0027type\u0027: \u0027driver\u0027, \u0027id\u0027: backend_name})"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        rsp \u003d self.client.submit(\"/status\", params\u003dcfg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9af37de9_155214de","line":566,"updated":"2015-05-10 03:15:19.000000000","message":"stats","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"33990b8ca084dce18aba9ad2861a4a047571704e","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            \"backend_name\": backend_name,"},{"line_number":564,"context_line":"        }"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        LOG.debug(\"Updating volume driver status\","},{"line_number":567,"context_line":"                  resource\u003d{\u0027type\u0027: \u0027driver\u0027, \u0027id\u0027: backend_name})"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        rsp \u003d self.client.submit(\"/status\", params\u003dcfg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_63b5d82f","line":566,"in_reply_to":"9af37de9_155214de","updated":"2015-05-15 14:46:04.000000000","message":"Done","commit_id":"adb5fbc37226061d4f1d3924b67982aa38e4f74c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"223d4db8f0d3d1432ff984560be88f117db94cb1","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            raise exception.UnknownCmd(cmd\u003dmethod)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # connect and execute the request"},{"line_number":150,"context_line":"        connection \u003d httplib.HTTPSConnection(cfg[\"host\"], cfg[\"port\"])"},{"line_number":151,"context_line":"        connection.request(method, url, body, headers)"},{"line_number":152,"context_line":"        response \u003d connection.getresponse()"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a016987_e78d0d7d","line":150,"updated":"2015-05-29 15:59:11.000000000","message":"Have you considered using the requests library?","commit_id":"f7a1530561744a656884a6ff4a30acd3411a933d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"223d4db8f0d3d1432ff984560be88f117db94cb1","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":548,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":549,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":550,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":551,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":552,"context_line":"        data[\"QoS_support\"] \u003d False"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a016987_02aed7e5","line":550,"updated":"2015-05-29 15:59:11.000000000","message":"can you not get good data for this?  setting this to unknown basically ensures that this driver won\u0027t get used for provisioning requests in a multi backend environment.","commit_id":"f7a1530561744a656884a6ff4a30acd3411a933d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d8409e0aaa23cc8246c67e5fd81cb75b6bd9768b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               default\u003d\"token\","},{"line_number":49,"context_line":"               help\u003d_(\"Blockbridge API authentication scheme (token \""},{"line_number":50,"context_line":"                      \"or password)\")),"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    cfg.StrOpt(\"blockbridge_auth_token\","},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d_(\"Blockbridge API token (for auth scheme \u0027token\u0027)\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_19a47055","line":51,"updated":"2015-06-05 20:25:05.000000000","message":"Please be consistent on blank line or no blank line between config entries.","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"3f7d78c9b675ad44955c9bbf446c83655a848745","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               default\u003d\"token\","},{"line_number":49,"context_line":"               help\u003d_(\"Blockbridge API authentication scheme (token \""},{"line_number":50,"context_line":"                      \"or password)\")),"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    cfg.StrOpt(\"blockbridge_auth_token\","},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d_(\"Blockbridge API token (for auth scheme \u0027token\u0027)\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_a680e68b","line":51,"in_reply_to":"3afb71cf_19a47055","updated":"2015-06-10 22:00:11.000000000","message":"+1","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"71c397382129d6a8e4535bd23cc2f52527cc22d6","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               help\u003d_(\"Blockbridge API password (for auth scheme \u0027password\u0027)\"),"},{"line_number":63,"context_line":"               secret\u003dTrue),"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    cfg.StrOpt(\"blockbridge_volume_query\","},{"line_number":66,"context_line":"               default\u003dNone,"},{"line_number":67,"context_line":"               help\u003d_(\"Query string used when provisioning a new volume. \""},{"line_number":68,"context_line":"                      \"This does not apply when creating clones.\")),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_347cd171","line":65,"updated":"2015-06-05 20:30:56.000000000","message":"After talking with uberjay in irc, This conf entry is basically a way of specifying a subsection of the array to use to provision the volume.  This is similar to the pool concept of the Cinder scheduler.   \n\nI would suggest you use the conf entry to list the available pools you want your driver instance to support in the array, and then report stats on those pools up to the scheduler in get_volume_stats.\n\nhttps://github.com/openstack/cinder-specs/blob/master/specs/juno/pool-aware-cinder-scheduler.rst","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"71c397382129d6a8e4535bd23cc2f52527cc22d6","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            raise exception.UnknownCmd(cmd\u003dmethod)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # connect and execute the request"},{"line_number":150,"context_line":"        connection \u003d httplib.HTTPSConnection(cfg[\"host\"], cfg[\"port\"])"},{"line_number":151,"context_line":"        connection.request(method, url, body, headers)"},{"line_number":152,"context_line":"        response \u003d connection.getresponse()"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_79c7e412","line":150,"updated":"2015-06-05 20:30:56.000000000","message":"you can look into requests in a follow up patch.  no biggie.","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d8409e0aaa23cc8246c67e5fd81cb75b6bd9768b","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        # ensure the host is configured"},{"line_number":197,"context_line":"        if self.configuration.safe_get(\"blockbridge_api_host\") is None:"},{"line_number":198,"context_line":"            msg \u003d _(\"blockbridge api host not configured\")"},{"line_number":199,"context_line":"            LOG.error(msg)"},{"line_number":200,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_d9adb832","line":198,"updated":"2015-06-05 20:25:05.000000000","message":"Please start uppercase.","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"be8e95850be6f8cde4d064dcc40ea28780a34e4a","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        # ensure the host is configured"},{"line_number":197,"context_line":"        if self.configuration.safe_get(\"blockbridge_api_host\") is None:"},{"line_number":198,"context_line":"            msg \u003d _(\"blockbridge api host not configured\")"},{"line_number":199,"context_line":"            LOG.error(msg)"},{"line_number":200,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_845a6629","line":198,"in_reply_to":"3afb71cf_d9adb832","updated":"2015-06-11 14:03:25.000000000","message":"Done","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d8409e0aaa23cc8246c67e5fd81cb75b6bd9768b","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            auth_user \u003d self.configuration.safe_get(\"blockbridge_auth_user\")"},{"line_number":207,"context_line":"            auth_pw \u003d self.configuration.safe_get(\"blockbridge_auth_password\")"},{"line_number":208,"context_line":"            if auth_user is None:"},{"line_number":209,"context_line":"                msg \u003d _(\"blockbridge user not configured (required for \""},{"line_number":210,"context_line":"                        \"auth scheme \u0027password\u0027)\")"},{"line_number":211,"context_line":"                LOG.error(msg)"},{"line_number":212,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_f97754d2","line":209,"updated":"2015-06-05 20:25:05.000000000","message":"Same throughout.","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d8409e0aaa23cc8246c67e5fd81cb75b6bd9768b","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        :raise: :py:exc:`NotImplementedError`"},{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":"        raise NotImplementedError"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def create_export(self, _ctx, volume):"},{"line_number":429,"context_line":"        \"\"\"Do nothing: target created during instance attachment.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_9903c00f","line":426,"updated":"2015-06-05 20:25:05.000000000","message":"Whole method call not needed as NotImplemented is the inherited default.","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"be8e95850be6f8cde4d064dcc40ea28780a34e4a","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        :raise: :py:exc:`NotImplementedError`"},{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":"        raise NotImplementedError"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def create_export(self, _ctx, volume):"},{"line_number":429,"context_line":"        \"\"\"Do nothing: target created during instance attachment.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_a4c8c2a9","line":426,"in_reply_to":"3afb71cf_9903c00f","updated":"2015-06-11 14:03:25.000000000","message":"Done","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"728f8ebfa60e87e475357e487a4c8b5ce0d5d8b5","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        data[\"vendor_name\"] \u003d \"Blockbridge\""},{"line_number":547,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":548,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":549,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":550,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":551,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":552,"context_line":"        data[\"QoS_support\"] \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_1bd7af24","line":549,"updated":"2015-06-07 20:17:15.000000000","message":"Why is array total capacity \"unknown\"?","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"be8e95850be6f8cde4d064dcc40ea28780a34e4a","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        data[\"vendor_name\"] \u003d \"Blockbridge\""},{"line_number":547,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":548,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":549,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":550,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":551,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":552,"context_line":"        data[\"QoS_support\"] \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_a45682cc","line":549,"in_reply_to":"3afb71cf_1bd7af24","updated":"2015-06-11 14:03:25.000000000","message":"I\u0027m taking care of this today, thanks.","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"728f8ebfa60e87e475357e487a4c8b5ce0d5d8b5","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":548,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":549,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":550,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":551,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":552,"context_line":"        data[\"QoS_support\"] \u003d False"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_fbddf342","line":550,"updated":"2015-06-07 20:17:15.000000000","message":"Similarly, why is array free capacity \"unknown\"?","commit_id":"14f040c8e031491a106d4226247f9670f0104e45"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"37ca9557a2fdb03fa57452d2ef787f907ec30520","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               help\u003d_(\"Override HTTP port to connect to Blockbridge \""},{"line_number":44,"context_line":"                      \"API server. If unspecified the port is selected \""},{"line_number":45,"context_line":"                      \"based on protocol.\")),"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    cfg.StrOpt(\"blockbridge_auth_scheme\","},{"line_number":48,"context_line":"               default\u003d\"token\","},{"line_number":49,"context_line":"               help\u003d_(\"Blockbridge API authentication scheme (token \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_81dc8d75","line":46,"updated":"2015-06-11 17:23:25.000000000","message":"Please be consistent with line spacing between config options.","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"37ca9557a2fdb03fa57452d2ef787f907ec30520","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if cfg is None:"},{"line_number":116,"context_line":"            msg \u003d _(\"Failed to determine blockbridge API configuration\")"},{"line_number":117,"context_line":"            LOG.error(msg)"},{"line_number":118,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # alter the url appropriately if an action is requested"},{"line_number":121,"context_line":"        if action:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_01041dc4","line":118,"updated":"2015-06-11 17:23:25.000000000","message":"why not raise BlockbridgeAPIException?","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"d06d7c2b57cc6eec5b9a414cfb92fd19f2eb32d3","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if cfg is None:"},{"line_number":116,"context_line":"            msg \u003d _(\"Failed to determine blockbridge API configuration\")"},{"line_number":117,"context_line":"            LOG.error(msg)"},{"line_number":118,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # alter the url appropriately if an action is requested"},{"line_number":121,"context_line":"        if action:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_7295e63e","line":118,"in_reply_to":"1af86dd1_a398ba6b","updated":"2015-06-12 00:07:58.000000000","message":"Yeah, in fact, I have removed it completely in the version I\u0027m about to submit. Thanks!","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"951fce4391ef6416d4b7514c2e89a8b3c18bebdd","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if cfg is None:"},{"line_number":116,"context_line":"            msg \u003d _(\"Failed to determine blockbridge API configuration\")"},{"line_number":117,"context_line":"            LOG.error(msg)"},{"line_number":118,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # alter the url appropriately if an action is requested"},{"line_number":121,"context_line":"        if action:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_c6e184d2","line":118,"in_reply_to":"1af86dd1_a398ba6b","updated":"2015-06-11 22:00:46.000000000","message":"yup.  VolumeBackendAPIException is the right thing to do, unless every call to self.submit() is wrapped with a try block that then converts the exception to a VolumeBackendAPIExceptions before sending it up to the volume manager.","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f4e94cc2a23a3ce1d12f70679ad951f40cec29ac","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if cfg is None:"},{"line_number":116,"context_line":"            msg \u003d _(\"Failed to determine blockbridge API configuration\")"},{"line_number":117,"context_line":"            LOG.error(msg)"},{"line_number":118,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # alter the url appropriately if an action is requested"},{"line_number":121,"context_line":"        if action:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_a398ba6b","line":118,"in_reply_to":"3afb71cf_01041dc4","updated":"2015-06-11 21:22:57.000000000","message":"I would actually argue the BlockbridgeAPIException can be removed completely. It doesn\u0027t add anything to VolumeBackendAPIException.","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"37ca9557a2fdb03fa57452d2ef787f907ec30520","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        data[\"vendor_name\"] \u003d \"Blockbridge\""},{"line_number":547,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":548,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":549,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":550,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":551,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":552,"context_line":"        data[\"QoS_support\"] \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_646e3f98","line":549,"updated":"2015-06-11 17:23:25.000000000","message":"Contrary to last review response, this is still \"unkown\"","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"d06d7c2b57cc6eec5b9a414cfb92fd19f2eb32d3","unresolved":false,"context_lines":[{"line_number":546,"context_line":"        data[\"vendor_name\"] \u003d \"Blockbridge\""},{"line_number":547,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":548,"context_line":"        data[\"storage_protocol\"] \u003d \"iSCSI\""},{"line_number":549,"context_line":"        data[\"total_capacity_gb\"] \u003d \"unknown\""},{"line_number":550,"context_line":"        data[\"free_capacity_gb\"] \u003d \"unknown\""},{"line_number":551,"context_line":"        data[\"reserved_percentage\"] \u003d 0"},{"line_number":552,"context_line":"        data[\"QoS_support\"] \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af86dd1_329f6e61","line":549,"in_reply_to":"3afb71cf_646e3f98","updated":"2015-06-12 00:07:58.000000000","message":"Done","commit_id":"812f10030dfea5f88ea2c80565e83f2fb957fb81"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                             \u0027User-Agent\u0027: (\"cinder-volume/%s\" %"},{"line_number":99,"context_line":"                                            BlockbridgeISCSIDriver.VERSION),"},{"line_number":100,"context_line":"                             \u0027Accept\u0027: \u0027application/vnd.blockbridge-3+json\u0027,"},{"line_number":101,"context_line":"                             \u0027Authorization\u0027: authz}}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return self._api_cfg"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_60774b03","line":101,"updated":"2015-06-12 06:02:53.000000000","message":"The last item in the dictionary should have a trailing comma.\n\nPlease refer to http://docs.openstack.org/developer/hacking/#dictionaries-lists.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                             \u0027User-Agent\u0027: (\"cinder-volume/%s\" %"},{"line_number":99,"context_line":"                                            BlockbridgeISCSIDriver.VERSION),"},{"line_number":100,"context_line":"                             \u0027Accept\u0027: \u0027application/vnd.blockbridge-3+json\u0027,"},{"line_number":101,"context_line":"                             \u0027Authorization\u0027: authz}}"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return self._api_cfg"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_610503c1","line":101,"in_reply_to":"1af86dd1_60774b03","updated":"2015-06-12 12:42:47.000000000","message":"Sure. I guess I got a little confused after seeing a handful of counter-examples. I\u0027ll change it over -- it\u0027s certainly better for future diffing.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":327,"context_line":"        create_params \u003d {\u0027name\u0027: self._get_dbref_name(volume),"},{"line_number":328,"context_line":"                         \u0027query\u0027: self._get_query_string(ctxt, volume),"},{"line_number":329,"context_line":"                         \u0027capacity\u0027: int(volume[\u0027size\u0027] * units.Gi)}"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        LOG.debug(\"Provisioning %(capacity)s byte volume \""},{"line_number":332,"context_line":"                  \"with query \u0027%(query)s\u0027\", create_params, resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_c0d5dfb9","line":329,"updated":"2015-06-12 06:02:53.000000000","message":"See above.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":327,"context_line":"        create_params \u003d {\u0027name\u0027: self._get_dbref_name(volume),"},{"line_number":328,"context_line":"                         \u0027query\u0027: self._get_query_string(ctxt, volume),"},{"line_number":329,"context_line":"                         \u0027capacity\u0027: int(volume[\u0027size\u0027] * units.Gi)}"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        LOG.debug(\"Provisioning %(capacity)s byte volume \""},{"line_number":332,"context_line":"                  \"with query \u0027%(query)s\u0027\", create_params, resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_01140ff3","line":329,"in_reply_to":"1af86dd1_c0d5dfb9","updated":"2015-06-12 12:42:47.000000000","message":"Done","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        create_params \u003d {\u0027name\u0027: self._get_dbref_name(volume),"},{"line_number":389,"context_line":"                         \u0027src\u0027: {\u0027volume_id\u0027: snapshot[\u0027volume_id\u0027],"},{"line_number":390,"context_line":"                                 \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]}}"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        LOG.debug(\"Creating volume from snapshot %(id)s\", snapshot,"},{"line_number":393,"context_line":"                  resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_20eef38b","line":390,"updated":"2015-06-12 06:02:53.000000000","message":"See above.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        create_params \u003d {\u0027name\u0027: self._get_dbref_name(volume),"},{"line_number":389,"context_line":"                         \u0027src\u0027: {\u0027volume_id\u0027: snapshot[\u0027volume_id\u0027],"},{"line_number":390,"context_line":"                                 \u0027snapshot_id\u0027: snapshot[\u0027id\u0027]}}"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        LOG.debug(\"Creating volume from snapshot %(id)s\", snapshot,"},{"line_number":393,"context_line":"                  resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_a103fbb7","line":390,"in_reply_to":"1af86dd1_20eef38b","updated":"2015-06-12 12:42:47.000000000","message":"Done","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            \u0027password\u0027, volume_utils.generate_password(32))"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        export_params \u003d {\u0027chap_user\u0027: chap_user,"},{"line_number":442,"context_line":"                         \u0027chap_secret\u0027: chap_secret}"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        LOG.debug(\"Configuring export for %(initiator)s\", connector,"},{"line_number":445,"context_line":"                  resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_a002e33c","line":442,"updated":"2015-06-12 06:02:53.000000000","message":"See above.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            \u0027password\u0027, volume_utils.generate_password(32))"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        export_params \u003d {\u0027chap_user\u0027: chap_user,"},{"line_number":442,"context_line":"                         \u0027chap_secret\u0027: chap_secret}"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        LOG.debug(\"Configuring export for %(initiator)s\", connector,"},{"line_number":445,"context_line":"                  resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_8100ffab","line":442,"in_reply_to":"1af86dd1_a002e33c","updated":"2015-06-12 12:42:47.000000000","message":"Done","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                      \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":462,"context_line":"                      \u0027auth_method\u0027: \u0027CHAP\u0027,"},{"line_number":463,"context_line":"                      \u0027auth_username\u0027: rsp[\u0027initiator_login\u0027],"},{"line_number":464,"context_line":"                      \u0027auth_password\u0027: chap_secret}"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        LOG.debug(\"Attach properties: %(properties)s\","},{"line_number":467,"context_line":"                  {\u0027properties\u0027: properties})"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_60fceb3e","line":464,"updated":"2015-06-12 06:02:53.000000000","message":"See above.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                      \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":462,"context_line":"                      \u0027auth_method\u0027: \u0027CHAP\u0027,"},{"line_number":463,"context_line":"                      \u0027auth_username\u0027: rsp[\u0027initiator_login\u0027],"},{"line_number":464,"context_line":"                      \u0027auth_password\u0027: chap_secret}"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        LOG.debug(\"Attach properties: %(properties)s\","},{"line_number":467,"context_line":"                  {\u0027properties\u0027: properties})"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_612ce34a","line":464,"in_reply_to":"1af86dd1_60fceb3e","updated":"2015-06-12 12:42:47.000000000","message":"Done","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                 \u0027reserved_percentage\u0027: 0,"},{"line_number":555,"context_line":"                 \u0027thin_provisioning_support\u0027: True,"},{"line_number":556,"context_line":"                 \u0027filter_function\u0027: filter_function,"},{"line_number":557,"context_line":"                 \u0027goodness_function\u0027: goodness_function})"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"            pools.append(pool)"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_c0a39f4e","line":557,"updated":"2015-06-12 06:02:53.000000000","message":"See above. And the parentheses can be removed here.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                 \u0027reserved_percentage\u0027: 0,"},{"line_number":555,"context_line":"                 \u0027thin_provisioning_support\u0027: True,"},{"line_number":556,"context_line":"                 \u0027filter_function\u0027: filter_function,"},{"line_number":557,"context_line":"                 \u0027goodness_function\u0027: goodness_function})"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"            pools.append(pool)"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_2126eb68","line":557,"in_reply_to":"1af86dd1_c0a39f4e","updated":"2015-06-12 12:42:47.000000000","message":"Done","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"48278bef6220a75ed91f85d18abf78695639878d","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                       \u0027total_capacity_gb\u0027: 0,"},{"line_number":566,"context_line":"                       \u0027free_capacity_gb\u0027: 0,"},{"line_number":567,"context_line":"                       \u0027reserved_percentage\u0027: 0,"},{"line_number":568,"context_line":"                       \u0027pools\u0027: pools}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_a089c3cc","line":568,"updated":"2015-06-12 06:02:53.000000000","message":"See above.","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"2bdace4ccd0f99d22e076aa6e163b1f6b645e76c","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                       \u0027total_capacity_gb\u0027: 0,"},{"line_number":566,"context_line":"                       \u0027free_capacity_gb\u0027: 0,"},{"line_number":567,"context_line":"                       \u0027reserved_percentage\u0027: 0,"},{"line_number":568,"context_line":"                       \u0027pools\u0027: pools}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1af86dd1_012bef31","line":568,"in_reply_to":"1af86dd1_a089c3cc","updated":"2015-06-12 12:42:47.000000000","message":"Done","commit_id":"0f0d5edbe3c6eba73625757bed7024374ae7881e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c665c86f72499ee323d18cbd519b8873741bb2d5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.StrOpt(\"blockbridge_auth_scheme\","},{"line_number":45,"context_line":"               default\u003d\"token\","},{"line_number":46,"context_line":"               help\u003d_(\"Blockbridge API authentication scheme (token \""},{"line_number":47,"context_line":"                      \"or password)\")),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"blockbridge_auth_token\","},{"line_number":49,"context_line":"               default\u003dNone,"},{"line_number":50,"context_line":"               help\u003d_(\"Blockbridge API token (for auth scheme \u0027token\u0027)\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_7f8fc623","line":47,"updated":"2015-06-12 20:37:06.000000000","message":"Should add\n\nchoices\u003d[\u0027token\u0027, \u0027password\u0027]\n\nto this option as a follow-up.  (Not vital for now.)","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"5447151304ba60f6251466b4ca07b172367033c9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.StrOpt(\"blockbridge_auth_scheme\","},{"line_number":45,"context_line":"               default\u003d\"token\","},{"line_number":46,"context_line":"               help\u003d_(\"Blockbridge API authentication scheme (token \""},{"line_number":47,"context_line":"                      \"or password)\")),"},{"line_number":48,"context_line":"    cfg.StrOpt(\"blockbridge_auth_token\","},{"line_number":49,"context_line":"               default\u003dNone,"},{"line_number":50,"context_line":"               help\u003d_(\"Blockbridge API token (for auth scheme \u0027token\u0027)\"),"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_1abb4074","line":47,"in_reply_to":"1af86dd1_7f8fc623","updated":"2015-06-12 21:52:04.000000000","message":"Thanks!","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2a4c579b7af61a3aa0d441e49888cec775848a8","unresolved":false,"context_lines":[{"line_number":549,"context_line":"            total_capacity \u003d stats.get(\u0027total_capacity\u0027, None)"},{"line_number":550,"context_line":"            provisioned_capacity \u003d stats.get(\u0027provisioned_capacity\u0027, None)"},{"line_number":551,"context_line":"            max_op_ratio \u003d self.configuration.safe_get("},{"line_number":552,"context_line":"                \u0027max_over_provisioning_ratio\u0027)"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"            if free_capacity is None:"},{"line_number":555,"context_line":"                free_capacity \u003d \u0027unknown\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_558d0b30","line":552,"updated":"2015-06-12 21:33:41.000000000","message":"Wrong spelling.  It should be \"max_over_subscription_ratio\".","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"5447151304ba60f6251466b4ca07b172367033c9","unresolved":false,"context_lines":[{"line_number":549,"context_line":"            total_capacity \u003d stats.get(\u0027total_capacity\u0027, None)"},{"line_number":550,"context_line":"            provisioned_capacity \u003d stats.get(\u0027provisioned_capacity\u0027, None)"},{"line_number":551,"context_line":"            max_op_ratio \u003d self.configuration.safe_get("},{"line_number":552,"context_line":"                \u0027max_over_provisioning_ratio\u0027)"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"            if free_capacity is None:"},{"line_number":555,"context_line":"                free_capacity \u003d \u0027unknown\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_55650b43","line":552,"in_reply_to":"1af86dd1_558d0b30","updated":"2015-06-12 21:52:04.000000000","message":"Done","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2a4c579b7af61a3aa0d441e49888cec775848a8","unresolved":false,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            pool \u003d {"},{"line_number":565,"context_line":"                \u0027pool_name\u0027: pool_name,"},{"line_number":566,"context_line":"                \u0027max_over_provisioning_ratio\u0027: max_op_ratio,"},{"line_number":567,"context_line":"                \u0027location_info\u0027: (\u0027BlockbridgeDriver:%(sys_id)s:%(pool)s\u0027 %"},{"line_number":568,"context_line":"                                  {\u0027sys_id\u0027: system_serial,"},{"line_number":569,"context_line":"                                   \u0027pool\u0027: pool_name}),"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_75a127a9","line":566,"updated":"2015-06-12 21:33:41.000000000","message":"It is \"max_over_subscription_ratio\", not \"max_over_provisioning_ratio\".\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L237","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"5447151304ba60f6251466b4ca07b172367033c9","unresolved":false,"context_lines":[{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            pool \u003d {"},{"line_number":565,"context_line":"                \u0027pool_name\u0027: pool_name,"},{"line_number":566,"context_line":"                \u0027max_over_provisioning_ratio\u0027: max_op_ratio,"},{"line_number":567,"context_line":"                \u0027location_info\u0027: (\u0027BlockbridgeDriver:%(sys_id)s:%(pool)s\u0027 %"},{"line_number":568,"context_line":"                                  {\u0027sys_id\u0027: system_serial,"},{"line_number":569,"context_line":"                                   \u0027pool\u0027: pool_name}),"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_d551fb63","line":566,"in_reply_to":"1af86dd1_75a127a9","updated":"2015-06-12 21:52:04.000000000","message":"Done","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2a4c579b7af61a3aa0d441e49888cec775848a8","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            }"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"            if provisioned_capacity is not None:"},{"line_number":579,"context_line":"                pool[\u0027provisioned_capacity\u0027] \u003d int("},{"line_number":580,"context_line":"                    provisioned_capacity / units.Gi"},{"line_number":581,"context_line":"                )"},{"line_number":582,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_95eee3ea","line":579,"updated":"2015-06-12 21:33:41.000000000","message":"It is \"provisioned_capacity_gb\", not \"provisioned_capacity\".\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L236","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"5447151304ba60f6251466b4ca07b172367033c9","unresolved":false,"context_lines":[{"line_number":576,"context_line":"            }"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"            if provisioned_capacity is not None:"},{"line_number":579,"context_line":"                pool[\u0027provisioned_capacity\u0027] \u003d int("},{"line_number":580,"context_line":"                    provisioned_capacity / units.Gi"},{"line_number":581,"context_line":"                )"},{"line_number":582,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_b54e7fbf","line":579,"in_reply_to":"1af86dd1_95eee3ea","updated":"2015-06-12 21:52:04.000000000","message":"Done","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e2a4c579b7af61a3aa0d441e49888cec775848a8","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":590,"context_line":"            \u0027total_capacity_gb\u0027: 0,"},{"line_number":591,"context_line":"            \u0027free_capacity_gb\u0027: 0,"},{"line_number":592,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":593,"context_line":"            \u0027pools\u0027: pools,"},{"line_number":594,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_35b04fdd","line":592,"updated":"2015-06-12 21:33:41.000000000","message":"If you are reporting pools, you don\u0027t need to report \u0027total_capacity_gb\u0027, \u0027free_capacity_gb\u0027, and \u0027reserved_percentage\u0027 for the entire backend here.  See the lvm driver:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L170","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"},{"author":{"_account_id":16062,"name":"Joshua Huber","inactive":true},"change_message_id":"5447151304ba60f6251466b4ca07b172367033c9","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":590,"context_line":"            \u0027total_capacity_gb\u0027: 0,"},{"line_number":591,"context_line":"            \u0027free_capacity_gb\u0027: 0,"},{"line_number":592,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":593,"context_line":"            \u0027pools\u0027: pools,"},{"line_number":594,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af86dd1_35d16fce","line":592,"in_reply_to":"1af86dd1_35b04fdd","updated":"2015-06-12 21:52:04.000000000","message":"Done","commit_id":"13bc13cd1f440e8e62d379ce9d39c1e4d1ce9a86"}]}
