)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":9,"context_line":"It might happen that multiple cinder nodes/backends are trying to add volumes"},{"line_number":10,"context_line":"to the same target. In this situation, the driver can get an error trying to"},{"line_number":11,"context_line":"add a volume to a hlun just taken by other instance. This patch fix this"},{"line_number":12,"context_line":"avoiding cuncurrency using mutual exclusing and adds retries to the failed"},{"line_number":13,"context_line":"attempts to cover scenarios where multiple cinder hosts are used."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-bug: #1475007"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a50d1a3_d4fec46a","line":12,"updated":"2015-07-20 21:45:44.000000000","message":"Do you mean using \u0027mutually exclusive locks\u0027 here?","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"80bda2d24adda68e87472d29672353812887dadc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"It might happen that multiple cinder nodes/backends are trying to add volumes"},{"line_number":10,"context_line":"to the same target. In this situation, the driver can get an error trying to"},{"line_number":11,"context_line":"add a volume to a hlun just taken by other instance. This patch fix this"},{"line_number":12,"context_line":"avoiding cuncurrency using mutual exclusing and adds retries to the failed"},{"line_number":13,"context_line":"attempts to cover scenarios where multiple cinder hosts are used."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-bug: #1475007"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_222df1fd","line":12,"updated":"2015-07-22 20:05:56.000000000","message":"s/cuncurrency/concurrency/\n\ns/exclusing/exclusion/","commit_id":"e3d9b39662635324f8acd54c8ff30863208cae09"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"583958abd6f844b7c53f36f2a90e79b8af33d91c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"It might happen that multiple cinder nodes/backends are trying to add volumes"},{"line_number":10,"context_line":"to the same target. In this situation, the driver can get an error trying to"},{"line_number":11,"context_line":"add a volume to a hlun just taken by other instance. This patch fix this"},{"line_number":12,"context_line":"avoiding cuncurrency using mutual exclusing and adds retries to the failed"},{"line_number":13,"context_line":"attempts to cover scenarios where multiple cinder hosts are used."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-bug: #1475007"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_4bf7ee8a","line":12,"in_reply_to":"3a50d1a3_222df1fd","updated":"2015-07-23 01:50:27.000000000","message":"Done","commit_id":"e3d9b39662635324f8acd54c8ff30863208cae09"},{"author":{"_account_id":16973,"name":"Skyler Berg","email":"skylertheberg@gmail.com","username":"sberg"},"change_message_id":"99a3deb686c7d90aea951b2fd6de1fb454ef90f1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix concurrent attaches on HNAS iSCSI driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It might happen that multiple cinder nodes/backends are trying to add volumes"},{"line_number":10,"context_line":"to the same target. In this situation, the driver can get an error trying to"},{"line_number":11,"context_line":"add a volume to a hlun just taken by other instance. This patch fix this"},{"line_number":12,"context_line":"avoiding concurrency using mutual exclusion and adds retries to the failed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a50d1a3_29bcbf04","line":9,"updated":"2015-07-29 18:34:44.000000000","message":"Commit message body should be wrapped at 72 characters rather than 80.","commit_id":"4a3bb590828e83887464d3f601cd4bf1c32c0feb"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a68d89fc20593a53fb846ee82996f53b9748a3a1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix concurrent attaches on HNAS iSCSI driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"It might happen that multiple cinder nodes/backends are trying to add volumes"},{"line_number":10,"context_line":"to the same target. In this situation, the driver can get an error trying to"},{"line_number":11,"context_line":"add a volume to a hlun just taken by other instance. This patch fix this"},{"line_number":12,"context_line":"avoiding concurrency using mutual exclusion and adds retries to the failed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a50d1a3_416f9f5f","line":9,"in_reply_to":"3a50d1a3_29bcbf04","updated":"2015-07-29 19:43:02.000000000","message":"Done","commit_id":"4a3bb590828e83887464d3f601cd4bf1c32c0feb"}],"cinder/exception.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"00c088ab110ce462c84f13b29e8035ac68f75436","unresolved":false,"context_lines":[{"line_number":978,"context_line":"    code \u003d 405"},{"line_number":979,"context_line":""},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"class HNASConnError(CinderException):"},{"line_number":982,"context_line":"    message \u003d _(\"%(message)s\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_994da19b","line":981,"updated":"2015-07-27 15:27:22.000000000","message":"This exception doesn\u0027t seem to add much value. Is it really needed?","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6819a4ecbf0235e7f265aefc5ea68202b1d201a8","unresolved":false,"context_lines":[{"line_number":978,"context_line":"    code \u003d 405"},{"line_number":979,"context_line":""},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"class HNASConnError(CinderException):"},{"line_number":982,"context_line":"    message \u003d _(\"%(message)s\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_0aab6ed7","line":981,"in_reply_to":"3a50d1a3_994da19b","updated":"2015-07-27 16:55:09.000000000","message":"I think is the same value of the exception added by the other drivers above (e.g XtremIOAlreadyMappedError). Honestly, I agree with you I think that all drivers should share the same set of exceptions as there are a lot of exceptions that has the same meaning e.g DotHillConnectionError, HNASConnError, SwiftConnectionFailed, but I didn\u0027t find any other proper way to to this, so I followed the standard used. Do you have any suggestion of what is a better option?","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":16973,"name":"Skyler Berg","email":"skylertheberg@gmail.com","username":"sberg"},"change_message_id":"99a3deb686c7d90aea951b2fd6de1fb454ef90f1","unresolved":false,"context_lines":[{"line_number":986,"context_line":"    message \u003d _(\"Operation not supported: %(operation)s.\")"},{"line_number":987,"context_line":"    code \u003d 405"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"class HNASConnError(CinderException):"},{"line_number":991,"context_line":"    message \u003d _(\"%(message)s\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_e927b7b3","line":989,"updated":"2015-07-29 18:34:44.000000000","message":"To be more consistent with other drivers, you could put:\n\n # Hitachi HNAS drivers\n\nYou could also move this section just below the other Hitachi driver exceptions.","commit_id":"4a3bb590828e83887464d3f601cd4bf1c32c0feb"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a68d89fc20593a53fb846ee82996f53b9748a3a1","unresolved":false,"context_lines":[{"line_number":986,"context_line":"    message \u003d _(\"Operation not supported: %(operation)s.\")"},{"line_number":987,"context_line":"    code \u003d 405"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"class HNASConnError(CinderException):"},{"line_number":991,"context_line":"    message \u003d _(\"%(message)s\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_81792731","line":989,"in_reply_to":"3a50d1a3_e927b7b3","updated":"2015-07-29 19:43:02.000000000","message":"Done","commit_id":"4a3bb590828e83887464d3f601cd4bf1c32c0feb"}],"cinder/tests/unit/test_hitachi_hnas_backend.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"f022398c46ba0869dd120cd62b5710fc57834c4c","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"HNAS_RESULT21 \u003d \"Target created successfully.\""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"HNAS_RESULT22 \u003d \"Failed to establish SSC connection\""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"HNAS_CMDS \u003d {"},{"line_number":201,"context_line":"    (\u0027ssh\u0027, \u00270.0.0.0\u0027, \u0027supervisor\u0027, \u0027supervisor\u0027, \u0027evsfs\u0027, \u0027list\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_890f9a87","line":198,"updated":"2015-07-27 13:24:56.000000000","message":"\".\" at EOL","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"d9a7220ef521c8afe770ddf5eadc7880734aba24","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"HNAS_RESULT21 \u003d \"Target created successfully.\""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"HNAS_RESULT22 \u003d \"Failed to establish SSC connection\""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"HNAS_CMDS \u003d {"},{"line_number":201,"context_line":"    (\u0027ssh\u0027, \u00270.0.0.0\u0027, \u0027supervisor\u0027, \u0027supervisor\u0027, \u0027evsfs\u0027, \u0027list\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_6a7f9d66","line":198,"in_reply_to":"3a50d1a3_890f9a87","updated":"2015-07-27 13:42:44.000000000","message":"This actually need to be like this. Is the output of the storage! And, yes, the other results ends with the \u0027.\u0027. :/","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"}],"cinder/volume/drivers/hitachi/hnas_backend.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                            \u0027Failed to establish SSC connection\u0027 in e.stderr):"},{"line_number":69,"context_line":"                        random.seed()"},{"line_number":70,"context_line":"                        sleep \u003d random.randint(0, 3) / 1000.0"},{"line_number":71,"context_line":"                        time.sleep(sleep)"},{"line_number":72,"context_line":"                        LOG.warning(_LW(\"SSC connection failed! Retrying \""},{"line_number":73,"context_line":"                                        \"%(retr)d more times\"),"},{"line_number":74,"context_line":"                                    {\u0027retr\u0027: (HNAS_SSC_RETRIES - retry)})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_f4b740f3","line":71,"updated":"2015-07-20 21:45:44.000000000","message":"Not a good idea to just have sleeps in the code.  A fixed interval looping call is a much safer approach.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ef82f6f1126e1efaea2f7515380d5b1b3f8a3e9c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                            \u0027Failed to establish SSC connection\u0027 in e.stderr):"},{"line_number":69,"context_line":"                        random.seed()"},{"line_number":70,"context_line":"                        sleep \u003d random.randint(0, 3) / 1000.0"},{"line_number":71,"context_line":"                        time.sleep(sleep)"},{"line_number":72,"context_line":"                        LOG.warning(_LW(\"SSC connection failed! Retrying \""},{"line_number":73,"context_line":"                                        \"%(retr)d more times\"),"},{"line_number":74,"context_line":"                                    {\u0027retr\u0027: (HNAS_SSC_RETRIES - retry)})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_3aed9125","line":71,"in_reply_to":"3a50d1a3_f4b740f3","updated":"2015-07-20 22:41:21.000000000","message":"Can you show me any example? I don\u0027t know how the fixed interval looping works but, I used a fixed sleep time (sleep \u003d retry ** 2) but its not efficient to solve the problem. All concurrent retries happen in the same time and collides in all retries.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                        sleep \u003d random.randint(0, 3) / 1000.0"},{"line_number":71,"context_line":"                        time.sleep(sleep)"},{"line_number":72,"context_line":"                        LOG.warning(_LW(\"SSC connection failed! Retrying \""},{"line_number":73,"context_line":"                                        \"%(retr)d more times\"),"},{"line_number":74,"context_line":"                                    {\u0027retr\u0027: (HNAS_SSC_RETRIES - retry)})"},{"line_number":75,"context_line":"                    else:"},{"line_number":76,"context_line":"                        raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_f4ae6097","line":73,"updated":"2015-07-20 21:45:44.000000000","message":"Need \u0027.\u0027 at EOL.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                in e.stderr):"},{"line_number":119,"context_line":"                            random.seed()"},{"line_number":120,"context_line":"                            sleep \u003d random.randint(0, 3) / 1000.0"},{"line_number":121,"context_line":"                            time.sleep(sleep)"},{"line_number":122,"context_line":"                            LOG.warning(_LW(\"SSC connection failed! Retrying \""},{"line_number":123,"context_line":"                                            \"%(retr)d more times\"),"},{"line_number":124,"context_line":"                                        {\u0027retr\u0027: (HNAS_SSC_RETRIES - retry)})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_b4ca186d","line":121,"updated":"2015-07-20 21:45:44.000000000","message":"Same comment here.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                            sleep \u003d random.randint(0, 3) / 1000.0"},{"line_number":121,"context_line":"                            time.sleep(sleep)"},{"line_number":122,"context_line":"                            LOG.warning(_LW(\"SSC connection failed! Retrying \""},{"line_number":123,"context_line":"                                            \"%(retr)d more times\"),"},{"line_number":124,"context_line":"                                        {\u0027retr\u0027: (HNAS_SSC_RETRIES - retry)})"},{"line_number":125,"context_line":"                        else:"},{"line_number":126,"context_line":"                            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_14a2ecae","line":123,"updated":"2015-07-20 21:45:44.000000000","message":"Need \u0027.\u0027 at eol.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"80bda2d24adda68e87472d29672353812887dadc","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            # Direct connection via ssc"},{"line_number":58,"context_line":"            args \u003d (cmd, \u0027-u\u0027, user, \u0027-p\u0027, pw, ip0) + args"},{"line_number":59,"context_line":"            retry \u003d 0"},{"line_number":60,"context_line":"            while retry \u003c HNAS_SSC_RETRIES:"},{"line_number":61,"context_line":"                retry +\u003d 1"},{"line_number":62,"context_line":"                try:"},{"line_number":63,"context_line":"                    out, err \u003d utils.execute(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_5d49fe5e","line":60,"updated":"2015-07-22 20:05:56.000000000","message":"You can use the @utils.retry decorator and avoid this roll-your own retry logic (which is also effectively copy-and-pasted into multiple locations).  See:\n\n$ grep -R @utils.retry  cinder/volume/.\ncinder/volume/./drivers/datera.py:    @utils.retry(exception.VolumeDriverException, retries\u003d3)\ncinder/volume/./drivers/dell/dell_storagecenter_api.py:    @utils.retry(exceptions\u003d(requests.ConnectionError, ))\ncinder/volume/./drivers/dell/dell_storagecenter_api.py:    @utils.retry(exceptions\u003d(requests.ConnectionError, ))\ncinder/volume/./drivers/dell/dell_storagecenter_api.py:    @utils.retry(exceptions\u003d(requests.ConnectionError, ))\ncinder/volume/./drivers/dell/dell_storagecenter_api.py:    @utils.retry(exceptions\u003d(requests.ConnectionError, ))\ncinder/volume/./drivers/pure.py:    @utils.retry(exception.PureDriverException, retries\u003d3)\ncinder/volume/./drivers/rbd.py:    @utils.retry(exception.VolumeBackendAPIException,\ncinder/volume/./targets/tgt.py:    @utils.retry(putils.ProcessExecutionError)","commit_id":"e3d9b39662635324f8acd54c8ff30863208cae09"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"583958abd6f844b7c53f36f2a90e79b8af33d91c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            # Direct connection via ssc"},{"line_number":58,"context_line":"            args \u003d (cmd, \u0027-u\u0027, user, \u0027-p\u0027, pw, ip0) + args"},{"line_number":59,"context_line":"            retry \u003d 0"},{"line_number":60,"context_line":"            while retry \u003c HNAS_SSC_RETRIES:"},{"line_number":61,"context_line":"                retry +\u003d 1"},{"line_number":62,"context_line":"                try:"},{"line_number":63,"context_line":"                    out, err \u003d utils.execute(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_6b342a49","line":60,"in_reply_to":"3a50d1a3_5d49fe5e","updated":"2015-07-23 01:50:27.000000000","message":"Done","commit_id":"e3d9b39662635324f8acd54c8ff30863208cae09"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"00c088ab110ce462c84f13b29e8035ac68f75436","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            except putils.ProcessExecutionError as e:"},{"line_number":66,"context_line":"                if \u0027Failed to establish SSC connection\u0027 in e.stderr:"},{"line_number":67,"context_line":"                    LOG.debug(\"SSC connection error!\")"},{"line_number":68,"context_line":"                    raise exception.HNASConnError(\"Failed to establish SSC \""},{"line_number":69,"context_line":"                                                  \"connection.\")"},{"line_number":70,"context_line":"                else:"},{"line_number":71,"context_line":"                    raise putils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_f90ce543","line":68,"updated":"2015-07-27 15:27:22.000000000","message":"Should have _() translation marker.","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"10d5f0262f1f67a1eee87f07fa36e8e51a163d22","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            except putils.ProcessExecutionError as e:"},{"line_number":66,"context_line":"                if \u0027Failed to establish SSC connection\u0027 in e.stderr:"},{"line_number":67,"context_line":"                    LOG.debug(\"SSC connection error!\")"},{"line_number":68,"context_line":"                    raise exception.HNASConnError(\"Failed to establish SSC \""},{"line_number":69,"context_line":"                                                  \"connection.\")"},{"line_number":70,"context_line":"                else:"},{"line_number":71,"context_line":"                    raise putils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_0acdae5c","line":68,"in_reply_to":"3a50d1a3_aabefafc","updated":"2015-07-27 17:01:44.000000000","message":"Ah, that\u0027s really wrong then. The translators can\u0027t translate something at runtime. That\u0027s part of my issue with that exception declaration. It doesn\u0027t even add extra clarity by having more text. The text passed in needs to be translated.","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6819a4ecbf0235e7f265aefc5ea68202b1d201a8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            except putils.ProcessExecutionError as e:"},{"line_number":66,"context_line":"                if \u0027Failed to establish SSC connection\u0027 in e.stderr:"},{"line_number":67,"context_line":"                    LOG.debug(\"SSC connection error!\")"},{"line_number":68,"context_line":"                    raise exception.HNASConnError(\"Failed to establish SSC \""},{"line_number":69,"context_line":"                                                  \"connection.\")"},{"line_number":70,"context_line":"                else:"},{"line_number":71,"context_line":"                    raise putils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_aabefafc","line":68,"in_reply_to":"3a50d1a3_f90ce543","updated":"2015-07-27 16:55:09.000000000","message":"This is translated inside the exception.\nmessage \u003d _(\"%(message)s\")","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"00c088ab110ce462c84f13b29e8035ac68f75436","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                except putils.ProcessExecutionError as e:"},{"line_number":109,"context_line":"                    if \u0027Failed to establish SSC connection\u0027 in e.stderr:"},{"line_number":110,"context_line":"                        LOG.debug(\"SSC connection error!\")"},{"line_number":111,"context_line":"                        raise exception.HNASConnError(\"Failed to establish \""},{"line_number":112,"context_line":"                                                      \"SSC connection.\")"},{"line_number":113,"context_line":"                    else:"},{"line_number":114,"context_line":"                        raise putils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_84ff7800","line":111,"updated":"2015-07-27 15:27:22.000000000","message":"Same.","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6819a4ecbf0235e7f265aefc5ea68202b1d201a8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                except putils.ProcessExecutionError as e:"},{"line_number":109,"context_line":"                    if \u0027Failed to establish SSC connection\u0027 in e.stderr:"},{"line_number":110,"context_line":"                        LOG.debug(\"SSC connection error!\")"},{"line_number":111,"context_line":"                        raise exception.HNASConnError(\"Failed to establish \""},{"line_number":112,"context_line":"                                                      \"SSC connection.\")"},{"line_number":113,"context_line":"                    else:"},{"line_number":114,"context_line":"                        raise putils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_2a418a0b","line":111,"in_reply_to":"3a50d1a3_84ff7800","updated":"2015-07-27 16:55:09.000000000","message":"This is translated inside the exception. message \u003d _(\"%(message)s\")","commit_id":"79914bd7e98c47075252e585dea92c3714a8ed11"}],"cinder/volume/drivers/hitachi/hnas_iscsi.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":598,"context_line":"                if retry \u003c ISCSI_ATTACH_RETRIES:"},{"line_number":599,"context_line":"                    random.seed()"},{"line_number":600,"context_line":"                    sleep \u003d random.randint(0, 3) / 1000.0"},{"line_number":601,"context_line":"                    time.sleep(sleep)"},{"line_number":602,"context_line":"                    LOG.warning(_LW(\"Target collision! Retrying %(retr)d \""},{"line_number":603,"context_line":"                                    \"more times\"),"},{"line_number":604,"context_line":"                                {\u0027retr\u0027: (ISCSI_ATTACH_RETRIES - retry)})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_f49c205f","line":601,"updated":"2015-07-20 21:45:44.000000000","message":"Suggest looping call here as well.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1ff6f53f74ec4b08a3a59e2248e5a858903bf276","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                                    \"more times\"),"},{"line_number":604,"context_line":"                                {\u0027retr\u0027: (ISCSI_ATTACH_RETRIES - retry)})"},{"line_number":605,"context_line":"                else:"},{"line_number":606,"context_line":"                    msg \u003d _(\"Error attaching volume %s.\""},{"line_number":607,"context_line":"                            \"Target limit might be reached!\") % volume[\u0027id\u0027]"},{"line_number":608,"context_line":"                    raise exception.ISCSITargetAttachFailed(message\u003dmsg)"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_1490ac42","line":606,"updated":"2015-07-20 21:45:44.000000000","message":"Need space at EOL.","commit_id":"58f712c3a9e7ab8ea7ecfa2e2f7b385c7ac54227"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7e01c08a29be6fe36b88416d4fea7103d39437c3","unresolved":false,"context_lines":[{"line_number":156,"context_line":"class HDSISCSIDriver(driver.ISCSIDriver):"},{"line_number":157,"context_line":"    \"\"\"HDS HNAS volume driver."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    Version 1.0.0: Initial driver version"},{"line_number":160,"context_line":"    Version 2.2.0:  Added support to SSH authentication"},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_e4759997","line":159,"updated":"2015-07-29 19:52:50.000000000","message":"Looks like this hasn\u0027t really been kept up, but do you want to update the version history for the new version?","commit_id":"a95fef70b407a400c27195bd1cfbf09858511e9f"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"0268eca6c943f9840fe25094b69b497b433f2a5c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"class HDSISCSIDriver(driver.ISCSIDriver):"},{"line_number":157,"context_line":"    \"\"\"HDS HNAS volume driver."},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    Version 1.0.0: Initial driver version"},{"line_number":160,"context_line":"    Version 2.2.0:  Added support to SSH authentication"},{"line_number":161,"context_line":"    \"\"\""},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_00985b69","line":159,"in_reply_to":"3a50d1a3_e4759997","updated":"2015-07-31 11:55:45.000000000","message":"Good point! I added the changes in another PS.","commit_id":"a95fef70b407a400c27195bd1cfbf09858511e9f"}]}
