)]}'
{"cinder/tests/unit/test_storwize_svc.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"a60b2ce62afec0d978ac380f3615f6c305e599cc","unresolved":false,"context_lines":[{"line_number":4847,"context_line":"                                      \u0027_name_id\u0027: None,"},{"line_number":4848,"context_line":"                                      \u0027replication_status\u0027: \u0027failed-over\u0027},"},{"line_number":4849,"context_line":"                          \u0027volume_id\u0027: self.fake_volume_id}]"},{"line_number":4850,"context_line":""},{"line_number":4851,"context_line":"        expected_calls \u003d [mock.call(self.ctxt, self.volume,"},{"line_number":4852,"context_line":"                                    fake_secondary)]"},{"line_number":4853,"context_line":"        failover_volume_host.assert_called_once_with(self.ctxt, self.volume,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_1afc1571","line":4850,"updated":"2016-03-09 17:36:23.000000000","message":"Not a big deal, but seems redundant to have assert_called_once_with and then assert_has_calls with the same call afterwards. Same for the assertTrue failover_volume_host.called","commit_id":"22faa7338bd374254d228e79ac64ac7b2e0c8801"}],"cinder/volume/drivers/ibm/storwize_svc/replication.py":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0aa9b8d2de59487eb75072be7399222e9f01c411","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    # #### Implementing V2 replication methods #### #"},{"line_number":382,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":383,"context_line":"        try:"},{"line_number":384,"context_line":"            rel_info \u003d self.driver._helpers.get_relationship_info(vref)"},{"line_number":385,"context_line":"        except Exception as e:"},{"line_number":386,"context_line":"            msg \u003d (_(\u0027Failed to get remote copy information for %(volume)s \u0027"},{"line_number":387,"context_line":"                     \u0027due to %(err)s\u0027), {\u0027volume\u0027: vref[\u0027id\u0027], \u0027err\u0027: e})"},{"line_number":388,"context_line":"            LOG.error(msg)"},{"line_number":389,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        if not rel_info or not rel_info.get(\u0027aux_vdisk_name\u0027, None):"},{"line_number":392,"context_line":"            self.volume_replication_setup(context, vref)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        model_update \u003d {\u0027replication_status\u0027: \u0027enabled\u0027}"},{"line_number":395,"context_line":"        return model_update"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def replication_disable(self, context, vref):"},{"line_number":398,"context_line":"        self.delete_target_volume(vref)"},{"line_number":399,"context_line":"        model_update \u003d {\u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":400,"context_line":"        return model_update"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":403,"context_line":"        if not self.target or self.target.get(\u0027target_device_id\u0027) !\u003d secondary:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_35c8e273","line":400,"range":{"start_line":382,"start_character":4,"end_line":400,"end_character":27},"updated":"2016-03-03 18:57:18.000000000","message":"Didn\u0027t see these at first, but these can be removed, too","commit_id":"23c04baabd83bdae70eb14a285a883a634d80331"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0aa9b8d2de59487eb75072be7399222e9f01c411","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        model_update \u003d {\u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":400,"context_line":"        return model_update"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":403,"context_line":"        if not self.target or self.target.get(\u0027target_device_id\u0027) !\u003d secondary:"},{"line_number":404,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":405,"context_line":"                      \"to failover.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_55180ed3","line":402,"range":{"start_line":402,"start_character":4,"end_line":402,"end_character":61},"updated":"2016-03-03 18:57:18.000000000","message":"Does this need any rework to match failover_host?","commit_id":"23c04baabd83bdae70eb14a285a883a634d80331"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"ed5ae3d82ac03073f5e1ab7be59e88ae420a48d2","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        model_update \u003d {\u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":400,"context_line":"        return model_update"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":403,"context_line":"        if not self.target or self.target.get(\u0027target_device_id\u0027) !\u003d secondary:"},{"line_number":404,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":405,"context_line":"                      \"to failover.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_6da1fef7","line":402,"range":{"start_line":402,"start_character":4,"end_line":402,"end_character":61},"in_reply_to":"7af24918_55180ed3","updated":"2016-03-07 15:16:22.000000000","message":"Yes. I need to rework and reuse this one.","commit_id":"23c04baabd83bdae70eb14a285a883a634d80331"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0aa9b8d2de59487eb75072be7399222e9f01c411","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            self.target_helpers.switch_relationship("},{"line_number":456,"context_line":"                rel_info.get(\u0027RC_name\u0027), axu\u003dFalse)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":459,"context_line":"        # For the mode of global mirror, there is only one replication target."},{"line_number":460,"context_line":"        return [{\u0027target_device_id\u0027: self.target.get(\u0027target_device_id\u0027)}]"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"class StorwizeSVCReplicationMetroMirror("}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_f5983a7a","line":460,"range":{"start_line":458,"start_character":3,"end_line":460,"end_character":74},"updated":"2016-03-03 18:57:18.000000000","message":"same","commit_id":"23c04baabd83bdae70eb14a285a883a634d80331"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                self.target_helpers.switch_relationship("},{"line_number":431,"context_line":"                    rel_info.get(\u0027RC_name\u0027))"},{"line_number":432,"context_line":"            except Exception:"},{"line_number":433,"context_line":"                msg \u003d (_(\u0027Unable to fail-over the volume %s to the secondary \u0027"},{"line_number":434,"context_line":"                         \u0027back-end, because the replication relationship is \u0027"},{"line_number":435,"context_line":"                         \u0027unable to switch.\u0027),"},{"line_number":436,"context_line":"                       vref[\u0027id\u0027])"},{"line_number":437,"context_line":"                LOG.error(msg)"},{"line_number":438,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_253a2de8","line":435,"range":{"start_line":433,"start_character":0,"end_line":435,"end_character":46},"updated":"2016-03-04 20:11:53.000000000","message":"Since you are raising the exception we should get a traceback but I am wondering if it wouldn\u0027t be more user friendly to have the exception in the message to make it clearer the reason for the problem?","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"a60b2ce62afec0d978ac380f3615f6c305e599cc","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                LOG.error(msg)"},{"line_number":379,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def get_relationship_status(self, volume):"},{"line_number":382,"context_line":"        try:"},{"line_number":383,"context_line":"            rel_info \u003d self.target_helpers.get_relationship_info(volume)"},{"line_number":384,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_45aebee6","line":381,"updated":"2016-03-09 17:36:23.000000000","message":"Could optionally get rid of some return statements by doing rel_info \u003d {} at the top here. Then we could get rid of all \u0027return None\u0027","commit_id":"22faa7338bd374254d228e79ac64ac7b2e0c8801"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c045f0db2b03f1543397ef3a9cbfcb8d8149f53f","unresolved":false,"context_lines":[{"line_number":2407,"context_line":"        LOG.debug(\"Exit: update volume copy status.\")"},{"line_number":2408,"context_line":""},{"line_number":2409,"context_line":"    # #### V2 replication methods #### #"},{"line_number":2410,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":2411,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":2412,"context_line":"        rep_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":2413,"context_line":"        if rep_type not in self.replications:"},{"line_number":2414,"context_line":"            msg \u003d _(\"Driver does not support re-enabling replication for a \""},{"line_number":2415,"context_line":"                    \"failed over volume.\")"},{"line_number":2416,"context_line":"            LOG.error(msg)"},{"line_number":2417,"context_line":"            raise exception.ReplicationError(volume_id\u003dvref[\u0027id\u0027],"},{"line_number":2418,"context_line":"                                             reason\u003dmsg)"},{"line_number":2419,"context_line":"        return self.replications.get(rep_type).replication_enable("},{"line_number":2420,"context_line":"            context, vref)"},{"line_number":2421,"context_line":""},{"line_number":2422,"context_line":"    def replication_disable(self, context, vref):"},{"line_number":2423,"context_line":"        \"\"\"Disable replication on a replication capable volume.\"\"\""},{"line_number":2424,"context_line":"        rep_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":2425,"context_line":"        return self.replications[rep_type].replication_disable("},{"line_number":2426,"context_line":"            context, vref)"},{"line_number":2427,"context_line":""},{"line_number":2428,"context_line":"    def failover_host(self, context, volumes, secondary_id\u003dNone):"},{"line_number":2429,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_af82e1c5","line":2426,"range":{"start_line":2410,"start_character":3,"end_line":2426,"end_character":26},"updated":"2016-03-03 18:26:37.000000000","message":"These should be removed","commit_id":"ca69caf2c11cdb33e2eb1edb3644a2ec918281b9"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c045f0db2b03f1543397ef3a9cbfcb8d8149f53f","unresolved":false,"context_lines":[{"line_number":2510,"context_line":""},{"line_number":2511,"context_line":"        return volume_update_list"},{"line_number":2512,"context_line":""},{"line_number":2513,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":2514,"context_line":"        \"\"\"Return the list of replication targets for a volume.\"\"\""},{"line_number":2515,"context_line":"        rep_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":2516,"context_line":""},{"line_number":2517,"context_line":"        # When a volume is failed over, the secondary volume driver will not"},{"line_number":2518,"context_line":"        # have replication configured, so in this case, gracefully handle"},{"line_number":2519,"context_line":"        # request by returning no target volumes"},{"line_number":2520,"context_line":"        if rep_type not in self.replications:"},{"line_number":2521,"context_line":"            targets \u003d []"},{"line_number":2522,"context_line":"        else:"},{"line_number":2523,"context_line":"            targets \u003d self.replications[rep_type].list_replication_targets("},{"line_number":2524,"context_line":"                context, vref)"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"        return {\u0027volume_id\u0027: vref[\u0027id\u0027],"},{"line_number":2527,"context_line":"                \u0027targets\u0027: targets}"},{"line_number":2528,"context_line":""},{"line_number":2529,"context_line":"    def _validate_replication_enabled(self):"},{"line_number":2530,"context_line":"        if not self._replication_enabled:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_cf248d0e","line":2527,"range":{"start_line":2513,"start_character":4,"end_line":2527,"end_character":35},"updated":"2016-03-03 18:26:37.000000000","message":"This should be removed","commit_id":"ca69caf2c11cdb33e2eb1edb3644a2ec918281b9"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c045f0db2b03f1543397ef3a9cbfcb8d8149f53f","unresolved":false,"context_lines":[{"line_number":3129,"context_line":"                    \u0027location_info\u0027: location_info,"},{"line_number":3130,"context_line":"                    \u0027easytier_support\u0027: easy_tier"},{"line_number":3131,"context_line":"                }"},{"line_number":3132,"context_line":"            if self._replication_enabled:"},{"line_number":3133,"context_line":"                pool_stats.update({"},{"line_number":3134,"context_line":"                    \u0027replication_enabled\u0027: self._replication_enabled,"},{"line_number":3135,"context_line":"                    \u0027replication_type\u0027: self._supported_replication_types,"},{"line_number":3136,"context_line":"                    \u0027replication_count\u0027: len(self._replication_targets)"},{"line_number":3137,"context_line":"                })"},{"line_number":3138,"context_line":"            elif self.replication:"},{"line_number":3139,"context_line":"                pool_stats.update(self.replication.get_replication_info())"},{"line_number":3140,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_0f8e75cf","line":3137,"range":{"start_line":3132,"start_character":12,"end_line":3137,"end_character":18},"updated":"2016-03-03 18:26:37.000000000","message":"You should add a replication_targets here as a replacement for list_replication_targets. That way when you run \u0027cinder get-capabilities \u003chost\u003e\u0027 you can see your valid targets","commit_id":"ca69caf2c11cdb33e2eb1edb3644a2ec918281b9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":2432,"context_line":"            msg \u003d _(\"A valid secondary target MUST be specified in order \""},{"line_number":2433,"context_line":"                    \"to failover.\")"},{"line_number":2434,"context_line":"            LOG.error(msg)"},{"line_number":2435,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2436,"context_line":""},{"line_number":2437,"context_line":"        target_id \u003d failover_target[\u0027backend_id\u0027]"},{"line_number":2438,"context_line":"        volume_update_list \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_a85454ca","line":2435,"range":{"start_line":2435,"start_character":12,"end_line":2435,"end_character":63},"updated":"2016-03-04 20:11:53.000000000","message":"I am not sure about this exception.  Maybe it is ok but this would happen if a bad secondary was put in the configuration file.  Right?  So maybe InvalidInput or InvalidHost would make more sense?","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":2432,"context_line":"            msg \u003d _(\"A valid secondary target MUST be specified in order \""},{"line_number":2433,"context_line":"                    \"to failover.\")"},{"line_number":2434,"context_line":"            LOG.error(msg)"},{"line_number":2435,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2436,"context_line":""},{"line_number":2437,"context_line":"        target_id \u003d failover_target[\u0027backend_id\u0027]"},{"line_number":2438,"context_line":"        volume_update_list \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_f71aad16","line":2435,"range":{"start_line":2435,"start_character":12,"end_line":2435,"end_character":63},"in_reply_to":"7af24918_a85454ca","updated":"2016-03-07 15:16:13.000000000","message":"Done","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":2465,"context_line":""},{"line_number":2466,"context_line":"    def _is_host_ready_for_failback(self, ctxt, volumes):"},{"line_number":2467,"context_line":"        valid_syc_status \u003d (\u0027ConsistentSynchronized\u0027, \u0027ConsistentStopped\u0027,"},{"line_number":2468,"context_line":"                            \u0027Synchronized\u0027, \u0027Idling\u0027, \u0027Synchronized\u0027)"},{"line_number":2469,"context_line":"        # Check the status of each volume to see if it is in"},{"line_number":2470,"context_line":"        # a consistent status."},{"line_number":2471,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_28aa0486","line":2468,"range":{"start_line":2468,"start_character":55,"end_line":2468,"end_character":68},"updated":"2016-03-04 20:11:53.000000000","message":"You have \u0027Synchronized\u0027 here twice.","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":2465,"context_line":""},{"line_number":2466,"context_line":"    def _is_host_ready_for_failback(self, ctxt, volumes):"},{"line_number":2467,"context_line":"        valid_syc_status \u003d (\u0027ConsistentSynchronized\u0027, \u0027ConsistentStopped\u0027,"},{"line_number":2468,"context_line":"                            \u0027Synchronized\u0027, \u0027Idling\u0027, \u0027Synchronized\u0027)"},{"line_number":2469,"context_line":"        # Check the status of each volume to see if it is in"},{"line_number":2470,"context_line":"        # a consistent status."},{"line_number":2471,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_372c154a","line":2468,"range":{"start_line":2468,"start_character":55,"end_line":2468,"end_character":68},"in_reply_to":"7af24918_28aa0486","updated":"2016-03-07 15:16:13.000000000","message":"i have got the wrong copy of the states. will change it.","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":2474,"context_line":"                replication \u003d self.replications.get(rep_type)"},{"line_number":2475,"context_line":"                if replication:"},{"line_number":2476,"context_line":"                    status \u003d replication.get_relationship_status(volume)"},{"line_number":2477,"context_line":"                    if status not in valid_syc_status:"},{"line_number":2478,"context_line":"                        return False"},{"line_number":2479,"context_line":"                else:"},{"line_number":2480,"context_line":"                    return False"},{"line_number":2481,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_88a9987e","line":2478,"range":{"start_line":2477,"start_character":0,"end_line":2478,"end_character":36},"updated":"2016-03-04 20:11:53.000000000","message":"This is really confusing.  Maybe put the \u0027else return true\u0027 here instead of having it fall all the way back out to the top level?","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":2474,"context_line":"                replication \u003d self.replications.get(rep_type)"},{"line_number":2475,"context_line":"                if replication:"},{"line_number":2476,"context_line":"                    status \u003d replication.get_relationship_status(volume)"},{"line_number":2477,"context_line":"                    if status not in valid_syc_status:"},{"line_number":2478,"context_line":"                        return False"},{"line_number":2479,"context_line":"                else:"},{"line_number":2480,"context_line":"                    return False"},{"line_number":2481,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_f703cdb6","line":2478,"range":{"start_line":2477,"start_character":0,"end_line":2478,"end_character":36},"in_reply_to":"7af24918_88a9987e","updated":"2016-03-07 15:16:13.000000000","message":"well, it has to be this way.\ni will put more comments.","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":2509,"context_line":""},{"line_number":2510,"context_line":"    def _validate_replication_enabled(self):"},{"line_number":2511,"context_line":"        if not self._replication_enabled:"},{"line_number":2512,"context_line":"            msg \u003d _LE(\"Issuing a fail-over failed because replication is \""},{"line_number":2513,"context_line":"                      \"not properly configured.\")"},{"line_number":2514,"context_line":"            LOG.error(msg)"},{"line_number":2515,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_28fde46e","line":2512,"range":{"start_line":2512,"start_character":18,"end_line":2512,"end_character":21},"updated":"2016-03-04 20:11:53.000000000","message":"This should be _()","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":2509,"context_line":""},{"line_number":2510,"context_line":"    def _validate_replication_enabled(self):"},{"line_number":2511,"context_line":"        if not self._replication_enabled:"},{"line_number":2512,"context_line":"            msg \u003d _LE(\"Issuing a fail-over failed because replication is \""},{"line_number":2513,"context_line":"                      \"not properly configured.\")"},{"line_number":2514,"context_line":"            LOG.error(msg)"},{"line_number":2515,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_b720254b","line":2512,"range":{"start_line":2512,"start_character":18,"end_line":2512,"end_character":21},"in_reply_to":"7af24918_28fde46e","updated":"2016-03-07 15:16:13.000000000","message":"Done","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":2598,"context_line":"                self._replication_enabled \u003d True"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":"            # The self._helpers should point to the target backend"},{"line_number":2601,"context_line":"            # if the backend is in the fail-over state."},{"line_number":2602,"context_line":"            if (self._active_backend_id is not None and"},{"line_number":2603,"context_line":"                    self._active_backend_id !\u003d self._helpers.backend_id):"},{"line_number":2604,"context_line":"                for target in replication_targets:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_483b1039","line":2601,"range":{"start_line":2601,"start_character":38,"end_line":2601,"end_character":48},"updated":"2016-03-04 20:11:53.000000000","message":"failed-over","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":2598,"context_line":"                self._replication_enabled \u003d True"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":"            # The self._helpers should point to the target backend"},{"line_number":2601,"context_line":"            # if the backend is in the fail-over state."},{"line_number":2602,"context_line":"            if (self._active_backend_id is not None and"},{"line_number":2603,"context_line":"                    self._active_backend_id !\u003d self._helpers.backend_id):"},{"line_number":2604,"context_line":"                for target in replication_targets:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_d717b1eb","line":2601,"range":{"start_line":2601,"start_character":38,"end_line":2601,"end_character":48},"in_reply_to":"7af24918_483b1039","updated":"2016-03-07 15:16:13.000000000","message":"Done","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"13de64d1581ec9767f4526ee01cf99bc3283e944","unresolved":false,"context_lines":[{"line_number":2431,"context_line":"            msg \u003d _(\"A valid secondary target MUST be specified in order \""},{"line_number":2432,"context_line":"                    \"to failover.\")"},{"line_number":2433,"context_line":"            LOG.error(msg)"},{"line_number":2434,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"        target_id \u003d failover_target[\u0027backend_id\u0027]"},{"line_number":2437,"context_line":"        volume_update_list \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_a59d0268","line":2434,"range":{"start_line":2434,"start_character":12,"end_line":2434,"end_character":52},"updated":"2016-03-09 17:41:52.000000000","message":"I think you will probably want to raise InvalidReplicationTarget, this is like *the* case it was created for ;)","commit_id":"22faa7338bd374254d228e79ac64ac7b2e0c8801"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"13de64d1581ec9767f4526ee01cf99bc3283e944","unresolved":false,"context_lines":[{"line_number":2449,"context_line":"                        msg \u003d _(\u0027Unable to failover to the secondary. Please \u0027"},{"line_number":2450,"context_line":"                                \u0027make sure that the secondary back-end is \u0027"},{"line_number":2451,"context_line":"                                \u0027ready.\u0027)"},{"line_number":2452,"context_line":"                        raise exception.InvalidReplicationTarget(message\u003dmsg)"},{"line_number":2453,"context_line":"                    volume_update_list.append("},{"line_number":2454,"context_line":"                        {\u0027volume_id\u0027: volume[\u0027id\u0027], \u0027updates\u0027: model_update})"},{"line_number":2455,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_80c39456","line":2452,"updated":"2016-03-09 17:41:52.000000000","message":"Is it ok that if this fails halfway through some of the volumes would have been failed over and others would not?","commit_id":"22faa7338bd374254d228e79ac64ac7b2e0c8801"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"a60b2ce62afec0d978ac380f3615f6c305e599cc","unresolved":false,"context_lines":[{"line_number":2463,"context_line":"        return target_id, volume_update_list"},{"line_number":2464,"context_line":""},{"line_number":2465,"context_line":"    def _is_host_ready_for_failback(self, ctxt, volumes):"},{"line_number":2466,"context_line":"        valid_syc_status \u003d (\u0027ConsistentSynchronized\u0027,"},{"line_number":2467,"context_line":"                            \u0027ConsistentStopped and Synchronized\u0027,"},{"line_number":2468,"context_line":"                            \u0027Idling and Synchronized\u0027)"},{"line_number":2469,"context_line":"        # Check the status of each volume to see if it is in"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_205560f9","line":2466,"updated":"2016-03-09 17:36:23.000000000","message":"Should this be \"valid_sync_status\"?","commit_id":"22faa7338bd374254d228e79ac64ac7b2e0c8801"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"a60b2ce62afec0d978ac380f3615f6c305e599cc","unresolved":false,"context_lines":[{"line_number":3133,"context_line":"        return pool_stats"},{"line_number":3134,"context_line":""},{"line_number":3135,"context_line":"    def _get_replication_targets(self):"},{"line_number":3136,"context_line":"        replication_targets \u003d []"},{"line_number":3137,"context_line":"        for target in self._replication_targets:"},{"line_number":3138,"context_line":"            replication_targets.append(target[\u0027backend_id\u0027])"},{"line_number":3139,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_e0b7f8d5","line":3136,"updated":"2016-03-09 17:36:23.000000000","message":"Optionally could do this in a list comprehension with...\n\nreturn [target[\u0027backend_id\u0027] for target in self._replication_targets]","commit_id":"22faa7338bd374254d228e79ac64ac7b2e0c8801"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_fc.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    2.0 - Code refactor, split init file and placed shared methods for"},{"line_number":81,"context_line":"          FC and iSCSI within the StorwizeSVCCommonDriver class"},{"line_number":82,"context_line":"    2.0.1 - Added support for multiple pools with model update"},{"line_number":83,"context_line":"    2.0.2 - Update replication to version 2.1"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    VERSION \u003d \"2.0.2\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_68536c6d","line":83,"range":{"start_line":83,"start_character":3,"end_line":83,"end_character":9},"updated":"2016-03-04 20:11:53.000000000","message":"Something is wrong here.  This version doesn\u0027t match the version in the storwize_svc_common.py file.","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    2.0 - Code refactor, split init file and placed shared methods for"},{"line_number":81,"context_line":"          FC and iSCSI within the StorwizeSVCCommonDriver class"},{"line_number":82,"context_line":"    2.0.1 - Added support for multiple pools with model update"},{"line_number":83,"context_line":"    2.0.2 - Update replication to version 2.1"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    VERSION \u003d \"2.0.2\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_17d8f952","line":83,"range":{"start_line":83,"start_character":3,"end_line":83,"end_character":9},"in_reply_to":"7af24918_68536c6d","updated":"2016-03-07 15:16:13.000000000","message":"Done","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_iscsi.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c10181419bc480c12e4d5cdf758a8fdd287c2b58","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    2.0 - Code refactor, split init file and placed shared methods for"},{"line_number":81,"context_line":"          FC and iSCSI within the StorwizeSVCCommonDriver class"},{"line_number":82,"context_line":"    2.0.1 - Added support for multiple pools with model update"},{"line_number":83,"context_line":"    2.0.2 - Update replication to version 2.1"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    VERSION \u003d \"2.0.2\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_88e1989d","line":83,"range":{"start_line":83,"start_character":4,"end_line":83,"end_character":10},"updated":"2016-03-04 20:11:53.000000000","message":"Is this the right version?","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"c40aecd8d222aa7771edf2e4d337937dc8e25a3c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    2.0 - Code refactor, split init file and placed shared methods for"},{"line_number":81,"context_line":"          FC and iSCSI within the StorwizeSVCCommonDriver class"},{"line_number":82,"context_line":"    2.0.1 - Added support for multiple pools with model update"},{"line_number":83,"context_line":"    2.0.2 - Update replication to version 2.1"},{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    VERSION \u003d \"2.0.2\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_37d3753a","line":83,"range":{"start_line":83,"start_character":4,"end_line":83,"end_character":10},"in_reply_to":"7af24918_88e1989d","updated":"2016-03-07 15:16:13.000000000","message":"Done","commit_id":"b6d8d6c3af600757aac2b2f511e793ee7e0a06d1"}]}
