)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"NOTE: you can only place one replication_device for each backend since"},{"line_number":31,"context_line":"VNX driver only supports 1:1 fanout ratio. Only synchronized replication"},{"line_number":32,"context_line":"is supported in this patch."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: Ica47700b0f251bb4f7af5500f36416ddf91de9c5"},{"line_number":35,"context_line":"Implements: blueprint vnx-replication-v2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a7e1126_279aa115","line":33,"updated":"2015-12-17 03:16:47.000000000","message":"Please add DocImpact flag.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"95f65353198d5ed328428379d365371fba618f9d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"NOTE: you can only place one replication_device for each backend since"},{"line_number":31,"context_line":"VNX driver only supports 1:1 fanout ratio. Only synchronized replication"},{"line_number":32,"context_line":"is supported in this patch."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: Ica47700b0f251bb4f7af5500f36416ddf91de9c5"},{"line_number":35,"context_line":"Implements: blueprint vnx-replication-v2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a7e1126_5349a4cf","line":33,"in_reply_to":"3a7e1126_279aa115","updated":"2015-12-17 05:59:24.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"0f865e2faf0652209fdb43569ca1144c50cc99fc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"[vnx_cinder]"},{"line_number":14,"context_line":"..."},{"line_number":15,"context_line":"replication_device \u003d target_device_id:\u003cvnx serial number\u003e,"},{"line_number":16,"context_line":"                     managed_backend_name:\u003chost\u003e@\u003cvolume_backend_name\u003e#\u003cpool-name\u003e,"},{"line_number":17,"context_line":"                     san_ip:192.168.1.2,"},{"line_number":18,"context_line":"                     san_login:admin,"},{"line_number":19,"context_line":"                     san_password:admin,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"fa69d971_dc21919f","line":16,"range":{"start_line":16,"start_character":21,"end_line":16,"end_character":83},"updated":"2016-01-11 11:37:41.000000000","message":"72 character limits. Please check https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure.","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"}],"cinder/tests/unit/test_emc_vnx.py":[{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ddf5226228019fe734c93eaf74aef4421a57520","unresolved":false,"context_lines":[{"line_number":875,"context_line":"    def MIRROR_LIST_CMD(self, mirror_name):"},{"line_number":876,"context_line":"        return (\u0027mirror\u0027, \u0027-sync\u0027, \u0027-list\u0027, \u0027-name\u0027, mirror_name)"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    # Mirror releted output"},{"line_number":879,"context_line":"    def MIRROR_LIST_RESULT(self, mirror_name, mirror_state\u003d\u0027Synchronized\u0027):"},{"line_number":880,"context_line":"        return (\"\"\"MirrorView Name:  %(name)s"},{"line_number":881,"context_line":"MirrorView Description:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_e76ff228","line":878,"updated":"2015-12-14 09:44:49.000000000","message":"typo","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"bdd7aa57e81dd62eaaa5d58c2c224b6d6b8bace2","unresolved":false,"context_lines":[{"line_number":875,"context_line":"    def MIRROR_LIST_CMD(self, mirror_name):"},{"line_number":876,"context_line":"        return (\u0027mirror\u0027, \u0027-sync\u0027, \u0027-list\u0027, \u0027-name\u0027, mirror_name)"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    # Mirror releted output"},{"line_number":879,"context_line":"    def MIRROR_LIST_RESULT(self, mirror_name, mirror_state\u003d\u0027Synchronized\u0027):"},{"line_number":880,"context_line":"        return (\"\"\"MirrorView Name:  %(name)s"},{"line_number":881,"context_line":"MirrorView Description:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_33d21cd2","line":878,"in_reply_to":"7a740942_e76ff228","updated":"2015-12-15 02:58:01.000000000","message":"Done","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"}],"cinder/volume/drivers/emc/emc_vnx_cli.py":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"40399660d0e7bcd8895c8f9f474e6a412895414b","unresolved":false,"context_lines":[{"line_number":2807,"context_line":"            self.max_over_subscription_ratio)"},{"line_number":2808,"context_line":"        # Add replication V2 support"},{"line_number":2809,"context_line":"        if self._mirror:"},{"line_number":2810,"context_line":"            pool_stats[\u0027replication_enabled\u0027] \u003d True"},{"line_number":2811,"context_line":"            pool_stats[\u0027replication_type\u0027] \u003d [\u0027sync\u0027]"},{"line_number":2812,"context_line":"            pool_stats[\u0027replication_count\u0027] \u003d 1"},{"line_number":2813,"context_line":"        return pool_stats"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_72cea22e","line":2810,"updated":"2015-12-11 16:06:34.000000000","message":"The value of this should probably be dependent on if replication was configured correctly. For example, if there is, in your case, one and only one properly configured replication_device entry. Otherwise everything will report it is capable of replication all the time.","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"14b934b3559fe4e4774020f79d7e0aa93eee64d3","unresolved":false,"context_lines":[{"line_number":2807,"context_line":"            self.max_over_subscription_ratio)"},{"line_number":2808,"context_line":"        # Add replication V2 support"},{"line_number":2809,"context_line":"        if self._mirror:"},{"line_number":2810,"context_line":"            pool_stats[\u0027replication_enabled\u0027] \u003d True"},{"line_number":2811,"context_line":"            pool_stats[\u0027replication_type\u0027] \u003d [\u0027sync\u0027]"},{"line_number":2812,"context_line":"            pool_stats[\u0027replication_count\u0027] \u003d 1"},{"line_number":2813,"context_line":"        return pool_stats"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_a5281087","line":2810,"in_reply_to":"7a740942_72cea22e","updated":"2015-12-14 02:34:07.000000000","message":"the `if self._mirror:` do the precheck you mentioned.\n\nif the replication is correctly configured, driver will build the _mirror object.\n\nThanks\nPeter","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"40399660d0e7bcd8895c8f9f474e6a412895414b","unresolved":false,"context_lines":[{"line_number":3932,"context_line":"        \"\"\"\"\"\""},{"line_number":3933,"context_line":"        targets \u003d {\u0027volume_id\u0027: volume.id, \u0027targets\u0027: []}"},{"line_number":3934,"context_line":"        target_info \u003d json.loads(volume.replication_driver_data)"},{"line_number":3935,"context_line":"        target_info.update({\u0027remote_device_id\u0027: \u0027fake\u0027})"},{"line_number":3936,"context_line":"        targets[\u0027targets\u0027] \u003d [target_info]"},{"line_number":3937,"context_line":"        return targets"},{"line_number":3938,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_1515c8e3","line":3935,"updated":"2015-12-11 16:06:34.000000000","message":"TODO I am guessing?","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"14b934b3559fe4e4774020f79d7e0aa93eee64d3","unresolved":false,"context_lines":[{"line_number":3932,"context_line":"        \"\"\"\"\"\""},{"line_number":3933,"context_line":"        targets \u003d {\u0027volume_id\u0027: volume.id, \u0027targets\u0027: []}"},{"line_number":3934,"context_line":"        target_info \u003d json.loads(volume.replication_driver_data)"},{"line_number":3935,"context_line":"        target_info.update({\u0027remote_device_id\u0027: \u0027fake\u0027})"},{"line_number":3936,"context_line":"        targets[\u0027targets\u0027] \u003d [target_info]"},{"line_number":3937,"context_line":"        return targets"},{"line_number":3938,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_c52bdc80","line":3935,"in_reply_to":"7a740942_1515c8e3","updated":"2015-12-14 02:34:07.000000000","message":"Good catch, will do it!","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"40399660d0e7bcd8895c8f9f474e6a412895414b","unresolved":false,"context_lines":[{"line_number":3947,"context_line":"        if specs:"},{"line_number":3948,"context_line":"            if \u0027replication_enabled\u0027 in specs:"},{"line_number":3949,"context_line":"                return specs[\u0027replication_enabled\u0027] \u003d\u003d \u0027\u003cis\u003e True\u0027"},{"line_number":3950,"context_line":"            elif \u0027replication\u0027 in specs:"},{"line_number":3951,"context_line":"                return specs[\u0027replication\u0027] \u003d\u003d \u0027True\u0027"},{"line_number":3952,"context_line":"        return False"},{"line_number":3953,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_75b1ac00","line":3950,"updated":"2015-12-11 16:06:34.000000000","message":"is this a v1 replication reference?","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"14b934b3559fe4e4774020f79d7e0aa93eee64d3","unresolved":false,"context_lines":[{"line_number":3947,"context_line":"        if specs:"},{"line_number":3948,"context_line":"            if \u0027replication_enabled\u0027 in specs:"},{"line_number":3949,"context_line":"                return specs[\u0027replication_enabled\u0027] \u003d\u003d \u0027\u003cis\u003e True\u0027"},{"line_number":3950,"context_line":"            elif \u0027replication\u0027 in specs:"},{"line_number":3951,"context_line":"                return specs[\u0027replication\u0027] \u003d\u003d \u0027True\u0027"},{"line_number":3952,"context_line":"        return False"},{"line_number":3953,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_253d00c4","line":3950,"in_reply_to":"7a740942_75b1ac00","updated":"2015-12-14 02:34:07.000000000","message":"good finding, I will remove it.","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"40399660d0e7bcd8895c8f9f474e6a412895414b","unresolved":false,"context_lines":[{"line_number":3999,"context_line":"        return mirror_view"},{"line_number":4000,"context_line":""},{"line_number":4001,"context_line":"    @staticmethod"},{"line_number":4002,"context_line":"    def _build_replication_driver_data(configuration):"},{"line_number":4003,"context_line":"        \"\"\"Builds driver specific data for replication."},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"        This data will be used by secondary backend to connect"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_55a2709a","line":4002,"updated":"2015-12-11 16:06:34.000000000","message":"I\u0027m curious as to the reasoning behind putting all the connection information into replication_driver_data?","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"14b934b3559fe4e4774020f79d7e0aa93eee64d3","unresolved":false,"context_lines":[{"line_number":3999,"context_line":"        return mirror_view"},{"line_number":4000,"context_line":""},{"line_number":4001,"context_line":"    @staticmethod"},{"line_number":4002,"context_line":"    def _build_replication_driver_data(configuration):"},{"line_number":4003,"context_line":"        \"\"\"Builds driver specific data for replication."},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"        This data will be used by secondary backend to connect"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_a576d0a1","line":4002,"in_reply_to":"7a740942_55a2709a","updated":"2015-12-14 02:34:07.000000000","message":"These info is needed for fail-back to primary.\nwithout it, the secondary do not know how to communicate with original primary.\nI noticed there is a limitation in failover_replication API in cinder, to support failback operation, I shall upload a patch to fix it.\n\nThank\nPeter","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"50889ddfd95182c1a0a7529b4379e767c92e8ab9","unresolved":false,"context_lines":[{"line_number":3999,"context_line":"        return mirror_view"},{"line_number":4000,"context_line":""},{"line_number":4001,"context_line":"    @staticmethod"},{"line_number":4002,"context_line":"    def _build_replication_driver_data(configuration):"},{"line_number":4003,"context_line":"        \"\"\"Builds driver specific data for replication."},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"        This data will be used by secondary backend to connect"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_e9a01592","line":4002,"in_reply_to":"7a740942_a576d0a1","updated":"2015-12-14 15:35:08.000000000","message":"There is a limitation, but failback might be added soon with this patch: https://review.openstack.org/#/c/219900/ just FYI","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"3562083ca8212ee81e385b767f578c64c5f1e34b","unresolved":false,"context_lines":[{"line_number":3999,"context_line":"        return mirror_view"},{"line_number":4000,"context_line":""},{"line_number":4001,"context_line":"    @staticmethod"},{"line_number":4002,"context_line":"    def _build_replication_driver_data(configuration):"},{"line_number":4003,"context_line":"        \"\"\"Builds driver specific data for replication."},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"        This data will be used by secondary backend to connect"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_1a0ece34","line":4002,"in_reply_to":"7a740942_e9a01592","updated":"2015-12-15 07:56:01.000000000","message":"Great, this is what i was saying.\nThanks for the info","commit_id":"85aff1c287d496f57f5ae075c6f7e210d0809f0d"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"ef4252d83ce6ac72a81b525fa08e72da32d32237","unresolved":false,"context_lines":[{"line_number":2807,"context_line":"            self.max_over_subscription_ratio)"},{"line_number":2808,"context_line":"        # Add replication V2 support"},{"line_number":2809,"context_line":"        if self._mirror:"},{"line_number":2810,"context_line":"            pool_stats[\u0027replication_enabled\u0027] \u003d True"},{"line_number":2811,"context_line":"            pool_stats[\u0027replication_type\u0027] \u003d [\u0027sync\u0027]"},{"line_number":2812,"context_line":"            pool_stats[\u0027replication_count\u0027] \u003d 1"},{"line_number":2813,"context_line":"        return pool_stats"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_f4ceac58","line":2810,"updated":"2015-12-14 15:51:19.000000000","message":"Going off of your comment in the previous patch set, you are saying that if the instance is intended to be replication type, anything that fails will blow up the driver and not allow it to initialize successfully? Therefore if we get to this spot, it is guaranteed to be replication enabled?","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"4d1c519dc8a79ca1695eb1f366ad1027d00cf11a","unresolved":false,"context_lines":[{"line_number":2807,"context_line":"            self.max_over_subscription_ratio)"},{"line_number":2808,"context_line":"        # Add replication V2 support"},{"line_number":2809,"context_line":"        if self._mirror:"},{"line_number":2810,"context_line":"            pool_stats[\u0027replication_enabled\u0027] \u003d True"},{"line_number":2811,"context_line":"            pool_stats[\u0027replication_type\u0027] \u003d [\u0027sync\u0027]"},{"line_number":2812,"context_line":"            pool_stats[\u0027replication_count\u0027] \u003d 1"},{"line_number":2813,"context_line":"        return pool_stats"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a710552_da3e06b8","line":2810,"in_reply_to":"7a740942_f4ceac58","updated":"2015-12-15 07:57:02.000000000","message":"Hi Alex,\nThanks for bringing up this,\nI missed one thing, to check the array side\u0027s license.\nwill add it next patch","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ddf5226228019fe734c93eaf74aef4421a57520","unresolved":false,"context_lines":[{"line_number":4011,"context_line":"                mirror_view.destroy_mirror_view(mirror_name, volume.name, mv)"},{"line_number":4012,"context_line":""},{"line_number":4013,"context_line":"    def _get_mirror_view(self, volume):"},{"line_number":4014,"context_line":"        \"\"\"Define whether this \"\"\""},{"line_number":4015,"context_line":"        rep_data \u003d json.loads(volume[\u0027replication_driver_data\u0027])"},{"line_number":4016,"context_line":"        is_primary \u003d rep_data[\u0027is_primary\u0027]"},{"line_number":4017,"context_line":"        if is_primary:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_64c9c025","line":4014,"updated":"2015-12-14 09:44:49.000000000","message":"Seems this docstring is not completed.","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"bdd7aa57e81dd62eaaa5d58c2c224b6d6b8bace2","unresolved":false,"context_lines":[{"line_number":4011,"context_line":"                mirror_view.destroy_mirror_view(mirror_name, volume.name, mv)"},{"line_number":4012,"context_line":""},{"line_number":4013,"context_line":"    def _get_mirror_view(self, volume):"},{"line_number":4014,"context_line":"        \"\"\"Define whether this \"\"\""},{"line_number":4015,"context_line":"        rep_data \u003d json.loads(volume[\u0027replication_driver_data\u0027])"},{"line_number":4016,"context_line":"        is_primary \u003d rep_data[\u0027is_primary\u0027]"},{"line_number":4017,"context_line":"        if is_primary:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_33b77c86","line":4014,"in_reply_to":"7a740942_64c9c025","updated":"2015-12-15 02:58:01.000000000","message":"Thanks for the good catch!","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"4ddf5226228019fe734c93eaf74aef4421a57520","unresolved":false,"context_lines":[{"line_number":4540,"context_line":"        self._client \u003d client"},{"line_number":4541,"context_line":"        self._secondary_client \u003d secondary_client"},{"line_number":4542,"context_line":"        self.pool_name \u003d pool_name"},{"line_number":4543,"context_line":"        self.mode \u003d \u0027-sync\u0027 if mode \u003d\u003d \u0027sync\u0027 else \u0027-async\u0027"},{"line_number":4544,"context_line":""},{"line_number":4545,"context_line":"    def create_mirror_workflow(self, mirror_name, lun_id,"},{"line_number":4546,"context_line":"                               lun_name, lun_size, provisioning, tiering):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_47428610","line":4543,"updated":"2015-12-14 09:44:49.000000000","message":"better to check the value of mode. If user inputs an invalid value like \u0027syncc\u0027, we should not give the \u0027-async\u0027 to the user.","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"bdd7aa57e81dd62eaaa5d58c2c224b6d6b8bace2","unresolved":false,"context_lines":[{"line_number":4540,"context_line":"        self._client \u003d client"},{"line_number":4541,"context_line":"        self._secondary_client \u003d secondary_client"},{"line_number":4542,"context_line":"        self.pool_name \u003d pool_name"},{"line_number":4543,"context_line":"        self.mode \u003d \u0027-sync\u0027 if mode \u003d\u003d \u0027sync\u0027 else \u0027-async\u0027"},{"line_number":4544,"context_line":""},{"line_number":4545,"context_line":"    def create_mirror_workflow(self, mirror_name, lun_id,"},{"line_number":4546,"context_line":"                               lun_name, lun_size, provisioning, tiering):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_d30e383a","line":4543,"in_reply_to":"7a740942_47428610","updated":"2015-12-15 02:58:01.000000000","message":"Currently sync/async is defined in driver code.\nspecifying by user is not allowed by conf for now\n\nanyway I will add the check for future use.\n\nThanks\nPeter","commit_id":"c2252749855ee70a4a9ebb8996c65e5d7b97c340"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":2906,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2907,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2908,"context_line":"                            \"and snapcopy in the same time.\")"},{"line_number":2909,"context_line":"                raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":2910,"context_line":"            work_flow.add(CopySnapshotTask(),"},{"line_number":2911,"context_line":"                          AllowReadWriteOnSnapshotTask(),"},{"line_number":2912,"context_line":"                          CreateSMPTask(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_02ff5302","line":2909,"range":{"start_line":2909,"start_character":22,"end_line":2909,"end_character":66},"updated":"2015-12-17 03:16:47.000000000","message":"exception.VolumeBackendAPIException(data\u003derr_msg)","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":2906,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2907,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2908,"context_line":"                            \"and snapcopy in the same time.\")"},{"line_number":2909,"context_line":"                raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":2910,"context_line":"            work_flow.add(CopySnapshotTask(),"},{"line_number":2911,"context_line":"                          AllowReadWriteOnSnapshotTask(),"},{"line_number":2912,"context_line":"                          CreateSMPTask(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_9dac04ef","line":2909,"range":{"start_line":2909,"start_character":22,"end_line":2909,"end_character":66},"in_reply_to":"3a7e1126_02ff5302","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":3991,"context_line":"                      \u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":3992,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":3993,"context_line":"            LOG.debug(\u0027Starting setup replication \u0027"},{"line_number":3994,"context_line":"                      \u0027for volume: {}\u0027.format(volume.id))"},{"line_number":3995,"context_line":"            lun_size \u003d volume[\u0027size\u0027]"},{"line_number":3996,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":3997,"context_line":"            self._mirror.create_mirror_workflow("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_0274339a","line":3994,"updated":"2015-12-17 03:16:47.000000000","message":"Please use the same %s format as line 4001.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":3991,"context_line":"                      \u0027replication_status\u0027: \u0027disabled\u0027}"},{"line_number":3992,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":3993,"context_line":"            LOG.debug(\u0027Starting setup replication \u0027"},{"line_number":3994,"context_line":"                      \u0027for volume: {}\u0027.format(volume.id))"},{"line_number":3995,"context_line":"            lun_size \u003d volume[\u0027size\u0027]"},{"line_number":3996,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":3997,"context_line":"            self._mirror.create_mirror_workflow("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_fde8a818","line":3994,"in_reply_to":"3a7e1126_0274339a","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4008,"context_line":"    def cleanup_lun_replication(self, volume):"},{"line_number":4009,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":4010,"context_line":"            LOG.debug(\u0027Starting cleanup replication form volume: \u0027"},{"line_number":4011,"context_line":"                      \u0027{}\u0027.format(volume.id))"},{"line_number":4012,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":4013,"context_line":"            mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":4014,"context_line":"            mv \u003d mirror_view.get_image(mirror_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_a2651fe2","line":4011,"updated":"2015-12-17 03:16:47.000000000","message":"Same","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4008,"context_line":"    def cleanup_lun_replication(self, volume):"},{"line_number":4009,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":4010,"context_line":"            LOG.debug(\u0027Starting cleanup replication form volume: \u0027"},{"line_number":4011,"context_line":"                      \u0027{}\u0027.format(volume.id))"},{"line_number":4012,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":4013,"context_line":"            mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":4014,"context_line":"            mv \u003d mirror_view.get_image(mirror_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_ddf7ecf3","line":4011,"in_reply_to":"3a7e1126_a2651fe2","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4063,"context_line":"                remote_info \u003d json.loads(volume[\u0027replication_driver_data\u0027])"},{"line_number":4064,"context_line":"            else:"},{"line_number":4065,"context_line":"                LOG.warning("},{"line_number":4066,"context_line":"                    _LW(\u0027No replication info from this volume: {}.\u0027),"},{"line_number":4067,"context_line":"                    volume.id)"},{"line_number":4068,"context_line":"                return None"},{"line_number":4069,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_62b6573f","line":4066,"updated":"2015-12-17 03:16:47.000000000","message":"Please use the %s format.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4063,"context_line":"                remote_info \u003d json.loads(volume[\u0027replication_driver_data\u0027])"},{"line_number":4064,"context_line":"            else:"},{"line_number":4065,"context_line":"                LOG.warning("},{"line_number":4066,"context_line":"                    _LW(\u0027No replication info from this volume: {}.\u0027),"},{"line_number":4067,"context_line":"                    volume.id)"},{"line_number":4068,"context_line":"                return None"},{"line_number":4069,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_5de45c3a","line":4066,"in_reply_to":"3a7e1126_62b6573f","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4076,"context_line":"        pool_name \u003d None"},{"line_number":4077,"context_line":"        managed_backend_name \u003d remote_info.get(\u0027managed_backend_name\u0027, None)"},{"line_number":4078,"context_line":"        if managed_backend_name:"},{"line_number":4079,"context_line":"            pool_name \u003d vol_utils.extract_host(managed_backend_name, \u0027pool\u0027)"},{"line_number":4080,"context_line":"        # Copy info to replica configuration for remote client"},{"line_number":4081,"context_line":"        replica_conf \u003d copy.copy(configuration)"},{"line_number":4082,"context_line":"        for key in self.REPLICATION_KEYS:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_62e4173b","line":4079,"updated":"2015-12-17 03:16:47.000000000","message":"There should be an else block here.  If managed_backend_name is None, there\u0027s no need to move forward.\n\nAlso if pool_name is None, there is also no need to move forward.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4076,"context_line":"        pool_name \u003d None"},{"line_number":4077,"context_line":"        managed_backend_name \u003d remote_info.get(\u0027managed_backend_name\u0027, None)"},{"line_number":4078,"context_line":"        if managed_backend_name:"},{"line_number":4079,"context_line":"            pool_name \u003d vol_utils.extract_host(managed_backend_name, \u0027pool\u0027)"},{"line_number":4080,"context_line":"        # Copy info to replica configuration for remote client"},{"line_number":4081,"context_line":"        replica_conf \u003d copy.copy(configuration)"},{"line_number":4082,"context_line":"        for key in self.REPLICATION_KEYS:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_9eaf1be3","line":4079,"in_reply_to":"3a7e1126_62e4173b","updated":"2015-12-17 05:57:22.000000000","message":"This method is used to build mirror view from:\n1. backend configuration \n2. replication_driver_data from volume\n\nin #1, remote_info contains managed_backend_name \nwhile in #2, it doesn\u0027t contain\nboth cases are valid, so i did not break out if managed_backend_name is None\n\nlet me know if I state it clearly.\n\nThanks\nPeter","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4537,"context_line":""},{"line_number":4538,"context_line":"    This class is to support operations for synchronous/synchronous"},{"line_number":4539,"context_line":"    replication. Each operation should ensure commands are sent to"},{"line_number":4540,"context_line":"    correct targeting device."},{"line_number":4541,"context_line":"    \"\"\""},{"line_number":4542,"context_line":"    SYNCHRONIZE_MODE \u003d (\u0027sync\u0027, \u0027async\u0027)"},{"line_number":4543,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_62bbb70f","line":4540,"updated":"2015-12-17 03:16:47.000000000","message":"Please specify in the docstring that only \"sync\" is supported and \"async\" will be added later.  This section is misleading because it sounds like both modes are supported.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4537,"context_line":""},{"line_number":4538,"context_line":"    This class is to support operations for synchronous/synchronous"},{"line_number":4539,"context_line":"    replication. Each operation should ensure commands are sent to"},{"line_number":4540,"context_line":"    correct targeting device."},{"line_number":4541,"context_line":"    \"\"\""},{"line_number":4542,"context_line":"    SYNCHRONIZE_MODE \u003d (\u0027sync\u0027, \u0027async\u0027)"},{"line_number":4543,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_fddc281a","line":4540,"in_reply_to":"3a7e1126_62bbb70f","updated":"2015-12-17 05:57:22.000000000","message":"I will remove async related wording in code/comments to avoid confusion, since supporting async is not finalized.\n\nThanks\nPeter","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"        self._client \u003d client"},{"line_number":4552,"context_line":"        self._secondary_client \u003d secondary_client"},{"line_number":4553,"context_line":"        self.pool_name \u003d pool_name"},{"line_number":4554,"context_line":"        if mode not in (\u0027sync\u0027, \u0027async\u0027):"},{"line_number":4555,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":4556,"context_line":"                data\u003d\"Invalid synchronize mode specified, allowed \""},{"line_number":4557,"context_line":"                     \"mode is {}\".format(self.SYNCHRONIZE_MODE))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_a248bf2e","line":4554,"updated":"2015-12-17 03:16:47.000000000","message":"Why is \"async\" a valid option here?","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4551,"context_line":"        self._client \u003d client"},{"line_number":4552,"context_line":"        self._secondary_client \u003d secondary_client"},{"line_number":4553,"context_line":"        self.pool_name \u003d pool_name"},{"line_number":4554,"context_line":"        if mode not in (\u0027sync\u0027, \u0027async\u0027):"},{"line_number":4555,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":4556,"context_line":"                data\u003d\"Invalid synchronize mode specified, allowed \""},{"line_number":4557,"context_line":"                     \"mode is {}\".format(self.SYNCHRONIZE_MODE))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_ddeb6caf","line":4554,"in_reply_to":"3a7e1126_a248bf2e","updated":"2015-12-17 05:57:22.000000000","message":"Will be removed","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4555,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":4556,"context_line":"                data\u003d\"Invalid synchronize mode specified, allowed \""},{"line_number":4557,"context_line":"                     \"mode is {}\".format(self.SYNCHRONIZE_MODE))"},{"line_number":4558,"context_line":"        self.mode \u003d \u0027-sync\u0027 if mode \u003d\u003d \u0027sync\u0027 else \u0027-async\u0027"},{"line_number":4559,"context_line":""},{"line_number":4560,"context_line":"    def create_mirror_workflow(self, mirror_name, lun_id,"},{"line_number":4561,"context_line":"                               lun_name, lun_size, provisioning, tiering):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_025e73e9","line":4558,"updated":"2015-12-17 03:16:47.000000000","message":"Here too.  If \"async\" is not supported, why do you set it to \"async\"?","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4555,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":4556,"context_line":"                data\u003d\"Invalid synchronize mode specified, allowed \""},{"line_number":4557,"context_line":"                     \"mode is {}\".format(self.SYNCHRONIZE_MODE))"},{"line_number":4558,"context_line":"        self.mode \u003d \u0027-sync\u0027 if mode \u003d\u003d \u0027sync\u0027 else \u0027-async\u0027"},{"line_number":4559,"context_line":""},{"line_number":4560,"context_line":"    def create_mirror_workflow(self, mirror_name, lun_id,"},{"line_number":4561,"context_line":"                               lun_name, lun_size, provisioning, tiering):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_9dce4459","line":4558,"in_reply_to":"3a7e1126_025e73e9","updated":"2015-12-17 05:57:22.000000000","message":"Will be removed","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4732,"context_line":"        if not mirror_view:"},{"line_number":4733,"context_line":"            mirror_view \u003d self.get_image(name)"},{"line_number":4734,"context_line":"        image_state \u003d mirror_view[\u0027images\u0027][1][\u0027Image State\u0027]"},{"line_number":4735,"context_line":"        if image_state \u003d\u003d \u0027Synchronized\u0027:"},{"line_number":4736,"context_line":"            LOG.debug(\u0027replication %(name)s is already in %(state)s.\u0027,"},{"line_number":4737,"context_line":"                      {\u0027name\u0027: name, \u0027state\u0027: image_state})"},{"line_number":4738,"context_line":"            return \"\", 0"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_42031bb9","line":4735,"updated":"2015-12-17 03:16:47.000000000","message":"Since you are using these states multiple times, it\u0027s good to use constants to avoid typo.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4732,"context_line":"        if not mirror_view:"},{"line_number":4733,"context_line":"            mirror_view \u003d self.get_image(name)"},{"line_number":4734,"context_line":"        image_state \u003d mirror_view[\u0027images\u0027][1][\u0027Image State\u0027]"},{"line_number":4735,"context_line":"        if image_state \u003d\u003d \u0027Synchronized\u0027:"},{"line_number":4736,"context_line":"            LOG.debug(\u0027replication %(name)s is already in %(state)s.\u0027,"},{"line_number":4737,"context_line":"                      {\u0027name\u0027: name, \u0027state\u0027: image_state})"},{"line_number":4738,"context_line":"            return \"\", 0"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_adc74b44","line":4735,"in_reply_to":"3a7e1126_42031bb9","updated":"2015-12-17 05:57:22.000000000","message":"Will do","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4807,"context_line":"        self.primary_lun_id \u003d primary_lun_id"},{"line_number":4808,"context_line":""},{"line_number":4809,"context_line":"    def execute(self, mirror, *args, **kwargs):"},{"line_number":4810,"context_line":"        LOG.debug(\u0027{}.execute\u0027.format(self.__class__.__name__))"},{"line_number":4811,"context_line":"        mirror.create_mirror(self.mirror_name, self.primary_lun_id, poll\u003dTrue)"},{"line_number":4812,"context_line":""},{"line_number":4813,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_22d84f53","line":4810,"updated":"2015-12-17 03:16:47.000000000","message":"Please use %s","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4807,"context_line":"        self.primary_lun_id \u003d primary_lun_id"},{"line_number":4808,"context_line":""},{"line_number":4809,"context_line":"    def execute(self, mirror, *args, **kwargs):"},{"line_number":4810,"context_line":"        LOG.debug(\u0027{}.execute\u0027.format(self.__class__.__name__))"},{"line_number":4811,"context_line":"        mirror.create_mirror(self.mirror_name, self.primary_lun_id, poll\u003dTrue)"},{"line_number":4812,"context_line":""},{"line_number":4813,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_f8a98fe0","line":4810,"in_reply_to":"3a7e1126_22d84f53","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4811,"context_line":"        mirror.create_mirror(self.mirror_name, self.primary_lun_id, poll\u003dTrue)"},{"line_number":4812,"context_line":""},{"line_number":4813,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"},{"line_number":4814,"context_line":"        method_name \u003d \u0027{}.revert\u0027.format(self.__class__.__name__)"},{"line_number":4815,"context_line":"        LOG.debug(method_name)"},{"line_number":4816,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":4817,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_a2799f31","line":4814,"updated":"2015-12-17 03:16:47.000000000","message":"Same","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4811,"context_line":"        mirror.create_mirror(self.mirror_name, self.primary_lun_id, poll\u003dTrue)"},{"line_number":4812,"context_line":""},{"line_number":4813,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"},{"line_number":4814,"context_line":"        method_name \u003d \u0027{}.revert\u0027.format(self.__class__.__name__)"},{"line_number":4815,"context_line":"        LOG.debug(method_name)"},{"line_number":4816,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":4817,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_b8ac67ee","line":4814,"in_reply_to":"3a7e1126_a2799f31","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4836,"context_line":"        self.tiering \u003d tiering"},{"line_number":4837,"context_line":""},{"line_number":4838,"context_line":"    def execute(self, mirror, *args, **kwargs):"},{"line_number":4839,"context_line":"        LOG.debug(\u0027{}.execute\u0027.format(self.__class__.__name__))"},{"line_number":4840,"context_line":"        sec_lun_id \u003d mirror.create_secondary_lun("},{"line_number":4841,"context_line":"            self.lun_name, self.lun_size, self.provisioning, self.tiering)"},{"line_number":4842,"context_line":"        return sec_lun_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_42f1dbcc","line":4839,"updated":"2015-12-17 03:16:47.000000000","message":"Same","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4842,"context_line":"        return sec_lun_id"},{"line_number":4843,"context_line":""},{"line_number":4844,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"},{"line_number":4845,"context_line":"        method_name \u003d \u0027{}.revert\u0027.format(self.__class__.__name__)"},{"line_number":4846,"context_line":"        LOG.debug(method_name)"},{"line_number":4847,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":4848,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_02baf3e1","line":4845,"updated":"2015-12-17 03:16:47.000000000","message":"same","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4864,"context_line":"        self.mirror_name \u003d mirror_name"},{"line_number":4865,"context_line":""},{"line_number":4866,"context_line":"    def execute(self, mirror, sec_lun_id, *args, **kwargs):"},{"line_number":4867,"context_line":"        LOG.debug(\u0027{}.execute\u0027.format(self.__class__.__name__))"},{"line_number":4868,"context_line":"        mirror.add_image(self.mirror_name, sec_lun_id, poll\u003dTrue)"},{"line_number":4869,"context_line":""},{"line_number":4870,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_42c8fb74","line":4867,"updated":"2015-12-17 03:16:47.000000000","message":"Please use %s","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4864,"context_line":"        self.mirror_name \u003d mirror_name"},{"line_number":4865,"context_line":""},{"line_number":4866,"context_line":"    def execute(self, mirror, sec_lun_id, *args, **kwargs):"},{"line_number":4867,"context_line":"        LOG.debug(\u0027{}.execute\u0027.format(self.__class__.__name__))"},{"line_number":4868,"context_line":"        mirror.add_image(self.mirror_name, sec_lun_id, poll\u003dTrue)"},{"line_number":4869,"context_line":""},{"line_number":4870,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_132c7c49","line":4867,"in_reply_to":"3a7e1126_42c8fb74","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":4868,"context_line":"        mirror.add_image(self.mirror_name, sec_lun_id, poll\u003dTrue)"},{"line_number":4869,"context_line":""},{"line_number":4870,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"},{"line_number":4871,"context_line":"        method_name \u003d \u0027{}.revert\u0027.format(self.__class__.__name__)"},{"line_number":4872,"context_line":"        LOG.debug(method_name)"},{"line_number":4873,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":4874,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_22a60fc2","line":4871,"updated":"2015-12-17 03:16:47.000000000","message":"same","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"46c297721e5e5a16417f4338332ff4ec313305cb","unresolved":false,"context_lines":[{"line_number":4868,"context_line":"        mirror.add_image(self.mirror_name, sec_lun_id, poll\u003dTrue)"},{"line_number":4869,"context_line":""},{"line_number":4870,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"},{"line_number":4871,"context_line":"        method_name \u003d \u0027{}.revert\u0027.format(self.__class__.__name__)"},{"line_number":4872,"context_line":"        LOG.debug(method_name)"},{"line_number":4873,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":4874,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_f32a102c","line":4871,"in_reply_to":"3a7e1126_22a60fc2","updated":"2015-12-17 05:57:22.000000000","message":"Done","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c726785bd4f403eabb4eae641e8a39d34f965948","unresolved":false,"context_lines":[{"line_number":2815,"context_line":"        pool_stats[\u0027max_over_subscription_ratio\u0027] \u003d ("},{"line_number":2816,"context_line":"            self.max_over_subscription_ratio)"},{"line_number":2817,"context_line":"        # Add replication V2 support"},{"line_number":2818,"context_line":"        pool_stats[\u0027replication_enabled\u0027] \u003d ("},{"line_number":2819,"context_line":"            True if self._mirror else False)"},{"line_number":2820,"context_line":""},{"line_number":2821,"context_line":"        return pool_stats"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_f74319ad","line":2818,"range":{"start_line":2818,"start_character":8,"end_line":2818,"end_character":41},"updated":"2016-01-06 15:45:38.000000000","message":"Do you want to add replication_count and replication_types as well to the capabilities list?","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f906e9da64cbb4120c185774fba7b3135dceae2a","unresolved":false,"context_lines":[{"line_number":2815,"context_line":"        pool_stats[\u0027max_over_subscription_ratio\u0027] \u003d ("},{"line_number":2816,"context_line":"            self.max_over_subscription_ratio)"},{"line_number":2817,"context_line":"        # Add replication V2 support"},{"line_number":2818,"context_line":"        pool_stats[\u0027replication_enabled\u0027] \u003d ("},{"line_number":2819,"context_line":"            True if self._mirror else False)"},{"line_number":2820,"context_line":""},{"line_number":2821,"context_line":"        return pool_stats"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_02cd2530","line":2818,"range":{"start_line":2818,"start_character":8,"end_line":2818,"end_character":41},"in_reply_to":"fa69d971_f74319ad","updated":"2016-01-08 02:40:06.000000000","message":"Will add it","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c726785bd4f403eabb4eae641e8a39d34f965948","unresolved":false,"context_lines":[{"line_number":3953,"context_line":"        mirror_view.promote_image(mirror_name)"},{"line_number":3954,"context_line":"        rep_data.update({\u0027is_primary\u0027: not rep_data[\u0027is_primary\u0027]})"},{"line_number":3955,"context_line":"        # Transfer ownership to secondary"},{"line_number":3956,"context_line":"        model_update \u003d {\u0027host\u0027: secondary,"},{"line_number":3957,"context_line":"                        \u0027replication_driver_data\u0027: json.dumps(rep_data)}"},{"line_number":3958,"context_line":"        return model_update"},{"line_number":3959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_97665d28","line":3956,"range":{"start_line":3956,"start_character":32,"end_line":3956,"end_character":41},"updated":"2016-01-06 15:45:38.000000000","message":"Is secondary a host here? When you do \"cinder replication-list-targets \u003cvolume-id\u003e\", will you get a list of hosts? Then you would run \"cinder replication-failover \u003cvolume-id\u003e \u003chost/secondary\u003e\"?","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"f6f8af9841a37f52407b216570731fe7739075bf","unresolved":false,"context_lines":[{"line_number":3953,"context_line":"        mirror_view.promote_image(mirror_name)"},{"line_number":3954,"context_line":"        rep_data.update({\u0027is_primary\u0027: not rep_data[\u0027is_primary\u0027]})"},{"line_number":3955,"context_line":"        # Transfer ownership to secondary"},{"line_number":3956,"context_line":"        model_update \u003d {\u0027host\u0027: secondary,"},{"line_number":3957,"context_line":"                        \u0027replication_driver_data\u0027: json.dumps(rep_data)}"},{"line_number":3958,"context_line":"        return model_update"},{"line_number":3959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_f8537a37","line":3956,"range":{"start_line":3956,"start_character":32,"end_line":3956,"end_character":41},"in_reply_to":"fa69d971_22a94924","updated":"2016-01-08 15:40:41.000000000","message":"Secondary/target_device_id can be anything, even a host if you so wish. The idea was just to standardize target_device_id so an OpenStack user can list replication targets and fail over a volume the exact same way no matter what backend they are using. It doesn\u0027t matter if it\u0027s 3PAR, VNX, SolidFire, the method is the same. The idea is to run cinder replication-list-targets to retrieve a list of target_device_ids. You would then pass one of those values into replication-failover. Example:\n\n    cinder replication-list-targets 601e9a4e-7e55-42ac-a431-70246a856ac5\n    +------------------------------+\n    |        target_device_id      |\n    +------------------------------+\n    |            foo@bar           |\n    |            bar@biz           |\n    +------------------------------+\n\n    cinder replication-failover 601e9a4e-7e55-42ac-a431-70246a856ac5 foo@bar\n\n\nIf this is not how replication-failover/replication-list-targets works for this driver, that would break this standardization. An OpenStack user would then have to execute a fail over differently when the backend is VNX verses anything else.","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f906e9da64cbb4120c185774fba7b3135dceae2a","unresolved":false,"context_lines":[{"line_number":3953,"context_line":"        mirror_view.promote_image(mirror_name)"},{"line_number":3954,"context_line":"        rep_data.update({\u0027is_primary\u0027: not rep_data[\u0027is_primary\u0027]})"},{"line_number":3955,"context_line":"        # Transfer ownership to secondary"},{"line_number":3956,"context_line":"        model_update \u003d {\u0027host\u0027: secondary,"},{"line_number":3957,"context_line":"                        \u0027replication_driver_data\u0027: json.dumps(rep_data)}"},{"line_number":3958,"context_line":"        return model_update"},{"line_number":3959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_22a94924","line":3956,"range":{"start_line":3956,"start_character":32,"end_line":3956,"end_character":41},"in_reply_to":"fa69d971_97665d28","updated":"2016-01-08 02:40:06.000000000","message":"Currently, we only accept secondary passed in as a host.\nWe are evaluating whether to support host or remote_device_id  now\nI would like defer the changes regarding you comments.","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"cbae354c2ba71f65aab53b65428a6b0f36cad3e0","unresolved":false,"context_lines":[{"line_number":3953,"context_line":"        mirror_view.promote_image(mirror_name)"},{"line_number":3954,"context_line":"        rep_data.update({\u0027is_primary\u0027: not rep_data[\u0027is_primary\u0027]})"},{"line_number":3955,"context_line":"        # Transfer ownership to secondary"},{"line_number":3956,"context_line":"        model_update \u003d {\u0027host\u0027: secondary,"},{"line_number":3957,"context_line":"                        \u0027replication_driver_data\u0027: json.dumps(rep_data)}"},{"line_number":3958,"context_line":"        return model_update"},{"line_number":3959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_118ba069","line":3956,"range":{"start_line":3956,"start_character":32,"end_line":3956,"end_character":41},"in_reply_to":"fa69d971_f8537a37","updated":"2016-01-11 02:24:49.000000000","message":"Exactly, we do providing the feature you mentioned.\n\nWe are using vnx serial number as the target_device_id.\n\nand in the same time we provide vnx serial number in replication-list-targets command, so admin can perform replication-failover like:\ncinder replication-failover \u003cvolume-id\u003e \u003cvnx serial nubmer\u003e\n\nplease check latest patch set for above implementation.\nThanks\nPeter","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c726785bd4f403eabb4eae641e8a39d34f965948","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"        targets \u003d {\u0027volume_id\u0027: volume.id, \u0027targets\u0027: []}"},{"line_number":3967,"context_line":"        target_info \u003d json.loads(volume.replication_driver_data)"},{"line_number":3968,"context_line":"        mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":3969,"context_line":"        target_info[\u0027remote_target_id\u0027] \u003d ("},{"line_number":3970,"context_line":"            mirror_view._secondary_client.get_array_serial())"},{"line_number":3971,"context_line":"        targets[\u0027targets\u0027] \u003d [target_info]"},{"line_number":3972,"context_line":"        return targets"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_77a16945","line":3969,"range":{"start_line":3969,"start_character":21,"end_line":3969,"end_character":37},"updated":"2016-01-06 15:45:38.000000000","message":"This should be target_device_id\n\nhttps://github.com/openstack/python-cinderclient/blob/master/cinderclient/v2/shell.py#L1295","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f906e9da64cbb4120c185774fba7b3135dceae2a","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"        targets \u003d {\u0027volume_id\u0027: volume.id, \u0027targets\u0027: []}"},{"line_number":3967,"context_line":"        target_info \u003d json.loads(volume.replication_driver_data)"},{"line_number":3968,"context_line":"        mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":3969,"context_line":"        target_info[\u0027remote_target_id\u0027] \u003d ("},{"line_number":3970,"context_line":"            mirror_view._secondary_client.get_array_serial())"},{"line_number":3971,"context_line":"        targets[\u0027targets\u0027] \u003d [target_info]"},{"line_number":3972,"context_line":"        return targets"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_827595cb","line":3969,"range":{"start_line":3969,"start_character":21,"end_line":3969,"end_character":37},"in_reply_to":"fa69d971_77a16945","updated":"2016-01-08 02:40:06.000000000","message":"Will update in next patch.","commit_id":"d02851b25d0e39fe246285d043eb792bcdcda060"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7ea68c224611549723ce9d7a1774856767371b9f","unresolved":false,"context_lines":[{"line_number":4050,"context_line":"        metadata_update \u003d {}"},{"line_number":4051,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":4052,"context_line":"            LOG.debug(\u0027Starting setup replication \u0027"},{"line_number":4053,"context_line":"                      \u0027for volume: %s\u0027 % volume.id)"},{"line_number":4054,"context_line":"            lun_size \u003d volume[\u0027size\u0027]"},{"line_number":4055,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":4056,"context_line":"            self._mirror.create_mirror_workflow("}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_107e4119","line":4053,"updated":"2016-01-10 07:42:56.000000000","message":"Change % to comma.","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"721fd096ad7ed405d02da3ce00998594461e8974","unresolved":false,"context_lines":[{"line_number":4050,"context_line":"        metadata_update \u003d {}"},{"line_number":4051,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":4052,"context_line":"            LOG.debug(\u0027Starting setup replication \u0027"},{"line_number":4053,"context_line":"                      \u0027for volume: %s\u0027 % volume.id)"},{"line_number":4054,"context_line":"            lun_size \u003d volume[\u0027size\u0027]"},{"line_number":4055,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":4056,"context_line":"            self._mirror.create_mirror_workflow("}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_b1d17459","line":4053,"in_reply_to":"fa69d971_107e4119","updated":"2016-01-11 02:53:29.000000000","message":"Done","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7ea68c224611549723ce9d7a1774856767371b9f","unresolved":false,"context_lines":[{"line_number":4057,"context_line":"                mirror_name, primary_lun_id, volume.name, lun_size,"},{"line_number":4058,"context_line":"                provisioning, tiering)"},{"line_number":4059,"context_line":""},{"line_number":4060,"context_line":"            LOG.info(_LI(\u0027Successfully setup replication for %s \u0027), volume.id)"},{"line_number":4061,"context_line":"            rep_update.update({\u0027replication_driver_data\u0027:"},{"line_number":4062,"context_line":"                              self.__class__._build_replication_driver_data("},{"line_number":4063,"context_line":"                                  self.configuration),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_d073c94c","line":4060,"updated":"2016-01-10 07:42:56.000000000","message":"Remove the space after %s, also, better to add a full stop at the end.","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"721fd096ad7ed405d02da3ce00998594461e8974","unresolved":false,"context_lines":[{"line_number":4057,"context_line":"                mirror_name, primary_lun_id, volume.name, lun_size,"},{"line_number":4058,"context_line":"                provisioning, tiering)"},{"line_number":4059,"context_line":""},{"line_number":4060,"context_line":"            LOG.info(_LI(\u0027Successfully setup replication for %s \u0027), volume.id)"},{"line_number":4061,"context_line":"            rep_update.update({\u0027replication_driver_data\u0027:"},{"line_number":4062,"context_line":"                              self.__class__._build_replication_driver_data("},{"line_number":4063,"context_line":"                                  self.configuration),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_d1d6684e","line":4060,"in_reply_to":"fa69d971_d073c94c","updated":"2016-01-11 02:53:29.000000000","message":"Done","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7ea68c224611549723ce9d7a1774856767371b9f","unresolved":false,"context_lines":[{"line_number":4070,"context_line":"    def cleanup_lun_replication(self, volume):"},{"line_number":4071,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":4072,"context_line":"            LOG.debug(\u0027Starting cleanup replication form volume: \u0027"},{"line_number":4073,"context_line":"                      \u0027%s\u0027 % volume.id)"},{"line_number":4074,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":4075,"context_line":"            mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":4076,"context_line":"            mv \u003d mirror_view.get_image(mirror_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_f0704d42","line":4073,"updated":"2016-01-10 07:42:56.000000000","message":"Change % to comma.","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"721fd096ad7ed405d02da3ce00998594461e8974","unresolved":false,"context_lines":[{"line_number":4070,"context_line":"    def cleanup_lun_replication(self, volume):"},{"line_number":4071,"context_line":"        if self._is_replication_enabled(volume):"},{"line_number":4072,"context_line":"            LOG.debug(\u0027Starting cleanup replication form volume: \u0027"},{"line_number":4073,"context_line":"                      \u0027%s\u0027 % volume.id)"},{"line_number":4074,"context_line":"            mirror_name \u003d self._construct_mirror_name(volume)"},{"line_number":4075,"context_line":"            mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":4076,"context_line":"            mv \u003d mirror_view.get_image(mirror_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_91cc70bc","line":4073,"in_reply_to":"fa69d971_f0704d42","updated":"2016-01-11 02:53:29.000000000","message":"Done","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7ea68c224611549723ce9d7a1774856767371b9f","unresolved":false,"context_lines":[{"line_number":4144,"context_line":"            remote_info \u003d configuration.replication_device[0]"},{"line_number":4145,"context_line":""},{"line_number":4146,"context_line":"        pool_name \u003d None"},{"line_number":4147,"context_line":"        managed_backend_name \u003d remote_info.get(\u0027managed_backend_name\u0027, None)"},{"line_number":4148,"context_line":"        if managed_backend_name:"},{"line_number":4149,"context_line":"            pool_name \u003d vol_utils.extract_host(managed_backend_name, \u0027pool\u0027)"},{"line_number":4150,"context_line":"        # Copy info to replica configuration for remote client"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_709bfd66","line":4147,"updated":"2016-01-10 07:42:56.000000000","message":"Just use\nremote_info.get(\u0027managed_backend_name\u0027)\nthe default return value will be \"None\".","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"721fd096ad7ed405d02da3ce00998594461e8974","unresolved":false,"context_lines":[{"line_number":4144,"context_line":"            remote_info \u003d configuration.replication_device[0]"},{"line_number":4145,"context_line":""},{"line_number":4146,"context_line":"        pool_name \u003d None"},{"line_number":4147,"context_line":"        managed_backend_name \u003d remote_info.get(\u0027managed_backend_name\u0027, None)"},{"line_number":4148,"context_line":"        if managed_backend_name:"},{"line_number":4149,"context_line":"            pool_name \u003d vol_utils.extract_host(managed_backend_name, \u0027pool\u0027)"},{"line_number":4150,"context_line":"        # Copy info to replica configuration for remote client"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_713e9c8c","line":4147,"in_reply_to":"fa69d971_709bfd66","updated":"2016-01-11 02:53:29.000000000","message":"Done","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7ea68c224611549723ce9d7a1774856767371b9f","unresolved":false,"context_lines":[{"line_number":4909,"context_line":"        self.tiering \u003d tiering"},{"line_number":4910,"context_line":""},{"line_number":4911,"context_line":"    def execute(self, mirror, *args, **kwargs):"},{"line_number":4912,"context_line":"        LOG.debug(\u0027%s.execute\u0027 % self.__class__.__name__)"},{"line_number":4913,"context_line":"        sec_lun_id \u003d mirror.create_secondary_lun("},{"line_number":4914,"context_line":"            self.lun_name, self.lun_size, self.provisioning, self.tiering)"},{"line_number":4915,"context_line":"        return sec_lun_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_f0be0dad","line":4912,"updated":"2016-01-10 07:42:56.000000000","message":"Change % to comma.","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"721fd096ad7ed405d02da3ce00998594461e8974","unresolved":false,"context_lines":[{"line_number":4909,"context_line":"        self.tiering \u003d tiering"},{"line_number":4910,"context_line":""},{"line_number":4911,"context_line":"    def execute(self, mirror, *args, **kwargs):"},{"line_number":4912,"context_line":"        LOG.debug(\u0027%s.execute\u0027 % self.__class__.__name__)"},{"line_number":4913,"context_line":"        sec_lun_id \u003d mirror.create_secondary_lun("},{"line_number":4914,"context_line":"            self.lun_name, self.lun_size, self.provisioning, self.tiering)"},{"line_number":4915,"context_line":"        return sec_lun_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_d1e3c8d7","line":4912,"in_reply_to":"fa69d971_f0be0dad","updated":"2016-01-11 02:53:29.000000000","message":"Done","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"7ea68c224611549723ce9d7a1774856767371b9f","unresolved":false,"context_lines":[{"line_number":4937,"context_line":"        self.mirror_name \u003d mirror_name"},{"line_number":4938,"context_line":""},{"line_number":4939,"context_line":"    def execute(self, mirror, sec_lun_id, *args, **kwargs):"},{"line_number":4940,"context_line":"        LOG.debug(\u0027%s.execute\u0027 % self.__class__.__name__)"},{"line_number":4941,"context_line":"        mirror.add_image(self.mirror_name, sec_lun_id, poll\u003dTrue)"},{"line_number":4942,"context_line":""},{"line_number":4943,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_90deb10f","line":4940,"updated":"2016-01-10 07:42:56.000000000","message":"Change % to comma.","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"721fd096ad7ed405d02da3ce00998594461e8974","unresolved":false,"context_lines":[{"line_number":4937,"context_line":"        self.mirror_name \u003d mirror_name"},{"line_number":4938,"context_line":""},{"line_number":4939,"context_line":"    def execute(self, mirror, sec_lun_id, *args, **kwargs):"},{"line_number":4940,"context_line":"        LOG.debug(\u0027%s.execute\u0027 % self.__class__.__name__)"},{"line_number":4941,"context_line":"        mirror.add_image(self.mirror_name, sec_lun_id, poll\u003dTrue)"},{"line_number":4942,"context_line":""},{"line_number":4943,"context_line":"    def revert(self, result, mirror, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_b1de540f","line":4940,"in_reply_to":"fa69d971_90deb10f","updated":"2016-01-11 02:53:29.000000000","message":"Done","commit_id":"e3f1bfcb4be31146702fe9f82a43bc1d24768124"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"0f865e2faf0652209fdb43569ca1144c50cc99fc","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"        # secondary LUN will inherit properties from primary LUN."},{"line_number":2358,"context_line":"        rep_update, metadata_update \u003d self.setup_lun_replication("},{"line_number":2359,"context_line":"            volume, data[\u0027lun_id\u0027], provisioning, tiering)"},{"line_number":2360,"context_line":"        volume_metadata.update(metadata_update)"},{"line_number":2361,"context_line":"        model_update.update(rep_update)"},{"line_number":2362,"context_line":"        return model_update"},{"line_number":2363,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_1ccde930","line":2360,"range":{"start_line":2360,"start_character":8,"end_line":2360,"end_character":47},"updated":"2016-01-11 11:37:41.000000000","message":"Here metadata_update won\u0027t updates model_update.","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f5317bb485c0a67656419dba831a9f818bb16253","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"        # secondary LUN will inherit properties from primary LUN."},{"line_number":2358,"context_line":"        rep_update, metadata_update \u003d self.setup_lun_replication("},{"line_number":2359,"context_line":"            volume, data[\u0027lun_id\u0027], provisioning, tiering)"},{"line_number":2360,"context_line":"        volume_metadata.update(metadata_update)"},{"line_number":2361,"context_line":"        model_update.update(rep_update)"},{"line_number":2362,"context_line":"        return model_update"},{"line_number":2363,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_c68153fd","line":2360,"range":{"start_line":2360,"start_character":8,"end_line":2360,"end_character":47},"in_reply_to":"fa69d971_1ccde930","updated":"2016-01-12 05:49:06.000000000","message":"It will, but looks a little wield:\n\n\u003e\u003e\u003e meta \u003d {\u0027hello\u0027: \u0027world\u0027}\n\u003e\u003e\u003e model_update \u003d {\u0027key1\u0027: \u0027value1\u0027, \u0027dic1\u0027: meta}\n\u003e\u003e\u003e meta.update({\u0027new\u0027: \u0027added\u0027})\n\u003e\u003e\u003e print meta\n{\u0027new\u0027: \u0027added\u0027, \u0027hello\u0027: \u0027world\u0027}\n\u003e\u003e\u003e print model_update\n{\u0027dic1\u0027: {\u0027new\u0027: \u0027added\u0027, \u0027hello\u0027: \u0027world\u0027}, \u0027key1\u0027: \u0027value1\u0027}\n\u003e\u003e\u003e \n\nanyway, i will update the style here to make more readable.","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"0f865e2faf0652209fdb43569ca1144c50cc99fc","unresolved":false,"context_lines":[{"line_number":2909,"context_line":"        if self._is_snapcopy_enabled(volume):"},{"line_number":2910,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2911,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2912,"context_line":"                            \"and snapcopy in the same time.\")"},{"line_number":2913,"context_line":"                raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":2914,"context_line":"            work_flow.add(CopySnapshotTask(),"},{"line_number":2915,"context_line":"                          AllowReadWriteOnSnapshotTask(),"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_5c7b61be","line":2912,"range":{"start_line":2912,"start_character":42,"end_line":2912,"end_character":44},"updated":"2016-01-11 11:37:41.000000000","message":"\u0027at\u0027 the same time maybe good.","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f5317bb485c0a67656419dba831a9f818bb16253","unresolved":false,"context_lines":[{"line_number":2909,"context_line":"        if self._is_snapcopy_enabled(volume):"},{"line_number":2910,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2911,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2912,"context_line":"                            \"and snapcopy in the same time.\")"},{"line_number":2913,"context_line":"                raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":2914,"context_line":"            work_flow.add(CopySnapshotTask(),"},{"line_number":2915,"context_line":"                          AllowReadWriteOnSnapshotTask(),"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_86d11bfe","line":2912,"range":{"start_line":2912,"start_character":42,"end_line":2912,"end_character":44},"in_reply_to":"fa69d971_5c7b61be","updated":"2016-01-12 05:49:06.000000000","message":"Done","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"0f865e2faf0652209fdb43569ca1144c50cc99fc","unresolved":false,"context_lines":[{"line_number":2986,"context_line":"            # snapcopy feature enabled"},{"line_number":2987,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2988,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2989,"context_line":"                            \"and snapcopy in the same time.\")"},{"line_number":2990,"context_line":"                raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":2991,"context_line":"            work_flow.add(CreateSnapshotTask(),"},{"line_number":2992,"context_line":"                          CreateSMPTask(),"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_fc181586","line":2989,"range":{"start_line":2989,"start_character":42,"end_line":2989,"end_character":44},"updated":"2016-01-11 11:37:41.000000000","message":"ditto","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f5317bb485c0a67656419dba831a9f818bb16253","unresolved":false,"context_lines":[{"line_number":2986,"context_line":"            # snapcopy feature enabled"},{"line_number":2987,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2988,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2989,"context_line":"                            \"and snapcopy in the same time.\")"},{"line_number":2990,"context_line":"                raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":2991,"context_line":"            work_flow.add(CreateSnapshotTask(),"},{"line_number":2992,"context_line":"                          CreateSMPTask(),"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_e602576f","line":2989,"range":{"start_line":2989,"start_character":42,"end_line":2989,"end_character":44},"in_reply_to":"fa69d971_fc181586","updated":"2016-01-12 05:49:06.000000000","message":"Done","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"0f865e2faf0652209fdb43569ca1144c50cc99fc","unresolved":false,"context_lines":[{"line_number":4720,"context_line":"        return out, rc"},{"line_number":4721,"context_line":""},{"line_number":4722,"context_line":"    def remove_image(self, name, mirror_view\u003dNone, poll\u003dFalse):"},{"line_number":4723,"context_line":"        \"\"\"Removes secondary image(s) from mirror\"\"\""},{"line_number":4724,"context_line":"        if not mirror_view:"},{"line_number":4725,"context_line":"            mirror_view \u003d self.get_image(name, poll\u003dTrue)"},{"line_number":4726,"context_line":"        image_uid \u003d self._extract_image_uid(mirror_view, \u0027secondary\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa69d971_3fbbff10","line":4723,"range":{"start_line":4723,"start_character":11,"end_line":4723,"end_character":49},"updated":"2016-01-11 11:37:41.000000000","message":"Need a \u0027.\u0027 at the end of line.","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"f5317bb485c0a67656419dba831a9f818bb16253","unresolved":false,"context_lines":[{"line_number":4720,"context_line":"        return out, rc"},{"line_number":4721,"context_line":""},{"line_number":4722,"context_line":"    def remove_image(self, name, mirror_view\u003dNone, poll\u003dFalse):"},{"line_number":4723,"context_line":"        \"\"\"Removes secondary image(s) from mirror\"\"\""},{"line_number":4724,"context_line":"        if not mirror_view:"},{"line_number":4725,"context_line":"            mirror_view \u003d self.get_image(name, poll\u003dTrue)"},{"line_number":4726,"context_line":"        image_uid \u003d self._extract_image_uid(mirror_view, \u0027secondary\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_866d9b34","line":4723,"range":{"start_line":4723,"start_character":11,"end_line":4723,"end_character":49},"in_reply_to":"fa69d971_3fbbff10","updated":"2016-01-12 05:49:06.000000000","message":"Done","commit_id":"143a8b1a7061c3d7890fa7e294abdbd2020d8f65"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5bfc41d024b67bd7173f5189aa492d542f87be79","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2988,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2989,"context_line":"                            \"and snapcopy at the same time.\")"},{"line_number":2990,"context_line":"                raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":2991,"context_line":"            work_flow.add(CreateSnapshotTask(),"},{"line_number":2992,"context_line":"                          CreateSMPTask(),"},{"line_number":2993,"context_line":"                          AttachSnapTask())"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_55b63d8b","line":2990,"updated":"2016-01-12 20:15:23.000000000","message":"exception.VolumeBackendAPIException(data\u003derr_msg)","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c75fa9a9dbe44ad063ddf5ab04d19a9a3648ea60","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"            if self._is_replication_enabled(volume):"},{"line_number":2988,"context_line":"                err_msg \u003d _(\"Unable to enable replication \""},{"line_number":2989,"context_line":"                            \"and snapcopy at the same time.\")"},{"line_number":2990,"context_line":"                raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":2991,"context_line":"            work_flow.add(CreateSnapshotTask(),"},{"line_number":2992,"context_line":"                          CreateSMPTask(),"},{"line_number":2993,"context_line":"                          AttachSnapTask())"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_b073f97f","line":2990,"in_reply_to":"da6ed579_55b63d8b","updated":"2016-01-13 03:06:48.000000000","message":"Done","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5bfc41d024b67bd7173f5189aa492d542f87be79","unresolved":false,"context_lines":[{"line_number":3973,"context_line":"        else:"},{"line_number":3974,"context_line":"            remote_device_id \u003d self._get_volume_metadata(volume)[\u0027system\u0027]"},{"line_number":3975,"context_line":"        if secondary !\u003d remote_device_id:"},{"line_number":3976,"context_line":"            msg \u003d (_(\u0027Invalid secondary specified, choose from %s \u0027)"},{"line_number":3977,"context_line":"                   % [remote_device_id])"},{"line_number":3978,"context_line":"            LOG.error(msg)"},{"line_number":3979,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_50f3ab0a","line":3976,"updated":"2016-01-12 20:15:23.000000000","message":"nit: remove space at the end.","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c75fa9a9dbe44ad063ddf5ab04d19a9a3648ea60","unresolved":false,"context_lines":[{"line_number":3973,"context_line":"        else:"},{"line_number":3974,"context_line":"            remote_device_id \u003d self._get_volume_metadata(volume)[\u0027system\u0027]"},{"line_number":3975,"context_line":"        if secondary !\u003d remote_device_id:"},{"line_number":3976,"context_line":"            msg \u003d (_(\u0027Invalid secondary specified, choose from %s \u0027)"},{"line_number":3977,"context_line":"                   % [remote_device_id])"},{"line_number":3978,"context_line":"            LOG.error(msg)"},{"line_number":3979,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_d06ead95","line":3976,"in_reply_to":"da6ed579_50f3ab0a","updated":"2016-01-13 03:06:48.000000000","message":"Done","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5bfc41d024b67bd7173f5189aa492d542f87be79","unresolved":false,"context_lines":[{"line_number":4016,"context_line":"        \"\"\"Provides replication target(s) for a volume.\"\"\""},{"line_number":4017,"context_line":"        targets \u003d {\u0027volume_id\u0027: volume.id, \u0027targets\u0027: []}"},{"line_number":4018,"context_line":"        # target_info \u003d json.loads(volume.replication_driver_data)"},{"line_number":4019,"context_line":"        # mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":4020,"context_line":"        rep_data \u003d json.loads(volume[\u0027replication_driver_data\u0027])"},{"line_number":4021,"context_line":"        is_primary \u003d rep_data[\u0027is_primary\u0027]"},{"line_number":4022,"context_line":"        if is_primary:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_f052dfdc","line":4019,"updated":"2016-01-12 20:15:23.000000000","message":"Remove commented out code.","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c75fa9a9dbe44ad063ddf5ab04d19a9a3648ea60","unresolved":false,"context_lines":[{"line_number":4016,"context_line":"        \"\"\"Provides replication target(s) for a volume.\"\"\""},{"line_number":4017,"context_line":"        targets \u003d {\u0027volume_id\u0027: volume.id, \u0027targets\u0027: []}"},{"line_number":4018,"context_line":"        # target_info \u003d json.loads(volume.replication_driver_data)"},{"line_number":4019,"context_line":"        # mirror_view \u003d self._get_mirror_view(volume)"},{"line_number":4020,"context_line":"        rep_data \u003d json.loads(volume[\u0027replication_driver_data\u0027])"},{"line_number":4021,"context_line":"        is_primary \u003d rep_data[\u0027is_primary\u0027]"},{"line_number":4022,"context_line":"        if is_primary:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_50095ddc","line":4019,"in_reply_to":"da6ed579_f052dfdc","updated":"2016-01-13 03:06:48.000000000","message":"Done","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1b13dce209825cc1585dcdf0ae9043999ee46aec","unresolved":false,"context_lines":[{"line_number":4074,"context_line":"            if mv:"},{"line_number":4075,"context_line":"                mirror_view.destroy_mirror_view(mirror_name, volume.name, mv)"},{"line_number":4076,"context_line":""},{"line_number":4077,"context_line":"    def _build_backend_host(self, group_name, pool_name):"},{"line_number":4078,"context_line":"        \"\"\"Constructs a host string for a specific volume."},{"line_number":4079,"context_line":""},{"line_number":4080,"context_line":"        :param: test"},{"line_number":4081,"context_line":"        :returns: format linke \"host@group_name#pool_name\""},{"line_number":4082,"context_line":"        \"\"\""},{"line_number":4083,"context_line":"        return \"\""},{"line_number":4084,"context_line":""},{"line_number":4085,"context_line":"    def _get_mirror_view(self, volume):"},{"line_number":4086,"context_line":"        \"\"\"Determines where to build a Mirror View operator.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_192d69a7","line":4083,"range":{"start_line":4077,"start_character":4,"end_line":4083,"end_character":17},"updated":"2016-01-12 17:19:51.000000000","message":"I believe this should be removed? It just returns an empty string?","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c75fa9a9dbe44ad063ddf5ab04d19a9a3648ea60","unresolved":false,"context_lines":[{"line_number":4074,"context_line":"            if mv:"},{"line_number":4075,"context_line":"                mirror_view.destroy_mirror_view(mirror_name, volume.name, mv)"},{"line_number":4076,"context_line":""},{"line_number":4077,"context_line":"    def _build_backend_host(self, group_name, pool_name):"},{"line_number":4078,"context_line":"        \"\"\"Constructs a host string for a specific volume."},{"line_number":4079,"context_line":""},{"line_number":4080,"context_line":"        :param: test"},{"line_number":4081,"context_line":"        :returns: format linke \"host@group_name#pool_name\""},{"line_number":4082,"context_line":"        \"\"\""},{"line_number":4083,"context_line":"        return \"\""},{"line_number":4084,"context_line":""},{"line_number":4085,"context_line":"    def _get_mirror_view(self, volume):"},{"line_number":4086,"context_line":"        \"\"\"Determines where to build a Mirror View operator.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_90ffd5a9","line":4083,"range":{"start_line":4077,"start_character":4,"end_line":4083,"end_character":17},"in_reply_to":"da6ed579_192d69a7","updated":"2016-01-13 03:06:48.000000000","message":"removed","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"1b13dce209825cc1585dcdf0ae9043999ee46aec","unresolved":false,"context_lines":[{"line_number":4098,"context_line":"        return mirror_view"},{"line_number":4099,"context_line":""},{"line_number":4100,"context_line":"    @staticmethod"},{"line_number":4101,"context_line":"    def _build_replication_driver_data(configuration):"},{"line_number":4102,"context_line":"        \"\"\"Builds driver specific data for replication."},{"line_number":4103,"context_line":""},{"line_number":4104,"context_line":"        This data will be used by secondary backend to connect"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_9ccf07b0","line":4101,"range":{"start_line":4101,"start_character":8,"end_line":4101,"end_character":38},"updated":"2016-01-12 17:19:51.000000000","message":"I\u0027m still not a fan of storing all this information in the Cinder database. How about storing only the config group name in the database instead? And then when this information is needed, pull that group directly from the Configuration object and use these values from there? This method will also help the case where the username/password might have changes for the array.","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c75fa9a9dbe44ad063ddf5ab04d19a9a3648ea60","unresolved":false,"context_lines":[{"line_number":4098,"context_line":"        return mirror_view"},{"line_number":4099,"context_line":""},{"line_number":4100,"context_line":"    @staticmethod"},{"line_number":4101,"context_line":"    def _build_replication_driver_data(configuration):"},{"line_number":4102,"context_line":"        \"\"\"Builds driver specific data for replication."},{"line_number":4103,"context_line":""},{"line_number":4104,"context_line":"        This data will be used by secondary backend to connect"}],"source_content_type":"text/x-python","patch_set":15,"id":"da6ed579_10020570","line":4101,"range":{"start_line":4101,"start_character":8,"end_line":4101,"end_character":38},"in_reply_to":"da6ed579_9ccf07b0","updated":"2016-01-13 03:06:48.000000000","message":"Hi Alex,\nyou proposal is doable if the primary and secondary are both one the same Cinder node.\nCurrently we support scenario that back ends across different Cinder nodes`\nif Cinder support sharing Cinder configuration info between different Cinder nodes, removing this section is awesome...","commit_id":"220bb8431fab2fd06afb29a9de1ceed537e50070"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905cd389c067e1ec04d2625a990385f0889d18ed","unresolved":false,"context_lines":[{"line_number":4613,"context_line":"        self.pool_name \u003d pool_name"},{"line_number":4614,"context_line":"        if mode not in self.SYNCHRONIZE_MODE:"},{"line_number":4615,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":4616,"context_line":"                data\u003d\"Invalid synchronize mode specified, allowed \""},{"line_number":4617,"context_line":"                     \"mode is {}\".format(self.SYNCHRONIZE_MODE))"},{"line_number":4618,"context_line":"        self.mode \u003d \u0027-sync\u0027"},{"line_number":4619,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_c6dc9014","line":4616,"updated":"2016-01-29 05:01:57.000000000","message":"This message needs to be wrapped with _(\"xxx\").","commit_id":"8cb4173d23e8ad07efadf830f8a0da675250db9b"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"067eabfbd8bb02b4eeb1be3f591c2111aafb624e","unresolved":false,"context_lines":[{"line_number":4613,"context_line":"        self.pool_name \u003d pool_name"},{"line_number":4614,"context_line":"        if mode not in self.SYNCHRONIZE_MODE:"},{"line_number":4615,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":4616,"context_line":"                data\u003d\"Invalid synchronize mode specified, allowed \""},{"line_number":4617,"context_line":"                     \"mode is {}\".format(self.SYNCHRONIZE_MODE))"},{"line_number":4618,"context_line":"        self.mode \u003d \u0027-sync\u0027"},{"line_number":4619,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_c94fc3bb","line":4616,"in_reply_to":"7a5de9d1_c6dc9014","updated":"2016-01-29 05:49:24.000000000","message":"Done","commit_id":"8cb4173d23e8ad07efadf830f8a0da675250db9b"}],"releasenotes/notes/vnx-replication-v2-2afc4ac0c2ecfa60.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  Replication v2 has been added in VNX Cinder driver"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Replication v2 has been added in VNX Cinder driver"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"issues:"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a7e1126_e2eb27af","line":5,"updated":"2015-12-17 03:16:47.000000000","message":"What is this | ?","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"95f65353198d5ed328428379d365371fba618f9d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  Replication v2 has been added in VNX Cinder driver"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Replication v2 has been added in VNX Cinder driver"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"issues:"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a7e1126_b3c7a844","line":5,"in_reply_to":"3a7e1126_e2eb27af","updated":"2015-12-17 05:59:24.000000000","message":"removed","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"  - Migrating or retyping a replication enabled volume are not allowed."},{"line_number":10,"context_line":"other:"},{"line_number":11,"context_line":"  - Only a managed cinder backend can be configured as the replication secondary."},{"line_number":12,"context_line":"  - |"},{"line_number":13,"context_line":"    Following operations are suppoted for replication enabled volume"},{"line_number":14,"context_line":"    * Create volume"},{"line_number":15,"context_line":"    * Create cloned volume"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a7e1126_a2ce7f58","line":12,"updated":"2015-12-17 03:16:47.000000000","message":"Here too.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"95f65353198d5ed328428379d365371fba618f9d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"  - Migrating or retyping a replication enabled volume are not allowed."},{"line_number":10,"context_line":"other:"},{"line_number":11,"context_line":"  - Only a managed cinder backend can be configured as the replication secondary."},{"line_number":12,"context_line":"  - |"},{"line_number":13,"context_line":"    Following operations are suppoted for replication enabled volume"},{"line_number":14,"context_line":"    * Create volume"},{"line_number":15,"context_line":"    * Create cloned volume"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a7e1126_33e2d8d6","line":12,"in_reply_to":"3a7e1126_a2ce7f58","updated":"2015-12-17 05:59:24.000000000","message":"Removed","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78120b5ea37767843dafa0fe88e4194c7e36b46a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Following operations are suppoted for replication enabled volume"},{"line_number":14,"context_line":"    * Create volume"},{"line_number":15,"context_line":"    * Create cloned volume"},{"line_number":16,"context_line":"    * Create volume from snapshot"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a7e1126_c2e62be8","line":16,"updated":"2015-12-17 03:16:47.000000000","message":"I\u0027m not sure if release notes should be so verbose.  The release notes added by Sean was as follows:\n\nhttps://review.openstack.org/#/c/251517/5/releasenotes/notes/vnx_clone_cg-db74ee2ea71bedcb.yaml\n\nI\u0027ll verify with him.","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"95f65353198d5ed328428379d365371fba618f9d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    Following operations are suppoted for replication enabled volume"},{"line_number":14,"context_line":"    * Create volume"},{"line_number":15,"context_line":"    * Create cloned volume"},{"line_number":16,"context_line":"    * Create volume from snapshot"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a7e1126_d3fd946f","line":16,"in_reply_to":"3a7e1126_c2e62be8","updated":"2015-12-17 05:59:24.000000000","message":"I will follow the example you give","commit_id":"6d390a9e09cce2dd17df38833b59f1170c7806df"}]}
