)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"96fbdc9b560802a52b0d9217947b372b57171587","unresolved":false,"context_lines":[{"line_number":29,"context_line":"The driver has a series of configuration options which must be set"},{"line_number":30,"context_line":"in the cinder.conf, prefixed with hgst_*."},{"line_number":31,"context_line":"Nodes should have the HGST software installed and connected to the"},{"line_number":32,"context_line":"HGST domain prior to rolling out Nova nodes using this storage."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: Ie0ff03856edd4b5610f4412951ea7c970ad63c8c"},{"line_number":35,"context_line":"Implements: blueprint add-volume-driver-hgst-solutions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_7d66092b","line":32,"updated":"2015-06-10 16:51:20.000000000","message":"Should also mention that this driver requires a new os-brick connector that is also in flight.\n\nhttps://review.openstack.org/#/c/186580/","commit_id":"fcf2363b3023e84fd9b95cecebb13fcc6c4ddbe1"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"0ec34da4c569bb4d449a0c5090715f759b9dbff0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"The driver has a series of configuration options which must be set"},{"line_number":30,"context_line":"in the cinder.conf, prefixed with hgst_*."},{"line_number":31,"context_line":"Nodes should have the HGST software installed and connected to the"},{"line_number":32,"context_line":"HGST domain prior to rolling out Nova nodes using this storage."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: Ie0ff03856edd4b5610f4412951ea7c970ad63c8c"},{"line_number":35,"context_line":"Implements: blueprint add-volume-driver-hgst-solutions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3afb71cf_0399f67b","line":32,"in_reply_to":"3afb71cf_7d66092b","updated":"2015-06-10 17:28:34.000000000","message":"Got it.  Wasn\u0027t sure if we were to list these on a commit message or elsewhere.  Also will include the Nova mini-patch, too.","commit_id":"fcf2363b3023e84fd9b95cecebb13fcc6c4ddbe1"}],"cinder/tests/unit/volume/drivers/test_hgst.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _parse_space_list(self, *cmd):"},{"line_number":124,"context_line":"        \"\"\"Eats a vgc-cluster space-list commandline to a dict\"\"\""},{"line_number":125,"context_line":"        # name \u003d \"\""},{"line_number":126,"context_line":"        json \u003d False"},{"line_number":127,"context_line":"        nameOnly \u003d False"},{"line_number":128,"context_line":"        cmd \u003d list(*cmd)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_135a882a","line":125,"updated":"2015-06-10 02:24:24.000000000","message":"Please remove commented out code.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"f7de8560b0d3bab7a711246adf5b93b37eee64bd","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _parse_space_list(self, *cmd):"},{"line_number":124,"context_line":"        \"\"\"Eats a vgc-cluster space-list commandline to a dict\"\"\""},{"line_number":125,"context_line":"        # name \u003d \"\""},{"line_number":126,"context_line":"        json \u003d False"},{"line_number":127,"context_line":"        nameOnly \u003d False"},{"line_number":128,"context_line":"        cmd \u003d list(*cmd)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_bd0241b2","line":125,"in_reply_to":"3afb71cf_135a882a","updated":"2015-06-10 17:18:47.000000000","message":"Done.  No mode commented-out code","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            elif param \u003d\u003d \"--name-only\":"},{"line_number":134,"context_line":"                nameOnly \u003d True"},{"line_number":135,"context_line":"            elif param \u003d\u003d \"-n\":"},{"line_number":136,"context_line":"                # name \u003d cmd.pop(0)"},{"line_number":137,"context_line":"                pass  # Don\u0027t use the name here..."},{"line_number":138,"context_line":"            else:"},{"line_number":139,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_d3407036","line":136,"updated":"2015-06-10 02:24:24.000000000","message":"Same.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"f7de8560b0d3bab7a711246adf5b93b37eee64bd","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            elif param \u003d\u003d \"--name-only\":"},{"line_number":134,"context_line":"                nameOnly \u003d True"},{"line_number":135,"context_line":"            elif param \u003d\u003d \"-n\":"},{"line_number":136,"context_line":"                # name \u003d cmd.pop(0)"},{"line_number":137,"context_line":"                pass  # Don\u0027t use the name here..."},{"line_number":138,"context_line":"            else:"},{"line_number":139,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_7d2f293f","line":136,"in_reply_to":"3afb71cf_d3407036","updated":"2015-06-10 17:18:47.000000000","message":"Done","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            return NETWORK_LIST, \u0027\u0027"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _fake_execute(self, *cmd, **kwargs):"},{"line_number":154,"context_line":"        \"\"\"sudo hook to catch commands to allow running on all hosts\"\"\""},{"line_number":155,"context_line":"        cmdlist \u003d list(cmd)"},{"line_number":156,"context_line":"        exe \u003d cmdlist.pop(0)"},{"line_number":157,"context_line":"        if exe \u003d\u003d \u0027vgc-cluster\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_9346784d","line":154,"updated":"2015-06-10 02:24:24.000000000","message":"Single line docstrings should end with a period.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"Get cluster space available, should pass\"\"\""},{"line_number":327,"context_line":"        self._reset_configuration()"},{"line_number":328,"context_line":"        actual \u003d self.driver.get_volume_stats(True)"},{"line_number":329,"context_line":"        self.assertEqual(actual[\u0027vendor_name\u0027], \u0027HGST\u0027)"},{"line_number":330,"context_line":"        self.assertEqual(actual[\u0027storage_protocol\u0027], \u0027hgst\u0027)"},{"line_number":331,"context_line":"        self.assertEqual(actual[\u0027total_capacity_gb\u0027], 90)"},{"line_number":332,"context_line":"        self.assertEqual(actual[\u0027free_capacity_gb\u0027], 87)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_53a240fe","line":329,"updated":"2015-06-10 02:24:24.000000000","message":"assertEqual should be (EXPECTED, ACTUAL).","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"f7de8560b0d3bab7a711246adf5b93b37eee64bd","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"Get cluster space available, should pass\"\"\""},{"line_number":327,"context_line":"        self._reset_configuration()"},{"line_number":328,"context_line":"        actual \u003d self.driver.get_volume_stats(True)"},{"line_number":329,"context_line":"        self.assertEqual(actual[\u0027vendor_name\u0027], \u0027HGST\u0027)"},{"line_number":330,"context_line":"        self.assertEqual(actual[\u0027storage_protocol\u0027], \u0027hgst\u0027)"},{"line_number":331,"context_line":"        self.assertEqual(actual[\u0027total_capacity_gb\u0027], 90)"},{"line_number":332,"context_line":"        self.assertEqual(actual[\u0027free_capacity_gb\u0027], 87)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_1db6f5f8","line":329,"in_reply_to":"3afb71cf_53a240fe","updated":"2015-06-10 17:18:47.000000000","message":"Good catch, I had (expected, actual) backwards everywhere.  Went through all of them and reversed the order to the right way for next patch.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"}],"cinder/volume/drivers/hgst.py":[{"author":{"_account_id":8475,"name":"AmitKumarDas","email":"amit.das@cloudbyte.com","username":"AmitKumarDas"},"change_message_id":"4beb80ecd530de6c66b4cc3bb86446fa0c4beb8a","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _get_space_name(self, volume):"},{"line_number":242,"context_line":"        \"\"\"Pull name of /dev/\u003cspace\u003e from the DB, since we hash it\"\"\""},{"line_number":243,"context_line":"        volume_md \u003d self._get_volume_metadata(volume[\u0027id\u0027])"},{"line_number":244,"context_line":"        if self.MDSPACENAME in volume_md:"},{"line_number":245,"context_line":"            return volume_md[self.MDSPACENAME]"},{"line_number":246,"context_line":"        elif \u0027snapshot_id\u0027 in volume:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_966f2a92","line":243,"updated":"2015-06-05 05:22:03.000000000","message":"Use of DB operation inside the driver code is discouraged.\n\nrefer - https://review.openstack.org/#/c/143205/","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"3e3bc1a95575cbeeae282d723dd3c9985a6c7c5c","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _get_space_name(self, volume):"},{"line_number":242,"context_line":"        \"\"\"Pull name of /dev/\u003cspace\u003e from the DB, since we hash it\"\"\""},{"line_number":243,"context_line":"        volume_md \u003d self._get_volume_metadata(volume[\u0027id\u0027])"},{"line_number":244,"context_line":"        if self.MDSPACENAME in volume_md:"},{"line_number":245,"context_line":"            return volume_md[self.MDSPACENAME]"},{"line_number":246,"context_line":"        elif \u0027snapshot_id\u0027 in volume:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_8f001aac","line":243,"in_reply_to":"3afb71cf_966f2a92","updated":"2015-06-05 16:59:24.000000000","message":"Done","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":8475,"name":"AmitKumarDas","email":"amit.das@cloudbyte.com","username":"AmitKumarDas"},"change_message_id":"4beb80ecd530de6c66b4cc3bb86446fa0c4beb8a","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        don\u0027t have race conditions on the name we pick to use for the space."},{"line_number":302,"context_line":"        \"\"\""},{"line_number":303,"context_line":"        # For ease of deugging, use friendly name if it exists"},{"line_number":304,"context_line":"        volname \u003d self._make_space_name(volume[\u0027display_name\u0027]"},{"line_number":305,"context_line":"                                        or volume[\u0027name\u0027])"},{"line_number":306,"context_line":"        volnet \u003d self.configuration.safe_get(\u0027hgst_net\u0027)"},{"line_number":307,"context_line":"        volbytes \u003d volume[\u0027size\u0027] * units.Gi  # OS\u003dBase2, but HGST\u003dBase10"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_565f720e","line":304,"updated":"2015-06-05 05:22:03.000000000","message":"A volume\u0027s display_name may be changed in OpenStack. In such cases, the debugging flexibility will be reduced. It might be better to log the OpenStack volume ID along with HGST space name.","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"3e3bc1a95575cbeeae282d723dd3c9985a6c7c5c","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        don\u0027t have race conditions on the name we pick to use for the space."},{"line_number":302,"context_line":"        \"\"\""},{"line_number":303,"context_line":"        # For ease of deugging, use friendly name if it exists"},{"line_number":304,"context_line":"        volname \u003d self._make_space_name(volume[\u0027display_name\u0027]"},{"line_number":305,"context_line":"                                        or volume[\u0027name\u0027])"},{"line_number":306,"context_line":"        volnet \u003d self.configuration.safe_get(\u0027hgst_net\u0027)"},{"line_number":307,"context_line":"        volbytes \u003d volume[\u0027size\u0027] * units.Gi  # OS\u003dBase2, but HGST\u003dBase10"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_776816f6","line":304,"in_reply_to":"3afb71cf_565f720e","updated":"2015-06-05 16:59:24.000000000","message":"The display_name is just a convenience thing.  The display_name is just where the HGST internal name starts, but it often ends up different after make_space_name uniquifies it (appends integers if there are conflicts).  Especially since we only have 13 chars for space names.  But while building the code seeing the friendly names made debug easier to than GUIDs.\n\nLike you noticed I\u0027m using the DB to store whatever name make_space_name comes up with.  So after initial creation display_name isn\u0027t used, only the volume_id and it\u0027s DB[metadata].\n\nI\u0027m working on replacing metadata[] with the provider_id.  Seems to simplify things which is always a good thing.  Will have a new patch after tempest completes.\n\nThanks!\n-EFP3","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":8475,"name":"AmitKumarDas","email":"amit.das@cloudbyte.com","username":"AmitKumarDas"},"change_message_id":"4beb80ecd530de6c66b4cc3bb86446fa0c4beb8a","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        except processutils.ProcessExecutionError as err:"},{"line_number":330,"context_line":"            self._handle_blocked(err)"},{"line_number":331,"context_line":"        # Stash away the hashed name"},{"line_number":332,"context_line":"        volume_metadata \u003d self._get_volume_metadata(volume[\u0027id\u0027])"},{"line_number":333,"context_line":"        volume_metadata[self.MDSPACENAME] \u003d volname"},{"line_number":334,"context_line":"        # Send modified MD back up the stack"},{"line_number":335,"context_line":"        return {\u0027metadata\u0027: volume_metadata}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_568d327a","line":332,"updated":"2015-06-05 05:22:03.000000000","message":"Please have a look at below commit:\nhttps://review.openstack.org/#/c/143205/\n\nThis provides a way to map an OpenStack volume/snapshot id w.r.t a driver\u0027s volume/snapshot id. Use of cinder DB operations is normally discouraged in driver code.","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"3e3bc1a95575cbeeae282d723dd3c9985a6c7c5c","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        except processutils.ProcessExecutionError as err:"},{"line_number":330,"context_line":"            self._handle_blocked(err)"},{"line_number":331,"context_line":"        # Stash away the hashed name"},{"line_number":332,"context_line":"        volume_metadata \u003d self._get_volume_metadata(volume[\u0027id\u0027])"},{"line_number":333,"context_line":"        volume_metadata[self.MDSPACENAME] \u003d volname"},{"line_number":334,"context_line":"        # Send modified MD back up the stack"},{"line_number":335,"context_line":"        return {\u0027metadata\u0027: volume_metadata}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_af03d6b7","line":332,"in_reply_to":"3afb71cf_568d327a","updated":"2015-06-05 16:59:24.000000000","message":"Done","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":8475,"name":"AmitKumarDas","email":"amit.das@cloudbyte.com","username":"AmitKumarDas"},"change_message_id":"4beb80ecd530de6c66b4cc3bb86446fa0c4beb8a","unresolved":false,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        # Make new volume using non-locked (already have lock)"},{"line_number":381,"context_line":"        metadata \u003d self.create_volume(volume)"},{"line_number":382,"context_line":"        self._add_cinder_apphost(metadata[\u0027metadata\u0027][self.MDSPACENAME])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        # And copy original into it..."},{"line_number":385,"context_line":"        info \u003d self._get_space_size_redundancy(volname)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_b6dd8672","line":382,"updated":"2015-06-05 05:22:03.000000000","message":"Same comment.\n\nhttps://review.openstack.org/#/c/143205/","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"3e3bc1a95575cbeeae282d723dd3c9985a6c7c5c","unresolved":false,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        # Make new volume using non-locked (already have lock)"},{"line_number":381,"context_line":"        metadata \u003d self.create_volume(volume)"},{"line_number":382,"context_line":"        self._add_cinder_apphost(metadata[\u0027metadata\u0027][self.MDSPACENAME])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        # And copy original into it..."},{"line_number":385,"context_line":"        info \u003d self._get_space_size_redundancy(volname)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_6f5efeea","line":382,"in_reply_to":"3afb71cf_b6dd8672","updated":"2015-06-05 16:59:24.000000000","message":"Done","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":8475,"name":"AmitKumarDas","email":"amit.das@cloudbyte.com","username":"AmitKumarDas"},"change_message_id":"4beb80ecd530de6c66b4cc3bb86446fa0c4beb8a","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # Attach it to me"},{"line_number":456,"context_line":"        try:"},{"line_number":457,"context_line":"            self._add_cinder_apphost(metadata[\u0027metadata\u0027][self.MDSPACENAME])"},{"line_number":458,"context_line":"        except processutils.ProcessExecutionError as err:"},{"line_number":459,"context_line":"            # This is fatal, get rid of the new snapshot and punt"},{"line_number":460,"context_line":"            params \u003d [self.VGCCLUSTER, \u0027space-delete\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_f6c9bead","line":457,"updated":"2015-06-05 05:22:03.000000000","message":"Above comment applies here.\n\nhttps://review.openstack.org/#/c/143205/","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"3e3bc1a95575cbeeae282d723dd3c9985a6c7c5c","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # Attach it to me"},{"line_number":456,"context_line":"        try:"},{"line_number":457,"context_line":"            self._add_cinder_apphost(metadata[\u0027metadata\u0027][self.MDSPACENAME])"},{"line_number":458,"context_line":"        except processutils.ProcessExecutionError as err:"},{"line_number":459,"context_line":"            # This is fatal, get rid of the new snapshot and punt"},{"line_number":460,"context_line":"            params \u003d [self.VGCCLUSTER, \u0027space-delete\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_4f0a22d4","line":457,"in_reply_to":"3afb71cf_f6c9bead","updated":"2015-06-05 16:59:24.000000000","message":"Done","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":8475,"name":"AmitKumarDas","email":"amit.das@cloudbyte.com","username":"AmitKumarDas"},"change_message_id":"4beb80ecd530de6c66b4cc3bb86446fa0c4beb8a","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # Copy it using dd for now, we don\u0027t have real snapshots"},{"line_number":469,"context_line":"        volutils.copy_volume("},{"line_number":470,"context_line":"            self.local_path(origvol),"},{"line_number":471,"context_line":"            \"/dev/\" + metadata[\u0027metadata\u0027][self.MDSPACENAME],"},{"line_number":472,"context_line":"            snapvol[\u0027size\u0027] / units.Mi,"},{"line_number":473,"context_line":"            self.configuration.volume_dd_blocksize,"},{"line_number":474,"context_line":"            execute\u003dself._execute)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_b64b462b","line":471,"updated":"2015-06-05 05:22:03.000000000","message":"Use of metadata may be avoided, if provider id is used instead.","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"3e3bc1a95575cbeeae282d723dd3c9985a6c7c5c","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # Copy it using dd for now, we don\u0027t have real snapshots"},{"line_number":469,"context_line":"        volutils.copy_volume("},{"line_number":470,"context_line":"            self.local_path(origvol),"},{"line_number":471,"context_line":"            \"/dev/\" + metadata[\u0027metadata\u0027][self.MDSPACENAME],"},{"line_number":472,"context_line":"            snapvol[\u0027size\u0027] / units.Mi,"},{"line_number":473,"context_line":"            self.configuration.volume_dd_blocksize,"},{"line_number":474,"context_line":"            execute\u003dself._execute)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_2f0fe6e2","line":471,"in_reply_to":"3afb71cf_b64b462b","updated":"2015-06-05 16:59:24.000000000","message":"Done","commit_id":"f47522d1df5c32f01ae560a4614754de487a51a2"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4be73bfc7b78891902c7c0d1c16673196ca5db9e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    instances connected."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    VERSION \u003d \u00270.5.0\u0027"},{"line_number":84,"context_line":"    VGCCLUSTER \u003d \u0027vgc-cluster\u0027"},{"line_number":85,"context_line":"    SPACEGB \u003d units.G - 16 * units.M  # Workaround for shrinkage Bug 28320"},{"line_number":86,"context_line":"    BLOCKED \u003d \"BLOCKED\"  # 2  # Exit code when a command is blocked"}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_175c2d4a","line":83,"updated":"2015-06-06 17:09:36.000000000","message":"If this is the first version of the driver in Cinder, why not version it 1.0.0?","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"0a545562c1e3dd360545b8d86c522b8e4b531ede","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    instances connected."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    VERSION \u003d \u00270.5.0\u0027"},{"line_number":84,"context_line":"    VGCCLUSTER \u003d \u0027vgc-cluster\u0027"},{"line_number":85,"context_line":"    SPACEGB \u003d units.G - 16 * units.M  # Workaround for shrinkage Bug 28320"},{"line_number":86,"context_line":"    BLOCKED \u003d \"BLOCKED\"  # 2  # Exit code when a command is blocked"}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_f0f197ce","line":83,"in_reply_to":"3afb71cf_175c2d4a","updated":"2015-06-06 22:28:24.000000000","message":"Good eyes, this should be a 1.0.0 when released.  Updated in next patch.","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"0a545562c1e3dd360545b8d86c522b8e4b531ede","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.update_volume_stats()"},{"line_number":101,"context_line":"        # We store the hashed space name in the DB"},{"line_number":102,"context_line":"        self.db \u003d kwargs.get(\u0027db\u0027)"},{"line_number":103,"context_line":"        self.context \u003d None"},{"line_number":104,"context_line":"        self._vgc_host \u003d None"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _log_cli_err(self, err):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_b0baffdf","line":103,"updated":"2015-06-06 22:28:24.000000000","message":"db/context dead code from DB for metadata release, removed next upload.","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"0a545562c1e3dd360545b8d86c522b8e4b531ede","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def do_setup(self, context):"},{"line_number":224,"context_line":"        \"\"\"Stuff away the context, we need it for DB access later\"\"\""},{"line_number":225,"context_line":"        self.context \u003d context"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def _get_space_name(self, volume):"},{"line_number":228,"context_line":"        \"\"\"Pull name of /dev/\u003cspace\u003e from the provider_id\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_d0ee9beb","line":225,"updated":"2015-06-06 22:28:24.000000000","message":"Dead code, left over from using the DB for LUN\u003c-\u003evolume mapping.  Deleted next upload.","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4be73bfc7b78891902c7c0d1c16673196ca5db9e","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        params +\u003d [\u0027-N\u0027, str(volnet)]"},{"line_number":295,"context_line":"        params +\u003d [\u0027-s\u0027, str(volsize_g)]"},{"line_number":296,"context_line":"        params +\u003d [\u0027--redundancy\u0027,"},{"line_number":297,"context_line":"                   str(self.configuration.safe_get(\u0027hgst_redundancy\u0027))]"},{"line_number":298,"context_line":"        params +\u003d [\u0027--user\u0027,"},{"line_number":299,"context_line":"                   str(self.configuration.safe_get(\u0027hgst_space_user\u0027))]"},{"line_number":300,"context_line":"        params +\u003d [\u0027--group\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_9aa044f6","line":297,"updated":"2015-06-06 17:09:36.000000000","message":"is it ok that you get None?   I don\u0027t see any sort of validation on the conf vars that you are passing in here to make sure they are set to something.   They can all be None or empty from what I can tell.","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"0a545562c1e3dd360545b8d86c522b8e4b531ede","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        params +\u003d [\u0027-N\u0027, str(volnet)]"},{"line_number":295,"context_line":"        params +\u003d [\u0027-s\u0027, str(volsize_g)]"},{"line_number":296,"context_line":"        params +\u003d [\u0027--redundancy\u0027,"},{"line_number":297,"context_line":"                   str(self.configuration.safe_get(\u0027hgst_redundancy\u0027))]"},{"line_number":298,"context_line":"        params +\u003d [\u0027--user\u0027,"},{"line_number":299,"context_line":"                   str(self.configuration.safe_get(\u0027hgst_space_user\u0027))]"},{"line_number":300,"context_line":"        params +\u003d [\u0027--group\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_50e2ab04","line":297,"in_reply_to":"3afb71cf_9aa044f6","updated":"2015-06-06 22:28:24.000000000","message":"Missing/invalid parameters will cause catastrophic failure of the CLI, so None or invalid are a bad thing.  Added validation in the check_for_setup_error and a bunch of tests against it in next patch.","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"0a545562c1e3dd360545b8d86c522b8e4b531ede","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                \u0027data\u0027: hgst_properties}"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    def local_path(self, volume):"},{"line_number":507,"context_line":"        \"\"\"Query the DB to figure out the proper devnode\"\"\""},{"line_number":508,"context_line":"        return \"/dev/\" + self._get_space_name(volume)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def create_export(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3afb71cf_90bf03d0","line":507,"updated":"2015-06-06 22:28:24.000000000","message":"DB -\u003e provider_id","commit_id":"12cad8da57170f53895708581ad9adb4ced25096"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"d8374805d4825512e703038aaa2b701c2058d22a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                       \u0027storage_protocol\u0027: \u0027hgst\u0027,"},{"line_number":98,"context_line":"                       \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":99,"context_line":"                       \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":100,"context_line":"                       \u0027vendor_name\u0027: \u0027HGST\u0027}"},{"line_number":101,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":102,"context_line":"        self._stats[\u0027volume_backend_name\u0027] \u003d backend_name or \u0027hgst\u0027"},{"line_number":103,"context_line":"        self.update_volume_stats()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afb71cf_26081291","line":100,"updated":"2015-06-08 00:18:33.000000000","message":"Please use a trailing comma.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"c5b08c73ff53fcdbd98a5a0d92a03a1fa955cf7e"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"d4c8d9b700ac2498419b8486ee38cd8cddc27d89","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                       \u0027storage_protocol\u0027: \u0027hgst\u0027,"},{"line_number":98,"context_line":"                       \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":99,"context_line":"                       \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":100,"context_line":"                       \u0027vendor_name\u0027: \u0027HGST\u0027}"},{"line_number":101,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":102,"context_line":"        self._stats[\u0027volume_backend_name\u0027] \u003d backend_name or \u0027hgst\u0027"},{"line_number":103,"context_line":"        self.update_volume_stats()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afb71cf_e6479a75","line":100,"in_reply_to":"3afb71cf_26081291","updated":"2015-06-08 00:54:05.000000000","message":"Sure thing.  I\u0027m surprised PEP8 isn\u0027t catching this.","commit_id":"c5b08c73ff53fcdbd98a5a0d92a03a1fa955cf7e"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"d8374805d4825512e703038aaa2b701c2058d22a","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                self._execute(*params, run_as_root\u003dTrue)"},{"line_number":249,"context_line":"                # Cancel succeeded, the command was aborted"},{"line_number":250,"context_line":"                # Send initial exception up the stack"},{"line_number":251,"context_line":"                LOG.info(_LI(\"VGC-CLUSTER command blocked and cancelled.\"))"},{"line_number":252,"context_line":"                raise err"},{"line_number":253,"context_line":"            except Exception:"},{"line_number":254,"context_line":"                # The cancel failed, probably because the command was"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afb71cf_e638ba3f","line":251,"updated":"2015-06-08 00:18:33.000000000","message":"Would it help in debugging if you print name of the command which got cancelled? else this would just fill up the logs without any actionable input.","commit_id":"c5b08c73ff53fcdbd98a5a0d92a03a1fa955cf7e"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"d4c8d9b700ac2498419b8486ee38cd8cddc27d89","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                self._execute(*params, run_as_root\u003dTrue)"},{"line_number":249,"context_line":"                # Cancel succeeded, the command was aborted"},{"line_number":250,"context_line":"                # Send initial exception up the stack"},{"line_number":251,"context_line":"                LOG.info(_LI(\"VGC-CLUSTER command blocked and cancelled.\"))"},{"line_number":252,"context_line":"                raise err"},{"line_number":253,"context_line":"            except Exception:"},{"line_number":254,"context_line":"                # The cancel failed, probably because the command was"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afb71cf_a65ac24e","line":251,"in_reply_to":"3afb71cf_e638ba3f","updated":"2015-06-08 00:54:05.000000000","message":"Yes, definitely.  In this case we do have an error (tried to do something, but it blocked on something else so we successfully cancelled it).","commit_id":"c5b08c73ff53fcdbd98a5a0d92a03a1fa955cf7e"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"d8374805d4825512e703038aaa2b701c2058d22a","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            except Exception:"},{"line_number":254,"context_line":"                # The cancel failed, probably because the command was"},{"line_number":255,"context_line":"                # just completed.  That means it succeeded, so fall thru"},{"line_number":256,"context_line":"                LOG.info(_LI(\"VGC-CLUSTER command blocked but succeeded.\"))"},{"line_number":257,"context_line":"                pass"},{"line_number":258,"context_line":"        else:"},{"line_number":259,"context_line":"            # Some other error, just throw it up the chain"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afb71cf_c6401ea8","line":256,"updated":"2015-06-08 00:18:33.000000000","message":"ditto.","commit_id":"c5b08c73ff53fcdbd98a5a0d92a03a1fa955cf7e"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"d4c8d9b700ac2498419b8486ee38cd8cddc27d89","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            except Exception:"},{"line_number":254,"context_line":"                # The cancel failed, probably because the command was"},{"line_number":255,"context_line":"                # just completed.  That means it succeeded, so fall thru"},{"line_number":256,"context_line":"                LOG.info(_LI(\"VGC-CLUSTER command blocked but succeeded.\"))"},{"line_number":257,"context_line":"                pass"},{"line_number":258,"context_line":"        else:"},{"line_number":259,"context_line":"            # Some other error, just throw it up the chain"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afb71cf_a621a2b6","line":256,"in_reply_to":"3afb71cf_c6401ea8","updated":"2015-06-08 00:54:05.000000000","message":"Here there actually is no error, and the log.info will be removed as the sequence of operations in this path end with the cluster in the same state as if it worked immediately:  Submitted a request but got a BLOCKED response, so we try and cancel it, but can\u0027t cancel because by the time we attempt it, the command got unblocked and completed.","commit_id":"c5b08c73ff53fcdbd98a5a0d92a03a1fa955cf7e"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"064fa83caabb00789bee4b3e32addd11dd92c66e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                self._log_cli_err(err)"},{"line_number":253,"context_line":"                raise err"},{"line_number":254,"context_line":"            except Exception as err:"},{"line_number":255,"context_line":"                # The cancel failed because the command was just completed."},{"line_number":256,"context_line":"                # That means there was no failure, so continue with Cinder op"},{"line_number":257,"context_line":"                pass"},{"line_number":258,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_b3c67f47","line":255,"updated":"2015-06-08 03:13:11.000000000","message":"This assumes that cancel failed because the \"cancellable\" operation actually completed execution. Would there be cases where request-cancel genuinely failed (some processing error and by potentially leaving the original task in BLOCKED state), do you need to handle such cases or propagate the error up the stack ?","commit_id":"0919668cfdc17060c87558c37a4e3219b7d7a334"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"c11de5afe7b5e436c0b7314b0d953df07a24b5dc","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                self._log_cli_err(err)"},{"line_number":253,"context_line":"                raise err"},{"line_number":254,"context_line":"            except Exception as err:"},{"line_number":255,"context_line":"                # The cancel failed because the command was just completed."},{"line_number":256,"context_line":"                # That means there was no failure, so continue with Cinder op"},{"line_number":257,"context_line":"                pass"},{"line_number":258,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_f67f4564","line":255,"in_reply_to":"3afb71cf_b3c67f47","updated":"2015-06-08 03:53:32.000000000","message":"Good point, but I believe we\u0027re OK here.  The HGST Space-Cancel is a node-local operation, and, given the way it\u0027s implemented in the device driver we use, the only failure mode it can have at this point in the cinder code is \"Sorry, can\u0027t cancel because the request isn\u0027t in the queue anymore.\"   We\u0027re calling it from the same node the HGST Space operation was running on, so even our private storage net failing should not cause anything other than a cancel-request succeeded state here (which does pass the error up the stack in the try: portion).","commit_id":"0919668cfdc17060c87558c37a4e3219b7d7a334"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027Space network name to use for data transfer\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027hgst_storage_servers\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027os\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027Comma separated list of Space storage servers:devices.\u0027"},{"line_number":52,"context_line":"                    \u0027ex: os1_stor:gbd0,os2_stor:gbd0\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027hgst_redundancy\u0027,"},{"line_number":54,"context_line":"               default\u003d\u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_73ebfc13","line":51,"updated":"2015-06-10 02:24:24.000000000","message":"Need trailing space, otherwise when string is combined it will be \"devices.ex\".","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"f7de8560b0d3bab7a711246adf5b93b37eee64bd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027Space network name to use for data transfer\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027hgst_storage_servers\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027os\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027Comma separated list of Space storage servers:devices.\u0027"},{"line_number":52,"context_line":"                    \u0027ex: os1_stor:gbd0,os2_stor:gbd0\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027hgst_redundancy\u0027,"},{"line_number":54,"context_line":"               default\u003d\u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_5da7cdbc","line":51,"in_reply_to":"3afb71cf_73ebfc13","updated":"2015-06-10 17:18:47.000000000","message":"Oops, fixed the missing space.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.update_volume_stats()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _log_cli_err(self, err):"},{"line_number":107,"context_line":"        \"\"\"Dumps the full command output to a logfile in error cases\"\"\""},{"line_number":108,"context_line":"        LOG.error(_LE(\"CLI fail: \u0027%(cmd)s\u0027 \u003d %(code)s\\nout: %(stdout)s\\n\""},{"line_number":109,"context_line":"                      \"err: %(stderr)s\"),"},{"line_number":110,"context_line":"                  {\u0027cmd\u0027: str(err.cmd), \u0027code\u0027: str(err.exit_code),"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_73d2dc5d","line":107,"updated":"2015-06-10 02:24:24.000000000","message":"End one line docstrings with a period.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"f7de8560b0d3bab7a711246adf5b93b37eee64bd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.update_volume_stats()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _log_cli_err(self, err):"},{"line_number":107,"context_line":"        \"\"\"Dumps the full command output to a logfile in error cases\"\"\""},{"line_number":108,"context_line":"        LOG.error(_LE(\"CLI fail: \u0027%(cmd)s\u0027 \u003d %(code)s\\nout: %(stdout)s\\n\""},{"line_number":109,"context_line":"                      \"err: %(stderr)s\"),"},{"line_number":110,"context_line":"                  {\u0027cmd\u0027: str(err.cmd), \u0027code\u0027: str(err.exit_code),"}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_1d84b508","line":107,"in_reply_to":"3afb71cf_73d2dc5d","updated":"2015-06-10 17:18:47.000000000","message":"Went through and fixed a few additional docstrings like these per https://www.python.org/dev/peps/pep-0257/.  Wish --pep8 would get them.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"019443cc068ca1e6eb55a3a2245a9b1efb6d637f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        LOG.error(_LE(\"CLI fail: \u0027%(cmd)s\u0027 \u003d %(code)s\\nout: %(stdout)s\\n\""},{"line_number":109,"context_line":"                      \"err: %(stderr)s\"),"},{"line_number":110,"context_line":"                  {\u0027cmd\u0027: str(err.cmd), \u0027code\u0027: str(err.exit_code),"},{"line_number":111,"context_line":"                   \u0027stdout\u0027: str(err.stdout), \u0027stderr\u0027: str(err.stderr)})"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _find_vgc_host(self):"},{"line_number":114,"context_line":"        \"\"\"Finds vgc-cluster hostname for this box\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_d34ab025","line":111,"updated":"2015-06-10 02:24:24.000000000","message":"Don\u0027t explicitly cast to str. The logger will take care of converting it, including if the string has unicode characters that would cause an exception using str().","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"f7de8560b0d3bab7a711246adf5b93b37eee64bd","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        LOG.error(_LE(\"CLI fail: \u0027%(cmd)s\u0027 \u003d %(code)s\\nout: %(stdout)s\\n\""},{"line_number":109,"context_line":"                      \"err: %(stderr)s\"),"},{"line_number":110,"context_line":"                  {\u0027cmd\u0027: str(err.cmd), \u0027code\u0027: str(err.exit_code),"},{"line_number":111,"context_line":"                   \u0027stdout\u0027: str(err.stdout), \u0027stderr\u0027: str(err.stderr)})"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _find_vgc_host(self):"},{"line_number":114,"context_line":"        \"\"\"Finds vgc-cluster hostname for this box\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"3afb71cf_9da785a6","line":111,"in_reply_to":"3afb71cf_d34ab025","updated":"2015-06-10 17:18:47.000000000","message":"Didn\u0027t know that LOG would take care of typecasting.  Fixed here and one other spot for a LOG where a str() was used.","commit_id":"ed701110fbdbd53c3650d802315fc14a45789e83"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cc86a335d4817ba16d138134c2d7b20584fc6b04","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        params \u003d []"},{"line_number":156,"context_line":"        for server in servers:"},{"line_number":157,"context_line":"            params.append(\u0027-S\u0027)"},{"line_number":158,"context_line":"            params.append(str(server))"},{"line_number":159,"context_line":"        return params"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _make_space_name(self, name):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_bf290e9d","line":158,"updated":"2015-06-10 20:20:54.000000000","message":"Please, use six.text_type instead of str here and below","commit_id":"0f3defb01de34f89fdabe6947495c8a38010f7a5"},{"author":{"_account_id":15903,"name":"Earle F. Philhower, III","email":"earle.philhower.iii@hgst.com","username":"earlephilhower"},"change_message_id":"622161f5f976e75210b23a4354a1fd7cf9b98c1b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        params \u003d []"},{"line_number":156,"context_line":"        for server in servers:"},{"line_number":157,"context_line":"            params.append(\u0027-S\u0027)"},{"line_number":158,"context_line":"            params.append(str(server))"},{"line_number":159,"context_line":"        return params"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _make_space_name(self, name):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_2025fe5a","line":158,"in_reply_to":"3afb71cf_bf290e9d","updated":"2015-06-10 20:55:57.000000000","message":"Thanks, I\u0027d seen six.text_type used for exception messages but not for execute() parameters.  Let me update and run some tests to make sure that it doesn\u0027t break anything on our CLI.","commit_id":"0f3defb01de34f89fdabe6947495c8a38010f7a5"}]}
