)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eedae5015a5decfcfd7fd13012a1090f2a579bea","unresolved":false,"context_lines":[{"line_number":7,"context_line":"EMC VMAX - Operations and timeout issues"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If a volume operation e.g create, delete, expand, etc were to"},{"line_number":10,"context_line":"timeout without fulling completing then we were not appropriately"},{"line_number":11,"context_line":"catching the error with the appropriate rc (return code) or"},{"line_number":12,"context_line":"errordesc (Error description). This new method does an additional"},{"line_number":13,"context_line":"check to appropriately capture the status of the job i.e. did it"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1af94dfe_f3dc8b1a","line":10,"updated":"2016-03-15 15:08:15.000000000","message":"s/fulling/fully","commit_id":"eaef2fc8018c024743f1d0ade8e43b56bce05894"}],"cinder/tests/unit/test_emc_vmax.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7a8a4d13ad0f659759dbb50637c941b2b7763926","unresolved":false,"context_lines":[{"line_number":1161,"context_line":"            jobinstance[\u0027JobState\u0027] \u003d 7"},{"line_number":1162,"context_line":"            jobinstance[\u0027ErrorCode\u0027] \u003d 0"},{"line_number":1163,"context_line":"            jobinstance[\u0027ErrorDescription\u0027] \u003d None"},{"line_number":1164,"context_line":"            jobinstance[\u0027OperationalStatus\u0027] \u003d (2L, 17L)"},{"line_number":1165,"context_line":"        return jobinstance"},{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"    def _getinstance_policycapabilities(self, policycapabilitypath):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_36df940e","line":1164,"updated":"2016-02-06 02:35:27.000000000","message":"There is no \"long\" type in Python 34.  There\u0027s only \"int\".  That\u0027s why this failed python 34 unit tests.","commit_id":"1fbe9671e98ca8211a28abb8a357d8e043b6f38f"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"88cd50d8041c34a4e27b37cfd91ca370c681d474","unresolved":false,"context_lines":[{"line_number":1161,"context_line":"            jobinstance[\u0027JobState\u0027] \u003d 7"},{"line_number":1162,"context_line":"            jobinstance[\u0027ErrorCode\u0027] \u003d 0"},{"line_number":1163,"context_line":"            jobinstance[\u0027ErrorDescription\u0027] \u003d None"},{"line_number":1164,"context_line":"            jobinstance[\u0027OperationalStatus\u0027] \u003d (2L, 17L)"},{"line_number":1165,"context_line":"        return jobinstance"},{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"    def _getinstance_policycapabilities(self, policycapabilitypath):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_a0856c5a","line":1164,"in_reply_to":"5a5ae5dd_36df940e","updated":"2016-02-06 20:27:06.000000000","message":"Thanks Xing.  I will change to (2, 17)","commit_id":"1fbe9671e98ca8211a28abb8a357d8e043b6f38f"}],"cinder/volume/drivers/emc/emc_vmax_utils.py":[{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"df96f1963542a85b642fb433a5dfc355e8b33398","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        :returns: int -- the return code"},{"line_number":281,"context_line":"        :returns: errorDesc - the error description string"},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        if extraSpecs and (INTERVAL in extraSpecs or RETRIES in extraSpecs):"},{"line_number":284,"context_line":"            rc, errordesc \u003d ("},{"line_number":285,"context_line":"                self._wait_for_job_complete(conn, job, extraSpecs))"},{"line_number":286,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_8ee4dc0d","line":283,"updated":"2016-02-09 20:35:34.000000000","message":"There is no reason to make this check on extraSpecs properties here since lower layers do the appropriate checks on this param.","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"42786ccb3fe47bd055ab5c9ceaadf16e3097a53a","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        :returns: int -- the return code"},{"line_number":281,"context_line":"        :returns: errorDesc - the error description string"},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        if extraSpecs and (INTERVAL in extraSpecs or RETRIES in extraSpecs):"},{"line_number":284,"context_line":"            rc, errordesc \u003d ("},{"line_number":285,"context_line":"                self._wait_for_job_complete(conn, job, extraSpecs))"},{"line_number":286,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_b6cec658","line":283,"in_reply_to":"3a57f1b5_8ee4dc0d","updated":"2016-02-09 23:12:41.000000000","message":"We can remove these checks","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"df96f1963542a85b642fb433a5dfc355e8b33398","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":324,"context_line":"            try:"},{"line_number":325,"context_line":"                kwargs[\u0027retries\u0027] \u003d retries + 1"},{"line_number":326,"context_line":"                if not wait_for_job_called:"},{"line_number":327,"context_line":"                    if self._is_job_finished(conn, job):"},{"line_number":328,"context_line":"                        kwargs[\u0027rc\u0027], kwargs[\u0027errordesc\u0027] \u003d ("},{"line_number":329,"context_line":"                            self._verify_job_state(conn, job))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_61417139","line":326,"updated":"2016-02-09 20:35:34.000000000","message":"There appears to be a pre-existing logic error here in checking for wait_for_job_called. wait_for_job_called is always False at this point. If set to True below, the method would exit on the next iteration before getting to this point.\n\nThe net effect is that we are doing more SMI-S queries than we need to for checking the job state. There is a getInstance() call during the first _is_job_finished() above. Then there is a second getInstance() call during the _is_job_finished() below, and if it is done, another one during _verify_job_state(). This method should wake up and poll only one for each retry interval. Can some restructuring be done to achieve that?","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"42786ccb3fe47bd055ab5c9ceaadf16e3097a53a","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":324,"context_line":"            try:"},{"line_number":325,"context_line":"                kwargs[\u0027retries\u0027] \u003d retries + 1"},{"line_number":326,"context_line":"                if not wait_for_job_called:"},{"line_number":327,"context_line":"                    if self._is_job_finished(conn, job):"},{"line_number":328,"context_line":"                        kwargs[\u0027rc\u0027], kwargs[\u0027errordesc\u0027] \u003d ("},{"line_number":329,"context_line":"                            self._verify_job_state(conn, job))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_162b1aed","line":326,"in_reply_to":"3a57f1b5_61417139","updated":"2016-02-09 23:12:41.000000000","message":"Sure, we will look into that","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"df96f1963542a85b642fb433a5dfc355e8b33398","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                LOG.error(_LE(\"_wait_for_sync failed after %(retries)d \""},{"line_number":456,"context_line":"                              \"tries.\"),"},{"line_number":457,"context_line":"                          {\u0027retries\u0027: retries})"},{"line_number":458,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":459,"context_line":"            try:"},{"line_number":460,"context_line":"                kwargs[\u0027retries\u0027] \u003d retries + 1"},{"line_number":461,"context_line":"                if not wait_for_sync_called:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_013c3d92","line":458,"updated":"2016-02-09 20:35:34.000000000","message":"In the wait for job scenario, you are fixing this timeout case by having it return the RC to the caller since the RC won\u0027t be 0 if it is still in progress. But here, how does the caller know that a timeout happened? Shouldn\u0027t a different exception be raised in this case? The LoopingCallDone() is a special exception handled by the FixedIntervalLoopingCall infrastructure, right?","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"42786ccb3fe47bd055ab5c9ceaadf16e3097a53a","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                LOG.error(_LE(\"_wait_for_sync failed after %(retries)d \""},{"line_number":456,"context_line":"                              \"tries.\"),"},{"line_number":457,"context_line":"                          {\u0027retries\u0027: retries})"},{"line_number":458,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":459,"context_line":"            try:"},{"line_number":460,"context_line":"                kwargs[\u0027retries\u0027] \u003d retries + 1"},{"line_number":461,"context_line":"                if not wait_for_sync_called:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_b910f94f","line":458,"in_reply_to":"3a57f1b5_013c3d92","updated":"2016-02-09 23:12:41.000000000","message":"Thanks so much for this great feedback.  We are addressing this issue in bug/1522821 relating to snapshots. This will be delivered in the next couple of days.","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"df96f1963542a85b642fb433a5dfc355e8b33398","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            try:"},{"line_number":460,"context_line":"                kwargs[\u0027retries\u0027] \u003d retries + 1"},{"line_number":461,"context_line":"                if not wait_for_sync_called:"},{"line_number":462,"context_line":"                    if self._is_sync_complete(conn, syncName):"},{"line_number":463,"context_line":"                        kwargs[\u0027wait_for_sync_called\u0027] \u003d True"},{"line_number":464,"context_line":"            except Exception:"},{"line_number":465,"context_line":"                exceptionMessage \u003d (_(\"Issue encountered waiting for \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_61965196","line":462,"updated":"2016-02-09 20:35:34.000000000","message":"This seems to have the same issue as the job method in that is_sync_complete() is checked twice each time the thread wakes up.","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"42786ccb3fe47bd055ab5c9ceaadf16e3097a53a","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            try:"},{"line_number":460,"context_line":"                kwargs[\u0027retries\u0027] \u003d retries + 1"},{"line_number":461,"context_line":"                if not wait_for_sync_called:"},{"line_number":462,"context_line":"                    if self._is_sync_complete(conn, syncName):"},{"line_number":463,"context_line":"                        kwargs[\u0027wait_for_sync_called\u0027] \u003d True"},{"line_number":464,"context_line":"            except Exception:"},{"line_number":465,"context_line":"                exceptionMessage \u003d (_(\"Issue encountered waiting for \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_791a8170","line":462,"in_reply_to":"3a57f1b5_61965196","updated":"2016-02-09 23:12:41.000000000","message":"Thanks, we will address this in bug/1522821","commit_id":"f44bdc597a7fdd62c679d8d1874a23e07f4af4a8"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"d5d949d437a73b6fb01d2b793f1402743402655f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        :returns: int -- the return code"},{"line_number":281,"context_line":"        :returns: errorDesc - the error description string"},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        if extraSpecs:"},{"line_number":284,"context_line":"            rc, errordesc \u003d ("},{"line_number":285,"context_line":"                self._wait_for_job_complete(conn, job, extraSpecs))"},{"line_number":286,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_0b56335c","line":283,"updated":"2016-02-11 13:29:49.000000000","message":"You got part of my comment, but I\u0027m saying the whole \u0027if\u0027 check here is unnecessary. In fact, this method does Nothing. It\u0027s not hurting anything, but since you have modified the called method, there would be no reason not to delete this method and rename _wait_for_job_complete --\u003e wait_for_job_complete, and just move the LOG.debug() statement to the bottom of that method below.","commit_id":"2a5bc2e5de4c91aef03809891d9a759c83889108"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"1b60a09cdd743c867566682cbad287a5576e25c4","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        :returns: int -- the return code"},{"line_number":281,"context_line":"        :returns: errorDesc - the error description string"},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        if extraSpecs:"},{"line_number":284,"context_line":"            rc, errordesc \u003d ("},{"line_number":285,"context_line":"                self._wait_for_job_complete(conn, job, extraSpecs))"},{"line_number":286,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_d1ed28f0","line":283,"in_reply_to":"3a57f1b5_0b56335c","updated":"2016-02-11 13:50:19.000000000","message":"Good point.  I will change that","commit_id":"2a5bc2e5de4c91aef03809891d9a759c83889108"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"ff343a21488fe7acec1bd258c4515723bd6d6c7e","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        rc, errordesc \u003d ("},{"line_number":285,"context_line":"            self._wait_for_job_complete(conn, job, extraSpecs))"},{"line_number":286,"context_line":"        LOG.debug(\"Return code is: %(rc)lu. \""},{"line_number":287,"context_line":"                  \"Error Description is: %(errordesc)s.\","},{"line_number":288,"context_line":"                  {\u0027rc\u0027: rc,"},{"line_number":289,"context_line":"                   \u0027errordesc\u0027: errordesc})"}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_e63d87bc","line":286,"updated":"2016-03-02 17:18:33.000000000","message":"Just move this debug() statement to bottom of next method, remove this method, and remove the \"_\" underscore prefix on the name of the following method. Then you will have removed an unnecessary stack element","commit_id":"bf88274fb0ad9b84e03e3bfa2b6004f92923c00b"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"381b8fbeb6a8a7f50ecdf22f1d77dd31ee2512eb","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        rc, errordesc \u003d ("},{"line_number":285,"context_line":"            self._wait_for_job_complete(conn, job, extraSpecs))"},{"line_number":286,"context_line":"        LOG.debug(\"Return code is: %(rc)lu. \""},{"line_number":287,"context_line":"                  \"Error Description is: %(errordesc)s.\","},{"line_number":288,"context_line":"                  {\u0027rc\u0027: rc,"},{"line_number":289,"context_line":"                   \u0027errordesc\u0027: errordesc})"}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_068b53c4","line":286,"in_reply_to":"7af24918_e63d87bc","updated":"2016-03-02 17:22:10.000000000","message":"Will do.","commit_id":"bf88274fb0ad9b84e03e3bfa2b6004f92923c00b"},{"author":{"_account_id":12802,"name":"Carl Pecinovsky","email":"csky@us.ibm.com","username":"carl-sky"},"change_message_id":"ff343a21488fe7acec1bd258c4515723bd6d6c7e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        :param conn: connection to the ecom server"},{"line_number":297,"context_line":"        :param job: the job dict"},{"line_number":298,"context_line":"        :param extraSpecs: the extraSpecs dict. Defaults to None"},{"line_number":299,"context_line":"        :raises: loopingcall.LoopingCallDone"},{"line_number":300,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":301,"context_line":"        \"\"\""},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_0b607e00","line":299,"updated":"2016-03-02 17:18:33.000000000","message":"This method does not raise LoopingCallDone, but the nested method does. This method should never see it since it is handled by the \"timer\" object.","commit_id":"bf88274fb0ad9b84e03e3bfa2b6004f92923c00b"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"381b8fbeb6a8a7f50ecdf22f1d77dd31ee2512eb","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        :param conn: connection to the ecom server"},{"line_number":297,"context_line":"        :param job: the job dict"},{"line_number":298,"context_line":"        :param extraSpecs: the extraSpecs dict. Defaults to None"},{"line_number":299,"context_line":"        :raises: loopingcall.LoopingCallDone"},{"line_number":300,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":301,"context_line":"        \"\"\""},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_06b23394","line":299,"in_reply_to":"7af24918_0b607e00","updated":"2016-03-02 17:22:10.000000000","message":"Ok. I will remove","commit_id":"bf88274fb0ad9b84e03e3bfa2b6004f92923c00b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6f7590d791c33a8eed596073582809cec1238ab1","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                \"The job has not completed and is in a %(state)s \""},{"line_number":407,"context_line":"                \"state.\")"},{"line_number":408,"context_line":"                % {\u0027state\u0027: jobstatedict[int(jobstate)]})"},{"line_number":409,"context_line":"            LOG.error(_LE(\"%(errordescription)s \") %"},{"line_number":410,"context_line":"                      {\u0027errordescription\u0027: errordescription})"},{"line_number":411,"context_line":"            errorcode \u003d -1"},{"line_number":412,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_c03fa0d4","line":409,"updated":"2016-03-16 20:07:04.000000000","message":"This logging isn\u0027t correct. Please just log the string with the _() marker and return that.","commit_id":"eaef2fc8018c024743f1d0ade8e43b56bce05894"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fe7440d6383717045922ca35edb2213065826d40","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                \"The job has not completed and is in a %(state)s \""},{"line_number":407,"context_line":"                \"state.\")"},{"line_number":408,"context_line":"                % {\u0027state\u0027: jobstatedict[int(jobstate)]})"},{"line_number":409,"context_line":"            LOG.error(_LE(\"%(errordescription)s \") %"},{"line_number":410,"context_line":"                      {\u0027errordescription\u0027: errordescription})"},{"line_number":411,"context_line":"            errorcode \u003d -1"},{"line_number":412,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_a539b943","line":409,"in_reply_to":"1af94dfe_c03fa0d4","updated":"2016-03-17 02:56:31.000000000","message":"I see what you are saying.  Here we can just do the following because _ is already used on line 405.\n\nLOG.error(errordescription)","commit_id":"eaef2fc8018c024743f1d0ade8e43b56bce05894"}]}
