)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ef31b52576958949a1e1f04c52ee2e7d4b6e0dfe","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Storwize: update the do_setup and helpers for the failover"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If the service sets up during the fail-over, the storwize driver"},{"line_number":10,"context_line":"should take the corrsponding secondary backend instead of the"},{"line_number":11,"context_line":"primary backend. If the backend has failed over, the storwize"},{"line_number":12,"context_line":"should switch the primary helpers to the secondary."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1af94dfe_1779d0c8","line":10,"range":{"start_line":10,"start_character":16,"end_line":10,"end_character":28},"updated":"2016-03-16 19:11:29.000000000","message":"s/corrsponding/corresponding/\n\nBut given the timing on this, don\u0027t do an update just for this. Only if you need to update the patch for another reason.","commit_id":"3437f91b525853f00c4751b3b2e93683edba4cfd"}],"cinder/tests/unit/test_storwize_svc.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"aceb0973144b1e89ae472e1cca3959fcdb8a0638","unresolved":false,"context_lines":[{"line_number":4998,"context_line":"        self.driver.delete_target_volume(fake_volume)"},{"line_number":4999,"context_line":"        get_relationship_info.assert_called_once_with(fake_volume)"},{"line_number":5000,"context_line":"        self.assertFalse(delete_relationship.called)"},{"line_number":5001,"context_line":"        self.assertFalse(delete_vdisk.called)"},{"line_number":5002,"context_line":""},{"line_number":5003,"context_line":"    @mock.patch.object(storwize_svc_common.StorwizeHelpers,"},{"line_number":5004,"context_line":"                       \u0027delete_vdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_069070eb","line":5001,"updated":"2016-03-22 22:02:31.000000000","message":"I don\u0027t understand why delete_vdisk wouldn\u0027t get called?","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"88bd7db2fc04d599c1b7e02d251db18f7bd30044","unresolved":false,"context_lines":[{"line_number":4998,"context_line":"        self.driver.delete_target_volume(fake_volume)"},{"line_number":4999,"context_line":"        get_relationship_info.assert_called_once_with(fake_volume)"},{"line_number":5000,"context_line":"        self.assertFalse(delete_relationship.called)"},{"line_number":5001,"context_line":"        self.assertFalse(delete_vdisk.called)"},{"line_number":5002,"context_line":""},{"line_number":5003,"context_line":"    @mock.patch.object(storwize_svc_common.StorwizeHelpers,"},{"line_number":5004,"context_line":"                       \u0027delete_vdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_6e9c7e0f","line":5001,"in_reply_to":"fa0719c6_069070eb","updated":"2016-03-23 14:35:43.000000000","message":"Technically, if there is no relationship available between primary and secondary volumes, there is no replication we can identify between them. Therefore, we won\u0027t delete anything in this case.","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"82bb21540d709775349a3e30c1f2e2b409398390","unresolved":false,"context_lines":[{"line_number":4998,"context_line":"        self.driver.delete_target_volume(fake_volume)"},{"line_number":4999,"context_line":"        get_relationship_info.assert_called_once_with(fake_volume)"},{"line_number":5000,"context_line":"        self.assertFalse(delete_relationship.called)"},{"line_number":5001,"context_line":"        self.assertFalse(delete_vdisk.called)"},{"line_number":5002,"context_line":""},{"line_number":5003,"context_line":"    @mock.patch.object(storwize_svc_common.StorwizeHelpers,"},{"line_number":5004,"context_line":"                       \u0027delete_vdisk\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_e9f7e888","line":5001,"in_reply_to":"fa0719c6_6e9c7e0f","updated":"2016-03-23 14:58:42.000000000","message":"Makes sense, thanks for the explanation","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"41637db0f3e8040ace0e00d153b4a6121763d830","unresolved":false,"context_lines":[{"line_number":5094,"context_line":"                       \u0027get_relationship_info\u0027)"},{"line_number":5095,"context_line":"    def test_replication_failback(self, get_relationship_info,"},{"line_number":5096,"context_line":"                                  switch_relationship):"},{"line_number":5097,"context_line":"        fake_vol \u003d {\u0027id\u0027: \u002712345678-1234-5678-1234-567812345678\u0027}"},{"line_number":5098,"context_line":"        fake_master_id \u003d \u002712345678-1234-5678-1234-567812345633\u0027"},{"line_number":5099,"context_line":"        fake_master_name \u003d \u0027volume-%s\u0027 % fake_master_id"},{"line_number":5100,"context_line":"        fake_rc_name \u003d \u0027rc_name\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_806716b6","line":5097,"updated":"2016-03-23 16:17:56.000000000","message":"Let\u0027s use real uuids going forwards.","commit_id":"996131d8f14a72409b7146b7cdcf102ca4e1b99f"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"e41f73fe5f78c373277c06a95ec5d92b27f26245","unresolved":false,"context_lines":[{"line_number":5094,"context_line":"                       \u0027get_relationship_info\u0027)"},{"line_number":5095,"context_line":"    def test_replication_failback(self, get_relationship_info,"},{"line_number":5096,"context_line":"                                  switch_relationship):"},{"line_number":5097,"context_line":"        fake_vol \u003d {\u0027id\u0027: \u002712345678-1234-5678-1234-567812345678\u0027}"},{"line_number":5098,"context_line":"        fake_master_id \u003d \u002712345678-1234-5678-1234-567812345633\u0027"},{"line_number":5099,"context_line":"        fake_master_name \u003d \u0027volume-%s\u0027 % fake_master_id"},{"line_number":5100,"context_line":"        fake_rc_name \u003d \u0027rc_name\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_37e008fa","line":5097,"in_reply_to":"fa0719c6_806716b6","updated":"2016-03-23 19:08:30.000000000","message":"Thank you, Tom. I will use the uuid from fake_constant.","commit_id":"996131d8f14a72409b7146b7cdcf102ca4e1b99f"}],"cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"1830c93eb1b23631fdacd4d917e13876aebe2ba9","unresolved":false,"context_lines":[{"line_number":5522,"context_line":"        self.assertFalse(self.storwize_svc_common.replication_enabled())"},{"line_number":5523,"context_line":"        self.assertFalse(self.storwize_svc_common.replication_enabled())"},{"line_number":5524,"context_line":""},{"line_number":5525,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5526,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5527,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5528,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5529,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5530,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5531,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5532,"context_line":""},{"line_number":5533,"context_line":""},{"line_number":5534,"context_line":"class StorwizeSSHTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a98d1f4_fdf1a36b","line":5531,"range":{"start_line":5525,"start_character":0,"end_line":5531,"end_character":71},"updated":"2016-09-29 12:42:07.000000000","message":"Maybe it\u0027s better to wrap this assertTrue calls in a loop? Not to repeat the same code for 7 times.","commit_id":"141771651f1eab73add2fd4c5f0d53fb281b6cd6"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"b96605f5b19ec573224786b2cc29fd8d5d4f03d9","unresolved":false,"context_lines":[{"line_number":5522,"context_line":"        self.assertFalse(self.storwize_svc_common.replication_enabled())"},{"line_number":5523,"context_line":"        self.assertFalse(self.storwize_svc_common.replication_enabled())"},{"line_number":5524,"context_line":""},{"line_number":5525,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5526,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5527,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5528,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5529,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5530,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5531,"context_line":"        self.assertTrue(self.storwize_svc_common.replication_enabled())"},{"line_number":5532,"context_line":""},{"line_number":5533,"context_line":""},{"line_number":5534,"context_line":"class StorwizeSSHTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a98d1f4_2702cab4","line":5531,"range":{"start_line":5525,"start_character":0,"end_line":5531,"end_character":71},"in_reply_to":"3a98d1f4_fdf1a36b","updated":"2016-09-30 15:09:30.000000000","message":"Hi Michael, thanks a lot for your review. It\u0027s addressed in new patch.","commit_id":"141771651f1eab73add2fd4c5f0d53fb281b6cd6"}],"cinder/volume/drivers/ibm/storwize_svc/constants.py":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"83de749664d6331abbe915564a50d6d0bb34b928","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":24,"id":"bacf61ea_8870880c","line":1,"updated":"2016-08-02 06:35:36.000000000","message":"Could rename the file to storwize_constants and simplify importing it (no need to import constants as..)","commit_id":"e670e9430878f2b5db5a356faf3f4c88a783949c"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"52a9fee0a499d99187e05943f5f6b88b0c78d486","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":24,"id":"bacf61ea_243d392b","line":1,"in_reply_to":"bacf61ea_8870880c","updated":"2016-08-02 11:29:27.000000000","message":"Hi Alon, thanks a lot for your review. Rename it to storwize_const.py","commit_id":"e670e9430878f2b5db5a356faf3f4c88a783949c"}],"cinder/volume/drivers/ibm/storwize_svc/replication.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"e70655f64bd9f73ace3b4fc4490641917ed3a2b8","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        self.sshpool \u003d None"},{"line_number":231,"context_line":"        self.target_helpers \u003d target_helpers(self._run_ssh)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def get_target_helpers(self):"},{"line_number":234,"context_line":"        return self.target_helpers"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _partnership_validate_create(self, client, remote_name, remote_ip):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1af94dfe_6a40b507","line":233,"updated":"2016-03-18 18:16:05.000000000","message":"Why do we need this method?","commit_id":"02ca04fbda284cb9311aa1a5650f999838477888"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"8bd08caac4116ce31360c8fc6cfb1b117b649bdc","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        self.sshpool \u003d None"},{"line_number":231,"context_line":"        self.target_helpers \u003d target_helpers(self._run_ssh)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def get_target_helpers(self):"},{"line_number":234,"context_line":"        return self.target_helpers"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _partnership_validate_create(self, client, remote_name, remote_ip):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_2eff26ab","line":233,"in_reply_to":"1af94dfe_6a40b507","updated":"2016-03-23 14:28:41.000000000","message":"When failing over from the primary to the secondary backend, the c-vol node will switch to connect to the secondary backend. This method is used to return the necessary connection to the secondary backend. It has been used in the method failover_host from cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py.","commit_id":"02ca04fbda284cb9311aa1a5650f999838477888"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"aceb0973144b1e89ae472e1cca3959fcdb8a0638","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            LOG.error(msg)"},{"line_number":416,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":417,"context_line":"        else:"},{"line_number":418,"context_line":"            target_vol_name \u003d rel_info.get(\u0027aux_vdisk_name\u0027)"},{"line_number":419,"context_line":"            target_vol_id \u003d target_vol_name[-self.UUID_LEN:]"},{"line_number":420,"context_line":"            if vref[\u0027id\u0027] \u003d\u003d target_vol_id:"},{"line_number":421,"context_line":"                target_vol_id \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_e6de1c6c","line":418,"updated":"2016-03-22 22:02:31.000000000","message":"Optionally, we could use rel_info[\u0027aux_vdisk_name\u0027] since we\u0027d fail on the next line if we got default value of None. That may just help drive home the fact we need this key to be present.","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"413d4e4ef093effd989d267a914f64ca0e6be5ac","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            LOG.error(msg)"},{"line_number":416,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":417,"context_line":"        else:"},{"line_number":418,"context_line":"            target_vol_name \u003d rel_info.get(\u0027aux_vdisk_name\u0027)"},{"line_number":419,"context_line":"            target_vol_id \u003d target_vol_name[-self.UUID_LEN:]"},{"line_number":420,"context_line":"            if vref[\u0027id\u0027] \u003d\u003d target_vol_id:"},{"line_number":421,"context_line":"                target_vol_id \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_fd31515b","line":418,"in_reply_to":"fa0719c6_e6de1c6c","updated":"2016-03-30 19:29:22.000000000","message":"I will","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"aceb0973144b1e89ae472e1cca3959fcdb8a0638","unresolved":false,"context_lines":[{"line_number":438,"context_line":"    def replication_failback(self, volume):"},{"line_number":439,"context_line":"        rel_info \u003d self.target_helpers.get_relationship_info(volume)"},{"line_number":440,"context_line":"        if rel_info:"},{"line_number":441,"context_line":"            source_vol_name \u003d rel_info.get(\u0027master_vdisk_name\u0027)"},{"line_number":442,"context_line":"            source_vol_id \u003d source_vol_name[-self.UUID_LEN:]"},{"line_number":443,"context_line":"            if volume[\u0027id\u0027] \u003d\u003d source_vol_id:"},{"line_number":444,"context_line":"                source_vol_id \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_46d42846","line":441,"updated":"2016-03-22 22:02:31.000000000","message":"Same as above","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"6a8fb3d4238fa8458d9350d6ea958bfc14220ddf","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        if not rel_info:"},{"line_number":410,"context_line":"            # If there is no relationship available, create a target volume"},{"line_number":411,"context_line":"            # and establish one."},{"line_number":412,"context_line":"            self.volume_replication_setup(context, vref)"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            # If there is an relationship, make sure it is valid."},{"line_number":415,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_c10a6ad1","line":412,"range":{"start_line":412,"start_character":1,"end_line":412,"end_character":56},"updated":"2016-04-01 14:49:03.000000000","message":"recover_volume_replication is called during _replication_failback if last fail over is fail. Its intention is used to create volume and rcreleationship in the primary backend if it does not exist in primary, right?　However, self.volume_replication_setup(context, vref) is used to create volume and rcreleationship in the target backend, not in the primary backend．","commit_id":"9981bb5db0cf35e6e89a90ff3cf5e9ca105b413a"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"83de749664d6331abbe915564a50d6d0bb34b928","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.i18n import _, _LE, _LI"},{"line_number":27,"context_line":"from cinder import ssh_utils"},{"line_number":28,"context_line":"from cinder import utils"},{"line_number":29,"context_line":"from cinder.volume.drivers.ibm.storwize_svc import ("},{"line_number":30,"context_line":"    constants as storwize_const)"},{"line_number":31,"context_line":"from cinder.volume import volume_types"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":24,"id":"bacf61ea_e8cca436","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":32},"updated":"2016-08-02 06:35:36.000000000","message":"in this case better import just the required constants. There are just a few and the code would look better.\nThis applies to other files as well.","commit_id":"e670e9430878f2b5db5a356faf3f4c88a783949c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            msg \u003d (_(\"Unable to set up mirror mode replication for %(vol)s. \""},{"line_number":250,"context_line":"                     \"Exception: %(err)s.\") % {\u0027vol\u0027: vref[\u0027id\u0027],"},{"line_number":251,"context_line":"                                               \u0027err\u0027: e.message})"},{"line_number":252,"context_line":"            LOG.error(msg)"},{"line_number":253,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":254,"context_line":"        LOG.debug(\u0027leave: volume_replication_setup:volume %s\u0027, vref[\u0027name\u0027])"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_26797594","line":252,"updated":"2017-01-13 10:41:55.000000000","message":"Please, change to LOG.exception here","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            msg \u003d (_(\"Unable to set up mirror mode replication for %(vol)s. \""},{"line_number":250,"context_line":"                     \"Exception: %(err)s.\") % {\u0027vol\u0027: vref[\u0027id\u0027],"},{"line_number":251,"context_line":"                                               \u0027err\u0027: e.message})"},{"line_number":252,"context_line":"            LOG.error(msg)"},{"line_number":253,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":254,"context_line":"        LOG.debug(\u0027leave: volume_replication_setup:volume %s\u0027, vref[\u0027name\u0027])"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_3ef94081","line":252,"in_reply_to":"7a3c09a3_26797594","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                msg \u003d (_(\u0027Unable to fail-over the volume %(id)s to the \u0027"},{"line_number":279,"context_line":"                         \u0027secondary back-end, error: %(error)s\u0027) %"},{"line_number":280,"context_line":"                       {\"id\": vref[\u0027id\u0027], \"error\": e})"},{"line_number":281,"context_line":"                LOG.error(msg)"},{"line_number":282,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":283,"context_line":"        LOG.debug(\u0027leave: failover_volume_host: vref\u003d%(vref)s\u0027,"},{"line_number":284,"context_line":"                  {\u0027vref\u0027: vref[\u0027name\u0027]})"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_e65f6d0c","line":281,"updated":"2017-01-13 10:41:55.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                msg \u003d (_(\u0027Unable to fail-over the volume %(id)s to the \u0027"},{"line_number":279,"context_line":"                         \u0027secondary back-end, error: %(error)s\u0027) %"},{"line_number":280,"context_line":"                       {\"id\": vref[\u0027id\u0027], \"error\": e})"},{"line_number":281,"context_line":"                LOG.error(msg)"},{"line_number":282,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":283,"context_line":"        LOG.debug(\u0027leave: failover_volume_host: vref\u003d%(vref)s\u0027,"},{"line_number":284,"context_line":"                  {\u0027vref\u0027: vref[\u0027name\u0027]})"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_fe35f845","line":281,"in_reply_to":"7a3c09a3_e65f6d0c","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                msg \u003d (_(\u0027Unable to fail-back the volume:%(vol)s to the \u0027"},{"line_number":297,"context_line":"                         \u0027master back-end, error:%(error)s\u0027) %"},{"line_number":298,"context_line":"                       {\"vol\": volume[\u0027name\u0027], \"error\": e})"},{"line_number":299,"context_line":"                LOG.error(msg)"},{"line_number":300,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_46a5a102","line":299,"updated":"2017-01-13 10:41:55.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                msg \u003d (_(\u0027Unable to fail-back the volume:%(vol)s to the \u0027"},{"line_number":297,"context_line":"                         \u0027master back-end, error:%(error)s\u0027) %"},{"line_number":298,"context_line":"                       {\"vol\": volume[\u0027name\u0027], \"error\": e})"},{"line_number":299,"context_line":"                LOG.error(msg)"},{"line_number":300,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_3e4060a5","line":299,"in_reply_to":"7a3c09a3_46a5a102","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"479b7c4b5c547836d5d3fa21a5114dcd986de3d8","unresolved":false,"context_lines":[{"line_number":1906,"context_line":"        \"\"\"Check that we have all configuration details from the storage.\"\"\""},{"line_number":1907,"context_line":"        LOG.debug(\u0027enter: do_setup\u0027)"},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"        # v2 replication setup"},{"line_number":1910,"context_line":"        self._get_storwize_config()"},{"line_number":1911,"context_line":""},{"line_number":1912,"context_line":"        # Get storage system name, id, and code level"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_f16f0cc3","line":1909,"range":{"start_line":1909,"start_character":10,"end_line":1909,"end_character":12},"updated":"2016-03-16 21:07:00.000000000","message":"This really should be V2.1.","commit_id":"3437f91b525853f00c4751b3b2e93683edba4cfd"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"aceb0973144b1e89ae472e1cca3959fcdb8a0638","unresolved":false,"context_lines":[{"line_number":3166,"context_line":"        self._stats \u003d data"},{"line_number":3167,"context_line":""},{"line_number":3168,"context_line":"        # Update the storwize state"},{"line_number":3169,"context_line":"        self._update_storwize_state()"},{"line_number":3170,"context_line":""},{"line_number":3171,"context_line":"    def _build_pool_stats(self, pool):"},{"line_number":3172,"context_line":"        \"\"\"Build pool status\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_86ec8090","line":3169,"updated":"2016-03-22 22:02:31.000000000","message":"I\u0027m missing why this needs to be added?","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"88bd7db2fc04d599c1b7e02d251db18f7bd30044","unresolved":false,"context_lines":[{"line_number":3166,"context_line":"        self._stats \u003d data"},{"line_number":3167,"context_line":""},{"line_number":3168,"context_line":"        # Update the storwize state"},{"line_number":3169,"context_line":"        self._update_storwize_state()"},{"line_number":3170,"context_line":""},{"line_number":3171,"context_line":"    def _build_pool_stats(self, pool):"},{"line_number":3172,"context_line":"        \"\"\"Build pool status\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_8eb8f2c9","line":3169,"in_reply_to":"fa0719c6_86ec8090","updated":"2016-03-23 14:35:43.000000000","message":"Well, this is very crucial, since after switching to the secondary backend, the self._state need to be updated as well. Otherwise the attach is not able to access the available node information from the secondary backend leading attach failure.","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"82bb21540d709775349a3e30c1f2e2b409398390","unresolved":false,"context_lines":[{"line_number":3166,"context_line":"        self._stats \u003d data"},{"line_number":3167,"context_line":""},{"line_number":3168,"context_line":"        # Update the storwize state"},{"line_number":3169,"context_line":"        self._update_storwize_state()"},{"line_number":3170,"context_line":""},{"line_number":3171,"context_line":"    def _build_pool_stats(self, pool):"},{"line_number":3172,"context_line":"        \"\"\"Build pool status\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_c4ae4980","line":3169,"in_reply_to":"fa0719c6_8eb8f2c9","updated":"2016-03-23 14:58:42.000000000","message":"Makes sense.  So making sure I\u0027m following, this would mean an attach would error after failing over until get_volume_stats is called? If this info is only something that needs to be changed when we failover/failback could we call it then instead of each minute?","commit_id":"f14a0f2aaa5432f2a2ec2543d5f8ba23ef9443db"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"92e779ce89218b0deb10978bbd4aca49960d2d20","unresolved":false,"context_lines":[{"line_number":2564,"context_line":""},{"line_number":2565,"context_line":"    def _replication_failback(self, ctxt, volumes):"},{"line_number":2566,"context_line":"        \"\"\"Fail back all the volume on the secondary backend.\"\"\""},{"line_number":2567,"context_line":"        if not self._is_host_ready_for_failback(ctxt, volumes):"},{"line_number":2568,"context_line":"            msg \u003d _(\"The host is not ready to be failed back. Please \""},{"line_number":2569,"context_line":"                    \"resynchronize the volumes and resume replication on the \""},{"line_number":2570,"context_line":"                    \"Storwize backends.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_05107c4d","line":2567,"range":{"start_line":2567,"start_character":0,"end_line":2567,"end_character":63},"updated":"2016-03-30 10:59:54.000000000","message":"If one of the volumes is not in sync state, all the volumes failback will be rejected? Maybe we should try to do failback and  allow some of volumes failback success and update the other volumes status and  replication_status?","commit_id":"3b31b87db6cc1252b2f91ba4ed22905bd0858f09"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"b27e4c986794dbe576cb86a8a46f41a1e1d1c7d6","unresolved":false,"context_lines":[{"line_number":2564,"context_line":""},{"line_number":2565,"context_line":"    def _replication_failback(self, ctxt, volumes):"},{"line_number":2566,"context_line":"        \"\"\"Fail back all the volume on the secondary backend.\"\"\""},{"line_number":2567,"context_line":"        if not self._is_host_ready_for_failback(ctxt, volumes):"},{"line_number":2568,"context_line":"            msg \u003d _(\"The host is not ready to be failed back. Please \""},{"line_number":2569,"context_line":"                    \"resynchronize the volumes and resume replication on the \""},{"line_number":2570,"context_line":"                    \"Storwize backends.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_2f0bba8f","line":2567,"range":{"start_line":2567,"start_character":0,"end_line":2567,"end_character":63},"in_reply_to":"ba0121b8_05107c4d","updated":"2016-03-30 17:18:37.000000000","message":"I think the \"all or nothing\" approach is correct, having partial failover/failback will almost definitely cause problems...","commit_id":"3b31b87db6cc1252b2f91ba4ed22905bd0858f09"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"6e77a524cfd9aaeb2dda037acba41d2c089fc14e","unresolved":false,"context_lines":[{"line_number":2564,"context_line":""},{"line_number":2565,"context_line":"    def _replication_failback(self, ctxt, volumes):"},{"line_number":2566,"context_line":"        \"\"\"Fail back all the volume on the secondary backend.\"\"\""},{"line_number":2567,"context_line":"        if not self._is_host_ready_for_failback(ctxt, volumes):"},{"line_number":2568,"context_line":"            msg \u003d _(\"The host is not ready to be failed back. Please \""},{"line_number":2569,"context_line":"                    \"resynchronize the volumes and resume replication on the \""},{"line_number":2570,"context_line":"                    \"Storwize backends.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_1e80a28a","line":2567,"range":{"start_line":2567,"start_character":0,"end_line":2567,"end_character":63},"in_reply_to":"ba0121b8_2f0bba8f","updated":"2016-03-30 19:29:13.000000000","message":"I prefer to stay with this way. However, I can add one more condition \"volume.replication_status \u003d\u003d \u0027failed-over\u0027\" inside is_host_ready_for_failback to make sure we are examining all the volumes, which are in failed-over.","commit_id":"3b31b87db6cc1252b2f91ba4ed22905bd0858f09"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"92e779ce89218b0deb10978bbd4aca49960d2d20","unresolved":false,"context_lines":[{"line_number":2578,"context_line":"            if (replication and"},{"line_number":2579,"context_line":"                    replication.target.get(\u0027backend_id\u0027) \u003d\u003d ("},{"line_number":2580,"context_line":"                    self._active_backend_id) and"},{"line_number":2581,"context_line":"                    volume.replication_status \u003d\u003d \u0027failed-over\u0027):"},{"line_number":2582,"context_line":"                model_updates \u003d replication.replication_failback(volume)"},{"line_number":2583,"context_line":"                volume_update_list.append("},{"line_number":2584,"context_line":"                    {\u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":2585,"context_line":"                     \u0027updates\u0027: model_updates})"},{"line_number":2586,"context_line":"            elif volume.replication_status \u003d\u003d \u0027error\u0027:"},{"line_number":2587,"context_line":"                volume_update_list.append("},{"line_number":2588,"context_line":"                    {\u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":2589,"context_line":"                     \u0027updates\u0027: {\u0027status\u0027: \u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_c5396443","line":2586,"range":{"start_line":2581,"start_character":0,"end_line":2586,"end_character":54},"updated":"2016-03-30 10:59:54.000000000","message":"If volume\u0027s last failover fails and volume.replication_status is error,just update the status to available seems not proper. May be we can just ignore last volume.replication_status and try to do the fail back directly regardless last volume.replication_status, if there is exception, update the failed volumes status and  replication_status","commit_id":"3b31b87db6cc1252b2f91ba4ed22905bd0858f09"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"6e77a524cfd9aaeb2dda037acba41d2c089fc14e","unresolved":false,"context_lines":[{"line_number":2578,"context_line":"            if (replication and"},{"line_number":2579,"context_line":"                    replication.target.get(\u0027backend_id\u0027) \u003d\u003d ("},{"line_number":2580,"context_line":"                    self._active_backend_id) and"},{"line_number":2581,"context_line":"                    volume.replication_status \u003d\u003d \u0027failed-over\u0027):"},{"line_number":2582,"context_line":"                model_updates \u003d replication.replication_failback(volume)"},{"line_number":2583,"context_line":"                volume_update_list.append("},{"line_number":2584,"context_line":"                    {\u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":2585,"context_line":"                     \u0027updates\u0027: model_updates})"},{"line_number":2586,"context_line":"            elif volume.replication_status \u003d\u003d \u0027error\u0027:"},{"line_number":2587,"context_line":"                volume_update_list.append("},{"line_number":2588,"context_line":"                    {\u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":2589,"context_line":"                     \u0027updates\u0027: {\u0027status\u0027: \u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_5e4cda9d","line":2586,"range":{"start_line":2581,"start_character":0,"end_line":2586,"end_character":54},"in_reply_to":"ba0121b8_8f58068c","updated":"2016-03-30 19:29:13.000000000","message":"I will propose a new change to this.","commit_id":"3b31b87db6cc1252b2f91ba4ed22905bd0858f09"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"b27e4c986794dbe576cb86a8a46f41a1e1d1c7d6","unresolved":false,"context_lines":[{"line_number":2578,"context_line":"            if (replication and"},{"line_number":2579,"context_line":"                    replication.target.get(\u0027backend_id\u0027) \u003d\u003d ("},{"line_number":2580,"context_line":"                    self._active_backend_id) and"},{"line_number":2581,"context_line":"                    volume.replication_status \u003d\u003d \u0027failed-over\u0027):"},{"line_number":2582,"context_line":"                model_updates \u003d replication.replication_failback(volume)"},{"line_number":2583,"context_line":"                volume_update_list.append("},{"line_number":2584,"context_line":"                    {\u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":2585,"context_line":"                     \u0027updates\u0027: model_updates})"},{"line_number":2586,"context_line":"            elif volume.replication_status \u003d\u003d \u0027error\u0027:"},{"line_number":2587,"context_line":"                volume_update_list.append("},{"line_number":2588,"context_line":"                    {\u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":2589,"context_line":"                     \u0027updates\u0027: {\u0027status\u0027: \u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_8f58068c","line":2586,"range":{"start_line":2581,"start_character":0,"end_line":2586,"end_character":54},"in_reply_to":"ba0121b8_c5396443","updated":"2016-03-30 17:18:37.000000000","message":"+1, I don\u0027t think its safe to do this, its not clear *why* it was in an error state so just setting it to available/enabled status seems like it could potentially lead to problems.","commit_id":"3b31b87db6cc1252b2f91ba4ed22905bd0858f09"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"b0a1b527631b8843a110b981405c4ac9361e8950","unresolved":false,"context_lines":[{"line_number":607,"context_line":"                            \"Exception: %s.\"), war)"},{"line_number":608,"context_line":"        return False"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def replication_enabled(self):"},{"line_number":611,"context_line":"        \"\"\"Return whether or not replication is enabled for this system.\"\"\""},{"line_number":612,"context_line":"        # Uses license_scheme as an indicator to check"},{"line_number":613,"context_line":"        # whether replication is supported in storage."}],"source_content_type":"text/x-python","patch_set":30,"id":"3a71b18c_472c9c4a","line":610,"updated":"2016-12-02 21:25:06.000000000","message":"This is potentially confusing, since the API to enable replication is \"enable_replication\", and we check for a valid_replication_volume with the extra spec \"replication_enabled\".\nPerhaps use something like \"replication_licensed\"?","commit_id":"fdd6eb739399f428f5d9268535f65b8f187f0ced"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"2ff2f2c1b11251215e285793bafbffc86da2b778","unresolved":false,"context_lines":[{"line_number":607,"context_line":"                            \"Exception: %s.\"), war)"},{"line_number":608,"context_line":"        return False"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def replication_enabled(self):"},{"line_number":611,"context_line":"        \"\"\"Return whether or not replication is enabled for this system.\"\"\""},{"line_number":612,"context_line":"        # Uses license_scheme as an indicator to check"},{"line_number":613,"context_line":"        # whether replication is supported in storage."}],"source_content_type":"text/x-python","patch_set":30,"id":"3a71b18c_d34c8eca","line":610,"in_reply_to":"3a71b18c_472c9c4a","updated":"2016-12-05 05:46:35.000000000","message":"Hi Scott, thanks a lot for your review. It\u0027s addressed in new patch.","commit_id":"fdd6eb739399f428f5d9268535f65b8f187f0ced"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"e2da7e68907e235ff5cab5b604cefa6f37dae61b","unresolved":false,"context_lines":[{"line_number":2665,"context_line":""},{"line_number":2666,"context_line":"        # start synchronize from aux volume to master volume"},{"line_number":2667,"context_line":"        self._sync_with_aux(ctxt, rep_volumes)"},{"line_number":2668,"context_line":"        self._wait_replica_ready(ctxt, rep_volumes)"},{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"        rep_volumes_update \u003d self._failback_replica_volumes(ctxt,"},{"line_number":2671,"context_line":"                                                            rep_volumes)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a71b18c_70fa2244","line":2668,"updated":"2016-12-02 00:09:38.000000000","message":"how long can this take?   If it takes too long, we might get RPC timeouts from the API -\u003e volume manager","commit_id":"fdd6eb739399f428f5d9268535f65b8f187f0ced"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"d8102da26941d28e16699eff715f4de208ba26fc","unresolved":false,"context_lines":[{"line_number":2665,"context_line":""},{"line_number":2666,"context_line":"        # start synchronize from aux volume to master volume"},{"line_number":2667,"context_line":"        self._sync_with_aux(ctxt, rep_volumes)"},{"line_number":2668,"context_line":"        self._wait_replica_ready(ctxt, rep_volumes)"},{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"        rep_volumes_update \u003d self._failback_replica_volumes(ctxt,"},{"line_number":2671,"context_line":"                                                            rep_volumes)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a71b18c_20a0519f","line":2668,"in_reply_to":"3a71b18c_70fa2244","updated":"2016-12-02 05:27:11.000000000","message":"Hi Walter, thanks a lot for your review. The time it takes depend on the capacity and numbers of the volume. So to avoid the RPC timeout, we add the following description in the user manual \"Note: Before you perform a failback operation, synchronize the data from the replication target volume to the primary one on the storage back end manually, and do the failback only after the synchronization is done since the synchronization may take a long time.\" If the synchronization is not done manually, Storwize cinder driver will perform the synchronization and do the failback\nafter the synchronization is finished, in this case RPC timeout may happen.","commit_id":"fdd6eb739399f428f5d9268535f65b8f187f0ced"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"154617eb2fe1942f4875acd1102449be40a31eb5","unresolved":false,"context_lines":[{"line_number":3025,"context_line":"        rep_target[\u0027backend_id\u0027] \u003d rep_devs[0].get(\u0027backend_id\u0027)"},{"line_number":3026,"context_line":"        rep_target[\u0027san_login\u0027] \u003d rep_devs[0].get(\u0027san_login\u0027)"},{"line_number":3027,"context_line":"        rep_target[\u0027san_password\u0027] \u003d rep_devs[0].get(\u0027san_password\u0027)"},{"line_number":3028,"context_line":"        rep_target[\u0027pool_name\u0027] \u003d rep_devs[0].get(\u0027pool_name\u0027)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"        # Each replication target will have a corresponding replication."},{"line_number":3031,"context_line":"        self._replication_initialize(rep_target)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a71b18c_92e8b07e","line":3028,"updated":"2016-12-01 19:00:38.000000000","message":"what about CHAP credentials?","commit_id":"fdd6eb739399f428f5d9268535f65b8f187f0ced"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"d8102da26941d28e16699eff715f4de208ba26fc","unresolved":false,"context_lines":[{"line_number":3025,"context_line":"        rep_target[\u0027backend_id\u0027] \u003d rep_devs[0].get(\u0027backend_id\u0027)"},{"line_number":3026,"context_line":"        rep_target[\u0027san_login\u0027] \u003d rep_devs[0].get(\u0027san_login\u0027)"},{"line_number":3027,"context_line":"        rep_target[\u0027san_password\u0027] \u003d rep_devs[0].get(\u0027san_password\u0027)"},{"line_number":3028,"context_line":"        rep_target[\u0027pool_name\u0027] \u003d rep_devs[0].get(\u0027pool_name\u0027)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"        # Each replication target will have a corresponding replication."},{"line_number":3031,"context_line":"        self._replication_initialize(rep_target)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a71b18c_2afd923a","line":3028,"in_reply_to":"3a71b18c_92e8b07e","updated":"2016-12-02 05:27:11.000000000","message":"Hi Walter, thanks a lot for your review. Only username and password auth for replication target is provisioned in this release and it is also describe in the related doc. We can add CHAP credentials in later release.","commit_id":"fdd6eb739399f428f5d9268535f65b8f187f0ced"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"de2e3cd7aa684f716a916674bc0172466776eec7","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"                    volume[\u0027name\u0027], tgt_vol, tgt_sys.get(\u0027system_name\u0027),"},{"line_number":2489,"context_line":"                    True if storwize_const.GLOBAL \u003d\u003d rep_type else False)"},{"line_number":2490,"context_line":"            except Exception as e:"},{"line_number":2491,"context_line":"                msg \u003d (_(\u0027Failed to Extending a volume with remote copy\u0027"},{"line_number":2492,"context_line":"                         \u0027%(volume)s. Exception: %(err)s.\u0027), {\u0027volume\u0027:"},{"line_number":2493,"context_line":"                                                              volume[\u0027id\u0027],"},{"line_number":2494,"context_line":"                                                              \u0027err\u0027: e})"}],"source_content_type":"text/x-python","patch_set":33,"id":"1a6eadb0_2826a568","line":2491,"updated":"2016-12-12 21:43:30.000000000","message":"Extending -\u003e extend","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"eb01b5948bd2323ad3da95f74d0e35a24bf8ff71","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"                    volume[\u0027name\u0027], tgt_vol, tgt_sys.get(\u0027system_name\u0027),"},{"line_number":2489,"context_line":"                    True if storwize_const.GLOBAL \u003d\u003d rep_type else False)"},{"line_number":2490,"context_line":"            except Exception as e:"},{"line_number":2491,"context_line":"                msg \u003d (_(\u0027Failed to Extending a volume with remote copy\u0027"},{"line_number":2492,"context_line":"                         \u0027%(volume)s. Exception: %(err)s.\u0027), {\u0027volume\u0027:"},{"line_number":2493,"context_line":"                                                              volume[\u0027id\u0027],"},{"line_number":2494,"context_line":"                                                              \u0027err\u0027: e})"}],"source_content_type":"text/x-python","patch_set":33,"id":"1a6eadb0_967dd8b3","line":2491,"in_reply_to":"1a6eadb0_2826a568","updated":"2016-12-14 02:52:21.000000000","message":"Hi Scott, thanks a lot for your review. I will update it if there is more incoming comment.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"                    volume[\u0027name\u0027], tgt_vol, tgt_sys.get(\u0027system_name\u0027),"},{"line_number":2489,"context_line":"                    True if storwize_const.GLOBAL \u003d\u003d rep_type else False)"},{"line_number":2490,"context_line":"            except Exception as e:"},{"line_number":2491,"context_line":"                msg \u003d (_(\u0027Failed to Extending a volume with remote copy\u0027"},{"line_number":2492,"context_line":"                         \u0027%(volume)s. Exception: %(err)s.\u0027), {\u0027volume\u0027:"},{"line_number":2493,"context_line":"                                                              volume[\u0027id\u0027],"},{"line_number":2494,"context_line":"                                                              \u0027err\u0027: e})"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_9b6c9709","line":2491,"in_reply_to":"1a6eadb0_2826a568","updated":"2017-01-06 09:03:39.000000000","message":"Hi Scott, thanks a lot for your review. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2773,"context_line":"                              \u0027storage.\u0027), {\u0027master\u0027: volume[\u0027name\u0027],"},{"line_number":2774,"context_line":"                                            \u0027aux\u0027: tgt_volume})"},{"line_number":2775,"context_line":"                continue"},{"line_number":2776,"context_line":"            msg \u003d (_(\u0027_sync_with_aux: volume: %(volume)s rep_info:master_vol\u003d\u0027"},{"line_number":2777,"context_line":"                     \u0027%(master_vol)s, aux_vol\u003d%(aux_vol)s, state\u003d%(state)s, \u0027"},{"line_number":2778,"context_line":"                     \u0027primary\u003d%(primary)s\u0027),"},{"line_number":2779,"context_line":"                   {\u0027volume\u0027: volume[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_2b01b96a","line":2776,"range":{"start_line":2776,"start_character":19,"end_line":2776,"end_character":21},"updated":"2017-01-05 15:00:15.000000000","message":"This is only used in the LOG.debug from what I can see, so this should not be translated.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2773,"context_line":"                              \u0027storage.\u0027), {\u0027master\u0027: volume[\u0027name\u0027],"},{"line_number":2774,"context_line":"                                            \u0027aux\u0027: tgt_volume})"},{"line_number":2775,"context_line":"                continue"},{"line_number":2776,"context_line":"            msg \u003d (_(\u0027_sync_with_aux: volume: %(volume)s rep_info:master_vol\u003d\u0027"},{"line_number":2777,"context_line":"                     \u0027%(master_vol)s, aux_vol\u003d%(aux_vol)s, state\u003d%(state)s, \u0027"},{"line_number":2778,"context_line":"                     \u0027primary\u003d%(primary)s\u0027),"},{"line_number":2779,"context_line":"                   {\u0027volume\u0027: volume[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_1e06d51f","line":2776,"range":{"start_line":2776,"start_character":19,"end_line":2776,"end_character":21},"in_reply_to":"ba5201f7_2b01b96a","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2775,"context_line":"                continue"},{"line_number":2776,"context_line":"            msg \u003d (_(\u0027_sync_with_aux: volume: %(volume)s rep_info:master_vol\u003d\u0027"},{"line_number":2777,"context_line":"                     \u0027%(master_vol)s, aux_vol\u003d%(aux_vol)s, state\u003d%(state)s, \u0027"},{"line_number":2778,"context_line":"                     \u0027primary\u003d%(primary)s\u0027),"},{"line_number":2779,"context_line":"                   {\u0027volume\u0027: volume[\u0027name\u0027],"},{"line_number":2780,"context_line":"                    \u0027master_vol\u0027: rep_info[\u0027master_vdisk_name\u0027],"},{"line_number":2781,"context_line":"                    \u0027aux_vol\u0027: rep_info[\u0027aux_vdisk_name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_8b4705bb","line":2778,"range":{"start_line":2778,"start_character":43,"end_line":2778,"end_character":44},"updated":"2017-01-05 15:00:15.000000000","message":"Move all of this into the LOG.debug call. Otherwise, this is making a tuple that gets passed in that will not get formatted correctly.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2775,"context_line":"                continue"},{"line_number":2776,"context_line":"            msg \u003d (_(\u0027_sync_with_aux: volume: %(volume)s rep_info:master_vol\u003d\u0027"},{"line_number":2777,"context_line":"                     \u0027%(master_vol)s, aux_vol\u003d%(aux_vol)s, state\u003d%(state)s, \u0027"},{"line_number":2778,"context_line":"                     \u0027primary\u003d%(primary)s\u0027),"},{"line_number":2779,"context_line":"                   {\u0027volume\u0027: volume[\u0027name\u0027],"},{"line_number":2780,"context_line":"                    \u0027master_vol\u0027: rep_info[\u0027master_vdisk_name\u0027],"},{"line_number":2781,"context_line":"                    \u0027aux_vol\u0027: rep_info[\u0027aux_vdisk_name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_6102e40b","line":2778,"range":{"start_line":2778,"start_character":43,"end_line":2778,"end_character":44},"in_reply_to":"ba5201f7_8b4705bb","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2805,"context_line":"            try:"},{"line_number":2806,"context_line":"                self._wait_replica_vol_ready(ctxt, tgt_volume)"},{"line_number":2807,"context_line":"            except Exception as ex:"},{"line_number":2808,"context_line":"                LOG.error(_LE(\u0027_wait_replica_ready: wait for volume:%(volume)s\u0027"},{"line_number":2809,"context_line":"                              \u0027remote copy synchronization failed due to error\u0027"},{"line_number":2810,"context_line":"                              \u0027:%(err)s.\u0027), {\u0027volume\u0027: tgt_volume,"},{"line_number":2811,"context_line":"                                             \u0027err\u0027: ex})"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_4b28bde2","line":2808,"range":{"start_line":2808,"start_character":78,"end_line":2808,"end_character":79},"updated":"2017-01-05 15:00:15.000000000","message":"Space needed at the end.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2805,"context_line":"            try:"},{"line_number":2806,"context_line":"                self._wait_replica_vol_ready(ctxt, tgt_volume)"},{"line_number":2807,"context_line":"            except Exception as ex:"},{"line_number":2808,"context_line":"                LOG.error(_LE(\u0027_wait_replica_ready: wait for volume:%(volume)s\u0027"},{"line_number":2809,"context_line":"                              \u0027remote copy synchronization failed due to error\u0027"},{"line_number":2810,"context_line":"                              \u0027:%(err)s.\u0027), {\u0027volume\u0027: tgt_volume,"},{"line_number":2811,"context_line":"                                             \u0027err\u0027: ex})"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_41188075","line":2808,"range":{"start_line":2808,"start_character":78,"end_line":2808,"end_character":79},"in_reply_to":"ba5201f7_4b28bde2","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2824,"context_line":"                       {\u0027volume\u0027: volume})"},{"line_number":2825,"context_line":"                LOG.error(msg)"},{"line_number":2826,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2827,"context_line":"            msg \u003d (_(\u0027_replica_vol_ready:volume: %(volume)s rep_info: \u0027"},{"line_number":2828,"context_line":"                     \u0027master_vol\u003d%(master_vol)s, aux_vol\u003d%(aux_vol)s, \u0027"},{"line_number":2829,"context_line":"                     \u0027state\u003d%(state)s, primary\u003d%(primary)s\u0027),"},{"line_number":2830,"context_line":"                   {\u0027volume\u0027: volume,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_4b6fdd2a","line":2827,"range":{"start_line":2827,"start_character":12,"end_line":2827,"end_character":15},"updated":"2017-01-05 15:00:15.000000000","message":"Same comments as the debug logging comments above.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2824,"context_line":"                       {\u0027volume\u0027: volume})"},{"line_number":2825,"context_line":"                LOG.error(msg)"},{"line_number":2826,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2827,"context_line":"            msg \u003d (_(\u0027_replica_vol_ready:volume: %(volume)s rep_info: \u0027"},{"line_number":2828,"context_line":"                     \u0027master_vol\u003d%(master_vol)s, aux_vol\u003d%(aux_vol)s, \u0027"},{"line_number":2829,"context_line":"                     \u0027state\u003d%(state)s, primary\u003d%(primary)s\u0027),"},{"line_number":2830,"context_line":"                   {\u0027volume\u0027: volume,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_415080d4","line":2827,"range":{"start_line":2827,"start_character":12,"end_line":2827,"end_character":15},"in_reply_to":"ba5201f7_4b6fdd2a","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2852,"context_line":"    def _replication_failover(self, ctxt, volumes):"},{"line_number":2853,"context_line":"        volumes_update \u003d []"},{"line_number":2854,"context_line":"        if self._active_backend_id:"},{"line_number":2855,"context_line":"            LOG.info(_LI(\"Host has been failed over to %s \"),"},{"line_number":2856,"context_line":"                     self._active_backend_id)"},{"line_number":2857,"context_line":"            return self._active_backend_id, volumes_update"},{"line_number":2858,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_0b587589","line":2855,"range":{"start_line":2855,"start_character":57,"end_line":2855,"end_character":58},"updated":"2017-01-05 15:00:15.000000000","message":"Remove extra space at the end.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2852,"context_line":"    def _replication_failover(self, ctxt, volumes):"},{"line_number":2853,"context_line":"        volumes_update \u003d []"},{"line_number":2854,"context_line":"        if self._active_backend_id:"},{"line_number":2855,"context_line":"            LOG.info(_LI(\"Host has been failed over to %s \"),"},{"line_number":2856,"context_line":"                     self._active_backend_id)"},{"line_number":2857,"context_line":"            return self._active_backend_id, volumes_update"},{"line_number":2858,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_e1233454","line":2855,"range":{"start_line":2855,"start_character":57,"end_line":2855,"end_character":58},"in_reply_to":"ba5201f7_0b587589","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2906,"context_line":"                              {\u0027master\u0027: volume[\u0027name\u0027]})"},{"line_number":2907,"context_line":"                    continue"},{"line_number":2908,"context_line":"                LOG.debug(\u0027_failover_replica_volumes: vol\u003d%(vol)s, \u0027"},{"line_number":2909,"context_line":"                          \u0027master_vol\u003d%(master_vol)s, aux_vol\u003d%(aux_vol)s,\u0027"},{"line_number":2910,"context_line":"                          \u0027state\u003d%(state)s, primary\u003d%(primary)s,\u0027,"},{"line_number":2911,"context_line":"                          {\u0027vol\u0027: volume[\u0027name\u0027],"},{"line_number":2912,"context_line":"                           \u0027master_vol\u0027: rep_info[\u0027master_vdisk_name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_2bd459bb","line":2909,"range":{"start_line":2909,"start_character":74,"end_line":2909,"end_character":75},"updated":"2017-01-05 15:00:15.000000000","message":"Add a space.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":2907,"context_line":"                    continue"},{"line_number":2908,"context_line":"                LOG.debug(\u0027_failover_replica_volumes: vol\u003d%(vol)s, \u0027"},{"line_number":2909,"context_line":"                          \u0027master_vol\u003d%(master_vol)s, aux_vol\u003d%(aux_vol)s,\u0027"},{"line_number":2910,"context_line":"                          \u0027state\u003d%(state)s, primary\u003d%(primary)s,\u0027,"},{"line_number":2911,"context_line":"                          {\u0027vol\u0027: volume[\u0027name\u0027],"},{"line_number":2912,"context_line":"                           \u0027master_vol\u0027: rep_info[\u0027master_vdisk_name\u0027],"},{"line_number":2913,"context_line":"                           \u0027aux_vol\u0027: rep_info[\u0027aux_vdisk_name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_abe04997","line":2910,"range":{"start_line":2910,"start_character":63,"end_line":2910,"end_character":64},"updated":"2017-01-05 15:00:15.000000000","message":"Remove extra comma.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":2907,"context_line":"                    continue"},{"line_number":2908,"context_line":"                LOG.debug(\u0027_failover_replica_volumes: vol\u003d%(vol)s, \u0027"},{"line_number":2909,"context_line":"                          \u0027master_vol\u003d%(master_vol)s, aux_vol\u003d%(aux_vol)s,\u0027"},{"line_number":2910,"context_line":"                          \u0027state\u003d%(state)s, primary\u003d%(primary)s,\u0027,"},{"line_number":2911,"context_line":"                          {\u0027vol\u0027: volume[\u0027name\u0027],"},{"line_number":2912,"context_line":"                           \u0027master_vol\u0027: rep_info[\u0027master_vdisk_name\u0027],"},{"line_number":2913,"context_line":"                           \u0027aux_vol\u0027: rep_info[\u0027aux_vdisk_name\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_81a7c8bb","line":2910,"range":{"start_line":2910,"start_character":63,"end_line":2910,"end_character":64},"in_reply_to":"ba5201f7_abe04997","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":3179,"context_line":"            if need_copy:"},{"line_number":3180,"context_line":"                msg \u003d (_(\u0027Unable to retype: Current action needs volume-copy,\u0027"},{"line_number":3181,"context_line":"                         \u0027 it is not allowed when new type is replication.\u0027"},{"line_number":3182,"context_line":"                         \u0027 Volume \u003d %s\u0027), volume[\u0027id\u0027])"},{"line_number":3183,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"        if need_copy:"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_8b91c5f3","line":3182,"range":{"start_line":3182,"start_character":40,"end_line":3182,"end_character":41},"updated":"2017-01-05 15:00:15.000000000","message":"Needs to be % to perform the string formatting.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":3179,"context_line":"            if need_copy:"},{"line_number":3180,"context_line":"                msg \u003d (_(\u0027Unable to retype: Current action needs volume-copy,\u0027"},{"line_number":3181,"context_line":"                         \u0027 it is not allowed when new type is replication.\u0027"},{"line_number":3182,"context_line":"                         \u0027 Volume \u003d %s\u0027), volume[\u0027id\u0027])"},{"line_number":3183,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":3184,"context_line":""},{"line_number":3185,"context_line":"        if need_copy:"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_618bc41f","line":3182,"range":{"start_line":3182,"start_character":40,"end_line":3182,"end_character":41},"in_reply_to":"ba5201f7_8b91c5f3","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f45b74a6f61f97a5d1ae14b523b069ace63bacdc","unresolved":false,"context_lines":[{"line_number":3305,"context_line":""},{"line_number":3306,"context_line":"        if vol_rep_type !\u003d rep_type:"},{"line_number":3307,"context_line":"            msg \u003d (_(\"Failed to manage existing volume due to \""},{"line_number":3308,"context_line":"                     \"the replication type of the volume to be managed is\""},{"line_number":3309,"context_line":"                     \"mismatch with the provided replication type.\"))"},{"line_number":3310,"context_line":"            raise exception.ManageExistingVolumeTypeMismatch(reason\u003dmsg)"},{"line_number":3311,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_aba5a947","line":3308,"range":{"start_line":3308,"start_character":73,"end_line":3308,"end_character":74},"updated":"2017-01-05 15:00:15.000000000","message":"Needs space at the end.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3d0cfe1f3bc668c7bc2a47a2409c9ceb331fed6b","unresolved":false,"context_lines":[{"line_number":3305,"context_line":""},{"line_number":3306,"context_line":"        if vol_rep_type !\u003d rep_type:"},{"line_number":3307,"context_line":"            msg \u003d (_(\"Failed to manage existing volume due to \""},{"line_number":3308,"context_line":"                     \"the replication type of the volume to be managed is\""},{"line_number":3309,"context_line":"                     \"mismatch with the provided replication type.\"))"},{"line_number":3310,"context_line":"            raise exception.ManageExistingVolumeTypeMismatch(reason\u003dmsg)"},{"line_number":3311,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_c184700c","line":3308,"range":{"start_line":3308,"start_character":73,"end_line":3308,"end_character":74},"in_reply_to":"ba5201f7_aba5a947","updated":"2017-01-06 09:03:39.000000000","message":"Hi Sean,thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"0b44af7b71fd90780beb4f4758d4436af24ebc06"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f480698a6a28e4d430f97177a9b97469044b1709","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                return True"},{"line_number":605,"context_line":"        except exception.VolumeBackendAPIException as war:"},{"line_number":606,"context_line":"            LOG.warning(_LW(\"Failed to run lsguicapability. \""},{"line_number":607,"context_line":"                            \"Exception: %s.\"), war)"},{"line_number":608,"context_line":"        return False"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def replication_licensed(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_56dc7274","line":607,"updated":"2017-01-09 16:40:54.000000000","message":"I would recommend changing this message to something more useful, like Failed to fetch licensing scheme.  Also, this seems like you are logging an exception here, I\u0027d prefer to do a LOG.exception instead.","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"d1fd9f212cf0327cf56ca0f37ced935ff09633a0","unresolved":false,"context_lines":[{"line_number":604,"context_line":"                return True"},{"line_number":605,"context_line":"        except exception.VolumeBackendAPIException as war:"},{"line_number":606,"context_line":"            LOG.warning(_LW(\"Failed to run lsguicapability. \""},{"line_number":607,"context_line":"                            \"Exception: %s.\"), war)"},{"line_number":608,"context_line":"        return False"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def replication_licensed(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_f830daea","line":607,"in_reply_to":"ba5201f7_56dc7274","updated":"2017-01-10 08:49:06.000000000","message":"Hi Walter, thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f480698a6a28e4d430f97177a9b97469044b1709","unresolved":false,"context_lines":[{"line_number":1103,"context_line":"            try:"},{"line_number":1104,"context_line":"                testValue \u003d testmethod()"},{"line_number":1105,"context_line":"            except Exception as ex:"},{"line_number":1106,"context_line":"                if raise_exception:"},{"line_number":1107,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dex)"},{"line_number":1108,"context_line":"                else:"},{"line_number":1109,"context_line":"                    testValue \u003d False"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_d6d14231","line":1106,"updated":"2017-01-09 16:40:54.000000000","message":"we should also log something here if we are raising an exception.","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"d1fd9f212cf0327cf56ca0f37ced935ff09633a0","unresolved":false,"context_lines":[{"line_number":1103,"context_line":"            try:"},{"line_number":1104,"context_line":"                testValue \u003d testmethod()"},{"line_number":1105,"context_line":"            except Exception as ex:"},{"line_number":1106,"context_line":"                if raise_exception:"},{"line_number":1107,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dex)"},{"line_number":1108,"context_line":"                else:"},{"line_number":1109,"context_line":"                    testValue \u003d False"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_184cbe75","line":1106,"in_reply_to":"ba5201f7_d6d14231","updated":"2017-01-10 08:49:06.000000000","message":"Hi Walter, thanks a lot for your comments. It\u0027s addressed in new patch.","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f480698a6a28e4d430f97177a9b97469044b1709","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"            admin_context \u003d context.get_admin_context()"},{"line_number":2020,"context_line":"        else:"},{"line_number":2021,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":2022,"context_line":"        volumes \u003d self.db.volume_get_all_by_host(admin_context, self.host)"},{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":"        for volume in volumes:"},{"line_number":2025,"context_line":"            metadata \u003d self.db.volume_admin_metadata_get(admin_context,"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_36afee95","line":2022,"updated":"2017-01-09 16:40:54.000000000","message":"Calling the DB directly in a driver is not a good thing.  Is there any way we get work around this?\n\nEvery time this class is started it\u0027s going to fetch every volume for this host.  This could be thousands of volumes.","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"d1fd9f212cf0327cf56ca0f37ced935ff09633a0","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"            admin_context \u003d context.get_admin_context()"},{"line_number":2020,"context_line":"        else:"},{"line_number":2021,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":2022,"context_line":"        volumes \u003d self.db.volume_get_all_by_host(admin_context, self.host)"},{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":"        for volume in volumes:"},{"line_number":2025,"context_line":"            metadata \u003d self.db.volume_admin_metadata_get(admin_context,"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_5825665a","line":2022,"in_reply_to":"ba5201f7_36afee95","updated":"2017-01-10 08:49:06.000000000","message":"Hi Walter, thanks a lot for your comments. Yes, it is not a good thing to call db directly. And this code is not related to replication and not a new code. It is brought from K release for retype using SVC mirror function. We prepared to support mirror volume in O release and will change this db access then.","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f480698a6a28e4d430f97177a9b97469044b1709","unresolved":false,"context_lines":[{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":"        for volume in volumes:"},{"line_number":2025,"context_line":"            metadata \u003d self.db.volume_admin_metadata_get(admin_context,"},{"line_number":2026,"context_line":"                                                         volume[\u0027id\u0027])"},{"line_number":2027,"context_line":"            curr_ops \u003d metadata.get(\u0027vdiskcopyops\u0027, None)"},{"line_number":2028,"context_line":"            if curr_ops:"},{"line_number":2029,"context_line":"                ops \u003d [tuple(x.split(\u0027:\u0027)) for x in curr_ops.split(\u0027;\u0027)]"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_56947243","line":2026,"updated":"2017-01-09 16:40:54.000000000","message":"same","commit_id":"9d455d74001c605bab0cd32b32e3a169a8785338"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"febffef9bf4bcbf33180a8a09bc1cd7547102766","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"        # Validate that the pool exists"},{"line_number":2020,"context_line":"        self._validate_pools_exist()"},{"line_number":2021,"context_line":""},{"line_number":2022,"context_line":"        # Build the list of in-progress vdisk copy operations"},{"line_number":2023,"context_line":"        if ctxt is None:"},{"line_number":2024,"context_line":"            admin_context \u003d context.get_admin_context()"},{"line_number":2025,"context_line":"        else:"},{"line_number":2026,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":2027,"context_line":"        volumes \u003d self.db.volume_get_all_by_host(admin_context, self.host)"},{"line_number":2028,"context_line":""},{"line_number":2029,"context_line":"        for volume in volumes:"},{"line_number":2030,"context_line":"            metadata \u003d self.db.volume_admin_metadata_get(admin_context,"},{"line_number":2031,"context_line":"                                                         volume[\u0027id\u0027])"},{"line_number":2032,"context_line":"            curr_ops \u003d metadata.get(\u0027vdiskcopyops\u0027, None)"},{"line_number":2033,"context_line":"            if curr_ops:"},{"line_number":2034,"context_line":"                ops \u003d [tuple(x.split(\u0027:\u0027)) for x in curr_ops.split(\u0027;\u0027)]"},{"line_number":2035,"context_line":"                self._vdiskcopyops[volume[\u0027id\u0027]] \u003d ops"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"        # if vdiskcopy exists in database, start the looping call"},{"line_number":2038,"context_line":"        if len(self._vdiskcopyops) \u003e\u003d 1:"},{"line_number":2039,"context_line":"            self._vdiskcopyops_loop \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":2040,"context_line":"                self._check_volume_copy_ops)"},{"line_number":2041,"context_line":"            self._vdiskcopyops_loop.start(interval\u003dself.VDISKCOPYOPS_INTERVAL)"},{"line_number":2042,"context_line":"        LOG.debug(\u0027leave: do_setup\u0027)"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"    def _update_storwize_state(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5201f7_8babc288","line":2041,"range":{"start_line":2022,"start_character":0,"end_line":2041,"end_character":78},"updated":"2017-01-11 06:43:13.000000000","message":"Yes. It\u0027s not related to replication and not new code. It\u0027s shown green just due to the git diff. Actually we do not change anything about this green section code in this patch. You can refer to the red lines between 2005 and 2025 in the left side. \n\nThe db access is brought in K release for volume retype. The SVC create one copy with the new volume type when some special parameters changes during retype.  And this copy info is recorded in metadata. A looping call is started during the retype and once the new copy is synchronized with the original copy and the original copy is deleted. So the code here is get all the volume copy info from db during initialization to check whether the looping call is needed. \n\nYes, it\u0027s not a good way to access db directly and we plane to add SVC mirror volume feature in O release and will also change the retype behavior which using mirror volume behavior for some special parameters change.","commit_id":"8b368194adce4daae162366208d54ec2f25d12b5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                return True"},{"line_number":606,"context_line":"        except exception.VolumeBackendAPIException as war:"},{"line_number":607,"context_line":"            LOG.exception(_LE(\"Failed to fetch licensing scheme.\""},{"line_number":608,"context_line":"                              \"Exception: %s.\"), war)"},{"line_number":609,"context_line":"        return False"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def replication_licensed(self):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_e68dad7c","line":608,"updated":"2017-01-13 10:41:55.000000000","message":"You don\u0027t need to pass exception instance to LOG.exception function","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":605,"context_line":"                return True"},{"line_number":606,"context_line":"        except exception.VolumeBackendAPIException as war:"},{"line_number":607,"context_line":"            LOG.exception(_LE(\"Failed to fetch licensing scheme.\""},{"line_number":608,"context_line":"                              \"Exception: %s.\"), war)"},{"line_number":609,"context_line":"        return False"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    def replication_licensed(self):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_d4ec9b2b","line":608,"in_reply_to":"7a3c09a3_e68dad7c","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                                      \" execution failed for \""},{"line_number":1110,"context_line":"                                      \"%(exception)s .\"),"},{"line_number":1111,"context_line":"                                  {\u0027method_name\u0027: testmethod.__name__,"},{"line_number":1112,"context_line":"                                   \u0027exception\u0027: ex.message})"},{"line_number":1113,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dex)"},{"line_number":1114,"context_line":"                else:"},{"line_number":1115,"context_line":"                    testValue \u003d False"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_66f8dde6","line":1112,"updated":"2017-01-13 10:41:55.000000000","message":"The same as above","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                                      \" execution failed for \""},{"line_number":1110,"context_line":"                                      \"%(exception)s .\"),"},{"line_number":1111,"context_line":"                                  {\u0027method_name\u0027: testmethod.__name__,"},{"line_number":1112,"context_line":"                                   \u0027exception\u0027: ex.message})"},{"line_number":1113,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dex)"},{"line_number":1114,"context_line":"                else:"},{"line_number":1115,"context_line":"                    testValue \u003d False"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_74c5a73a","line":1112,"in_reply_to":"7a3c09a3_66f8dde6","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":1608,"context_line":"        except Exception as e:"},{"line_number":1609,"context_line":"            msg \u003d (_(\u0027Unable to delete the volume for \u0027"},{"line_number":1610,"context_line":"                     \u0027volume %(vol)s. Exception: %(err)s.\u0027),"},{"line_number":1611,"context_line":"                   {\u0027vol\u0027: vol_name, \u0027err\u0027: e})"},{"line_number":1612,"context_line":"            LOG.error(msg)"},{"line_number":1613,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1614,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_e6e4cd3c","line":1611,"updated":"2017-01-13 10:41:55.000000000","message":"The same","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":1608,"context_line":"        except Exception as e:"},{"line_number":1609,"context_line":"            msg \u003d (_(\u0027Unable to delete the volume for \u0027"},{"line_number":1610,"context_line":"                     \u0027volume %(vol)s. Exception: %(err)s.\u0027),"},{"line_number":1611,"context_line":"                   {\u0027vol\u0027: vol_name, \u0027err\u0027: e})"},{"line_number":1612,"context_line":"            LOG.error(msg)"},{"line_number":1613,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1614,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_af5ed8e6","line":1611,"in_reply_to":"7a3c09a3_e6e4cd3c","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"39214ce88bacc872e77c6f1b686273faddea5fe7","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        except Exception as ex:"},{"line_number":2676,"context_line":"            msg \u003d (_(\"Unable to failback due to primary is not reachable. \""},{"line_number":2677,"context_line":"                     \"error\u003d%(ex)s\"), {\u0027error\u0027: ex})"},{"line_number":2678,"context_line":"            LOG.error(msg)"},{"line_number":2679,"context_line":"            raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":2680,"context_line":""},{"line_number":2681,"context_line":"        normal_volumes, rep_volumes \u003d self._classify_volume(ctxt, volumes)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_e6bbed0c","line":2678,"updated":"2017-01-13 10:41:55.000000000","message":"The same","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"7315c1ab006ec3ba25de79d167c40b51fd02c1a8","unresolved":false,"context_lines":[{"line_number":2675,"context_line":"        except Exception as ex:"},{"line_number":2676,"context_line":"            msg \u003d (_(\"Unable to failback due to primary is not reachable. \""},{"line_number":2677,"context_line":"                     \"error\u003d%(ex)s\"), {\u0027error\u0027: ex})"},{"line_number":2678,"context_line":"            LOG.error(msg)"},{"line_number":2679,"context_line":"            raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":2680,"context_line":""},{"line_number":2681,"context_line":"        normal_volumes, rep_volumes \u003d self._classify_volume(ctxt, volumes)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7a3c09a3_4fe3b405","line":2678,"in_reply_to":"7a3c09a3_e6bbed0c","updated":"2017-01-16 09:00:28.000000000","message":"Hi Ivan, thanks  a lot for your comments. It\u0027s addressed in new patch.","commit_id":"21e48b0fcbe745ea80397980259fb7155ec55909"}]}
