)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":16,"context_line":"so there is an investigation regarding how to get the config entries"},{"line_number":17,"context_line":"for a managed failover target."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"cinder.conf should should have the replication config group (3parfcrep)"},{"line_number":20,"context_line":"and at least one other target group (3parfc) as such:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[3parfcrep]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_5803efb8","line":19,"updated":"2015-10-05 22:22:03.000000000","message":"Redundant \"should\".","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"so there is an investigation regarding how to get the config entries"},{"line_number":17,"context_line":"for a managed failover target."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"cinder.conf should should have the replication config group (3parfcrep)"},{"line_number":20,"context_line":"and at least one other target group (3parfc) as such:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[3parfcrep]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_b39344a3","line":19,"in_reply_to":"7a2fa921_5803efb8","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":49,"context_line":"cpg_map \u003d REMOTE_COPY_CPG2:REMOTE_COPY_DEST2 REMOTE_COPY_CPG:REMOTE_COPY_DEST"},{"line_number":50,"context_line":"replication_host \u003d alex-devstack@3parfc#REMOTE_COPY_DEST2"},{"line_number":51,"context_line":"volume_driver \u003d cinder.volume.drivers.san.hp.hp_3par_fc.HP3PARFCDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: Ie965349af719eaacc287a17c9720ad65464002c0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_98f987cb","line":52,"updated":"2015-10-05 22:22:03.000000000","message":"Please register a blueprint for this.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"cpg_map \u003d REMOTE_COPY_CPG2:REMOTE_COPY_DEST2 REMOTE_COPY_CPG:REMOTE_COPY_DEST"},{"line_number":50,"context_line":"replication_host \u003d alex-devstack@3parfc#REMOTE_COPY_DEST2"},{"line_number":51,"context_line":"volume_driver \u003d cinder.volume.drivers.san.hp.hp_3par_fc.HP3PARFCDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: Ie965349af719eaacc287a17c9720ad65464002c0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a2fa921_33ee5423","line":52,"in_reply_to":"7a2fa921_98f987cb","updated":"2015-10-05 22:40:27.000000000","message":"Thanks. I have a blueprint (it is not approved yet), just forgot to include it.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"0f23fac5d1a08c1ac03c29504cf1b528cd5128df","unresolved":false,"context_lines":[{"line_number":46,"context_line":"volume_backend_name \u003d 3parfc"},{"line_number":47,"context_line":"hp3par_cpg \u003d REMOTE_COPY_DEST2"},{"line_number":48,"context_line":"target_name \u003d eos7"},{"line_number":49,"context_line":"cpg_map \u003d REMOTE_COPY_CPG2:REMOTE_COPY_DEST2 REMOTE_COPY_CPG:REMOTE_COPY_DEST"},{"line_number":50,"context_line":"replication_host \u003d alex-devstack@3parfc#REMOTE_COPY_DEST2"},{"line_number":51,"context_line":"volume_driver \u003d cinder.volume.drivers.san.hp.hp_3par_fc.HP3PARFCDriver"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a2fa921_84c0122c","line":49,"updated":"2015-10-06 19:35:21.000000000","message":"Subsequent lines should be wrapped at 72 characters in commit message but not sure how to implement this rule here","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"bbe8b6d8a68ff96b1f80a6d6178c40789030099f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"volume_backend_name \u003d 3parfc"},{"line_number":47,"context_line":"hp3par_cpg \u003d REMOTE_COPY_DEST2"},{"line_number":48,"context_line":"target_name \u003d eos7"},{"line_number":49,"context_line":"cpg_map \u003d REMOTE_COPY_CPG2:REMOTE_COPY_DEST2 REMOTE_COPY_CPG:REMOTE_COPY_DEST"},{"line_number":50,"context_line":"replication_host \u003d alex-devstack@3parfc#REMOTE_COPY_DEST2"},{"line_number":51,"context_line":"volume_driver \u003d cinder.volume.drivers.san.hp.hp_3par_fc.HP3PARFCDriver"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a2fa921_b2e8f0e3","line":49,"in_reply_to":"7a2fa921_84c0122c","updated":"2015-10-06 19:55:11.000000000","message":"Hmm, not sure how to deal with this either. I will look for a way that can properly represent cinder.conf","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"34ee6f9c02b874b9c910aeb74f0a0ca84b8bbf23","unresolved":false,"context_lines":[{"line_number":49,"context_line":"cpg_map \u003d REMOTE_COPY_CPG2:REMOTE_COPY_DEST2 REMOTE_COPY_CPG:REMOTE_COPY_DEST"},{"line_number":50,"context_line":"replication_host \u003d alex-devstack@3parfc#REMOTE_COPY_DEST2"},{"line_number":51,"context_line":"volume_driver \u003d cinder.volume.drivers.san.hp.hp_3par_fc.HP3PARFCDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: Ie965349af719eaacc287a17c9720ad65464002c0"},{"line_number":54,"context_line":"Implements: blueprint hp-3par-v2-replication"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7a2fa921_106f2793","line":52,"updated":"2015-10-07 20:37:21.000000000","message":"Please add a DocImpact flag to the commit message on your next patch set.","commit_id":"b8ed4159dcc1c2ba87f1cfa06be23f1cef5f853e"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"b33eb3fc687b3a46aa0bd5495120ba5e4dd251ef","unresolved":false,"context_lines":[{"line_number":49,"context_line":"cpg_map \u003d REMOTE_COPY_CPG2:REMOTE_COPY_DEST2 REMOTE_COPY_CPG:REMOTE_COPY_DEST"},{"line_number":50,"context_line":"replication_host \u003d alex-devstack@3parfc#REMOTE_COPY_DEST2"},{"line_number":51,"context_line":"volume_driver \u003d cinder.volume.drivers.san.hp.hp_3par_fc.HP3PARFCDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Change-Id: Ie965349af719eaacc287a17c9720ad65464002c0"},{"line_number":54,"context_line":"Implements: blueprint hp-3par-v2-replication"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7a2fa921_30aca39f","line":52,"in_reply_to":"7a2fa921_106f2793","updated":"2015-10-07 20:40:16.000000000","message":"Made the change. It will be in the next commit.","commit_id":"b8ed4159dcc1c2ba87f1cfa06be23f1cef5f853e"}],"cinder/volume/drivers/hpe/hpe_3par_common.py":[{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"d84ac3a8b8ab18b94d4156f1b3bb3debd4664933","unresolved":false,"context_lines":[{"line_number":2629,"context_line":""},{"line_number":2630,"context_line":"        return model_update"},{"line_number":2631,"context_line":""},{"line_number":2632,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":2633,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":2634,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2635,"context_line":"            msg \u003d _(\"Unable to failover because volume is not of \""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba8a016a_ce56b15b","line":2632,"updated":"2015-11-19 03:37:55.000000000","message":"Question: how you fail back the failed-over volume? if the volume doesn\u0027t carry original target info?","commit_id":"ff634aa9a855a13c048cc16fa716bfd69e22826e"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"9f5ab65d5bf52459003ca0dcb685bd611683847e","unresolved":false,"context_lines":[{"line_number":2629,"context_line":""},{"line_number":2630,"context_line":"        return model_update"},{"line_number":2631,"context_line":""},{"line_number":2632,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":2633,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":2634,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2635,"context_line":"            msg \u003d _(\"Unable to failover because volume is not of \""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a8ffd7b_e620f5f9","line":2632,"in_reply_to":"ba8a016a_27a2d799","updated":"2015-11-25 08:24:47.000000000","message":"Hi Alex,\nyou say: \u0027fail-back\u0027 is not supported in managed mode, can you point out why?\n\nfrom my understanding,\neach driver need to store info on volume\u0027s column, which can identify volume\u0027s ownership\n\nfor a failed-over volume, admin can enable its repliation and then perform a failover for this volume again( driver know how to issue command for the right target I think).\n\nThanks\nPeter","commit_id":"ff634aa9a855a13c048cc16fa716bfd69e22826e"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1abedb7b80bc41f24329f23caf91b86c495d5d33","unresolved":false,"context_lines":[{"line_number":2629,"context_line":""},{"line_number":2630,"context_line":"        return model_update"},{"line_number":2631,"context_line":""},{"line_number":2632,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":2633,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":2634,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2635,"context_line":"            msg \u003d _(\"Unable to failover because volume is not of \""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba8a016a_27a2d799","line":2632,"in_reply_to":"ba8a016a_ce56b15b","updated":"2015-11-19 17:16:49.000000000","message":"Hi Peter, at this point in time, v2 replication does not support fail-back, unfortunately :( Hopefully sometime soon, though.\n\nWith unmanaged, I am keeping the original provider ID (the identifier of the array), which I would use to do a fail-back. In regards to managed, I do not have that implemented yet as it is not supported. When it is supported, I plan to use replication_driver_data to hold the original volumes host value.","commit_id":"ff634aa9a855a13c048cc16fa716bfd69e22826e"},{"author":{"_account_id":8857,"name":"Michael Denny","email":"michael.denny@hp.com","username":"mdenny"},"change_message_id":"e54769ba5e6cb484fb562dcf698d6d265ad9e7bc","unresolved":false,"context_lines":[{"line_number":3032,"context_line":"            return True"},{"line_number":3033,"context_line":"        except Exception as ex:"},{"line_number":3034,"context_line":"            self._do_volume_replication_destroy(volume)"},{"line_number":3035,"context_line":"            msg \u003d (_(\"There was an error setting up a remote copy group \""},{"line_number":3036,"context_line":"                     \"on the 3PAR arrays: (\u0027%s\u0027). The volume will not be \""},{"line_number":3037,"context_line":"                     \"recognized as replication type.\") %"},{"line_number":3038,"context_line":"                   six.text_type(ex))"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_96f493cf","line":3035,"updated":"2015-12-01 19:46:21.000000000","message":"More descriptive error message needs to include replication:sync_period","commit_id":"67ab78a1654e8f413f7c6f54c1cbb4b999a19d82"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"ab933992b9ca03a46d0d20941a675416267ebf1c","unresolved":false,"context_lines":[{"line_number":3032,"context_line":"            return True"},{"line_number":3033,"context_line":"        except Exception as ex:"},{"line_number":3034,"context_line":"            self._do_volume_replication_destroy(volume)"},{"line_number":3035,"context_line":"            msg \u003d (_(\"There was an error setting up a remote copy group \""},{"line_number":3036,"context_line":"                     \"on the 3PAR arrays: (\u0027%s\u0027). The volume will not be \""},{"line_number":3037,"context_line":"                     \"recognized as replication type.\") %"},{"line_number":3038,"context_line":"                   six.text_type(ex))"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_67ca9b51","line":3035,"in_reply_to":"9a8ffd7b_96f493cf","updated":"2015-12-01 20:47:42.000000000","message":"This error is the generic error which is needed, but \u0027%s\u0027 will contain a more detailed reason of the exact failure, depending on where exactly it fails. \n\n\nIn the case where replication:sync_period is not provided, \"The replication mode was not configured correctly in the volume type extra_specs.\" will be in place of %s, which comes from lines 2947 - 2948.\n\n\nAdditionally, lines 2862 - 2864 will log the following as an error \"Extra spec replication:sync_period must be greater than 299 and less than 31622401 seconds.\". You will see all of these in the log if you forget to provide the sync_period in periodic mode. \n\n\nI can update lines 2947 - 2948 to include information about the sync_period, but then you will see two error messages logged with the exact same things. Here is what \u0027%s\u0027 will be replaced with now: \"The replication mode was not configured correctly in the volume type extra_specs. If replication:mode is periodic, replication:sync_period must also be specified and be between 300 and 31622400 seconds.\"","commit_id":"67ab78a1654e8f413f7c6f54c1cbb4b999a19d82"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    # v2 replication constants"},{"line_number":240,"context_line":"    SYNC \u003d 1"},{"line_number":241,"context_line":"    PERIODIC \u003d 2"},{"line_number":242,"context_line":"    FAILOVER_MODE \u003d 7"},{"line_number":243,"context_line":"    EXTRA_SPEC_REP_MODE \u003d \"replication:mode\""},{"line_number":244,"context_line":"    EXTRA_SPEC_REP_SYNC_PERIOD \u003d \"replication:sync_period\""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_c1ef721b","line":242,"updated":"2015-12-02 20:30:43.000000000","message":"What does 7 mean?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"491925304bbabb3de8f1329279fc94d5632bb772","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    # v2 replication constants"},{"line_number":240,"context_line":"    SYNC \u003d 1"},{"line_number":241,"context_line":"    PERIODIC \u003d 2"},{"line_number":242,"context_line":"    FAILOVER_MODE \u003d 7"},{"line_number":243,"context_line":"    EXTRA_SPEC_REP_MODE \u003d \"replication:mode\""},{"line_number":244,"context_line":"    EXTRA_SPEC_REP_SYNC_PERIOD \u003d \"replication:sync_period\""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_f5134c63","line":242,"in_reply_to":"9a8ffd7b_c1ef721b","updated":"2015-12-02 21:26:32.000000000","message":"On second though...I actually declared constants for these modes in our client :p\n\nI will use that instead","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    # v2 replication constants"},{"line_number":240,"context_line":"    SYNC \u003d 1"},{"line_number":241,"context_line":"    PERIODIC \u003d 2"},{"line_number":242,"context_line":"    FAILOVER_MODE \u003d 7"},{"line_number":243,"context_line":"    EXTRA_SPEC_REP_MODE \u003d \"replication:mode\""},{"line_number":244,"context_line":"    EXTRA_SPEC_REP_SYNC_PERIOD \u003d \"replication:sync_period\""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_0a890f26","line":242,"in_reply_to":"9a8ffd7b_c1ef721b","updated":"2015-12-02 21:15:31.000000000","message":"Our client has multiple different disaster recovery modes. In this case, we use option \u00277\u0027, which is a failover. I can try and make this a little more detailed if possible, or at least add a comment.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                self._do_replication_setup()"},{"line_number":377,"context_line":"            if self._replication_enabled:"},{"line_number":378,"context_line":"                self.client \u003d None"},{"line_number":379,"context_line":"            raise exception.InvalidInput(ex)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        if context:"},{"line_number":382,"context_line":"            # The context is None except at driver startup."}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_6417b445","line":379,"updated":"2015-12-02 20:30:43.000000000","message":"If you throw an exception here, how can you still do a failover?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                self._do_replication_setup()"},{"line_number":377,"context_line":"            if self._replication_enabled:"},{"line_number":378,"context_line":"                self.client \u003d None"},{"line_number":379,"context_line":"            raise exception.InvalidInput(ex)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        if context:"},{"line_number":382,"context_line":"            # The context is None except at driver startup."}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_aacfa354","line":379,"in_reply_to":"9a8ffd7b_6417b445","updated":"2015-12-02 21:15:31.000000000","message":"The driver is not initialized but list_replication_targets and replication_failover can still be called when this is the case. This is something hemna detailed in a previous patch and can be seen here: https://github.com/openstack/cinder/blob/master/cinder/volume/manager.py#L3254-L3259","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":2735,"context_line":"                            \"targets returned from list_replication_targets \""},{"line_number":2736,"context_line":"                            \"are pulled directly from cinder.conf and are not \""},{"line_number":2737,"context_line":"                            \"guarenteed to be available because they could \""},{"line_number":2738,"context_line":"                            \"be verified with the primary array.\"))"},{"line_number":2739,"context_line":""},{"line_number":2740,"context_line":"        replication_targets \u003d []"},{"line_number":2741,"context_line":"        for target in self._replication_targets:"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_a4935c5a","line":2738,"updated":"2015-12-02 20:30:43.000000000","message":"they could not be verified...","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":2735,"context_line":"                            \"targets returned from list_replication_targets \""},{"line_number":2736,"context_line":"                            \"are pulled directly from cinder.conf and are not \""},{"line_number":2737,"context_line":"                            \"guarenteed to be available because they could \""},{"line_number":2738,"context_line":"                            \"be verified with the primary array.\"))"},{"line_number":2739,"context_line":""},{"line_number":2740,"context_line":"        replication_targets \u003d []"},{"line_number":2741,"context_line":"        for target in self._replication_targets:"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_cafa2777","line":2738,"in_reply_to":"9a8ffd7b_a4935c5a","updated":"2015-12-02 21:15:31.000000000","message":"Oops. Done.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":2910,"context_line":"        \"\"\"This function will do or ensure the following:"},{"line_number":2911,"context_line":""},{"line_number":2912,"context_line":"        -Create volume on main array (already done in create_volume)"},{"line_number":2913,"context_line":"        -Snapshot volume on main array"},{"line_number":2914,"context_line":"        -Create Remote Copy Group on main array"},{"line_number":2915,"context_line":"        -Add volume to Remote Copy Group on main array"},{"line_number":2916,"context_line":"        -Start remote copy"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_4474f0fc","line":2913,"updated":"2015-12-02 20:30:43.000000000","message":"How do you manage these snapshots?  They are not managed by Cinder, right? What happened to them after failover?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":2910,"context_line":"        \"\"\"This function will do or ensure the following:"},{"line_number":2911,"context_line":""},{"line_number":2912,"context_line":"        -Create volume on main array (already done in create_volume)"},{"line_number":2913,"context_line":"        -Snapshot volume on main array"},{"line_number":2914,"context_line":"        -Create Remote Copy Group on main array"},{"line_number":2915,"context_line":"        -Add volume to Remote Copy Group on main array"},{"line_number":2916,"context_line":"        -Start remote copy"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_8a6e5f2d","line":2913,"in_reply_to":"9a8ffd7b_4474f0fc","updated":"2015-12-02 21:15:31.000000000","message":"This is actually leftover and is no longer applicable. I am not creating a snapshot. Thanks for pointing this out, I will update this comment block.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":3050,"context_line":"        -Stop remote copy"},{"line_number":3051,"context_line":"        -Remove volume from Remote Copy Group on main array"},{"line_number":3052,"context_line":"        -Delete Remote Copy Group from main array"},{"line_number":3053,"context_line":"        -Delete snapshot of original volume on main array"},{"line_number":3054,"context_line":"        -Delete volume from main array"},{"line_number":3055,"context_line":"        \"\"\""},{"line_number":3056,"context_line":"        if not rcg_name:"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_6a48dbb3","line":3053,"updated":"2015-12-02 21:15:31.000000000","message":"Will remove this reference as well","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":3078,"context_line":""},{"line_number":3079,"context_line":"        # Delete volume on the main array."},{"line_number":3080,"context_line":"        try:"},{"line_number":3081,"context_line":"            self.client.deleteVolume(vol_name)"},{"line_number":3082,"context_line":"        except Exception:"},{"line_number":3083,"context_line":"            pass"},{"line_number":3084,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_af11f553","line":3081,"updated":"2015-12-02 20:30:43.000000000","message":"Does this automatically delete snapshots with the volume?  So it is taken care of by your client API?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":3078,"context_line":""},{"line_number":3079,"context_line":"        # Delete volume on the main array."},{"line_number":3080,"context_line":"        try:"},{"line_number":3081,"context_line":"            self.client.deleteVolume(vol_name)"},{"line_number":3082,"context_line":"        except Exception:"},{"line_number":3083,"context_line":"            pass"},{"line_number":3084,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_ead28bd0","line":3081,"in_reply_to":"9a8ffd7b_af11f553","updated":"2015-12-02 21:15:31.000000000","message":"Same as above, no longer applicable.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"7f52b644d7887bd2953827a9361774d58e32c55d","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        self.client.logout()"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _create_replication_client(self, remote_array):"},{"line_number":332,"context_line":"        cl \u003d client.HPE3ParClient(remote_array[\u0027hpe3par_api_url\u0027])"},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            cl.login(remote_array[\u0027hpe3par_username\u0027],"},{"line_number":335,"context_line":"                     remote_array[\u0027hpe3par_password\u0027])"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_5a42df3f","line":332,"updated":"2015-12-04 21:46:52.000000000","message":"1) This also might raise an exception, due to an induced call to getWsApiVersion().\n\n2) Also, we don\u0027t check the version on the remote array and make sure it\u0027s in the valid ranges needed.","commit_id":"db1d6974b8d348b385d969b1f35ab0ef605986a1"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"7b55f455d222b95872a418a91f8f6a1faa4586b7","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        self.client.logout()"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _create_replication_client(self, remote_array):"},{"line_number":332,"context_line":"        cl \u003d client.HPE3ParClient(remote_array[\u0027hpe3par_api_url\u0027])"},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            cl.login(remote_array[\u0027hpe3par_username\u0027],"},{"line_number":335,"context_line":"                     remote_array[\u0027hpe3par_password\u0027])"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_3a5113d9","line":332,"in_reply_to":"7a740942_5a42df3f","updated":"2015-12-04 21:54:32.000000000","message":"1). I can put this in the try block. Very strange the init does that, but oh well.\n\n2). in _do_replication_setup we check to make sure the primary array is the same version as all the secondary arrays.","commit_id":"db1d6974b8d348b385d969b1f35ab0ef605986a1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"be7ae8bf5394b332c53ffadf57b030b6da1ee120","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        try:"},{"line_number":409,"context_line":"            self.client_login()"},{"line_number":410,"context_line":"            info \u003d self.client.getStorageSystemInfo()"},{"line_number":411,"context_line":"            self.client.id \u003d six.text_type(info[\u0027id\u0027])"},{"line_number":412,"context_line":"            self.client_logout()"},{"line_number":413,"context_line":"        except Exception:"},{"line_number":414,"context_line":"            self.client.id \u003d 0"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_978340cc","line":411,"updated":"2015-12-04 21:34:09.000000000","message":"shouldn\u0027t we still have a finally clause here?  else we could get into a state where we don\u0027t logout and leave a session hanging.","commit_id":"db1d6974b8d348b385d969b1f35ab0ef605986a1"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"7b55f455d222b95872a418a91f8f6a1faa4586b7","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        try:"},{"line_number":409,"context_line":"            self.client_login()"},{"line_number":410,"context_line":"            info \u003d self.client.getStorageSystemInfo()"},{"line_number":411,"context_line":"            self.client.id \u003d six.text_type(info[\u0027id\u0027])"},{"line_number":412,"context_line":"            self.client_logout()"},{"line_number":413,"context_line":"        except Exception:"},{"line_number":414,"context_line":"            self.client.id \u003d 0"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_fa614ba9","line":411,"in_reply_to":"7a740942_978340cc","updated":"2015-12-04 21:54:32.000000000","message":"probably best","commit_id":"db1d6974b8d348b385d969b1f35ab0ef605986a1"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bf3f02cabf73d323b51df953d0fb779610fd55bc","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"            # Try and stop remote-copy on main array."},{"line_number":2685,"context_line":"            rcg_name \u003d self._get_3par_rcg_name(volume[\u0027id\u0027])"},{"line_number":2686,"context_line":"            self.client.stopRemoteCopy(rcg_name)"},{"line_number":2687,"context_line":"        except Exception:"},{"line_number":2688,"context_line":"            pass"},{"line_number":2689,"context_line":""},{"line_number":2690,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":44,"id":"7a740942_81067acc","line":2687,"updated":"2015-12-07 07:18:00.000000000","message":"If there is a log message will be better.","commit_id":"b5aa2f8ce9d3eeda0b6ad49e6cefe7b5a87cddfd"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"dc63ddca01a9009d7db29830e1676aa6f6e01037","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"            # Try and stop remote-copy on main array."},{"line_number":2685,"context_line":"            rcg_name \u003d self._get_3par_rcg_name(volume[\u0027id\u0027])"},{"line_number":2686,"context_line":"            self.client.stopRemoteCopy(rcg_name)"},{"line_number":2687,"context_line":"        except Exception:"},{"line_number":2688,"context_line":"            pass"},{"line_number":2689,"context_line":""},{"line_number":2690,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":44,"id":"7a740942_d2daf64b","line":2687,"in_reply_to":"7a740942_81067acc","updated":"2015-12-07 16:44:44.000000000","message":"I didn\u0027t put one because at the time you would issue a fail-over, chances are remote copy will already be stopped. I am issuing the stop command manually just in case for some strange reason it is still running. \n\nIf you try and stop remote copy when it is already stopped, an exception will be raised from this client call. I basically just eat the exception and proceed with the fail-over.","commit_id":"b5aa2f8ce9d3eeda0b6ad49e6cefe7b5a87cddfd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0991b281fca97d013f30731079b6b01c12c0a544","unresolved":false,"context_lines":[{"line_number":2684,"context_line":"            # Try and stop remote-copy on main array."},{"line_number":2685,"context_line":"            rcg_name \u003d self._get_3par_rcg_name(volume[\u0027id\u0027])"},{"line_number":2686,"context_line":"            self.client.stopRemoteCopy(rcg_name)"},{"line_number":2687,"context_line":"        except Exception:"},{"line_number":2688,"context_line":"            pass"},{"line_number":2689,"context_line":""},{"line_number":2690,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":44,"id":"7a740942_576571b2","line":2687,"in_reply_to":"7a740942_d2daf64b","updated":"2015-12-08 09:09:41.000000000","message":"Okay, that\u0027s reasonable, thanks.","commit_id":"b5aa2f8ce9d3eeda0b6ad49e6cefe7b5a87cddfd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"bf3f02cabf73d323b51df953d0fb779610fd55bc","unresolved":false,"context_lines":[{"line_number":2860,"context_line":"            # If replication:mode is periodic, replication_sync_period must be"},{"line_number":2861,"context_line":"            # set between 300 - 31622400 seconds."},{"line_number":2862,"context_line":"            if mode \u003d\u003d self.PERIODIC and ("},{"line_number":2863,"context_line":"               sync_num \u003c 300 or sync_num \u003e 31622400):"},{"line_number":2864,"context_line":"                LOG.error(_LE(\"Extra spec replication:sync_period must be \""},{"line_number":2865,"context_line":"                              \"greater than 299 and less than 31622401 \""},{"line_number":2866,"context_line":"                              \"seconds.\"))"}],"source_content_type":"text/x-python","patch_set":44,"id":"7a740942_e1edfeef","line":2863,"updated":"2015-12-07 07:18:00.000000000","message":"Suggest to make those two number as constant. Or are they possible to be config options?","commit_id":"b5aa2f8ce9d3eeda0b6ad49e6cefe7b5a87cddfd"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"0991b281fca97d013f30731079b6b01c12c0a544","unresolved":false,"context_lines":[{"line_number":2860,"context_line":"            # If replication:mode is periodic, replication_sync_period must be"},{"line_number":2861,"context_line":"            # set between 300 - 31622400 seconds."},{"line_number":2862,"context_line":"            if mode \u003d\u003d self.PERIODIC and ("},{"line_number":2863,"context_line":"               sync_num \u003c 300 or sync_num \u003e 31622400):"},{"line_number":2864,"context_line":"                LOG.error(_LE(\"Extra spec replication:sync_period must be \""},{"line_number":2865,"context_line":"                              \"greater than 299 and less than 31622401 \""},{"line_number":2866,"context_line":"                              \"seconds.\"))"}],"source_content_type":"text/x-python","patch_set":44,"id":"7a740942_976759b6","line":2863,"in_reply_to":"7a740942_129b9e73","updated":"2015-12-08 09:09:41.000000000","message":"Great.","commit_id":"b5aa2f8ce9d3eeda0b6ad49e6cefe7b5a87cddfd"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"dc63ddca01a9009d7db29830e1676aa6f6e01037","unresolved":false,"context_lines":[{"line_number":2860,"context_line":"            # If replication:mode is periodic, replication_sync_period must be"},{"line_number":2861,"context_line":"            # set between 300 - 31622400 seconds."},{"line_number":2862,"context_line":"            if mode \u003d\u003d self.PERIODIC and ("},{"line_number":2863,"context_line":"               sync_num \u003c 300 or sync_num \u003e 31622400):"},{"line_number":2864,"context_line":"                LOG.error(_LE(\"Extra spec replication:sync_period must be \""},{"line_number":2865,"context_line":"                              \"greater than 299 and less than 31622401 \""},{"line_number":2866,"context_line":"                              \"seconds.\"))"}],"source_content_type":"text/x-python","patch_set":44,"id":"7a740942_129b9e73","line":2863,"in_reply_to":"7a740942_e1edfeef","updated":"2015-12-07 16:44:44.000000000","message":"I could make these constants if there is a need for another patch set. They wouldn\u0027t work as config options as they are hard limits on the 3PAR.","commit_id":"b5aa2f8ce9d3eeda0b6ad49e6cefe7b5a87cddfd"}],"cinder/volume/drivers/hpe/hpe_3par_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            common.do_setup(None, timeout\u003dtimeout)"},{"line_number":115,"context_line":"            common.client_login()"},{"line_number":116,"context_line":"        except Exception:"},{"line_number":117,"context_line":"            if common._replication_enabled:"},{"line_number":118,"context_line":"                pass"},{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_7eb1818e","line":117,"updated":"2015-12-02 20:30:43.000000000","message":"Can you log a warning or info message here?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            common.do_setup(None, timeout\u003dtimeout)"},{"line_number":115,"context_line":"            common.client_login()"},{"line_number":116,"context_line":"        except Exception:"},{"line_number":117,"context_line":"            if common._replication_enabled:"},{"line_number":118,"context_line":"                pass"},{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_2af41359","line":117,"in_reply_to":"9a8ffd7b_7eb1818e","updated":"2015-12-02 21:15:31.000000000","message":"Probably a good idea. Will log a warning message saying the only things can be done are fail-over related.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def _logout(self, common):"},{"line_number":124,"context_line":"        # If replication is enabled and we do not have a client ID, we did not"},{"line_number":125,"context_line":"        # login, but can still failover. There is no need to logout."},{"line_number":126,"context_line":"        if common.client is None and common._replication_enabled:"},{"line_number":127,"context_line":"            return"},{"line_number":128,"context_line":"        common.client_logout()"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_fe633118","line":126,"updated":"2015-12-02 20:30:43.000000000","message":"Same","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def _logout(self, common):"},{"line_number":124,"context_line":"        # If replication is enabled and we do not have a client ID, we did not"},{"line_number":125,"context_line":"        # login, but can still failover. There is no need to logout."},{"line_number":126,"context_line":"        if common.client is None and common._replication_enabled:"},{"line_number":127,"context_line":"            return"},{"line_number":128,"context_line":"        common.client_logout()"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_eae92b80","line":126,"in_reply_to":"9a8ffd7b_fe633118","updated":"2015-12-02 21:15:31.000000000","message":"Here I don\u0027t think it is needed. There is no connection being held open for the array, _logout() will pretty much be skipped over in this case.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"be7ae8bf5394b332c53ffadf57b030b6da1ee120","unresolved":false,"context_lines":[{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":609,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":610,"context_line":"        common \u003d self._login(timeout\u003d30)"},{"line_number":611,"context_line":"        try:"},{"line_number":612,"context_line":"            return common.replication_failover(context, volume, secondary)"},{"line_number":613,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_c114a945","line":610,"updated":"2015-12-04 21:34:09.000000000","message":"Do you think there is any argument for making that timeout configurable ?   I guess if there is a need, we can add it later.","commit_id":"db1d6974b8d348b385d969b1f35ab0ef605986a1"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"7b55f455d222b95872a418a91f8f6a1faa4586b7","unresolved":false,"context_lines":[{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":609,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":610,"context_line":"        common \u003d self._login(timeout\u003d30)"},{"line_number":611,"context_line":"        try:"},{"line_number":612,"context_line":"            return common.replication_failover(context, volume, secondary)"},{"line_number":613,"context_line":"        finally:"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_ba298339","line":610,"in_reply_to":"7a740942_c114a945","updated":"2015-12-04 21:54:32.000000000","message":"This is something we could/should do at a later date, yeah. 30 seconds might be a long wait time for some people before this can actually execute.","commit_id":"db1d6974b8d348b385d969b1f35ab0ef605986a1"}],"cinder/volume/drivers/hpe/hpe_3par_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            common.client_login()"},{"line_number":126,"context_line":"        except Exception:"},{"line_number":127,"context_line":"            if common._replication_enabled:"},{"line_number":128,"context_line":"                pass"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_7e274112","line":127,"updated":"2015-12-02 20:30:43.000000000","message":"It seems we should log a warning or info message here about the login failure even though we continue?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            common.client_login()"},{"line_number":126,"context_line":"        except Exception:"},{"line_number":127,"context_line":"            if common._replication_enabled:"},{"line_number":128,"context_line":"                pass"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_558d787a","line":127,"in_reply_to":"9a8ffd7b_7e274112","updated":"2015-12-02 21:15:31.000000000","message":"Done here as well","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8174d8fbc5a3e1c46bce23aa85e8a5994e198ecf","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def _logout(self, common):"},{"line_number":134,"context_line":"        # If replication is enabled and we do not have a client ID, we did not"},{"line_number":135,"context_line":"        # login, but can still failover. There is no need to logout."},{"line_number":136,"context_line":"        if common.client is None and common._replication_enabled:"},{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":"        common.client_logout()"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_9ed9c5f5","line":136,"updated":"2015-12-02 20:30:43.000000000","message":"Same here.  Can you log a warning or info message here?","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1efe02c0d4e0339fae14c3f2348460ef78cb3cbc","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def _logout(self, common):"},{"line_number":134,"context_line":"        # If replication is enabled and we do not have a client ID, we did not"},{"line_number":135,"context_line":"        # login, but can still failover. There is no need to logout."},{"line_number":136,"context_line":"        if common.client is None and common._replication_enabled:"},{"line_number":137,"context_line":"            return"},{"line_number":138,"context_line":"        common.client_logout()"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"9a8ffd7b_75e19c29","line":136,"in_reply_to":"9a8ffd7b_9ed9c5f5","updated":"2015-12-02 21:15:31.000000000","message":"Same, I don\u0027t think there is a need to log a warning when logging out. This is essentially being skipped if the primary array is down and replication is enabled.","commit_id":"6f32c5b865afabad1b81e0a438af003e07734a95"}],"cinder/volume/drivers/san/hp/hp_3par_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    cfg.BoolOpt(\u0027hp3par_iscsi_chap_enabled\u0027,"},{"line_number":117,"context_line":"                default\u003dFalse,"},{"line_number":118,"context_line":"                help\u003d\"Enable CHAP authentication for iSCSI connections.\"),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_b86a4319","line":119,"updated":"2015-10-05 22:22:03.000000000","message":"I think a few of these config options should be in driver.py.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    cfg.BoolOpt(\u0027hp3par_iscsi_chap_enabled\u0027,"},{"line_number":117,"context_line":"                default\u003dFalse,"},{"line_number":118,"context_line":"                help\u003d\"Enable CHAP authentication for iSCSI connections.\"),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_13d0f852","line":119,"in_reply_to":"7a2fa921_b86a4319","updated":"2015-10-05 22:40:27.000000000","message":"I noticed the SolidFire and Pure are using some of these as well. I will bring it up with them and see.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""},{"line_number":125,"context_line":"                    \"Range is 300 - 31622400.\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_f85e7b75","line":122,"updated":"2015-10-05 22:22:03.000000000","message":"This one too.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""},{"line_number":125,"context_line":"                    \"Range is 300 - 31622400.\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_d3c920ae","line":122,"in_reply_to":"7a2fa921_f85e7b75","updated":"2015-10-05 22:40:27.000000000","message":"same","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":131,"context_line":"               default\u003dNone,"},{"line_number":132,"context_line":"               help\u003d\"A CPG map in order to map local CPG\u0027s to their \""},{"line_number":133,"context_line":"                    \"destination CPG on a replicated target.\"),"},{"line_number":134,"context_line":"    cfg.StrOpt(\u0027replication_host\u0027,"},{"line_number":135,"context_line":"               default\u003dNone,"},{"line_number":136,"context_line":"               help\u003d\"The host of the secondary backend to use for\""},{"line_number":137,"context_line":"                    \"managed replication. Must be in format: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_38ccf334","line":134,"updated":"2015-10-05 22:22:03.000000000","message":"This seems to be a common one too.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"               default\u003dNone,"},{"line_number":132,"context_line":"               help\u003d\"A CPG map in order to map local CPG\u0027s to their \""},{"line_number":133,"context_line":"                    \"destination CPG on a replicated target.\"),"},{"line_number":134,"context_line":"    cfg.StrOpt(\u0027replication_host\u0027,"},{"line_number":135,"context_line":"               default\u003dNone,"},{"line_number":136,"context_line":"               help\u003d\"The host of the secondary backend to use for\""},{"line_number":137,"context_line":"                    \"managed replication. Must be in format: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_f3ce9cb3","line":134,"in_reply_to":"7a2fa921_38ccf334","updated":"2015-10-05 22:40:27.000000000","message":"same","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":2615,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":2616,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":2617,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2618,"context_line":"            msg \u003d _LE(\"Unable to failover because volume is not of \""},{"line_number":2619,"context_line":"                      \"replicated type.\")"},{"line_number":2620,"context_line":"            LOG.error(msg)"},{"line_number":2621,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_189577e3","line":2618,"updated":"2015-10-05 22:22:03.000000000","message":"Should be _, not _LE, as it goes to the exception.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":2615,"context_line":"    def replication_failover(self, context, volume, secondary):"},{"line_number":2616,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":2617,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2618,"context_line":"            msg \u003d _LE(\"Unable to failover because volume is not of \""},{"line_number":2619,"context_line":"                      \"replicated type.\")"},{"line_number":2620,"context_line":"            LOG.error(msg)"},{"line_number":2621,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_73bb6c0f","line":2618,"in_reply_to":"7a2fa921_189577e3","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":2627,"context_line":"                break"},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"        if not failover_target:"},{"line_number":2630,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":2631,"context_line":"                      \"to failover.\")"},{"line_number":2632,"context_line":"            LOG.error(msg)"},{"line_number":2633,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_f8a3db4d","line":2630,"updated":"2015-10-05 22:22:03.000000000","message":"Same here","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":2627,"context_line":"                break"},{"line_number":2628,"context_line":""},{"line_number":2629,"context_line":"        if not failover_target:"},{"line_number":2630,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":2631,"context_line":"                      \"to failover.\")"},{"line_number":2632,"context_line":"            LOG.error(msg)"},{"line_number":2633,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_133798b1","line":2630,"in_reply_to":"7a2fa921_f8a3db4d","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":2633,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2634,"context_line":""},{"line_number":2635,"context_line":"        if self.client is not None and failover_target[\u0027id\u0027] \u003d\u003d self.client.id:"},{"line_number":2636,"context_line":"            msg \u003d _LE(\"The failover array cannot be the primary array.\")"},{"line_number":2637,"context_line":"            LOG.error(msg)"},{"line_number":2638,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2639,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_988987cd","line":2636,"updated":"2015-10-05 22:22:03.000000000","message":"Here","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":2633,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2634,"context_line":""},{"line_number":2635,"context_line":"        if self.client is not None and failover_target[\u0027id\u0027] \u003d\u003d self.client.id:"},{"line_number":2636,"context_line":"            msg \u003d _LE(\"The failover array cannot be the primary array.\")"},{"line_number":2637,"context_line":"            LOG.error(msg)"},{"line_number":2638,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2639,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_333c1493","line":2636,"in_reply_to":"7a2fa921_988987cd","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":2659,"context_line":"                model_update[\u0027host\u0027] \u003d failover_target[\u0027replication_host\u0027]"},{"line_number":2660,"context_line":""},{"line_number":2661,"context_line":"        except Exception as ex:"},{"line_number":2662,"context_line":"            msg \u003d _LE(\"There was a problem with the failover (%s) and it was \""},{"line_number":2663,"context_line":"                      \"unsuccessful.\") % six.text_type(ex)"},{"line_number":2664,"context_line":"            LOG.error(msg)"},{"line_number":2665,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_5893effa","line":2662,"updated":"2015-10-05 22:22:03.000000000","message":"Here","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":2659,"context_line":"                model_update[\u0027host\u0027] \u003d failover_target[\u0027replication_host\u0027]"},{"line_number":2660,"context_line":""},{"line_number":2661,"context_line":"        except Exception as ex:"},{"line_number":2662,"context_line":"            msg \u003d _LE(\"There was a problem with the failover (%s) and it was \""},{"line_number":2663,"context_line":"                      \"unsuccessful.\") % six.text_type(ex)"},{"line_number":2664,"context_line":"            LOG.error(msg)"},{"line_number":2665,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_d340400a","line":2662,"in_reply_to":"7a2fa921_5893effa","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":2719,"context_line":"            self._replication_managed \u003d ("},{"line_number":2720,"context_line":"                self.config.managed_replication_target)"},{"line_number":2721,"context_line":"            if not self._replication_managed:"},{"line_number":2722,"context_line":"                msg \u003d _LE(\"Unmanaged replication is not supported at this \""},{"line_number":2723,"context_line":"                          \"time. Please configure cinder.conf for managed \""},{"line_number":2724,"context_line":"                          \"replication.\")"},{"line_number":2725,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_38c153e5","line":2722,"updated":"2015-10-05 22:22:03.000000000","message":"Here","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":2719,"context_line":"            self._replication_managed \u003d ("},{"line_number":2720,"context_line":"                self.config.managed_replication_target)"},{"line_number":2721,"context_line":"            if not self._replication_managed:"},{"line_number":2722,"context_line":"                msg \u003d _LE(\"Unmanaged replication is not supported at this \""},{"line_number":2723,"context_line":"                          \"time. Please configure cinder.conf for managed \""},{"line_number":2724,"context_line":"                          \"replication.\")"},{"line_number":2725,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_135eb8e9","line":2722,"in_reply_to":"7a2fa921_38c153e5","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"959949ddb67a77771cd81071af4ddbe3d7279e45","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                help\u003d\"Enable CHAP authentication for iSCSI connections.\"),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_d982a1c8","line":121,"updated":"2015-10-06 00:07:12.000000000","message":"replication_mode should be part of the type based on the design, spec and docs I think.","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"a48a1da7414b832b738beb28d6e6d79ab859aba6","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                help\u003d\"Enable CHAP authentication for iSCSI connections.\"),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_4b823454","line":121,"in_reply_to":"7a2fa921_d982a1c8","updated":"2015-10-06 00:27:39.000000000","message":"With 3PAR, there are two distinct supported modes. sync and async periodic. we want to allow an admin to configure the mode to whatever fits their environment best. If they choose periodic mode, replication_sync_period must also be specified. If not there is no need for it.  replication_type will report either sync or periodic depending on how it is configured in cinder.conf","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"959949ddb67a77771cd81071af4ddbe3d7279e45","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""},{"line_number":125,"context_line":"                    \"Range is 300 - 31622400.\"),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027target_name\u0027,"},{"line_number":127,"context_line":"               default\u003dNone,"},{"line_number":128,"context_line":"               help\u003d\"The target name associated with the remote copy group \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_f9875dd5","line":125,"updated":"2015-10-06 00:07:12.000000000","message":"Same as above","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"a48a1da7414b832b738beb28d6e6d79ab859aba6","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""},{"line_number":125,"context_line":"                    \"Range is 300 - 31622400.\"),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027target_name\u0027,"},{"line_number":127,"context_line":"               default\u003dNone,"},{"line_number":128,"context_line":"               help\u003d\"The target name associated with the remote copy group \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_cb964494","line":125,"in_reply_to":"7a2fa921_f9875dd5","updated":"2015-10-06 00:27:39.000000000","message":"same. the admin can also choose the sync period.","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"959949ddb67a77771cd81071af4ddbe3d7279e45","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    cfg.StrOpt(\u0027target_name\u0027,"},{"line_number":127,"context_line":"               default\u003dNone,"},{"line_number":128,"context_line":"               help\u003d\"The target name associated with the remote copy group \""},{"line_number":129,"context_line":"                    \"on the 3PAR array.\"),"},{"line_number":130,"context_line":"    cfg.StrOpt(\u0027cpg_map\u0027,"},{"line_number":131,"context_line":"               default\u003dNone,"},{"line_number":132,"context_line":"               help\u003d\"A CPG map in order to map local CPG\u0027s to their \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_19601935","line":129,"updated":"2015-10-06 00:07:12.000000000","message":"Why would we have a special handle in 3par driver for a config option?\n\nI can see a need/value in an identifier like this, but it should be in the general config.","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"a48a1da7414b832b738beb28d6e6d79ab859aba6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    cfg.StrOpt(\u0027target_name\u0027,"},{"line_number":127,"context_line":"               default\u003dNone,"},{"line_number":128,"context_line":"               help\u003d\"The target name associated with the remote copy group \""},{"line_number":129,"context_line":"                    \"on the 3PAR array.\"),"},{"line_number":130,"context_line":"    cfg.StrOpt(\u0027cpg_map\u0027,"},{"line_number":131,"context_line":"               default\u003dNone,"},{"line_number":132,"context_line":"               help\u003d\"A CPG map in order to map local CPG\u0027s to their \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_2bf818e5","line":129,"in_reply_to":"7a2fa921_19601935","updated":"2015-10-06 00:27:39.000000000","message":"this is here so an admin can set the target_name of a 3PAR array, which is used to uniquely identify a target in our case.","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"959949ddb67a77771cd81071af4ddbe3d7279e45","unresolved":false,"context_lines":[{"line_number":131,"context_line":"               default\u003dNone,"},{"line_number":132,"context_line":"               help\u003d\"A CPG map in order to map local CPG\u0027s to their \""},{"line_number":133,"context_line":"                    \"destination CPG on a replicated target.\"),"},{"line_number":134,"context_line":"    cfg.StrOpt(\u0027replication_host\u0027,"},{"line_number":135,"context_line":"               default\u003dNone,"},{"line_number":136,"context_line":"               help\u003d\"The host of the secondary backend to use for\""},{"line_number":137,"context_line":"                    \"managed replication. Must be in format: \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_d9d061cc","line":134,"updated":"2015-10-06 00:07:12.000000000","message":"Again, this is part of the documented driver conf; we can certainly look at changing that structure around if/as needed.\n\nBut we do have \"conf.replication_devices\u003d\" for this very thing.","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"a48a1da7414b832b738beb28d6e6d79ab859aba6","unresolved":false,"context_lines":[{"line_number":131,"context_line":"               default\u003dNone,"},{"line_number":132,"context_line":"               help\u003d\"A CPG map in order to map local CPG\u0027s to their \""},{"line_number":133,"context_line":"                    \"destination CPG on a replicated target.\"),"},{"line_number":134,"context_line":"    cfg.StrOpt(\u0027replication_host\u0027,"},{"line_number":135,"context_line":"               default\u003dNone,"},{"line_number":136,"context_line":"               help\u003d\"The host of the secondary backend to use for\""},{"line_number":137,"context_line":"                    \"managed replication. Must be in format: \""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_b9ad6533","line":134,"in_reply_to":"7a2fa921_d9d061cc","updated":"2015-10-06 00:27:39.000000000","message":"In the core patch, replication_devices is said to be a list of volume backend names if managed, otherwise if unmanaged, a key value list.","commit_id":"751a823af9c9112998365af5013cbb3290684415"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"0f23fac5d1a08c1ac03c29504cf1b528cd5128df","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                help\u003d\"Enable CHAP authentication for iSCSI connections.\"),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_676378dd","line":121,"updated":"2015-10-06 19:35:21.000000000","message":"dot at the end of message","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"bbe8b6d8a68ff96b1f80a6d6178c40789030099f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                help\u003d\"Enable CHAP authentication for iSCSI connections.\"),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027replication_mode\u0027,"},{"line_number":120,"context_line":"               default\u003dNone,"},{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_a7dc30e5","line":121,"in_reply_to":"7a2fa921_676378dd","updated":"2015-10-06 19:55:11.000000000","message":"Done","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"0f23fac5d1a08c1ac03c29504cf1b528cd5128df","unresolved":false,"context_lines":[{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""},{"line_number":125,"context_line":"                    \"Range is 300 - 31622400.\"),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027target_name\u0027,"},{"line_number":127,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_e77c6874","line":124,"updated":"2015-10-06 19:35:21.000000000","message":"typo  in respresented","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"bbe8b6d8a68ff96b1f80a6d6178c40789030099f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"               help\u003d\"The replication mode. sync|periodic\"),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027replication_sync_period\u0027,"},{"line_number":123,"context_line":"               default\u003dNone,"},{"line_number":124,"context_line":"               help\u003d\"The replication sync period respresented in seconds. \""},{"line_number":125,"context_line":"                    \"Range is 300 - 31622400.\"),"},{"line_number":126,"context_line":"    cfg.StrOpt(\u0027target_name\u0027,"},{"line_number":127,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_c7d7ecbd","line":124,"in_reply_to":"7a2fa921_e77c6874","updated":"2015-10-06 19:55:11.000000000","message":"Done","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"0f23fac5d1a08c1ac03c29504cf1b528cd5128df","unresolved":false,"context_lines":[{"line_number":2576,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":2577,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2578,"context_line":"            msg \u003d _LE(\"Unable to enable volume replication because volume is \""},{"line_number":2579,"context_line":"                      \"not of replicated type.\")"},{"line_number":2580,"context_line":"            LOG.error(msg)"},{"line_number":2581,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2582,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_072ac42c","line":2579,"updated":"2015-10-06 19:35:21.000000000","message":"In that case, _() must be used because the message is going to appear in an exception that may be presented to the user.\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"bbe8b6d8a68ff96b1f80a6d6178c40789030099f","unresolved":false,"context_lines":[{"line_number":2576,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":2577,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2578,"context_line":"            msg \u003d _LE(\"Unable to enable volume replication because volume is \""},{"line_number":2579,"context_line":"                      \"not of replicated type.\")"},{"line_number":2580,"context_line":"            LOG.error(msg)"},{"line_number":2581,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2582,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_a703d041","line":2579,"in_reply_to":"7a2fa921_072ac42c","updated":"2015-10-06 19:55:11.000000000","message":"Done","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"0f23fac5d1a08c1ac03c29504cf1b528cd5128df","unresolved":false,"context_lines":[{"line_number":2591,"context_line":"        \"\"\"Disable replication on the specified volume.\"\"\""},{"line_number":2592,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2593,"context_line":"            msg \u003d _LE(\"Unable to disable volume replication because volume is \""},{"line_number":2594,"context_line":"                      \"not of replicated type.\")"},{"line_number":2595,"context_line":"            LOG.error(msg)"},{"line_number":2596,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2597,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_a7e8b0e3","line":2594,"updated":"2015-10-06 19:35:21.000000000","message":"same","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"bbe8b6d8a68ff96b1f80a6d6178c40789030099f","unresolved":false,"context_lines":[{"line_number":2591,"context_line":"        \"\"\"Disable replication on the specified volume.\"\"\""},{"line_number":2592,"context_line":"        if not self._volume_of_replicated_type(volume):"},{"line_number":2593,"context_line":"            msg \u003d _LE(\"Unable to disable volume replication because volume is \""},{"line_number":2594,"context_line":"                      \"not of replicated type.\")"},{"line_number":2595,"context_line":"            LOG.error(msg)"},{"line_number":2596,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2597,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_c7fe0c38","line":2594,"in_reply_to":"7a2fa921_a7e8b0e3","updated":"2015-10-06 19:55:11.000000000","message":"Done","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":11903,"name":"Anthony Lee","email":"anthony.mic.lee@hpe.com","username":"leeantho"},"change_message_id":"c3d9c20f132e91daf92377be8644e8c8a080aa17","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _create_client(self, timeout\u003dNone):"},{"line_number":296,"context_line":"        cl \u003d client.HP3ParClient(self.config.hp3par_api_url, timeout\u003dtimeout)"},{"line_number":297,"context_line":"        client_version \u003d hp3parclient.version"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        if client_version \u003c MIN_CLIENT_VERSION:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_7908f891","line":296,"updated":"2015-10-07 00:34:41.000000000","message":"The hp3parclient being used by CI (3.3.0) does not support the timeout\u003dtimeout argument being passed in here.\n\nhttps://github.com/hp-storage/python-3parclient/blob/3.3.0/hp3parclient/client.py#L180\n\nThis causes the HP 3PAR CI to fail during driver initialization:\n\nhttp://15.126.198.151/01/231201/9/check/3par-iscsi-driver-master-client-pip-eos14-dsvm/6d30724/logs/screen-c-vol.txt.gz?#_2015-10-06_22_11_59_106\n\nThere needs to be a version check somewhere to make sure the timeout arg is only used if the client supports it.","commit_id":"53708f080a7f31c51518a2255c8a52a91db8a3a4"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"f91787dcb111023cd55358428b7126f7e2a34eea","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def _create_client(self, timeout\u003dNone):"},{"line_number":296,"context_line":"        cl \u003d client.HP3ParClient(self.config.hp3par_api_url, timeout\u003dtimeout)"},{"line_number":297,"context_line":"        client_version \u003d hp3parclient.version"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        if client_version \u003c MIN_CLIENT_VERSION:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_2cbf99fc","line":296,"in_reply_to":"7a2fa921_7908f891","updated":"2015-10-07 03:07:53.000000000","message":"Ah, great find, thank you. There should be a if self._replication_enabled check right there, which will ensure 3.3.1+. Made the change.","commit_id":"53708f080a7f31c51518a2255c8a52a91db8a3a4"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"da8e94a71db483dba4658029a00ced046e8b633c","unresolved":false,"context_lines":[{"line_number":2736,"context_line":"        if replication_devices:"},{"line_number":2737,"context_line":"            for dev in replication_devices:"},{"line_number":2738,"context_line":"                remote_array \u003d {}"},{"line_number":2739,"context_line":"                is_managed \u003d dev.get(\u0027managed_backend_name\u0027, None)"},{"line_number":2740,"context_line":"                if not is_managed:"},{"line_number":2741,"context_line":"                    msg \u003d _(\"Unmanaged replication is not supported at this \""},{"line_number":2742,"context_line":"                            \"time. Please configure cinder.conf for managed \""}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_0f49af8b","line":2739,"updated":"2015-10-19 01:40:30.000000000","message":"You really needn\u0027t the parameter \u0027None\u0027, just do it like:\n is_managed \u003d dev.get(\u0027managed_backend_name\u0027), the return value will be None is \u0027managed_backend_name\u0027 not exists.","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"214a874dcfbfe905d1923991ffd0e157aba0c9fd","unresolved":false,"context_lines":[{"line_number":2736,"context_line":"        if replication_devices:"},{"line_number":2737,"context_line":"            for dev in replication_devices:"},{"line_number":2738,"context_line":"                remote_array \u003d {}"},{"line_number":2739,"context_line":"                is_managed \u003d dev.get(\u0027managed_backend_name\u0027, None)"},{"line_number":2740,"context_line":"                if not is_managed:"},{"line_number":2741,"context_line":"                    msg \u003d _(\"Unmanaged replication is not supported at this \""},{"line_number":2742,"context_line":"                            \"time. Please configure cinder.conf for managed \""}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_50c5e68b","line":2739,"in_reply_to":"3a29b11f_0f49af8b","updated":"2015-10-19 15:20:51.000000000","message":"I can change all these. I usually just add None for readability, but it is not technically needed with dict\u0027s get() as None is the default value.","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"da8e94a71db483dba4658029a00ced046e8b633c","unresolved":false,"context_lines":[{"line_number":2746,"context_line":""},{"line_number":2747,"context_line":"                remote_array[\u0027managed_backend_name\u0027] \u003d is_managed"},{"line_number":2748,"context_line":"                remote_array[\u0027remote_device_id\u0027] \u003d ("},{"line_number":2749,"context_line":"                    dev.get(\u0027remote_device_id\u0027, None))"},{"line_number":2750,"context_line":"                remote_array[\u0027cpg_map\u0027] \u003d ("},{"line_number":2751,"context_line":"                    dev.get(\u0027cpg_map\u0027, None))"},{"line_number":2752,"context_line":"                remote_array[\u0027hp3par_api_url\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_af5e7b43","line":2749,"updated":"2015-10-19 01:40:30.000000000","message":"ditto","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"214a874dcfbfe905d1923991ffd0e157aba0c9fd","unresolved":false,"context_lines":[{"line_number":2746,"context_line":""},{"line_number":2747,"context_line":"                remote_array[\u0027managed_backend_name\u0027] \u003d is_managed"},{"line_number":2748,"context_line":"                remote_array[\u0027remote_device_id\u0027] \u003d ("},{"line_number":2749,"context_line":"                    dev.get(\u0027remote_device_id\u0027, None))"},{"line_number":2750,"context_line":"                remote_array[\u0027cpg_map\u0027] \u003d ("},{"line_number":2751,"context_line":"                    dev.get(\u0027cpg_map\u0027, None))"},{"line_number":2752,"context_line":"                remote_array[\u0027hp3par_api_url\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_30e5ca36","line":2749,"in_reply_to":"3a29b11f_af5e7b43","updated":"2015-10-19 15:20:51.000000000","message":"Done","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"da8e94a71db483dba4658029a00ced046e8b633c","unresolved":false,"context_lines":[{"line_number":2754,"context_line":"                remote_array[\u0027hp3par_username\u0027] \u003d ("},{"line_number":2755,"context_line":"                    dev.get(\u0027hp3par_username\u0027, None))"},{"line_number":2756,"context_line":"                remote_array[\u0027hp3par_password\u0027] \u003d ("},{"line_number":2757,"context_line":"                    dev.get(\u0027hp3par_password\u0027, None))"},{"line_number":2758,"context_line":"                remote_array[\u0027san_ip\u0027] \u003d ("},{"line_number":2759,"context_line":"                    dev.get(\u0027san_ip\u0027, None))"},{"line_number":2760,"context_line":"                remote_array[\u0027san_login\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_cf5bb753","line":2757,"updated":"2015-10-19 01:40:30.000000000","message":"ditto","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"214a874dcfbfe905d1923991ffd0e157aba0c9fd","unresolved":false,"context_lines":[{"line_number":2754,"context_line":"                remote_array[\u0027hp3par_username\u0027] \u003d ("},{"line_number":2755,"context_line":"                    dev.get(\u0027hp3par_username\u0027, None))"},{"line_number":2756,"context_line":"                remote_array[\u0027hp3par_password\u0027] \u003d ("},{"line_number":2757,"context_line":"                    dev.get(\u0027hp3par_password\u0027, None))"},{"line_number":2758,"context_line":"                remote_array[\u0027san_ip\u0027] \u003d ("},{"line_number":2759,"context_line":"                    dev.get(\u0027san_ip\u0027, None))"},{"line_number":2760,"context_line":"                remote_array[\u0027san_login\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_d0d01656","line":2757,"in_reply_to":"3a29b11f_cf5bb753","updated":"2015-10-19 15:20:51.000000000","message":"Done","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"da8e94a71db483dba4658029a00ced046e8b633c","unresolved":false,"context_lines":[{"line_number":2968,"context_line":"            self._do_volume_replication_destroy(volume)"},{"line_number":2969,"context_line":"            LOG.error(_LE(\"There was an error setting up a remote copy group \""},{"line_number":2970,"context_line":"                          \"on the 3PAR arrays: (\u0027%s\u0027). The volume will not be \""},{"line_number":2971,"context_line":"                          \"recognized as replication type.\") % ex)"},{"line_number":2972,"context_line":"            return False"},{"line_number":2973,"context_line":""},{"line_number":2974,"context_line":"    def _do_volume_replication_destroy(self, volume, rcg_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_6f062322","line":2971,"updated":"2015-10-19 01:40:30.000000000","message":"Should change \u0027%\u0027 to \u0027,\u0027.","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"214a874dcfbfe905d1923991ffd0e157aba0c9fd","unresolved":false,"context_lines":[{"line_number":2968,"context_line":"            self._do_volume_replication_destroy(volume)"},{"line_number":2969,"context_line":"            LOG.error(_LE(\"There was an error setting up a remote copy group \""},{"line_number":2970,"context_line":"                          \"on the 3PAR arrays: (\u0027%s\u0027). The volume will not be \""},{"line_number":2971,"context_line":"                          \"recognized as replication type.\") % ex)"},{"line_number":2972,"context_line":"            return False"},{"line_number":2973,"context_line":""},{"line_number":2974,"context_line":"    def _do_volume_replication_destroy(self, volume, rcg_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a29b11f_f0651245","line":2971,"in_reply_to":"3a29b11f_6f062322","updated":"2015-10-19 15:20:51.000000000","message":"Done","commit_id":"08a10465580719e95a1b2a8519e5bb4534b0de44"}],"cinder/volume/drivers/san/hp/hp_3par_fc.py":[{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"0f23fac5d1a08c1ac03c29504cf1b528cd5128df","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # If replication is enabled and we cannot login, we do not want to"},{"line_number":111,"context_line":"        # raise an exception so a failover can still be executed."},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            common.do_setup(None, timeout\u003dtimeout)"},{"line_number":114,"context_line":"            common.client_login()"},{"line_number":115,"context_line":"        except Exception:"},{"line_number":116,"context_line":"            if common._replication_enabled:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_c7c60c49","line":113,"updated":"2015-10-06 19:35:21.000000000","message":"is timeout\u003dtimeout needed?","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"bbe8b6d8a68ff96b1f80a6d6178c40789030099f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        # If replication is enabled and we cannot login, we do not want to"},{"line_number":111,"context_line":"        # raise an exception so a failover can still be executed."},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            common.do_setup(None, timeout\u003dtimeout)"},{"line_number":114,"context_line":"            common.client_login()"},{"line_number":115,"context_line":"        except Exception:"},{"line_number":116,"context_line":"            if common._replication_enabled:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_077164e0","line":113,"in_reply_to":"7a2fa921_c7c60c49","updated":"2015-10-06 19:55:11.000000000","message":"Yes, replication_failover and list_replication_targets pass a timeout value to this _login function. The timeout value provided then needs to be passed on to the common do_setup where it is stored and utilized from there.","commit_id":"76ca0f784f840e9dfdac068872307ad7028a397f"}],"cinder/volume/drivers/san/hp/hp_3par_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # raise an exception so a failover can still be executed."},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            common.client_login()"},{"line_number":124,"context_line":"        except Exception as ex:"},{"line_number":125,"context_line":"            if common._replication_enabled:"},{"line_number":126,"context_line":"                pass"},{"line_number":127,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_184a5784","line":124,"updated":"2015-10-05 22:22:03.000000000","message":"No need for \"as ex\" if it is dropped below.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # raise an exception so a failover can still be executed."},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            common.client_login()"},{"line_number":124,"context_line":"        except Exception as ex:"},{"line_number":125,"context_line":"            if common._replication_enabled:"},{"line_number":126,"context_line":"                pass"},{"line_number":127,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_9320884b","line":124,"in_reply_to":"7a2fa921_184a5784","updated":"2015-10-05 22:40:27.000000000","message":"Done","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c4a647e7d8c826a61e7d3811a1429147d2437b04","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            if common._replication_enabled:"},{"line_number":126,"context_line":"                pass"},{"line_number":127,"context_line":"            else:"},{"line_number":128,"context_line":"                raise(ex)"},{"line_number":129,"context_line":"        return common"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _logout(self, common):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_386873f5","line":128,"updated":"2015-10-05 22:22:03.000000000","message":"Just call \"raise\" is sufficient.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"038c584ef59605dac20411ff93cf96fccb666a1b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            if common._replication_enabled:"},{"line_number":126,"context_line":"                pass"},{"line_number":127,"context_line":"            else:"},{"line_number":128,"context_line":"                raise(ex)"},{"line_number":129,"context_line":"        return common"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def _logout(self, common):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_13d3183a","line":128,"in_reply_to":"7a2fa921_386873f5","updated":"2015-10-05 22:40:27.000000000","message":"I might raise a more specific exception, but as of now I made the change. Thanks.","commit_id":"5f17fb89e75a5487b93a76845cef9ed7a7690f23"}]}
