)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     nikeshm \u003cNikesh.Mahalaka@dothill.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-27 12:23:11 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds FC Cinder driver suppport for DotHill Storage Arrays."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Also adding ISCSI cinder driver support for DotHill Storage Arrays."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7ad32947_763a70cf","line":7,"updated":"2015-04-27 14:14:07.000000000","message":"/suppport/support/","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds FC Cinder driver suppport for DotHill Storage Arrays."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Also adding ISCSI cinder driver support for DotHill Storage Arrays."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":"Implements: blueprint dothill-fc-cinder-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7ad32947_b67b687b","line":9,"updated":"2015-04-27 14:14:07.000000000","message":"Combine this in the headline so it\u0027s apparent this is two related drivers. Maybe something along the lines of:\n\nAdd Cinder driver for DotHill Storage Arrays\n\nTwo new drivers to support iSCSI and FC for DotHill arrays.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"}],"cinder/exception.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1b31c28e712634c9cc236c60f75d6383add47dd","unresolved":false,"context_lines":[{"line_number":1008,"context_line":""},{"line_number":1009,"context_line":"class DotHillNotTargetPortal(CinderException):"},{"line_number":1010,"context_line":"    message \u003d _(\"No active iscsi portals with supplied iscsi ips\")"},{"line_number":1011,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3acd31a7_1ca0b242","line":1011,"updated":"2015-05-01 13:34:42.000000000","message":"pep8 error here. Remove the extra blank line on the end.","commit_id":"360d0bcc75b938eb93a0196f0492c9e3c18b892c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d15c65b4d008f3179c3f191e78638617fe87fb07","unresolved":false,"context_lines":[{"line_number":662,"context_line":"class EvaluatorParseException(Exception):"},{"line_number":663,"context_line":"    message \u003d _(\"Error during evaluator parsing: %(reason)s\")"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"class ObjectActionError(CinderException):"},{"line_number":667,"context_line":"    msg_fmt \u003d _(\u0027Object action %(action)s failed because: %(reason)s\u0027)"},{"line_number":668,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5afe65bd_363ba19e","line":665,"updated":"2015-06-03 03:13:40.000000000","message":"Merge/rebase issue. Looks like you\u0027ve removed changes made in https://github.com/openstack/cinder/commit/4f63f7ff48c365e6cd1fe64630c92dafec41f0ce","commit_id":"7d4d329acddb293aeeed3c85de024bccbee19f59"}],"cinder/tests/test_dothill.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        m.read.side_effect \u003d [resp_login]"},{"line_number":153,"context_line":"        mock_url_open.return_value \u003d m"},{"line_number":154,"context_line":"        self.client.login()"},{"line_number":155,"context_line":"        self.assertEqual(self.client._session_key, session_key)"},{"line_number":156,"context_line":"        m.read.side_effect \u003d [resp_badlogin]"},{"line_number":157,"context_line":"        self.assertRaises(dothill.DotHillAuthenticationError,"},{"line_number":158,"context_line":"                          self.client.login)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_d6d4a448","line":155,"updated":"2015-04-27 14:14:07.000000000","message":"Please change to be (EXPECTED, ACTUAL) throughout.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"}],"cinder/volume/drivers/dothill/dothill_client.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DotHillConnectionError(Exception):"},{"line_number":29,"context_line":"    pass"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_d6d70422","line":28,"updated":"2015-04-27 14:14:07.000000000","message":"Shouldn\u0027t these three be in the exceptions.py file?","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            tree \u003d self._request(\"/show/volumecopy-status\")"},{"line_number":251,"context_line":"            return_code \u003d tree.findtext(\".//PROPERTY[@name\u003d\u0027return-code\u0027]\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            if return_code \u003d\u003d \u00270\u0027:"},{"line_number":254,"context_line":"                status \u003d tree.findtext(\".//PROPERTY[@name\u003d\u0027progress\u0027]\")"},{"line_number":255,"context_line":"                progress \u003d False"},{"line_number":256,"context_line":"                if status:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_36dbd81d","line":253,"updated":"2015-04-27 14:14:07.000000000","message":"Do you need to handle a case where return_code isn\u0027t \u00270\u0027 to prevent an infinite loop?","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                progress \u003d False"},{"line_number":256,"context_line":"                if status:"},{"line_number":257,"context_line":"                    progress \u003d True"},{"line_number":258,"context_line":"                    LOG.debug(\"Volume copy is in progress %s\" % status)"},{"line_number":259,"context_line":"                if not progress:"},{"line_number":260,"context_line":"                    LOG.debug(\"Volume copy completed %s\" % status)"},{"line_number":261,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_5623f405","line":258,"updated":"2015-04-27 14:14:07.000000000","message":"Please use , instead of % to pass status to the logger as an argument. Then the logger will take care of formatting the string if/when it is actually needed.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                    progress \u003d True"},{"line_number":258,"context_line":"                    LOG.debug(\"Volume copy is in progress %s\" % status)"},{"line_number":259,"context_line":"                if not progress:"},{"line_number":260,"context_line":"                    LOG.debug(\"Volume copy completed %s\" % status)"},{"line_number":261,"context_line":"                    break"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        time.sleep(5)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_362078f7","line":260,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":329,"context_line":"    def modify_volume_name(self, old_name, new_name):"},{"line_number":330,"context_line":"        self._request(\"/set/volume\", old_name, name\u003dnew_name)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def getVolumeSize(self, volume_name):"},{"line_number":333,"context_line":"        tree \u003d self._request(\"/show/volumes\", volume_name)"},{"line_number":334,"context_line":"        size \u003d tree.findtext(\".//PROPERTY[@name\u003d\u0027size-numeric\u0027]\")"},{"line_number":335,"context_line":"        return self._get_size(size)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_bc0ea9e3","line":332,"updated":"2015-04-27 14:14:07.000000000","message":"Should be get_volume_size.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0a3bd23a88ff7f02cd98493c4bb8f0960fe451c6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        hash_ \u003d md5(\"%s_%s\" % (self._login, self._password))"},{"line_number":46,"context_line":"        digest \u003d hash_.hexdigest()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        url \u003d self._base_url + \"/login/\" + digest"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            xml \u003d urllib2.urlopen(url).read()"},{"line_number":51,"context_line":"        except urllib2.URLError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5afe65bd_147aeb24","line":48,"updated":"2015-06-02 20:11:35.000000000","message":"Is this safe?  protocol\u003d\u0027http\u0027 above basically says this is passing plaintext user credentials over non-encrypted http?\n\n(Since the token can just be reused w/o actually unhashing it to the original login/password.)","commit_id":"6170bcdfcb6f3ddba81c6a2ca3ca64e51c54d381"},{"author":{"_account_id":16121,"name":"Nikesh","email":"Nikesh.Mahalaka@dothill.com","username":"nikeshm"},"change_message_id":"4895ff64ccd4700ad55b9bcb58f78dbbb042e159","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        hash_ \u003d md5(\"%s_%s\" % (self._login, self._password))"},{"line_number":46,"context_line":"        digest \u003d hash_.hexdigest()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        url \u003d self._base_url + \"/login/\" + digest"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            xml \u003d urllib2.urlopen(url).read()"},{"line_number":51,"context_line":"        except urllib2.URLError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5afe65bd_ed12dd61","line":48,"in_reply_to":"5afe65bd_147aeb24","updated":"2015-06-02 22:06:12.000000000","message":"Its default login mechanism in the array for http.","commit_id":"6170bcdfcb6f3ddba81c6a2ca3ca64e51c54d381"},{"author":{"_account_id":16121,"name":"Nikesh","email":"Nikesh.Mahalaka@dothill.com","username":"nikeshm"},"change_message_id":"58b25460812b66595ea2dddc0ee8ef61384e68e0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        hash_ \u003d md5(\"%s_%s\" % (self._login, self._password))"},{"line_number":46,"context_line":"        digest \u003d hash_.hexdigest()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        url \u003d self._base_url + \"/login/\" + digest"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            xml \u003d urllib2.urlopen(url).read()"},{"line_number":51,"context_line":"        except urllib2.URLError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5afe65bd_21ba3ec1","line":48,"in_reply_to":"5afe65bd_b0c55e8f","updated":"2015-06-03 00:31:00.000000000","message":"Added new configuration option to select http or https in dothill_common.py","commit_id":"6170bcdfcb6f3ddba81c6a2ca3ca64e51c54d381"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"43a6d21d79bb4c154dfd0cacaaa72f5864191f30","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        hash_ \u003d md5(\"%s_%s\" % (self._login, self._password))"},{"line_number":46,"context_line":"        digest \u003d hash_.hexdigest()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        url \u003d self._base_url + \"/login/\" + digest"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            xml \u003d urllib2.urlopen(url).read()"},{"line_number":51,"context_line":"        except urllib2.URLError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5afe65bd_b0c55e8f","line":48,"in_reply_to":"5afe65bd_ed12dd61","updated":"2015-06-02 22:17:33.000000000","message":"It looks like the common class never passes in the kwarg optional protocol, so this class is always stuck at http://\n\nThis would allow cleartext auth to go over the wire in http headers.\n\nIf your array doesn\u0027t support https://, then I suppose it\u0027s all you can do, but it would be best to allow https:// if it can support it.\n\nour driver forces the user to provide the prefix uri, which includes http:// or https://\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/hp/hp_3par_common.py#L78-L81","commit_id":"6170bcdfcb6f3ddba81c6a2ca3ca64e51c54d381"}],"cinder/volume/drivers/dothill/dothill_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.client_logout()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def client_login(self):"},{"line_number":79,"context_line":"        LOG.debug(\"Connecting to %s Array\" % self.vendor_name)"},{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            self.client.login()"},{"line_number":82,"context_line":"        except dothill.DotHillConnectionError as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_d99f37b3","line":79,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        except dothill.DotHillConnectionError as ex:"},{"line_number":83,"context_line":"            msg \u003d (_(\"Failed to connect to %(vendor_name)s Array %(host)s:\""},{"line_number":84,"context_line":"                     \" %(err)s\") % {\u0027vendor_name\u0027: self.vendor_name,"},{"line_number":85,"context_line":"                                    \u0027host\u0027: self.config.san_ip, \u0027err\u0027: ex})"},{"line_number":86,"context_line":"            LOG.error(msg)"},{"line_number":87,"context_line":"            raise exception.DotHillConnectionError(message\u003dmsg)"},{"line_number":88,"context_line":"        except dothill.DotHillAuthenticationError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_19b6cf3d","line":85,"updated":"2015-04-27 14:14:07.000000000","message":"Exceptions used in string formatting need to be wrapped in six.text_type() to prevent possible unicode errors.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def client_logout(self):"},{"line_number":107,"context_line":"        self.client.logout()"},{"line_number":108,"context_line":"        LOG.debug(\"Disconnected from %s Array\" % self.vendor_name)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _get_vol_name(self, volume_id):"},{"line_number":111,"context_line":"        volume_name \u003d self._encode_name(volume_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_7996e395","line":108,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.client_login()"},{"line_number":157,"context_line":"        # use base64 to encode the volume name (UUID is too long for DotHill)"},{"line_number":158,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":159,"context_line":"        LOG.debug(\"Create Volume (%(display_name)s: %(name)s %(id)s)\" %"},{"line_number":160,"context_line":"                  {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":161,"context_line":"                   \u0027name\u0027: volume[\u0027name\u0027], \u0027id\u0027: volume_name})"},{"line_number":162,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_59c1e77f","line":159,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                                                 self.backend_type)"},{"line_number":168,"context_line":"            return metadata"},{"line_number":169,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":170,"context_line":"            LOG.error(ex)"},{"line_number":171,"context_line":"            raise exception.Invalid(ex)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_79e70313","line":170,"updated":"2015-04-27 14:14:07.000000000","message":"Do not log an exception variable directly. Either format the exception into a message or use LOG.exception to have the exception information logged automatically along with a useful string:\n\nLOG.exception(_LE(\u0027Error creating volume %(name)s of size $(size)s\u0027), {\u0027name\u0027: volume_name, \u0027size\u0027: volume_size})","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        Make sure that the volume is not in use when trying to copy it."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        if volume[\u0027status\u0027] !\u003d \"available\" or \\"},{"line_number":194,"context_line":"           volume[\u0027attach_status\u0027] \u003d\u003d \"attached\":"},{"line_number":195,"context_line":"            msg \u003d _(\"Volume must be detached to perform a clone operation.\")"},{"line_number":196,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_d993b74e","line":193,"updated":"2015-04-27 14:14:07.000000000","message":"Please try to avoid \\ for line continuation and just wrap it in () to span multiple lines.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        if volume[\u0027status\u0027] !\u003d \"available\" or \\"},{"line_number":194,"context_line":"           volume[\u0027attach_status\u0027] \u003d\u003d \"attached\":"},{"line_number":195,"context_line":"            msg \u003d _(\"Volume must be detached to perform a clone operation.\")"},{"line_number":196,"context_line":"            LOG.error(msg)"},{"line_number":197,"context_line":"            raise exception.VolumeAttached(volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_b9e6bbe6","line":195,"updated":"2015-04-27 14:14:07.000000000","message":"msg only used in the LOG.error, so this needs _LE(). You should also get rid of the msg variable and just move the string directly in the LOG.error() call.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":207,"context_line":"        self._assert_source_detached(src_vref)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        LOG.debug(\"Cloning Volume %(source_id)s (%(dest_id)s)\" %"},{"line_number":210,"context_line":"                  {\u0027source_id\u0027: volume[\u0027source_volid\u0027],"},{"line_number":211,"context_line":"                   \u0027dest_id\u0027: volume[\u0027id\u0027]})"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_f9031375","line":209,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self.client.copy_volume(orig_name, dest_name, 0, self.backend_name)"},{"line_number":222,"context_line":"            return None"},{"line_number":223,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":224,"context_line":"            LOG.error(ex)"},{"line_number":225,"context_line":"            raise exception.Invalid(ex)"},{"line_number":226,"context_line":"        finally:"},{"line_number":227,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_19efefb1","line":224,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful, use LOG.exception to get the exception information in the log.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":230,"context_line":"        if self.backend_type \u003d\u003d \"realstor\" and self.backend_name in [\"A\", \"B\"]:"},{"line_number":231,"context_line":"            msg \u003d _(\u0027create volume from snapshot doesnot support\u0027"},{"line_number":232,"context_line":"                    \u0027for virtual pool A and B\u0027)"},{"line_number":233,"context_line":"            LOG.error(msg)"},{"line_number":234,"context_line":"            raise exception.InvalidInput(reason\u003d(msg))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_39498bd1","line":231,"updated":"2015-04-27 14:14:07.000000000","message":"/create/Create/\n/doesnot/does not/","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        LOG.debug(\"Creating Volume from snapshot %(source_id)s \""},{"line_number":239,"context_line":"                  \"(%(dest_id)s)\" %"},{"line_number":240,"context_line":"                  {\u0027source_id\u0027: snapshot[\u0027id\u0027], \u0027dest_id\u0027: volume[\u0027id\u0027]})"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        orig_name \u003d self._get_snap_name(snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_1946cfbf","line":239,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            self.client.copy_volume(orig_name, dest_name, 0, self.backend_name)"},{"line_number":247,"context_line":"            return None"},{"line_number":248,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":249,"context_line":"            LOG.error(ex)"},{"line_number":250,"context_line":"            raise exception.Invalid(ex)"},{"line_number":251,"context_line":"        finally:"},{"line_number":252,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_7926e317","line":249,"updated":"2015-04-27 14:14:07.000000000","message":"Redo LOG statement.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self.client_logout()"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def delete_volume(self, volume):"},{"line_number":255,"context_line":"        LOG.debug(\"Deleting Volume (%s)\" % volume[\u0027id\u0027])"},{"line_number":256,"context_line":"        if volume[\u0027name_id\u0027]:"},{"line_number":257,"context_line":"            volume_name \u003d self._get_vol_name(volume[\u0027name_id\u0027])"},{"line_number":258,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_59232706","line":255,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        try:"},{"line_number":263,"context_line":"            self.client.delete_volume(volume_name)"},{"line_number":264,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":265,"context_line":"            LOG.error(ex)"},{"line_number":266,"context_line":"            # if the volume wasn\u0027t found, ignore the error"},{"line_number":267,"context_line":"            if \u0027The volume was not found on this system.\u0027 in ex:"},{"line_number":268,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_191dafbd","line":265,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        except dothill.DotHillRequestError:"},{"line_number":307,"context_line":"            err \u003d (_(\"Unable to get stats for backend_name (%s)\") %"},{"line_number":308,"context_line":"                   self.backend_name)"},{"line_number":309,"context_line":"            LOG.error(err)"},{"line_number":310,"context_line":"            raise exception.Invalid(reason\u003derr)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        stats[\u0027pools\u0027].append(pool)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_b9591b91","line":309,"updated":"2015-04-27 14:14:07.000000000","message":"This might be better as LOG.exception(err) so you get the traceback information in the log.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                                          connector_element)"},{"line_number":331,"context_line":"            return data"},{"line_number":332,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":333,"context_line":"            LOG.error(ex)"},{"line_number":334,"context_line":"            raise exception.Invalid(ex)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def unmap_volume(self, volume, connector, connector_element):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_19e24fa0","line":333,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                                     connector,"},{"line_number":347,"context_line":"                                     connector_element)"},{"line_number":348,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":349,"context_line":"            LOG.error(ex)"},{"line_number":350,"context_line":"            raise exception.Invalid(ex)"},{"line_number":351,"context_line":"        finally:"},{"line_number":352,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_99ec1f91","line":349,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            return self.client.get_active_fc_target_ports()"},{"line_number":357,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":358,"context_line":"            LOG.error(ex)"},{"line_number":359,"context_line":"            raise exception.Invalid(ex)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def get_active_iscsi_target_iqns(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_798943ca","line":358,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        try:"},{"line_number":363,"context_line":"            return self.client.get_active_iscsi_target_iqns()"},{"line_number":364,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":365,"context_line":"            LOG.error(ex)"},{"line_number":366,"context_line":"            raise exception.Invalid(ex)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def get_active_iscsi_target_portals(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_3993cbfc","line":365,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":370,"context_line":"            return self.client.get_active_iscsi_target_portals("},{"line_number":371,"context_line":"                self.backend_type)"},{"line_number":372,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":373,"context_line":"            LOG.error(ex)"},{"line_number":374,"context_line":"            raise exception.Invalid(ex)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_19900fec","line":373,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            raise exception.Invalid(ex)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":377,"context_line":"        LOG.debug(\"Creating Snapshot from %(volume_id)s (%(snap_id)s)\" %"},{"line_number":378,"context_line":"                  {\u0027volume_id\u0027: snapshot[\u0027volume_id\u0027],"},{"line_number":379,"context_line":"                   \u0027snap_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":380,"context_line":"        if snapshot[\u0027volume\u0027][\u0027name_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_f962f315","line":377,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        try:"},{"line_number":388,"context_line":"            self.client.create_snapshot(vol_name, snap_name)"},{"line_number":389,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":390,"context_line":"            LOG.error(ex)"},{"line_number":391,"context_line":"            raise exception.Invalid(ex)"},{"line_number":392,"context_line":"        finally:"},{"line_number":393,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_19a7ef50","line":390,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":396,"context_line":"        snap_name \u003d self._get_snap_name(snapshot[\u0027id\u0027])"},{"line_number":397,"context_line":"        LOG.debug(\"Deleting Snapshot (%s)\" % snapshot[\u0027id\u0027])"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        self.client_login()"},{"line_number":400,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_9971bfe3","line":397,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        try:"},{"line_number":401,"context_line":"            self.client.delete_snapshot(snap_name)"},{"line_number":402,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":403,"context_line":"            LOG.error(ex)"},{"line_number":404,"context_line":"            # if the volume wasn\u0027t found, ignore the error"},{"line_number":405,"context_line":"            if \u0027The volume was not found on this system.\u0027 in ex:"},{"line_number":406,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_795ee346","line":403,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        old_size \u003d volume[\u0027size\u0027]"},{"line_number":417,"context_line":"        growth_size \u003d int(new_size) - old_size"},{"line_number":418,"context_line":"        LOG.debug(\"Extending Volume %(volume_name)s from %(old_size)s to \""},{"line_number":419,"context_line":"                  \"%(new_size)s, by %(growth_size)s GB.\" %"},{"line_number":420,"context_line":"                  {\u0027volume_name\u0027: volume_name, \u0027old_size\u0027: old_size,"},{"line_number":421,"context_line":"                   \u0027new_size\u0027: new_size, \u0027growth_size\u0027: growth_size})"},{"line_number":422,"context_line":"        self.client_login()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_1955af1c","line":419,"updated":"2015-04-27 14:14:07.000000000","message":"% \u003d\u003e ,","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        try:"},{"line_number":424,"context_line":"            self.client.extend_volume(volume_name, \"%dGB\" % growth_size)"},{"line_number":425,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":426,"context_line":"            LOG.error(ex)"},{"line_number":427,"context_line":"            raise exception.Invalid(ex)"},{"line_number":428,"context_line":"        finally:"},{"line_number":429,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_993f7fd6","line":426,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        try:"},{"line_number":433,"context_line":"            return self.client.get_chap_record(initiator_name)"},{"line_number":434,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":435,"context_line":"            LOG.error(ex)"},{"line_number":436,"context_line":"            raise exception.Invalid(ex)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def create_chap_record(self, initiator_name, chap_secret):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_592207bb","line":435,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        try:"},{"line_number":440,"context_line":"            self.client.create_chap_record(initiator_name, chap_secret)"},{"line_number":441,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":442,"context_line":"            LOG.error(ex)"},{"line_number":443,"context_line":"            raise exception.Invalid(ex)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def migrate_volume(self, volume, host):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_392f4ba3","line":442,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            source_name \u003d self._get_vol_name(volume[\u0027name_id\u0027])"},{"line_number":474,"context_line":"        else:"},{"line_number":475,"context_line":"            source_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":476,"context_line":"        # DotHill Array doesnot support duplicate names"},{"line_number":477,"context_line":"        dest_name \u003d \"m%s\" % source_name[1:]"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        self.client_login()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_5c10b54e","line":476,"updated":"2015-04-27 14:14:07.000000000","message":"/doesnot/[does not|doesn\u0027t]/","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            self.client.modify_volume_name(dest_name, source_name)"},{"line_number":484,"context_line":"            return (True, None)"},{"line_number":485,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":486,"context_line":"            LOG.error(ex)"},{"line_number":487,"context_line":"            raise exception.Invalid(ex)"},{"line_number":488,"context_line":"        finally:"},{"line_number":489,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_7c3a51cf","line":486,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            self.client.modify_volume_name(target_vol_name,"},{"line_number":507,"context_line":"                                           modify_target_vol_name)"},{"line_number":508,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":509,"context_line":"            LOG.error(ex)"},{"line_number":510,"context_line":"            raise exception.Invalid(ex)"},{"line_number":511,"context_line":"        finally:"},{"line_number":512,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_fc4c2178","line":509,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":524,"context_line":"            size \u003d self.client.getVolumeSize(target_vol_name)"},{"line_number":525,"context_line":"            return size"},{"line_number":526,"context_line":"        except dothill.DotHillRequestError as ex:"},{"line_number":527,"context_line":"            LOG.error(ex)"},{"line_number":528,"context_line":"            raise exception.Invalid(ex)"},{"line_number":529,"context_line":"        finally:"},{"line_number":530,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_9c5bed2e","line":527,"updated":"2015-04-27 14:14:07.000000000","message":"Log something useful.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1b31c28e712634c9cc236c60f75d6383add47dd","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                                                 self.backend_type)"},{"line_number":173,"context_line":"            return metadata"},{"line_number":174,"context_line":"        except exception.DotHillRequestError as ex:"},{"line_number":175,"context_line":"            err_msg \u003d _LE(\"Error %s \"), msg"},{"line_number":176,"context_line":"            LOG.exception(err_msg, msg_dict)"},{"line_number":177,"context_line":"            raise exception.Invalid(ex)"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3acd31a7_5703a30d","line":175,"updated":"2015-05-01 13:34:42.000000000","message":"If formatting directly you need to use % instead of ,.\n\nThis also ends up putting the untranslated debug string in there. That\u0027s probably OK, but it might be better to log the same msg_dict with a fully translated string.","commit_id":"360d0bcc75b938eb93a0196f0492c9e3c18b892c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1b31c28e712634c9cc236c60f75d6383add47dd","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.client.copy_volume(orig_name, dest_name, 0, self.backend_name)"},{"line_number":228,"context_line":"            return None"},{"line_number":229,"context_line":"        except exception.DotHillRequestError as ex:"},{"line_number":230,"context_line":"            err_msg \u003d _LE(\"Error %s\"), msg"},{"line_number":231,"context_line":"            LOG.exception(err_msg, msg_dict)"},{"line_number":232,"context_line":"            raise exception.Invalid(ex)"},{"line_number":233,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3acd31a7_170d2b37","line":230,"updated":"2015-05-01 13:34:42.000000000","message":"See notes from above.","commit_id":"360d0bcc75b938eb93a0196f0492c9e3c18b892c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1b31c28e712634c9cc236c60f75d6383add47dd","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        try:"},{"line_number":271,"context_line":"            self.client.delete_volume(volume_name)"},{"line_number":272,"context_line":"        except exception.DotHillRequestError as ex:"},{"line_number":273,"context_line":"            err_msg \u003d _LE(\"Error %s\"), msg"},{"line_number":274,"context_line":"            LOG.exception(err_msg, volume[\u0027id\u0027])"},{"line_number":275,"context_line":"            # if the volume wasn\u0027t found, ignore the error"},{"line_number":276,"context_line":"            if \u0027The volume was not found on this system.\u0027 in ex:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3acd31a7_d70fb32c","line":273,"updated":"2015-05-01 13:34:42.000000000","message":"Same.","commit_id":"360d0bcc75b938eb93a0196f0492c9e3c18b892c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a1b31c28e712634c9cc236c60f75d6383add47dd","unresolved":false,"context_lines":[{"line_number":398,"context_line":"            self.client.create_snapshot(vol_name, snap_name)"},{"line_number":399,"context_line":"        except exception.DotHillRequestError as ex:"},{"line_number":400,"context_line":"            err_msg \u003d _LE(\"Error %s\"), msg"},{"line_number":401,"context_line":"            LOG.exception(err_msg, msg_dict)"},{"line_number":402,"context_line":"            raise exception.Invalid(ex)"},{"line_number":403,"context_line":"        finally:"},{"line_number":404,"context_line":"            self.client_logout()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3acd31a7_d73693e6","line":401,"updated":"2015-05-01 13:34:42.000000000","message":"Same.","commit_id":"360d0bcc75b938eb93a0196f0492c9e3c18b892c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"11c118871903470ce1cc2706f9dbba40cddca87e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                                                 self.backend_type)"},{"line_number":173,"context_line":"            return metadata"},{"line_number":174,"context_line":"        except exception.DotHillRequestError as ex:"},{"line_number":175,"context_line":"            LOG.exception(_LE(msg), msg_dict)"},{"line_number":176,"context_line":"            raise exception.Invalid(ex)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_c87394e6","line":175,"updated":"2015-05-01 15:45:34.000000000","message":"Can\u0027t put localization markers on variables. They need to go on the string itself.\n\nNormally we don\u0027t localize debug level strings, but in this case since these are also being used for the LOG.exception I think the best approach is just to make the initial msg assignment be _LE().","commit_id":"394828cf3172bac21455441c6c30ee196b9f7738"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f93b8b730abe3a71b073afd3bf045d741dd95f7b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":161,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"},{"line_number":162,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":163,"context_line":"        msg \u003d _LE(\"Create Volume %(display_name)s %(name)s %(id)s %(size)s\")"},{"line_number":164,"context_line":"        msg_dict \u003d {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":165,"context_line":"                    \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":166,"context_line":"                    \u0027id\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_c8994d70","line":163,"updated":"2015-05-01 20:20:44.000000000","message":"_LE shouldn\u0027t be used with a debug message","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"82bdaaabca0e26bc624b3d83d9e165f0b6b39b1e","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":161,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"},{"line_number":162,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":163,"context_line":"        msg \u003d _LE(\"Create Volume %(display_name)s %(name)s %(id)s %(size)s\")"},{"line_number":164,"context_line":"        msg_dict \u003d {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":165,"context_line":"                    \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":166,"context_line":"                    \u0027id\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_0e9f4ab5","line":163,"in_reply_to":"3acd31a7_38648c20","updated":"2015-05-01 23:38:13.000000000","message":"Oh, I see. That\u0027s actually not valid. You can\u0027t decorate a variable. Translating didn\u0027t happen dynamically. The decorator needs to be on a static string.\n\nSo in this case, either the string that is used in the debug log needs to be translated, or there needs to be two separate strings.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3cccb20fa920f5f6ab17e8ed09ea3ed59d982e28","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":161,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"},{"line_number":162,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":163,"context_line":"        msg \u003d _LE(\"Create Volume %(display_name)s %(name)s %(id)s %(size)s\")"},{"line_number":164,"context_line":"        msg_dict \u003d {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":165,"context_line":"                    \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":166,"context_line":"                    \u0027id\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_38648c20","line":163,"in_reply_to":"3acd31a7_434f5ebd","updated":"2015-05-01 22:35:09.000000000","message":"no, what I was saying was don\u0027t _LE here, but do the _LE right before LOG.exception.   I don\u0027t see the reason of doing_LE for debug messages.   \n\nLOG.exception(_LE(msg), msg_dict)\n\ndone","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5cf6e4b6de423dece6b6ca5f75b4596d1262fb96","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":161,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"},{"line_number":162,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":163,"context_line":"        msg \u003d _LE(\"Create Volume %(display_name)s %(name)s %(id)s %(size)s\")"},{"line_number":164,"context_line":"        msg_dict \u003d {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":165,"context_line":"                    \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":166,"context_line":"                    \u0027id\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_434f5ebd","line":163,"in_reply_to":"3acd31a7_a38632d9","updated":"2015-05-01 21:03:20.000000000","message":"That\u0027s what I had him do here. Unless you mean having a duplicate string assignment in the exception handler that does the _LE in that case. But that\u0027s what I was trying to point out in the last comment - it doesn\u0027t really buy us much to do it that way and ends up allocating to string variables instead of the one.\n\nPersonally I would rather see the debug message translated than to have to clutter the code with redundant variables.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"774229407b69a7ddc60f75ca93fd42770205f7be","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":161,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"},{"line_number":162,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":163,"context_line":"        msg \u003d _LE(\"Create Volume %(display_name)s %(name)s %(id)s %(size)s\")"},{"line_number":164,"context_line":"        msg_dict \u003d {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":165,"context_line":"                    \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":166,"context_line":"                    \u0027id\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_c8d14dcf","line":163,"in_reply_to":"3acd31a7_c8994d70","updated":"2015-05-01 20:24:24.000000000","message":"See comment above this line. _LE was added here because it is also used for exception logging.\n\nThe alternative would be to duplicate the string, one non-decorated here for the debug logging and one in the exception handler that does get translated. The translators will need to translate the string in either case, so it doesn\u0027t really buy us anything.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"19d9dd3e73bb47f87ac42b762a80573d1e2cef5f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        volume_name \u003d self._get_vol_name(volume[\u0027id\u0027])"},{"line_number":161,"context_line":"        volume_size \u003d \"%dGB\" % volume[\u0027size\u0027]"},{"line_number":162,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":163,"context_line":"        msg \u003d _LE(\"Create Volume %(display_name)s %(name)s %(id)s %(size)s\")"},{"line_number":164,"context_line":"        msg_dict \u003d {\u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":165,"context_line":"                    \u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":166,"context_line":"                    \u0027id\u0027: volume_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_a38632d9","line":163,"in_reply_to":"3acd31a7_c8d14dcf","updated":"2015-05-01 21:00:16.000000000","message":"Why not wrap the msg prior to calling the LOG.exception ?","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"df64e1ded9b70400dc1867d26f76c111a84a90a2","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            LOG.error(msg)"},{"line_number":210,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":211,"context_line":"        self.get_volume_stats(True)"},{"line_number":212,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":213,"context_line":"        self._assert_source_detached(src_vref)"},{"line_number":214,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":215,"context_line":"        msg \u003d _LE(\"Cloning Volume %(source_id)s (%(dest_id)s)\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_981cc014","line":212,"updated":"2015-05-01 22:14:27.000000000","message":"Would it make sense to factor this into the space available that is reported to the scheduler?\n\nWe looked at a similar type of issue in our driver with regards to array limitations. My thought being that its not a very good user experience if they want to create a volume from snapshot or clone a volume and it goes to an error state because the scheduler chose this backend which didn\u0027t actually have enough space. If the scheduler is aware of this info it picks one that *can* actually do it, and everything keeps running as expected.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"c5a9c521f2c8d4b17f20667967cff665dbf08371","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            LOG.error(msg)"},{"line_number":210,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":211,"context_line":"        self.get_volume_stats(True)"},{"line_number":212,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":213,"context_line":"        self._assert_source_detached(src_vref)"},{"line_number":214,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":215,"context_line":"        msg \u003d _LE(\"Cloning Volume %(source_id)s (%(dest_id)s)\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_b5f416f2","line":212,"in_reply_to":"3acd31a7_86721aac","updated":"2015-05-04 01:54:34.000000000","message":"Hmm yea, good point Duncan, I think you are right that it wouldn\u0027t try and clone across backends (maybe something we could/should do in the future though?). So maybe this doesn\u0027t really matter for these operations and its fine to get all the way to this method before raising an error that there isn\u0027t enough space.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"340fa42500c7ea0fa6318b677809fe5e9f62d888","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            LOG.error(msg)"},{"line_number":210,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":211,"context_line":"        self.get_volume_stats(True)"},{"line_number":212,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":213,"context_line":"        self._assert_source_detached(src_vref)"},{"line_number":214,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":215,"context_line":"        msg \u003d _LE(\"Cloning Volume %(source_id)s (%(dest_id)s)\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_86721aac","line":212,"in_reply_to":"3acd31a7_981cc014","updated":"2015-05-03 07:29:17.000000000","message":"I\u0027m not sure we can clone across backends though, can we? And we certainly can\u0027t create snaps across backends, so I\u0027m not sure I entirely understand what is being suggested. I can entirely believe we can do better than the obvious, but there\u0027s certainly no contentious between drivers. Can you expand a little on exactly what you\u0027re suggesting, please?","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3cccb20fa920f5f6ab17e8ed09ea3ed59d982e28","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            LOG.error(msg)"},{"line_number":210,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":211,"context_line":"        self.get_volume_stats(True)"},{"line_number":212,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":213,"context_line":"        self._assert_source_detached(src_vref)"},{"line_number":214,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":215,"context_line":"        msg \u003d _LE(\"Cloning Volume %(source_id)s (%(dest_id)s)\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_f86df404","line":212,"in_reply_to":"3acd31a7_981cc014","updated":"2015-05-01 22:35:09.000000000","message":"good call here Patrick.  completely agree","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f93b8b730abe3a71b073afd3bf045d741dd95f7b","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":213,"context_line":"        self._assert_source_detached(src_vref)"},{"line_number":214,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":215,"context_line":"        msg \u003d _LE(\"Cloning Volume %(source_id)s (%(dest_id)s)\")"},{"line_number":216,"context_line":"        msg_dict \u003d {\u0027source_id\u0027: volume[\u0027source_volid\u0027],"},{"line_number":217,"context_line":"                    \u0027dest_id\u0027: volume[\u0027id\u0027], }"},{"line_number":218,"context_line":"        LOG.debug(msg, msg_dict)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_68f47986","line":215,"updated":"2015-05-01 20:20:44.000000000","message":"this doesn\u0027t make sense to use _LE for a debug message.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"df64e1ded9b70400dc1867d26f76c111a84a90a2","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            LOG.error(msg)"},{"line_number":241,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":242,"context_line":"        self.get_volume_stats(True)"},{"line_number":243,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":244,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":245,"context_line":"        msg \u003d _LE(\"Creating Volume from snapshot %(source_id)s (%(dest_id)s)\")"},{"line_number":246,"context_line":"        msg_dict \u003d {\u0027source_id\u0027: snapshot[\u0027id\u0027], \u0027dest_id\u0027: volume[\u0027id\u0027], }"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_38a24caf","line":243,"updated":"2015-05-01 22:14:27.000000000","message":"Same here as my comment above.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f93b8b730abe3a71b073afd3bf045d741dd95f7b","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.get_volume_stats(True)"},{"line_number":243,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":244,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":245,"context_line":"        msg \u003d _LE(\"Creating Volume from snapshot %(source_id)s (%(dest_id)s)\")"},{"line_number":246,"context_line":"        msg_dict \u003d {\u0027source_id\u0027: snapshot[\u0027id\u0027], \u0027dest_id\u0027: volume[\u0027id\u0027], }"},{"line_number":247,"context_line":"        LOG.debug(msg, msg_dict)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_082ce500","line":245,"updated":"2015-05-01 20:20:44.000000000","message":"don\u0027t use _LE for debug messages.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"340fa42500c7ea0fa6318b677809fe5e9f62d888","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        self.get_volume_stats(True)"},{"line_number":243,"context_line":"        self._assert_enough_space_for_copy(volume[\u0027size\u0027])"},{"line_number":244,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":245,"context_line":"        msg \u003d _LE(\"Creating Volume from snapshot %(source_id)s (%(dest_id)s)\")"},{"line_number":246,"context_line":"        msg_dict \u003d {\u0027source_id\u0027: snapshot[\u0027id\u0027], \u0027dest_id\u0027: volume[\u0027id\u0027], }"},{"line_number":247,"context_line":"        LOG.debug(msg, msg_dict)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_666a5eb5","line":245,"in_reply_to":"3acd31a7_082ce500","updated":"2015-05-03 07:29:17.000000000","message":"Again, it gets passed to LOG.exception too, so _LE is appropriate","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f93b8b730abe3a71b073afd3bf045d741dd95f7b","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def delete_volume(self, volume):"},{"line_number":262,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":263,"context_line":"        msg \u003d _LE(\"Deleting Volume %s\")"},{"line_number":264,"context_line":"        LOG.debug(msg, volume[\u0027id\u0027])"},{"line_number":265,"context_line":"        if volume[\u0027name_id\u0027]:"},{"line_number":266,"context_line":"            volume_name \u003d self._get_vol_name(volume[\u0027name_id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_c835cd46","line":263,"updated":"2015-05-01 20:20:44.000000000","message":"same","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"340fa42500c7ea0fa6318b677809fe5e9f62d888","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def delete_volume(self, volume):"},{"line_number":262,"context_line":"        # Using _LE marker for debug since it may be used for exception logging"},{"line_number":263,"context_line":"        msg \u003d _LE(\"Deleting Volume %s\")"},{"line_number":264,"context_line":"        LOG.debug(msg, volume[\u0027id\u0027])"},{"line_number":265,"context_line":"        if volume[\u0027name_id\u0027]:"},{"line_number":266,"context_line":"            volume_name \u003d self._get_vol_name(volume[\u0027name_id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_266466e2","line":263,"in_reply_to":"3acd31a7_c835cd46","updated":"2015-05-03 07:29:17.000000000","message":"same","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d17326390b093cb86f73800411a96a572a847fca","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            self.client.login()"},{"line_number":83,"context_line":"        except exception.DotHillConnectionError as ex:"},{"line_number":84,"context_line":"            msg \u003d _(\"Failed to connect to %(vendor_name)s Array %(host)s: \""},{"line_number":85,"context_line":"                    \" %(err)s\") % {\u0027vendor_name\u0027: self.vendor_name,"},{"line_number":86,"context_line":"                                   \u0027host\u0027: self.config.san_ip,"},{"line_number":87,"context_line":"                                   \u0027err\u0027: six.text_type(ex)}"},{"line_number":88,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_bd168a53","line":85,"updated":"2015-06-01 21:38:55.000000000","message":"Extra leading space here?","commit_id":"0117973cf82689fbc26fadedefe87fd14629edcb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d17326390b093cb86f73800411a96a572a847fca","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":233,"context_line":"        if self.backend_type \u003d\u003d \"realstor\" and self.backend_name in [\"A\", \"B\"]:"},{"line_number":234,"context_line":"            msg \u003d _(\u0027Create volume from snapshot does not support\u0027"},{"line_number":235,"context_line":"                    \u0027for virtual pool A and B.\u0027)"},{"line_number":236,"context_line":"            LOG.error(msg)"},{"line_number":237,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_7d7492ce","line":234,"updated":"2015-06-01 21:38:55.000000000","message":"Need trailing space so when string is combined it does end up \"supportfor\".","commit_id":"0117973cf82689fbc26fadedefe87fd14629edcb"}],"cinder/volume/drivers/dothill/dothill_fc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3d1bdc898a72fb07e3328d12e1973ffa0de311d9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def check_for_setup_error(self):"},{"line_number":50,"context_line":"        self._check_flags()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @utils.synchronized(LOCKER_NAME, external\u003dTrue)"},{"line_number":53,"context_line":"    def create_volume(self, volume):"},{"line_number":54,"context_line":"        return {\u0027metadata\u0027: self.common.create_volume(volume)}"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_5c6555df","line":52,"updated":"2015-04-27 14:14:07.000000000","message":"Do you need all of this locking? It concerns me a little.","commit_id":"a20da6653be2f7a84e251c0feb634b46d40ecda5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f93b8b730abe3a71b073afd3bf045d741dd95f7b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.common.delete_volume(volume)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @fczm_utils.AddFCZone"},{"line_number":69,"context_line":"    @utils.synchronized(LOCKER_NAME, external\u003dTrue)"},{"line_number":70,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":71,"context_line":"        self.common.client_login()"},{"line_number":72,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_e89e49b7","line":69,"updated":"2015-05-01 20:20:44.000000000","message":"I\u0027d suggest against using local file locks if at all possible.   This will cause issues in an active/active HA setup with Cinder.   We don\u0027t have an official policy yet against local file locks, but I would strongly encourage you to explore why you really need the locks and to avoid using them if at all possible.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f93b8b730abe3a71b073afd3bf045d741dd95f7b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def manage_existing_get_size(self, volume, existing_ref):"},{"line_number":137,"context_line":"        return self.common.manage_existing_get_size(volume, existing_ref)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @utils.synchronized(LOCKER_NAME, external\u003dTrue)"},{"line_number":140,"context_line":"    def unmanage(self, volume):"},{"line_number":141,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_28e32135","line":139,"updated":"2015-05-01 20:20:44.000000000","message":"I don\u0027t see the purpose of putting a local file lock around a function that simply does a pass.","commit_id":"8985e61bb216e63f8d3b16f8a01b53d0e0c01175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d17326390b093cb86f73800411a96a572a847fca","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class DotHillFCDriver(cinder.volume.driver.FibreChannelDriver):"},{"line_number":27,"context_line":"    VERSION \u003d \"0.1\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":30,"context_line":"        super(DotHillFCDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_f82ad07d","line":27,"updated":"2015-06-01 21:38:55.000000000","message":"Would it be better to make this 1.0? 0.1 makes it seem like this is an early beta version. Of course up to you how you want to version your driver.","commit_id":"0117973cf82689fbc26fadedefe87fd14629edcb"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"48481a50cbbfb34d1844d1b3d97bf0f83760d998","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":64,"context_line":"        self.common.client_login()"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            data \u003d {}"},{"line_number":67,"context_line":"            data[\u0027target_lun\u0027] \u003d self.common.map_volume(volume,"},{"line_number":68,"context_line":"                                                        connector,"},{"line_number":69,"context_line":"                                                        \u0027wwpns\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_f864104a","line":66,"updated":"2015-06-01 21:58:56.000000000","message":"I don\u0027t ever see an initiator_target_map ever being added to the data dictionary.  \n\nThis means that the Fibre Channel Zone Manager will never add a zone for this volume being attached.\n\nFor example,\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/hp/hp_3par_fc.py#L247","commit_id":"0117973cf82689fbc26fadedefe87fd14629edcb"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"16b23b235ff0d1a2f4f9c3aefab8b2b1698afe98","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @fczm_utils.RemoveFCZone"},{"line_number":82,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":83,"context_line":"        self.common.unmap_volume(volume, connector, \u0027wwpns\u0027)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":86,"context_line":"        stats \u003d self.common.get_volume_stats(refresh)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_38f9884e","line":83,"updated":"2015-06-01 22:00:37.000000000","message":"Also, you are not returning anything here.\n\nYou, need to return the initiator_target_map entry if and ONLY if, it\u0027s the last volume attached to the host.   This allows the Fibre Channel Zone Manager to remove the zone.\n\nFor example,\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/hp/hp_3par_fc.py#L278-L280","commit_id":"0117973cf82689fbc26fadedefe87fd14629edcb"}],"cinder/volume/drivers/dothill/dothill_iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d17326390b093cb86f73800411a96a572a847fca","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DotHillISCSIDriver(cinder.volume.driver.ISCSIDriver):"},{"line_number":30,"context_line":"    VERSION \u003d \"0.1\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":33,"context_line":"        super(DotHillISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_983abccc","line":30,"updated":"2015-06-01 21:38:55.000000000","message":"Same as comment in FC driver.","commit_id":"0117973cf82689fbc26fadedefe87fd14629edcb"}]}
