)]}'
{"cinder/volume/drivers/netapp/dataontap/nfs_base.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.configuration.append_config_values(na_opts.netapp_transport_opts)"},{"line_number":79,"context_line":"        self.configuration.append_config_values(na_opts.netapp_img_cache_opts)"},{"line_number":80,"context_line":"        self.configuration.append_config_values(na_opts.netapp_nfs_extra_opts)"},{"line_number":81,"context_line":"        self.backend_name \u003d self.host.split(\u0027@\u0027)[1]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def do_setup(self, context):"},{"line_number":84,"context_line":"        super(NetAppNfsDriver, self).do_setup(context)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_ab01ce3b","line":81,"updated":"2016-08-03 03:20:00.000000000","message":"Can you use volume.utils.extract_host for this?","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.configuration.append_config_values(na_opts.netapp_transport_opts)"},{"line_number":79,"context_line":"        self.configuration.append_config_values(na_opts.netapp_img_cache_opts)"},{"line_number":80,"context_line":"        self.configuration.append_config_values(na_opts.netapp_nfs_extra_opts)"},{"line_number":81,"context_line":"        self.backend_name \u003d self.host.split(\u0027@\u0027)[1]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def do_setup(self, context):"},{"line_number":84,"context_line":"        super(NetAppNfsDriver, self).do_setup(context)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_97d2fc59","line":81,"in_reply_to":"bacf61ea_ab01ce3b","updated":"2016-08-04 02:18:13.000000000","message":"Hi Xing, we need the backend name, i.e, the configuration stanza name alone... ex: host\u003d\u0027openstack@backend#pool\u0027, i need backend. \n\nThese are the options that extract_host has:\n\n       host \u003d \u0027HostA@BackendB#PoolC\u0027\n        ret \u003d extract_host(host, \u0027host\u0027)\n        # ret is \u0027HostA\u0027\n        ret \u003d extract_host(host, \u0027backend\u0027)\n        # ret is \u0027HostA@BackendB\u0027\n        ret \u003d extract_host(host, \u0027pool\u0027)\n        # ret is \u0027PoolC\u0027\n\n        host \u003d \u0027HostX@BackendY\u0027\n        ret \u003d extract_host(host, \u0027pool\u0027)\n        # ret is None\n        ret \u003d extract_host(host, \u0027pool\u0027, True)\n        # ret is \u0027_pool0\u0027","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"}],"cinder/volume/drivers/netapp/dataontap/utils/data_motion.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            # TODO(gouthamr): Change the schedule from hourly to a config value"},{"line_number":153,"context_line":"            LOG.debug(\"Creating a SnapMirror relationship between %s:%s and \""},{"line_number":154,"context_line":"                      \"%s:%s.\", src_vserver, src_flexvol_name,"},{"line_number":155,"context_line":"                      dest_vserver, dest_flexvol_name)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            dest_client.create_snapmirror(src_vserver,"},{"line_number":158,"context_line":"                                          src_flexvol_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_6b57d6ca","line":155,"updated":"2016-08-03 03:20:00.000000000","message":"Please use keyword parameters.\n\nLOG.debug(\"xxx %(val1)s %(val2)s\", {\"val1\": \"xxx\", \"val2\": \"xxx\"})","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            # TODO(gouthamr): Change the schedule from hourly to a config value"},{"line_number":153,"context_line":"            LOG.debug(\"Creating a SnapMirror relationship between %s:%s and \""},{"line_number":154,"context_line":"                      \"%s:%s.\", src_vserver, src_flexvol_name,"},{"line_number":155,"context_line":"                      dest_vserver, dest_flexvol_name)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            dest_client.create_snapmirror(src_vserver,"},{"line_number":158,"context_line":"                                          src_flexvol_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_296e58c9","line":155,"in_reply_to":"bacf61ea_6b57d6ca","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            LOG.debug(\"Initializing SnapMirror transfers between %s:%s \""},{"line_number":164,"context_line":"                      \"and %s:%s.\", src_vserver, src_flexvol_name,"},{"line_number":165,"context_line":"                      dest_vserver, dest_flexvol_name)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"            # Initialize async transfer of the initial data"},{"line_number":168,"context_line":"            dest_client.initialize_snapmirror(src_vserver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_ab71ce79","line":165,"updated":"2016-08-03 03:20:00.000000000","message":"Same here.","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            LOG.debug(\"Initializing SnapMirror transfers between %s:%s \""},{"line_number":164,"context_line":"                      \"and %s:%s.\", src_vserver, src_flexvol_name,"},{"line_number":165,"context_line":"                      dest_vserver, dest_flexvol_name)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"            # Initialize async transfer of the initial data"},{"line_number":168,"context_line":"            dest_client.initialize_snapmirror(src_vserver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_b860cca5","line":165,"in_reply_to":"bacf61ea_ab71ce79","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                              \"\u0027%s\u0027 state. Attempting to repair it.\","},{"line_number":180,"context_line":"                              src_vserver, src_flexvol_name, dest_vserver,"},{"line_number":181,"context_line":"                              dest_flexvol_name,"},{"line_number":182,"context_line":"                              snapmirror.get(\u0027mirror-state\u0027))"},{"line_number":183,"context_line":"                    dest_client.resume_snapmirror(src_vserver,"},{"line_number":184,"context_line":"                                                  src_flexvol_name,"},{"line_number":185,"context_line":"                                                  dest_vserver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_0b09fadd","line":182,"updated":"2016-08-03 03:20:00.000000000","message":"Same","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                              \"\u0027%s\u0027 state. Attempting to repair it.\","},{"line_number":180,"context_line":"                              src_vserver, src_flexvol_name, dest_vserver,"},{"line_number":181,"context_line":"                              dest_flexvol_name,"},{"line_number":182,"context_line":"                              snapmirror.get(\u0027mirror-state\u0027))"},{"line_number":183,"context_line":"                    dest_client.resume_snapmirror(src_vserver,"},{"line_number":184,"context_line":"                                                  src_flexvol_name,"},{"line_number":185,"context_line":"                                                  dest_vserver,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_386dfc99","line":182,"in_reply_to":"bacf61ea_0b09fadd","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                                  dest_vserver,"},{"line_number":190,"context_line":"                                                  dest_flexvol_name)"},{"line_number":191,"context_line":"                except netapp_api.NaApiError:"},{"line_number":192,"context_line":"                    LOG.exception(_LE(\"Could not re-sync SnapMirror.\"))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def delete_snapmirror(self, src_backend_name, dest_backend_name,"},{"line_number":195,"context_line":"                          src_flexvol_name, dest_flexvol_name, release\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_4be132fe","line":192,"updated":"2016-08-03 03:20:00.000000000","message":"Should you raise here?","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                                  dest_vserver,"},{"line_number":190,"context_line":"                                                  dest_flexvol_name)"},{"line_number":191,"context_line":"                except netapp_api.NaApiError:"},{"line_number":192,"context_line":"                    LOG.exception(_LE(\"Could not re-sync SnapMirror.\"))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def delete_snapmirror(self, src_backend_name, dest_backend_name,"},{"line_number":195,"context_line":"                          src_flexvol_name, dest_flexvol_name, release\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_5d7c2220","line":192,"in_reply_to":"bacf61ea_4be132fe","updated":"2016-08-04 02:18:13.000000000","message":"No, it is not critical for us to fail setting up the driver. We will attempt this again as part of periodic housekeeping.. logging would be the right thing to do.","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                                         dest_flexvol_name,"},{"line_number":218,"context_line":"                                         clear_checkpoint\u003dFalse)"},{"line_number":219,"context_line":"        except netapp_api.NaApiError:"},{"line_number":220,"context_line":"            # Snapmirror is already deleted"},{"line_number":221,"context_line":"            pass"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        # 2. Delete SnapMirror Relationship and cleanup destination snapshots"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_4bb812e6","line":220,"updated":"2016-08-03 03:20:00.000000000","message":"Are there different code codes that you can differentiate between NotFound and some other critical error that you may want to raise?  Like how you handled on line 231.","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                                         dest_flexvol_name,"},{"line_number":218,"context_line":"                                         clear_checkpoint\u003dFalse)"},{"line_number":219,"context_line":"        except netapp_api.NaApiError:"},{"line_number":220,"context_line":"            # Snapmirror is already deleted"},{"line_number":221,"context_line":"            pass"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        # 2. Delete SnapMirror Relationship and cleanup destination snapshots"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_1de74ae5","line":220,"in_reply_to":"bacf61ea_4bb812e6","updated":"2016-08-04 02:18:13.000000000","message":"Attempting to abort will help us raise the correct error during cleanup of the mirror relationship.. So, since the goal is to cleanup the mirror, we can proceed to attempt that..","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":231,"context_line":"                if (e.code \u003d\u003d netapp_api.EOBJECTNOTFOUND or"},{"line_number":232,"context_line":"                        e.code \u003d\u003d netapp_api.ESOURCE_IS_DIFFERENT or"},{"line_number":233,"context_line":"                        \"(entry doesn\u0027t exist)\" in e.message):"},{"line_number":234,"context_line":"                    LOG.info(_LI(\u0027No SnapMirror relationship to delete.\u0027))"},{"line_number":235,"context_line":"                    exc_context.reraise \u003d False"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_cbc40261","line":233,"updated":"2016-08-03 03:20:00.000000000","message":"Please put \"entry doesn\u0027t exist\" in a constant.","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":231,"context_line":"                if (e.code \u003d\u003d netapp_api.EOBJECTNOTFOUND or"},{"line_number":232,"context_line":"                        e.code \u003d\u003d netapp_api.ESOURCE_IS_DIFFERENT or"},{"line_number":233,"context_line":"                        \"(entry doesn\u0027t exist)\" in e.message):"},{"line_number":234,"context_line":"                    LOG.info(_LI(\u0027No SnapMirror relationship to delete.\u0027))"},{"line_number":235,"context_line":"                    exc_context.reraise \u003d False"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_9d769a3c","line":233,"in_reply_to":"bacf61ea_cbc40261","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":253,"context_line":"                    if (e.code \u003d\u003d netapp_api.EOBJECTNOTFOUND or"},{"line_number":254,"context_line":"                            e.code \u003d\u003d netapp_api.ESOURCE_IS_DIFFERENT or"},{"line_number":255,"context_line":"                            \"(entry doesn\u0027t exist)\" in e.message):"},{"line_number":256,"context_line":"                        # Handle the case where the SnapMirror is already"},{"line_number":257,"context_line":"                        # cleaned up"},{"line_number":258,"context_line":"                        exc_context.reraise \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_8b916a55","line":255,"updated":"2016-08-03 03:20:00.000000000","message":"Same","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":253,"context_line":"                    if (e.code \u003d\u003d netapp_api.EOBJECTNOTFOUND or"},{"line_number":254,"context_line":"                            e.code \u003d\u003d netapp_api.ESOURCE_IS_DIFFERENT or"},{"line_number":255,"context_line":"                            \"(entry doesn\u0027t exist)\" in e.message):"},{"line_number":256,"context_line":"                        # Handle the case where the SnapMirror is already"},{"line_number":257,"context_line":"                        # cleaned up"},{"line_number":258,"context_line":"                        exc_context.reraise \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_dd7812fb","line":255,"in_reply_to":"bacf61ea_8b916a55","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                       dest_vserver,"},{"line_number":296,"context_line":"                                       dest_flexvol_name)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        retries \u003d source_backend_config.netapp_snapmirror_quiesce_timeout / 5"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        @utils.retry(exception.NetAppDriverException, interval\u003d5,"},{"line_number":301,"context_line":"                     retries\u003dretries, backoff_rate\u003d1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_6b8196fb","line":298,"updated":"2016-08-03 03:20:00.000000000","message":"5 is the interval on line 300?  Can you put 5 in a constant?","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                       dest_vserver,"},{"line_number":296,"context_line":"                                       dest_flexvol_name)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        retries \u003d source_backend_config.netapp_snapmirror_quiesce_timeout / 5"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        @utils.retry(exception.NetAppDriverException, interval\u003d5,"},{"line_number":301,"context_line":"                     retries\u003dretries, backoff_rate\u003d1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_f82244a2","line":298,"in_reply_to":"bacf61ea_6b8196fb","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        retries \u003d source_backend_config.netapp_snapmirror_quiesce_timeout / 5"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        @utils.retry(exception.NetAppDriverException, interval\u003d5,"},{"line_number":301,"context_line":"                     retries\u003dretries, backoff_rate\u003d1)"},{"line_number":302,"context_line":"        def wait_for_quiesced():"},{"line_number":303,"context_line":"            snapmirror \u003d dest_client.get_snapmirrors("}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_ab7b8e28","line":300,"updated":"2016-08-03 03:20:00.000000000","message":"Same","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        retries \u003d source_backend_config.netapp_snapmirror_quiesce_timeout / 5"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        @utils.retry(exception.NetAppDriverException, interval\u003d5,"},{"line_number":301,"context_line":"                     retries\u003dretries, backoff_rate\u003d1)"},{"line_number":302,"context_line":"        def wait_for_quiesced():"},{"line_number":303,"context_line":"            snapmirror \u003d dest_client.get_snapmirrors("}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_d84ca078","line":300,"in_reply_to":"bacf61ea_ab7b8e28","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                desired_attributes\u003d[\u0027relationship-status\u0027, \u0027mirror-state\u0027])[0]"},{"line_number":307,"context_line":"            if snapmirror.get(\u0027relationship-status\u0027) !\u003d \u0027quiesced\u0027:"},{"line_number":308,"context_line":"                raise exception.NetAppDriverException("},{"line_number":309,"context_line":"                    reason\u003d_LE(\"SnapMirror relationship is not quiesced.\"))"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        try:"},{"line_number":312,"context_line":"            wait_for_quiesced()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_eb758632","line":309,"updated":"2016-08-03 03:20:00.000000000","message":"This should just be a _ no LE.","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                desired_attributes\u003d[\u0027relationship-status\u0027, \u0027mirror-state\u0027])[0]"},{"line_number":307,"context_line":"            if snapmirror.get(\u0027relationship-status\u0027) !\u003d \u0027quiesced\u0027:"},{"line_number":308,"context_line":"                raise exception.NetAppDriverException("},{"line_number":309,"context_line":"                    reason\u003d_LE(\"SnapMirror relationship is not quiesced.\"))"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        try:"},{"line_number":312,"context_line":"            wait_for_quiesced()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_18575803","line":309,"in_reply_to":"bacf61ea_eb758632","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                                           dest_flexvol_name)"},{"line_number":492,"context_line":"                except netapp_api.NaApiError:"},{"line_number":493,"context_line":"                    # Ignore any errors since the current source may be"},{"line_number":494,"context_line":"                    # unreachable"},{"line_number":495,"context_line":"                    pass"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _choose_failover_target(self, backend_name, flexvols,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_cba9a27d","line":494,"updated":"2016-08-03 03:20:00.000000000","message":"I wonder if you should only pass certain error codes but raise on others?","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                                           dest_flexvol_name)"},{"line_number":492,"context_line":"                except netapp_api.NaApiError:"},{"line_number":493,"context_line":"                    # Ignore any errors since the current source may be"},{"line_number":494,"context_line":"                    # unreachable"},{"line_number":495,"context_line":"                    pass"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def _choose_failover_target(self, backend_name, flexvols,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_38917c9b","line":494,"in_reply_to":"bacf61ea_cba9a27d","updated":"2016-08-04 02:18:13.000000000","message":"update is also non-critical; this is just a way for the driver to kick something just in case it can.. so, we don\u0027t want to blow up. The netapp api response is not an exception, it is an error code that our client raises an exception for.. so, no biggie to ignore it..","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        # 3. Update cinder volumes within this host"},{"line_number":571,"context_line":"        for volume in volumes:"},{"line_number":572,"context_line":"            replication_status \u003d \u0027failed-over\u0027"},{"line_number":573,"context_line":"            volume_pool \u003d volume_utils.extract_host(volume[\u0027host\u0027],"},{"line_number":574,"context_line":"                                                    level\u003d\u0027pool\u0027)"},{"line_number":575,"context_line":"            if volume_pool in failed_to_break:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_4b1012a9","line":572,"updated":"2016-08-03 03:20:00.000000000","message":"Use ReplicationStatus in cinder/objects/fields.py\n\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/fields.py#L67","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        # 3. Update cinder volumes within this host"},{"line_number":571,"context_line":"        for volume in volumes:"},{"line_number":572,"context_line":"            replication_status \u003d \u0027failed-over\u0027"},{"line_number":573,"context_line":"            volume_pool \u003d volume_utils.extract_host(volume[\u0027host\u0027],"},{"line_number":574,"context_line":"                                                    level\u003d\u0027pool\u0027)"},{"line_number":575,"context_line":"            if volume_pool in failed_to_break:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_b8d28c59","line":572,"in_reply_to":"bacf61ea_4b1012a9","updated":"2016-08-04 02:18:13.000000000","message":"Done","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                self.backend_name, replication_targets, flexvols, volumes,"},{"line_number":615,"context_line":"                failover_target\u003dsecondary_id)"},{"line_number":616,"context_line":"        except Exception as e:"},{"line_number":617,"context_line":"            raise exception.UnableToFailOver(reason\u003de.message)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        # Update the ZAPI client to the backend we failed over to"},{"line_number":620,"context_line":"        self._update_zapi_client(active_backend_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_0b08da90","line":617,"updated":"2016-08-03 03:20:00.000000000","message":"e.message -\u003e six.text_type(e.message)","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                self.backend_name, replication_targets, flexvols, volumes,"},{"line_number":615,"context_line":"                failover_target\u003dsecondary_id)"},{"line_number":616,"context_line":"        except Exception as e:"},{"line_number":617,"context_line":"            raise exception.UnableToFailOver(reason\u003de.message)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        # Update the ZAPI client to the backend we failed over to"},{"line_number":620,"context_line":"        self._update_zapi_client(active_backend_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_f8436411","line":617,"in_reply_to":"bacf61ea_0b08da90","updated":"2016-08-04 02:18:13.000000000","message":"yes.. captured and cast all the messages in the path to strings, so this should be the exception object itself; thank you!","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"84b18ede451d2e08ea2137cfd699258617d385e8","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"ENTRY_DOES_NOT_EXIST \u003d \"(entry doesn\u0027t exist)\""},{"line_number":38,"context_line":"QUIESCE_RETRY_INTERVAL \u003d 5"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_0eb6abf8","line":37,"updated":"2016-08-05 04:29:07.000000000","message":"Do the parentheses actually show up in the message itself?","commit_id":"4f27a75b7f4414eda04c4322269b3a6bf64c714b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"eab6f92915f25398282834d94fa3faca87e9cc83","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"ENTRY_DOES_NOT_EXIST \u003d \"(entry doesn\u0027t exist)\""},{"line_number":38,"context_line":"QUIESCE_RETRY_INTERVAL \u003d 5"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_10619339","line":37,"in_reply_to":"bacf61ea_0eb6abf8","updated":"2016-08-05 12:36:38.000000000","message":"Yes, and it is the only distinguishable part of a generic API error unfortunately.. Something we have communicated to the cDOT product team; and we\u0027ll hopefully rectify this. IMO, parsing error strings to distinguish between errors is probably a bad approach.. :(","commit_id":"4f27a75b7f4414eda04c4322269b3a6bf64c714b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"84b18ede451d2e08ea2137cfd699258617d385e8","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                self.backend_name, replication_targets, flexvols, volumes,"},{"line_number":629,"context_line":"                failover_target\u003dsecondary_id)"},{"line_number":630,"context_line":"        except Exception as e:"},{"line_number":631,"context_line":"            raise exception.UnableToFailOver(reason\u003de)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"        # Update the ZAPI client to the backend we failed over to"},{"line_number":634,"context_line":"        self._update_zapi_client(active_backend_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_4eaee32e","line":631,"updated":"2016-08-05 04:29:07.000000000","message":"Exception is a very general exception.  I see you raised NetAppDriverException(msg) in _complete_failover.  If you are only catching NetAppDriverException, then it is fine here.  But there are other code paths that could raise other exceptions.  So it is still not safe to directly assign e to reason.  I suggest the following:\n\nmsg \u003d _(\"Could not complete failover: %s\") % e\nexception.UnableToFailOver(reason\u003dmsg)\n\nor\n\nexception.UnableToFailOver(reason\u003d six.text_type(e))","commit_id":"4f27a75b7f4414eda04c4322269b3a6bf64c714b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"eab6f92915f25398282834d94fa3faca87e9cc83","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                self.backend_name, replication_targets, flexvols, volumes,"},{"line_number":629,"context_line":"                failover_target\u003dsecondary_id)"},{"line_number":630,"context_line":"        except Exception as e:"},{"line_number":631,"context_line":"            raise exception.UnableToFailOver(reason\u003de)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"        # Update the ZAPI client to the backend we failed over to"},{"line_number":634,"context_line":"        self._update_zapi_client(active_backend_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bacf61ea_b04887b4","line":631,"in_reply_to":"bacf61ea_4eaee32e","updated":"2016-08-05 12:36:38.000000000","message":"You\u0027re right.. We should only catch NetAppDriverException. Fixed.","commit_id":"4f27a75b7f4414eda04c4322269b3a6bf64c714b"}],"cinder/volume/drivers/netapp/dataontap/utils/utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"\"\"\""},{"line_number":13,"context_line":"Utilities for NetApp FAS drivers."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module contains common utilities to be used by one or more"},{"line_number":16,"context_line":"NetApp FAS drivers to achieve the desired functionality."}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_abaeeee4","line":13,"updated":"2016-08-03 03:20:00.000000000","message":"Should \"FAS\" be \"NAS\" instead?","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"\"\"\""},{"line_number":13,"context_line":"Utilities for NetApp FAS drivers."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module contains common utilities to be used by one or more"},{"line_number":16,"context_line":"NetApp FAS drivers to achieve the desired functionality."}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_97c95c28","line":13,"in_reply_to":"bacf61ea_abaeeee4","updated":"2016-08-04 02:18:13.000000000","message":"FAS :)\n\"Fabric Attached Storage\"","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"61db3adafab15804c603f24872428fbb3a6ec3f9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Utilities for NetApp FAS drivers."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module contains common utilities to be used by one or more"},{"line_number":16,"context_line":"NetApp FAS drivers to achieve the desired functionality."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_8bab2ad6","line":16,"updated":"2016-08-03 03:20:00.000000000","message":"Same question here.","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ef735af86cdef331b1b91d86261036232a71a2e2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Utilities for NetApp FAS drivers."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module contains common utilities to be used by one or more"},{"line_number":16,"context_line":"NetApp FAS drivers to achieve the desired functionality."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_d7b8f477","line":16,"in_reply_to":"bacf61ea_8bab2ad6","updated":"2016-08-04 02:18:13.000000000","message":"same","commit_id":"aaa15bdcd1d9e7bb8edc87f7f9d7b8014764a205"}]}
