)]}'
{"cinder/tests/unit/volume/drivers/dell_emc/unity/test_adapter.py":[{"author":{"_account_id":26114,"name":"Yong Huang","email":"yong.huang@emc.com","username":"yong.huang"},"change_message_id":"19ff8a062040989c286b68c03319ef1c0b4256b4","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        rep_session.dst_resource_id \u003d \u0027sv_99\u0027"},{"line_number":275,"context_line":"        return rep_session"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def create_replication(self, lun, max_time_out_of_sync,"},{"line_number":278,"context_line":"                           dst_pool_id, remote_system):"},{"line_number":279,"context_line":"        if (lun.get_id() \u003d\u003d \u0027sv_1\u0027 and max_time_out_of_sync \u003d\u003d 60"},{"line_number":280,"context_line":"                and dst_pool_id \u003d\u003d \u0027pool_1\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_a088aec5","line":277,"updated":"2019-04-08 06:11:32.000000000","message":"The second parameter \"lun\" is not correct, in client.py, it is src_lun:\ndef create_replication(src_lun, max_time_out_of_sync,\n                       dst_pool_id, remote_system)","commit_id":"5ff542cb369ca6bb8ea5e00f494a7a0286fb70f9"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"3e3fbeb65b95026017f61f435391e11bec6fa97c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.driver_ssl_cert_verify \u003d True"},{"line_number":50,"context_line":"        self.driver_ssl_cert_path \u003d None"},{"line_number":51,"context_line":"        self.remove_empty_host \u003d False"},{"line_number":52,"context_line":"        self.unity_delete_lun_in_replication \u003d False"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def safe_get(self, name):"},{"line_number":55,"context_line":"        return getattr(self, name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_11f33e75","line":52,"range":{"start_line":52,"start_character":1,"end_line":52,"end_character":52},"updated":"2019-06-24 03:15:23.000000000","message":"do you also need to test when lun_in_replication is true?","commit_id":"da1f8c581f97612cf307f347ef4a2b550e2cb329"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"62a4f58e47dc67c8cdb396932223fd71cdd32d22","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.driver_ssl_cert_verify \u003d True"},{"line_number":50,"context_line":"        self.driver_ssl_cert_path \u003d None"},{"line_number":51,"context_line":"        self.remove_empty_host \u003d False"},{"line_number":52,"context_line":"        self.unity_delete_lun_in_replication \u003d False"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def safe_get(self, name):"},{"line_number":55,"context_line":"        return getattr(self, name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_b931b90d","line":52,"range":{"start_line":52,"start_character":1,"end_line":52,"end_character":52},"in_reply_to":"9fb8cfa7_11f33e75","updated":"2019-06-27 05:36:45.000000000","message":"Yes. I\u0027ll add it in the next patch.","commit_id":"da1f8c581f97612cf307f347ef4a2b550e2cb329"}],"cinder/tests/unit/volume/drivers/dell_emc/unity/test_client.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3cf1c074032828ca0949d175fb148bb9c881f8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        elif self.name \u003d\u003d \u0027empty_host\u0027:"},{"line_number":71,"context_line":"            raise ex.HostDeleteIsCalled()"},{"line_number":72,"context_line":"        elif self.get_id() \u003d\u003d \u0027lun_in_replication\u0027:"},{"line_number":73,"context_line":"            if force_snap_delete:"},{"line_number":74,"context_line":"                pass"},{"line_number":75,"context_line":"            else:"},{"line_number":76,"context_line":"                raise ex.UnityDeleteLunInReplicationError()"},{"line_number":77,"context_line":"        elif self.get_id() \u003d\u003d \u0027lun_rep_session_1\u0027:"},{"line_number":78,"context_line":"            raise ex.UnityResourceNotFoundError()"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_25569b2b","line":76,"range":{"start_line":73,"start_character":12,"end_line":76,"end_character":59},"updated":"2019-06-03 15:57:10.000000000","message":"if not force_snap_delete:\n    raise ex.UnityDeleteLunInReplicationError()","commit_id":"714dcec4efb7ede12a2f41c7b9acab914564c9b8"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"2bc8b99e46db06b1fdd0f8d77f6db6b10671f209","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        elif self.name \u003d\u003d \u0027empty_host\u0027:"},{"line_number":71,"context_line":"            raise ex.HostDeleteIsCalled()"},{"line_number":72,"context_line":"        elif self.get_id() \u003d\u003d \u0027lun_in_replication\u0027:"},{"line_number":73,"context_line":"            if force_snap_delete:"},{"line_number":74,"context_line":"                pass"},{"line_number":75,"context_line":"            else:"},{"line_number":76,"context_line":"                raise ex.UnityDeleteLunInReplicationError()"},{"line_number":77,"context_line":"        elif self.get_id() \u003d\u003d \u0027lun_rep_session_1\u0027:"},{"line_number":78,"context_line":"            raise ex.UnityResourceNotFoundError()"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_3f4049a5","line":76,"range":{"start_line":73,"start_character":12,"end_line":76,"end_character":59},"in_reply_to":"9fb8cfa7_25569b2b","updated":"2019-06-12 02:29:24.000000000","message":"Done","commit_id":"714dcec4efb7ede12a2f41c7b9acab914564c9b8"}],"cinder/tests/unit/volume/drivers/dell_emc/unity/test_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                                           secondary_id\u003d\u0027secondary_unity\u0027,"},{"line_number":455,"context_line":"                                           groups\u003dNone)"},{"line_number":456,"context_line":"        self.assertListEqual(called[\u0027volumes\u0027], [volume])"},{"line_number":457,"context_line":"        self.assertEqual(called[\u0027secondary_id\u0027], \u0027secondary_unity\u0027)"},{"line_number":458,"context_line":"        self.assertIsNone(called[\u0027groups\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e2e09f99","line":457,"range":{"start_line":457,"start_character":25,"end_line":457,"end_character":66},"updated":"2019-08-21 12:45:44.000000000","message":"Argument order should be (EXPECTED_VALUE, ACTUAL_VALUE)","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                                           secondary_id\u003d\u0027secondary_unity\u0027,"},{"line_number":455,"context_line":"                                           groups\u003dNone)"},{"line_number":456,"context_line":"        self.assertListEqual(called[\u0027volumes\u0027], [volume])"},{"line_number":457,"context_line":"        self.assertEqual(called[\u0027secondary_id\u0027], \u0027secondary_unity\u0027)"},{"line_number":458,"context_line":"        self.assertIsNone(called[\u0027groups\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_eb12ac57","line":457,"range":{"start_line":457,"start_character":25,"end_line":457,"end_character":66},"in_reply_to":"7faddb67_e2e09f99","updated":"2019-08-22 06:54:47.000000000","message":"Done","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"}],"cinder/volume/drivers/dell_emc/unity/adapter.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0cfbdd897ed32069c209992ee1b240258cace63","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"    @cinder_utils.trace"},{"line_number":1002,"context_line":"    def failover(self, volumes, secondary_id\u003dNone, groups\u003dNone):"},{"line_number":1003,"context_line":"        # TODO(ryan) support group failover after group bp merges"},{"line_number":1004,"context_line":"        # https://review.openstack.org/#/c/574119/"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"        if secondary_id is None:"},{"line_number":1007,"context_line":"            LOG.debug(\u0027No secondary specified when failover. \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_54aa3f19","line":1004,"range":{"start_line":1004,"start_character":10,"end_line":1004,"end_character":50},"updated":"2019-06-19 16:08:19.000000000","message":"Merged :)","commit_id":"da1f8c581f97612cf307f347ef4a2b550e2cb329"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1dc2e4fb3f422d2b84bcc3fae8e09a1693a966c3","unresolved":false,"context_lines":[{"line_number":996,"context_line":""},{"line_number":997,"context_line":"    @cinder_utils.trace"},{"line_number":998,"context_line":"    def failover(self, volumes, secondary_id\u003dNone, groups\u003dNone):"},{"line_number":999,"context_line":"        # TODO(ryan) support group failover after group bp merges"},{"line_number":1000,"context_line":"        # https://review.openstack.org/#/c/574119/"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        if secondary_id is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_bc6eeb29","line":999,"updated":"2019-08-27 15:53:33.000000000","message":"Just to note - this has merged.","commit_id":"587f0b3b9f08eadb22174a1fc5067b60f3fb5e93"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"4083f107cfdc20af7ae2f9c52ac233e20ef27916","unresolved":false,"context_lines":[{"line_number":996,"context_line":""},{"line_number":997,"context_line":"    @cinder_utils.trace"},{"line_number":998,"context_line":"    def failover(self, volumes, secondary_id\u003dNone, groups\u003dNone):"},{"line_number":999,"context_line":"        # TODO(ryan) support group failover after group bp merges"},{"line_number":1000,"context_line":"        # https://review.openstack.org/#/c/574119/"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        if secondary_id is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_998a1618","line":999,"in_reply_to":"7faddb67_bc6eeb29","updated":"2019-08-28 01:21:02.000000000","message":"Yes, I noticed that review is merged. And we are developing the group replication. We aren\u0027t going to merge the group replication into this review because this review is with large changes and most reviewers have finished their review. The group replication change is much smaller and putting in its own review could save review effort. I\u0027ll publish the group replication review after this merged.","commit_id":"587f0b3b9f08eadb22174a1fc5067b60f3fb5e93"}],"cinder/volume/drivers/dell_emc/unity/client.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3cf1c074032828ca0949d175fb148bb9c881f8","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    def create_replication(src_lun, max_time_out_of_sync,"},{"line_number":403,"context_line":"                           dst_pool_id, remote_system):"},{"line_number":404,"context_line":"        \"\"\"Creates a new lun on remote system and sets up replication to it."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        \"\"\""},{"line_number":407,"context_line":"        return src_lun.replicate_with_dst_resource_provisioning("},{"line_number":408,"context_line":"            max_time_out_of_sync, dst_pool_id, remote_system\u003dremote_system,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_383b1ed2","line":405,"updated":"2019-06-03 15:57:10.000000000","message":"Extra line breaks. Put closing quotes on the one summary line.","commit_id":"714dcec4efb7ede12a2f41c7b9acab914564c9b8"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"2bc8b99e46db06b1fdd0f8d77f6db6b10671f209","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    def create_replication(src_lun, max_time_out_of_sync,"},{"line_number":403,"context_line":"                           dst_pool_id, remote_system):"},{"line_number":404,"context_line":"        \"\"\"Creates a new lun on remote system and sets up replication to it."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        \"\"\""},{"line_number":407,"context_line":"        return src_lun.replicate_with_dst_resource_provisioning("},{"line_number":408,"context_line":"            max_time_out_of_sync, dst_pool_id, remote_system\u003dremote_system,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fb8cfa7_ff45d1b4","line":405,"in_reply_to":"9fb8cfa7_383b1ed2","updated":"2019-06-12 02:29:24.000000000","message":"Done","commit_id":"714dcec4efb7ede12a2f41c7b9acab914564c9b8"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    _delete_lun_if_exist(force_snap_delete\u003dTrue)"},{"line_number":135,"context_line":"                else:"},{"line_number":136,"context_line":"                    LOG.error(\"LUN %s cannot delete because it is \""},{"line_number":137,"context_line":"                              \"participating in replication sessions. \""},{"line_number":138,"context_line":"                              \"Remove replication sessions first or set \""},{"line_number":139,"context_line":"                              \"unity_delete_lun_in_replication to true in \""},{"line_number":140,"context_line":"                              \"cinder.conf\","},{"line_number":141,"context_line":"                              lun_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_820d2b90","line":138,"range":{"start_line":137,"start_character":71,"end_line":138,"end_character":30},"updated":"2019-08-21 12:45:44.000000000","message":"How? Through retype? This is odd for a Cinder volume delete call.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    _delete_lun_if_exist(force_snap_delete\u003dTrue)"},{"line_number":135,"context_line":"                else:"},{"line_number":136,"context_line":"                    LOG.error(\"LUN %s cannot delete because it is \""},{"line_number":137,"context_line":"                              \"participating in replication sessions. \""},{"line_number":138,"context_line":"                              \"Remove replication sessions first or set \""},{"line_number":139,"context_line":"                              \"unity_delete_lun_in_replication to true in \""},{"line_number":140,"context_line":"                              \"cinder.conf\","},{"line_number":141,"context_line":"                              lun_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_0b3708e5","line":138,"range":{"start_line":137,"start_character":71,"end_line":138,"end_character":30},"in_reply_to":"7faddb67_820d2b90","updated":"2019-08-22 06:54:47.000000000","message":"Remove replication sessions can be done via unity gui. Now unity_delete_lun_in_replication and is_delete_if_in_replication are always True. So this error will not hit.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                dst_resource_id\u003ddst_resource_id)"},{"line_number":474,"context_line":"        except storops_ex.UnityResourceNotFoundError:"},{"line_number":475,"context_line":"            raise ClientReplicationError("},{"line_number":476,"context_line":"                \u0027Replication session with name %(name)s not found.\u0027.format("},{"line_number":477,"context_line":"                    name\u003dname))"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def failover_replication(self, rep_session):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_4268931f","line":476,"range":{"start_line":476,"start_character":16,"end_line":476,"end_character":17},"updated":"2019-08-21 12:45:44.000000000","message":"Does this bubble up to the end user? If so, make sure to use _() so it gets translated.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                dst_resource_id\u003ddst_resource_id)"},{"line_number":474,"context_line":"        except storops_ex.UnityResourceNotFoundError:"},{"line_number":475,"context_line":"            raise ClientReplicationError("},{"line_number":476,"context_line":"                \u0027Replication session with name %(name)s not found.\u0027.format("},{"line_number":477,"context_line":"                    name\u003dname))"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def failover_replication(self, rep_session):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_eb406c37","line":476,"range":{"start_line":476,"start_character":16,"end_line":476,"end_character":17},"in_reply_to":"7faddb67_4268931f","updated":"2019-08-22 06:54:47.000000000","message":"No, this is not visible by the end user. The adapter will wrap this exception, log an error and update the status.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1dc2e4fb3f422d2b84bcc3fae8e09a1693a966c3","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                    # deleting the replication sessions."},{"line_number":134,"context_line":"                    _delete_lun_if_exist(force_snap_delete\u003dTrue)"},{"line_number":135,"context_line":"                else:"},{"line_number":136,"context_line":"                    LOG.error(\"LUN %s cannot delete because it is \""},{"line_number":137,"context_line":"                              \"participating in replication sessions. \""},{"line_number":138,"context_line":"                              \"Remove replication sessions first through \""},{"line_number":139,"context_line":"                              \"unity gui\","}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_1c593f8d","line":136,"updated":"2019-08-27 15:53:33.000000000","message":"I still disagree with this approach.","commit_id":"587f0b3b9f08eadb22174a1fc5067b60f3fb5e93"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"4083f107cfdc20af7ae2f9c52ac233e20ef27916","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                    # deleting the replication sessions."},{"line_number":134,"context_line":"                    _delete_lun_if_exist(force_snap_delete\u003dTrue)"},{"line_number":135,"context_line":"                else:"},{"line_number":136,"context_line":"                    LOG.error(\"LUN %s cannot delete because it is \""},{"line_number":137,"context_line":"                              \"participating in replication sessions. \""},{"line_number":138,"context_line":"                              \"Remove replication sessions first through \""},{"line_number":139,"context_line":"                              \"unity gui\","}],"source_content_type":"text/x-python","patch_set":12,"id":"7faddb67_998f7621","line":136,"in_reply_to":"7faddb67_1c593f8d","updated":"2019-08-28 01:21:02.000000000","message":"I just leave the logic in the client.py. But the adapter.py will never invoke client\u0027s delete_lun with is_delete_if_in_replication\u003dFalse. The reason why I leave the logic there is because I want other developers can notice the deletion of Luns in replication when they invoke delete_lun and pass in is_delete_if_in_replication\u003dTrue explicitly.","commit_id":"587f0b3b9f08eadb22174a1fc5067b60f3fb5e93"}],"cinder/volume/drivers/dell_emc/unity/driver.py":[{"author":{"_account_id":10379,"name":"Rajini Karthik","email":"rrajini@gmail.com","username":"rajinir"},"change_message_id":"9abcfc2bbdb37296c86568f4584b3d4f62f3cd8e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        4.0.0 - Support remove empty host"},{"line_number":66,"context_line":"        4.2.0 - Support compressed volume"},{"line_number":67,"context_line":"        5.0.0 - Support storage assisted volume migration"},{"line_number":68,"context_line":"        5.1.0 - Support volume replication"},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    VERSION \u003d \u002705.01.00\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_749be716","line":68,"updated":"2019-03-04 16:02:39.000000000","message":"@Arkady, looks like ryan has added what you asked for. See above","commit_id":"cd2d57c1af8ed8d7c87e6968f43b89c2e266c215"},{"author":{"_account_id":7160,"name":"arkady kanevsky","email":"akanevsk@redhat.com","username":"arkady"},"change_message_id":"ac8b2b4c9f55a34990689ac14ca5765eda53d6ff","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        4.0.0 - Support remove empty host"},{"line_number":66,"context_line":"        4.2.0 - Support compressed volume"},{"line_number":67,"context_line":"        5.0.0 - Support storage assisted volume migration"},{"line_number":68,"context_line":"        5.1.0 - Support volume replication"},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    VERSION \u003d \u002705.01.00\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_34731feb","line":68,"in_reply_to":"9fdfeff1_749be716","updated":"2019-03-04 16:04:35.000000000","message":"Got it. thanks.","commit_id":"cd2d57c1af8ed8d7c87e6968f43b89c2e266c215"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                help\u003d\u0027To remove the host from Unity when the last LUN is \u0027"},{"line_number":48,"context_line":"                     \u0027detached from it. By default, it is False.\u0027),"},{"line_number":49,"context_line":"    cfg.BoolOpt(\u0027unity_delete_lun_in_replication\u0027,"},{"line_number":50,"context_line":"                default\u003dFalse,"},{"line_number":51,"context_line":"                help\u003d\u0027To delete the lun even when it is participating in a \u0027"},{"line_number":52,"context_line":"                     \u0027replication session. By default, it is False.\u0027)]"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_82344b4a","line":50,"updated":"2019-08-21 12:45:44.000000000","message":"This seems like an odd default. To an end user, if they are asking for a volume to be deleted, it shouldn\u0027t matter if it is being replicated or not. I think this config option should be removed and have the driver delete the volume like the user would expect Cinder to behave.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                help\u003d\u0027To remove the host from Unity when the last LUN is \u0027"},{"line_number":48,"context_line":"                     \u0027detached from it. By default, it is False.\u0027),"},{"line_number":49,"context_line":"    cfg.BoolOpt(\u0027unity_delete_lun_in_replication\u0027,"},{"line_number":50,"context_line":"                default\u003dFalse,"},{"line_number":51,"context_line":"                help\u003d\u0027To delete the lun even when it is participating in a \u0027"},{"line_number":52,"context_line":"                     \u0027replication session. By default, it is False.\u0027)]"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_0b3ce8bc","line":50,"in_reply_to":"7faddb67_82344b4a","updated":"2019-08-22 06:54:47.000000000","message":"Done","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.configuration.append_config_values(san_opts)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        # active_backend_id is not None if the service is failed over."},{"line_number":102,"context_line":"        self.active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027, None)"},{"line_number":103,"context_line":"        self.replication_manager \u003d replication.ReplicationManager()"},{"line_number":104,"context_line":"        protocol \u003d self.configuration.storage_protocol"},{"line_number":105,"context_line":"        if protocol.lower() \u003d\u003d adapter.PROTOCOL_FC.lower():"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_223f9725","line":102,"range":{"start_line":102,"start_character":63,"end_line":102,"end_character":69},"updated":"2019-08-21 12:45:44.000000000","message":"nit: redundant","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.configuration.append_config_values(san_opts)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        # active_backend_id is not None if the service is failed over."},{"line_number":102,"context_line":"        self.active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027, None)"},{"line_number":103,"context_line":"        self.replication_manager \u003d replication.ReplicationManager()"},{"line_number":104,"context_line":"        protocol \u003d self.configuration.storage_protocol"},{"line_number":105,"context_line":"        if protocol.lower() \u003d\u003d adapter.PROTOCOL_FC.lower():"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_cb41f037","line":102,"range":{"start_line":102,"start_character":63,"end_line":102,"end_character":69},"in_reply_to":"7faddb67_223f9725","updated":"2019-08-22 06:54:47.000000000","message":"Done","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"}],"cinder/volume/drivers/dell_emc/unity/replication.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        driver_conf \u003d driver.configuration"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.backend_id \u003d conf_dict.get(\u0027backend_id\u0027, None)"},{"line_number":39,"context_line":"        self.san_ip \u003d conf_dict.get(\u0027san_ip\u0027, None)"},{"line_number":40,"context_line":"        if (self.backend_id is None or not self.backend_id.strip()"},{"line_number":41,"context_line":"                or self.san_ip is None or not self.san_ip.strip()):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_227eb718","line":38,"range":{"start_line":38,"start_character":52,"end_line":38,"end_character":58},"updated":"2019-08-21 12:45:44.000000000","message":"\", None\" on get() calls is redundant, the default return value is already None.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        driver_conf \u003d driver.configuration"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.backend_id \u003d conf_dict.get(\u0027backend_id\u0027, None)"},{"line_number":39,"context_line":"        self.san_ip \u003d conf_dict.get(\u0027san_ip\u0027, None)"},{"line_number":40,"context_line":"        if (self.backend_id is None or not self.backend_id.strip()"},{"line_number":41,"context_line":"                or self.san_ip is None or not self.san_ip.strip()):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_ab5fd40c","line":38,"range":{"start_line":38,"start_character":52,"end_line":38,"end_character":58},"in_reply_to":"7faddb67_227eb718","updated":"2019-08-22 06:54:47.000000000","message":"Done","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                self._adapter.do_setup(self.driver, self.device_conf)"},{"line_number":92,"context_line":"            except exception.CinderException:"},{"line_number":93,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":94,"context_line":"                    LOG.error(\u0027replication_device configured but its adapter\u0027"},{"line_number":95,"context_line":"                              \u0027setup failed: %s\u0027, self.backend_id)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_22a317a0","line":94,"range":{"start_line":94,"start_character":76,"end_line":94,"end_character":77},"updated":"2019-08-21 12:45:44.000000000","message":"Missing space at end so text ends up \"adaptersetup\".","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                self._adapter.do_setup(self.driver, self.device_conf)"},{"line_number":92,"context_line":"            except exception.CinderException:"},{"line_number":93,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":94,"context_line":"                    LOG.error(\u0027replication_device configured but its adapter\u0027"},{"line_number":95,"context_line":"                              \u0027setup failed: %s\u0027, self.backend_id)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_2ba1a4f7","line":94,"range":{"start_line":94,"start_character":76,"end_line":94,"end_character":77},"in_reply_to":"7faddb67_22a317a0","updated":"2019-08-22 06:54:47.000000000","message":"Done","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"}],"cinder/volume/drivers/dell_emc/unity/utils.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import contextlib"},{"line_number":19,"context_line":"from distutils import version"},{"line_number":20,"context_line":"import functools"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"from oslo_utils import fnmatch"},{"line_number":24,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_02961b4a","line":21,"updated":"2019-08-21 12:45:44.000000000","message":"nit: json is a standard library import, so should be in the group above these third party imports.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import contextlib"},{"line_number":19,"context_line":"from distutils import version"},{"line_number":20,"context_line":"import functools"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"from oslo_utils import fnmatch"},{"line_number":24,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_4be660e9","line":21,"in_reply_to":"7faddb67_02961b4a","updated":"2019-08-22 06:54:47.000000000","message":"contextlib, distutils and functools are standard libraries. I add a blank line after `import json`.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"}],"doc/source/configuration/block-storage/drivers/dell-emc-unity-driver.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a30ce5b6b64136a0b4586c951caf18359f15245b","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"#. On Unisphere, configure remote system and interfaces for replications."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    The way could be different depending on the type of replications - sync or async."},{"line_number":423,"context_line":"    Refer to `Unity Replication White Paper"},{"line_number":424,"context_line":"    \u003chttps://www.emc.com/collateral/white-papers/h15088-dell-emc-unity-replication-technologies.pdf\u003e`_"},{"line_number":425,"context_line":"    for more detail."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_4290934e","line":422,"range":{"start_line":422,"start_character":0,"end_line":422,"end_character":4},"updated":"2019-08-21 12:45:44.000000000","message":"These are overindented. That results in the content being block quoted in the rendered HTML.","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"c20278adaa74890fd9c89ea57d55f73ebeda63a9","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"#. On Unisphere, configure remote system and interfaces for replications."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    The way could be different depending on the type of replications - sync or async."},{"line_number":423,"context_line":"    Refer to `Unity Replication White Paper"},{"line_number":424,"context_line":"    \u003chttps://www.emc.com/collateral/white-papers/h15088-dell-emc-unity-replication-technologies.pdf\u003e`_"},{"line_number":425,"context_line":"    for more detail."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_abb4b436","line":422,"range":{"start_line":422,"start_character":0,"end_line":422,"end_character":4},"in_reply_to":"7faddb67_4290934e","updated":"2019-08-22 06:54:47.000000000","message":"Done","commit_id":"b8a8d2df0c2e4446ede03d2897477d0ed6c3dca7"}],"releasenotes/notes/unity-replication-support-2ab121a5ea5a2ade.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3cf1c074032828ca0949d175fb148bb9c881f8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Dell EMC Unity Driver: Add volume replication support."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fb8cfa7_18609ace","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":30},"updated":"2019-06-03 15:57:10.000000000","message":"nit: Added","commit_id":"714dcec4efb7ede12a2f41c7b9acab914564c9b8"},{"author":{"_account_id":18742,"name":"Ryan Liang","email":"ryan.liang@emc.com","username":"RyanLiang"},"change_message_id":"2bc8b99e46db06b1fdd0f8d77f6db6b10671f209","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Dell EMC Unity Driver: Add volume replication support."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fb8cfa7_1f4305b1","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":30},"in_reply_to":"9fb8cfa7_18609ace","updated":"2019-06-12 02:29:24.000000000","message":"Done","commit_id":"714dcec4efb7ede12a2f41c7b9acab914564c9b8"}]}
