)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Implement create_replica,delete_replica,promote_replica"},{"line_number":10,"context_line":"  and update_replica_state."},{"line_number":11,"context_line":"2.Snapshot replication is not available."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"TODO in this change:"},{"line_number":14,"context_line":"- Unit tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3aaa91ec_74ffc334","line":11,"range":{"start_line":11,"start_character":2,"end_line":11,"end_character":40},"updated":"2016-06-22 02:49:33.000000000","message":"The Huawei driver supports snapshots.. If replicated snapshots are not supported, this would lead errors... please consult the devref for this:\n\nhttp://docs.openstack.org/developer/manila/devref/share_replication.html#understanding-replication-workflows\n\nIf you have replication setup for a huawei share, does it not affect any snapshots that get taken on the share?","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"84f5f022c262cf6885ff1b74bc373c9bbd317003","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Implement create_replica,delete_replica,promote_replica"},{"line_number":10,"context_line":"  and update_replica_state."},{"line_number":11,"context_line":"2.Snapshot replication is not available."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"TODO in this change:"},{"line_number":14,"context_line":"- Unit tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_3707061a","line":11,"range":{"start_line":11,"start_character":2,"end_line":11,"end_character":40},"in_reply_to":"1aa78d24_2cb4dd80","updated":"2016-07-14 02:31:49.000000000","message":"oh.. Yes, the current design does not accommodate that. \n\nConsider that you have created the primary share and created 1 replica:\n\n\nWhen you take a snapshot, manila creates two snapshot instances in the database. One for each: share and replica.\n\n\nThe call to create the snapshot then reaches the host where the primary share resides (``create_replicated_snapshot``). When the primary share acknowledges that the snapshot has been created on it, the snapshot instance status is set to \u0027available\u0027. \n\n\nThe share manager polls for the snapshot instances that are in \u0027creating\u0027 state across other replicas that have their replica_state set to \u0027in-sync\u0027. If the driver does not implement this update method, the status of the snapshot instance associated with the replica is set to \u0027error\u0027. \n\n\nIs this the behavior we can live with? If we can, please implement create_replicated_snapshot interface and just invoke your snapshot creation logic in it, so that you can ensure that the primary share\u0027s snapshot instance is set to \u0027available\u0027 as expected.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16652,"name":"zhaohua","email":"nk-zh@163.com","username":"zhaohua"},"change_message_id":"d3f53b7fd4a5c94d0027bfdff16955cffd3b529e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Implement create_replica,delete_replica,promote_replica"},{"line_number":10,"context_line":"  and update_replica_state."},{"line_number":11,"context_line":"2.Snapshot replication is not available."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"TODO in this change:"},{"line_number":14,"context_line":"- Unit tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_2cb4dd80","line":11,"range":{"start_line":11,"start_character":2,"end_line":11,"end_character":40},"in_reply_to":"3aaa91ec_74ffc334","updated":"2016-07-14 02:14:31.000000000","message":"Huawei array does not support replicate snapshot.\nSo if users creates snapshot, only active side will be created.\nThis may lead some confusing.\nWe will urge the product to add this feature.Before that, I think we may add a notice in the doc of huawei driver.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"4ae3a9480fdf9aba097f503dee79000457232cc9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"  - delete_replica"},{"line_number":12,"context_line":"  - promote_replica"},{"line_number":13,"context_line":"  - update_replica_state"},{"line_number":14,"context_line":"  - create_replicated_snapshot"},{"line_number":15,"context_line":"  - delete_replicated_snapshot"},{"line_number":16,"context_line":"  - update_replicated_snapshot"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DocImpact"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1ac06dbe_ffe988b8","line":16,"range":{"start_line":14,"start_character":0,"end_line":16,"end_character":30},"updated":"2016-08-25 13:58:30.000000000","message":"Need to remove these, no?","commit_id":"69c72f36ad21c200e723dc328b1e3c53583e86f6"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"3b4beb03fd8b4486f14107809a05400813b7a56a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"  - delete_replica"},{"line_number":12,"context_line":"  - promote_replica"},{"line_number":13,"context_line":"  - update_replica_state"},{"line_number":14,"context_line":"  - create_replicated_snapshot"},{"line_number":15,"context_line":"  - delete_replicated_snapshot"},{"line_number":16,"context_line":"  - update_replicated_snapshot"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"DocImpact"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"fa7ab95a_580c9a42","line":16,"range":{"start_line":14,"start_character":0,"end_line":16,"end_character":30},"in_reply_to":"1ac06dbe_ffe988b8","updated":"2016-08-26 02:03:14.000000000","message":"Done","commit_id":"69c72f36ad21c200e723dc328b1e3c53583e86f6"}],"manila/share/drivers/huawei/base.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    @abc.abstractmethod"},{"line_number":115,"context_line":"    def promote_replica(self, context, replica_list, replica, access_rules,"},{"line_number":116,"context_line":"                        share_server\u003dNone):"},{"line_number":117,"context_line":"        \"\"\"Promote a replica to \u0027active\u0027 replica state..\"\"\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @abc.abstractmethod"},{"line_number":120,"context_line":"    def delete_replica(self, context, replica_list, replica_snapshots,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_b4f92b50","line":117,"range":{"start_line":117,"start_character":54,"end_line":117,"end_character":55},"updated":"2016-06-22 02:49:33.000000000","message":"nit: remove extra period.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"}],"manila/share/drivers/huawei/constants.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    \u0027qos\u0027: OPTS_QOS_VALUE,"},{"line_number":97,"context_line":"}"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"DEFAULT_WAIT_TIMEOUT \u003d 3600 * 24 * 30"},{"line_number":100,"context_line":"DEFAULT_WAIT_INTERVAL \u003d 5"},{"line_number":101,"context_line":"REPLICA_SYNC_MODEL \u003d \u00271\u0027"},{"line_number":102,"context_line":"REPLICA_ASYNC_MODEL \u003d \u00272\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_b4900bee","line":99,"range":{"start_line":99,"start_character":23,"end_line":99,"end_character":37},"updated":"2016-06-22 02:49:33.000000000","message":"1) this is a huge number -\u003e you mean 2592000 seconds? --\u003e 43200 minutes??","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"}"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"DEFAULT_WAIT_TIMEOUT \u003d 3600 * 24 * 30"},{"line_number":100,"context_line":"DEFAULT_WAIT_INTERVAL \u003d 5"},{"line_number":101,"context_line":"REPLICA_SYNC_MODEL \u003d \u00271\u0027"},{"line_number":102,"context_line":"REPLICA_ASYNC_MODEL \u003d \u00272\u0027"},{"line_number":103,"context_line":"REPLICA_SPEED \u003d \u00272\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_7797a090","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":21},"updated":"2016-07-19 03:58:39.000000000","message":"REPLICA_DEFAULT_WAIT_INTERVAL","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"}],"manila/share/drivers/huawei/huawei_nas.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def promote_replica(self, context, replica_list, replica, access_rules,"},{"line_number":239,"context_line":"                        share_server\u003dNone):"},{"line_number":240,"context_line":"        \"\"\"Promote a replica to \u0027active\u0027 replica state..\"\"\""},{"line_number":241,"context_line":"        return self.plugin.promote_replica(context,"},{"line_number":242,"context_line":"                                           replica_list,"},{"line_number":243,"context_line":"                                           replica,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_b47e4bac","line":240,"range":{"start_line":240,"start_character":54,"end_line":240,"end_character":55},"updated":"2016-06-22 02:49:33.000000000","message":"nit: remove extra period","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"baffa8d2d73bc83c7184379d0ef7e3e4e1a259ec","unresolved":false,"context_lines":[{"line_number":56,"context_line":"              Add ensure share."},{"line_number":57,"context_line":"              Add QoS support."},{"line_number":58,"context_line":"              Add create share from snapshot."},{"line_number":59,"context_line":"        1.3 - Add manage snapshot."},{"line_number":60,"context_line":"              Support reporting disk type of pool."},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_3aaea698","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":50},"updated":"2016-08-03 15:39:05.000000000","message":"Add replication support.","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"bce0ffef32ccf10c295ba5ad279ed1731bbe82d4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"              Add ensure share."},{"line_number":57,"context_line":"              Add QoS support."},{"line_number":58,"context_line":"              Add create share from snapshot."},{"line_number":59,"context_line":"        1.3 - Add manage snapshot."},{"line_number":60,"context_line":"              Support reporting disk type of pool."},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_db0f73df","line":60,"range":{"start_line":59,"start_character":7,"end_line":60,"end_character":50},"in_reply_to":"bacf61ea_3aaea698","updated":"2016-08-04 02:05:25.000000000","message":"Done","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"baffa8d2d73bc83c7184379d0ef7e3e4e1a259ec","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.debug(\"Enter into init function of Huawei Driver.\")"},{"line_number":66,"context_line":"        super(HuaweiNasDriver, self).__init__((True, False), *args, **kwargs)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":69,"context_line":"        if not self.configuration:"},{"line_number":70,"context_line":"            raise exception.InvalidShare(reason\u003d_("},{"line_number":71,"context_line":"                \"Huawei driver configuration missing.\"))"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_b0ec75f4","line":68,"range":{"start_line":68,"start_character":55,"end_line":68,"end_character":62},"updated":"2016-08-03 15:39:05.000000000","message":"You could just use  kwargs.get(\u0027configuration\u0027), because the default will be None.","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"bce0ffef32ccf10c295ba5ad279ed1731bbe82d4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.debug(\"Enter into init function of Huawei Driver.\")"},{"line_number":66,"context_line":"        super(HuaweiNasDriver, self).__init__((True, False), *args, **kwargs)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":69,"context_line":"        if not self.configuration:"},{"line_number":70,"context_line":"            raise exception.InvalidShare(reason\u003d_("},{"line_number":71,"context_line":"                \"Huawei driver configuration missing.\"))"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_bb127f07","line":68,"range":{"start_line":68,"start_character":55,"end_line":68,"end_character":62},"in_reply_to":"bacf61ea_b0ec75f4","updated":"2016-08-04 02:05:25.000000000","message":"Done","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"baffa8d2d73bc83c7184379d0ef7e3e4e1a259ec","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":69,"context_line":"        if not self.configuration:"},{"line_number":70,"context_line":"            raise exception.InvalidShare(reason\u003d_("},{"line_number":71,"context_line":"                \"Huawei driver configuration missing.\"))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.configuration.append_config_values(huawei_opts)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_10d0e152","line":70,"range":{"start_line":70,"start_character":28,"end_line":70,"end_character":40},"updated":"2016-08-03 15:39:05.000000000","message":"s/ InvalidShare / InvalidInput","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"bce0ffef32ccf10c295ba5ad279ed1731bbe82d4","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":69,"context_line":"        if not self.configuration:"},{"line_number":70,"context_line":"            raise exception.InvalidShare(reason\u003d_("},{"line_number":71,"context_line":"                \"Huawei driver configuration missing.\"))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.configuration.append_config_values(huawei_opts)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_1bfaabbd","line":70,"range":{"start_line":70,"start_character":28,"end_line":70,"end_character":40},"in_reply_to":"bacf61ea_10d0e152","updated":"2016-08-04 02:05:25.000000000","message":"Done","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":58,"context_line":"              Add create share from snapshot."},{"line_number":59,"context_line":"        1.3 - Add manage snapshot."},{"line_number":60,"context_line":"              Support reporting disk type of pool."},{"line_number":61,"context_line":"              Add replication support."},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_3d9f99b5","line":61,"range":{"start_line":61,"start_character":14,"end_line":61,"end_character":38},"updated":"2016-08-10 03:28:16.000000000","message":"Question - are you bumping this once per release?","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":58,"context_line":"              Add create share from snapshot."},{"line_number":59,"context_line":"        1.3 - Add manage snapshot."},{"line_number":60,"context_line":"              Support reporting disk type of pool."},{"line_number":61,"context_line":"              Add replication support."},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_d7e28c2e","line":61,"range":{"start_line":61,"start_character":14,"end_line":61,"end_character":38},"in_reply_to":"9ad45d7e_3d9f99b5","updated":"2016-08-10 09:47:06.000000000","message":"Yes, replication is seen as a sub-feature for this release.","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        super(HuaweiNasDriver, self).__init__((True, False), *args, **kwargs)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027)"},{"line_number":70,"context_line":"        if not self.configuration:"},{"line_number":71,"context_line":"            raise exception.InvalidInput(reason\u003d_("},{"line_number":72,"context_line":"                \"Huawei driver configuration missing.\"))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.configuration.append_config_values(huawei_opts)"},{"line_number":75,"context_line":"        kwargs.pop(\u0027configuration\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_717854f3","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":56},"updated":"2016-08-27 00:59:14.000000000","message":"not covered with a unit test.. See coverage report here:\nhttp://logs.openstack.org/86/331586/17/check/manila-coverage-db-ubuntu-xenial/4ae3f35/cover/manila_share_drivers_huawei_huawei_nas_py.html","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        super(HuaweiNasDriver, self).__init__((True, False), *args, **kwargs)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027)"},{"line_number":70,"context_line":"        if not self.configuration:"},{"line_number":71,"context_line":"            raise exception.InvalidInput(reason\u003d_("},{"line_number":72,"context_line":"                \"Huawei driver configuration missing.\"))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.configuration.append_config_values(huawei_opts)"},{"line_number":75,"context_line":"        kwargs.pop(\u0027configuration\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_02b414cf","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":56},"in_reply_to":"fa7ab95a_717854f3","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"}],"manila/share/drivers/huawei/huawei_utils.py":[{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"11060e8d9b7b5af11f43ef17bb213cbbeedb926f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        if res:"},{"line_number":96,"context_line":"            raise loopingcall.LoopingCallDone()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        if int(time.time()) - start_time \u003e timeout:"},{"line_number":99,"context_line":"            msg \u003d (_(\u0027wait_for_condition: %s timed out.\u0027)"},{"line_number":100,"context_line":"                   % func.__name__)"},{"line_number":101,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_e4ddbe71","line":98,"range":{"start_line":98,"start_character":11,"end_line":98,"end_character":27},"updated":"2016-06-22 06:53:49.000000000","message":"Any particular reason you wrap this in an int() call? I don\u0027t think this is necessary.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2d0a5e7de6b22d26cab30d2b04e0413a43b34bdc","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        if int(time.time()) - start_time \u003e timeout:"},{"line_number":99,"context_line":"            msg \u003d (_(\u0027wait_for_condition: %s timed out.\u0027)"},{"line_number":100,"context_line":"                   % func.__name__)"},{"line_number":101,"context_line":"            LOG.error(msg)"},{"line_number":102,"context_line":"            raise exception.ManilaException(message\u003dmsg)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_7f58858a","line":101,"range":{"start_line":101,"start_character":22,"end_line":101,"end_character":25},"updated":"2016-07-14 08:28:03.000000000","message":"Error message should be wrapped by _LE.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"}],"manila/share/drivers/huawei/v3/connection.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7f9ade03a5fd329a46f4a8adede76e8d3c0270f1","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.rpc_server \u003d huawei_rpc.server("},{"line_number":67,"context_line":"            backend_name\u003dself.configuration.config_group)"},{"line_number":68,"context_line":"        self.rpc_server.start_server(self)"},{"line_number":69,"context_line":"        self.rpc_client \u003d huawei_rpc.client()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def create_share(self, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_5dff1667","line":68,"range":{"start_line":68,"start_character":37,"end_line":68,"end_character":41},"updated":"2016-07-19 08:34:48.000000000","message":"This endpoint parameter could directly use ReplicaPairManager object.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7f9ade03a5fd329a46f4a8adede76e8d3c0270f1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.rpc_server \u003d huawei_rpc.server("},{"line_number":67,"context_line":"            backend_name\u003dself.configuration.config_group)"},{"line_number":68,"context_line":"        self.rpc_server.start_server(self)"},{"line_number":69,"context_line":"        self.rpc_client \u003d huawei_rpc.client()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def create_share(self, share, share_server\u003dNone):"},{"line_number":72,"context_line":"        \"\"\"Create a share.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_7dc65a4a","line":69,"updated":"2016-07-19 08:34:48.000000000","message":"I think it\u0027d be better of moving these rpc setup to do_setup of HuaweiNasDriver","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"    def create_replica(self, context, replica_list, new_replica,"},{"line_number":1651,"context_line":"                       access_rules, replica_snapshots, share_server\u003dNone):"},{"line_number":1652,"context_line":"        \"\"\"Create a new share,and create a remote replication parir\"\"\""},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"        active_replica \u003d self.replica.get_active_replica(replica_list)"},{"line_number":1655,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_d42f979f","line":1652,"range":{"start_line":1652,"start_character":62,"end_line":1652,"end_character":67},"updated":"2016-06-22 02:49:33.000000000","message":"pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2d0a5e7de6b22d26cab30d2b04e0413a43b34bdc","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"        if return_value !\u003d constants.REPLICA_PAIR_SUCCESS:"},{"line_number":1671,"context_line":"            err_msg \u003d (_(\u0027Create replication pair on host %s failed.\u0027)"},{"line_number":1672,"context_line":"                       % active_replica[\u0027host\u0027])"},{"line_number":1673,"context_line":"            LOG.error(err_msg)"},{"line_number":1674,"context_line":"            self.delete_share(new_replica, share_server)"},{"line_number":1675,"context_line":"            raise exception.ShareBackendException(msg\u003derr_msg)"},{"line_number":1676,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_64f0f967","line":1673,"range":{"start_line":1673,"start_character":22,"end_line":1673,"end_character":29},"updated":"2016-07-14 08:28:03.000000000","message":"Should be wrapped by _LE.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"            raise exception.ShareBackendException(msg\u003derr_msg)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        # Add access rules to the new share"},{"line_number":1678,"context_line":"        access_rules_status \u003d common_constants.REPLICA_STATE_IN_SYNC"},{"line_number":1679,"context_line":"        try:"},{"line_number":1680,"context_line":"            self.update_access(new_replica, access_rules)"},{"line_number":1681,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_2f7328b3","line":1678,"range":{"start_line":1678,"start_character":47,"end_line":1678,"end_character":68},"updated":"2016-06-22 02:49:33.000000000","message":"STATUS_ACTIVE","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1681,"context_line":"        except Exception:"},{"line_number":1682,"context_line":"            LOG.error(_LE(\u0027Failed to add access rules for share: %s.\u0027),"},{"line_number":1683,"context_line":"                      new_share_name)"},{"line_number":1684,"context_line":"            access_rules_status \u003d common_constants.REPLICA_STATE_OUT_OF_SYNC"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"        # Get the data status of the new created replica"},{"line_number":1687,"context_line":"        data_status \u003d self.replica.get_replica_data_status(new_replica)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_af5f180d","line":1684,"range":{"start_line":1684,"start_character":51,"end_line":1684,"end_character":76},"updated":"2016-06-22 02:49:33.000000000","message":"STATUS_OUT_OF_SYNC","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1686,"context_line":"        # Get the data status of the new created replica"},{"line_number":1687,"context_line":"        data_status \u003d self.replica.get_replica_data_status(new_replica)"},{"line_number":1688,"context_line":"        replica_ref \u003d {"},{"line_number":1689,"context_line":"            \u0027export_locations\u0027: (location,),"},{"line_number":1690,"context_line":"            \u0027access_rules_status\u0027: access_rules_status,"},{"line_number":1691,"context_line":"            \u0027replica_state\u0027: data_status"},{"line_number":1692,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_0fe90c1b","line":1689,"range":{"start_line":1689,"start_character":32,"end_line":1689,"end_character":43},"updated":"2016-06-22 02:49:33.000000000","message":"needs to be a list..","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"        replica_ref \u003d {"},{"line_number":1689,"context_line":"            \u0027export_locations\u0027: (location,),"},{"line_number":1690,"context_line":"            \u0027access_rules_status\u0027: access_rules_status,"},{"line_number":1691,"context_line":"            \u0027replica_state\u0027: data_status"},{"line_number":1692,"context_line":"        }"},{"line_number":1693,"context_line":"        return replica_ref"},{"line_number":1694,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_8f969c92","line":1691,"range":{"start_line":1691,"start_character":29,"end_line":1691,"end_character":40},"updated":"2016-06-22 02:49:33.000000000","message":"please add trailing comma","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1699,"context_line":"        \"\"\"Create replication pair"},{"line_number":1700,"context_line":""},{"line_number":1701,"context_line":"        This is for remote call,"},{"line_number":1702,"context_line":"        because pair should be create by master node."},{"line_number":1703,"context_line":"        \"\"\""},{"line_number":1704,"context_line":"        return self.replica.create(local_share_info,"},{"line_number":1705,"context_line":"                                   remote_device_wwn,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_efeda026","line":1702,"range":{"start_line":1702,"start_character":31,"end_line":1702,"end_character":37},"updated":"2016-06-22 02:49:33.000000000","message":"created","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1734,"context_line":"            for r in replica_list"},{"line_number":1735,"context_line":"        }"},{"line_number":1736,"context_line":"        if not self.replica.update_pair_status(replica_list, replica):"},{"line_number":1737,"context_line":"            LOG.error(_LE(\u0027Failed to update replication pair roles.\u0027"},{"line_number":1738,"context_line":"                          \u0027It is not safe to continue.\u0027))"},{"line_number":1739,"context_line":"            replica_dict[replica[\u0027id\u0027]][\u0027replica_state\u0027] \u003d ("},{"line_number":1740,"context_line":"                common_constants.REPLICA_STATE_OUT_OF_SYNC)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_efd48048","line":1737,"range":{"start_line":1737,"start_character":61,"end_line":1737,"end_character":66},"updated":"2016-06-22 02:49:33.000000000","message":"missing space after the period","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":1754,"context_line":"        try:"},{"line_number":1755,"context_line":"            self.update_access(replica, access_rules)"},{"line_number":1756,"context_line":"        except Exception as err:"},{"line_number":1757,"context_line":"            LOG.warning(_LW(\u0027Failed to sync access rules. \u0027"},{"line_number":1758,"context_line":"                            \u0027Reason: %s\u0027), err)"},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"        replica_dict[replica[\u0027id\u0027]][\u0027replica_state\u0027] \u003d ("},{"line_number":1761,"context_line":"            common_constants.REPLICA_STATE_ACTIVE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_6fc1b080","line":1758,"range":{"start_line":1757,"start_character":12,"end_line":1758,"end_character":47},"updated":"2016-06-22 02:49:33.000000000","message":"please set \u0027access_rules_status\u0027..","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7f9ade03a5fd329a46f4a8adede76e8d3c0270f1","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"            common_constants.REPLICA_STATE_ACTIVE)"},{"line_number":1762,"context_line":"        replica_dict[active_replica[\u0027id\u0027]][\u0027replica_state\u0027] \u003d ("},{"line_number":1763,"context_line":"            common_constants.REPLICA_STATE_OUT_OF_SYNC)"},{"line_number":1764,"context_line":"        return list(replica_dict.values())"},{"line_number":1765,"context_line":""},{"line_number":1766,"context_line":"    def delete_replica(self, context, replica_list, replica_snapshots,"},{"line_number":1767,"context_line":"                       replica, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_90b17592","line":1764,"range":{"start_line":1764,"start_character":33,"end_line":1764,"end_character":41},"updated":"2016-07-19 08:34:48.000000000","message":"this method\u0027s result is already a list.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"baffa8d2d73bc83c7184379d0ef7e3e4e1a259ec","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                    huawei_smartcache\u003d[True, False],"},{"line_number":318,"context_line":"                    huawei_smartpartition\u003d[True, False],"},{"line_number":319,"context_line":"                    huawei_sectorsize\u003d[True, False],"},{"line_number":320,"context_line":"                    replication_type\u003d\u0027dr\u0027,"},{"line_number":321,"context_line":"                )"},{"line_number":322,"context_line":"                if disk_type:"},{"line_number":323,"context_line":"                    pool[\u0027huawei_disk_type\u0027] \u003d disk_type"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_0b027609","line":320,"range":{"start_line":320,"start_character":41,"end_line":320,"end_character":42},"updated":"2016-08-03 15:39:05.000000000","message":"How about replication_domain?","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"bce0ffef32ccf10c295ba5ad279ed1731bbe82d4","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                    huawei_smartcache\u003d[True, False],"},{"line_number":318,"context_line":"                    huawei_smartpartition\u003d[True, False],"},{"line_number":319,"context_line":"                    huawei_sectorsize\u003d[True, False],"},{"line_number":320,"context_line":"                    replication_type\u003d\u0027dr\u0027,"},{"line_number":321,"context_line":"                )"},{"line_number":322,"context_line":"                if disk_type:"},{"line_number":323,"context_line":"                    pool[\u0027huawei_disk_type\u0027] \u003d disk_type"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_dbfe536a","line":320,"range":{"start_line":320,"start_character":41,"end_line":320,"end_character":42},"in_reply_to":"bacf61ea_0b027609","updated":"2016-08-04 02:05:25.000000000","message":"The replication_domain is gonna be set in the _update_share_stats of base class ShareDriver, and the replication_domain value is set in the manila.conf. Please see the _update_share_stats implementation in HuaweiNasDriver.","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"baffa8d2d73bc83c7184379d0ef7e3e4e1a259ec","unresolved":false,"context_lines":[{"line_number":1731,"context_line":"        replica_ref \u003d {"},{"line_number":1732,"context_line":"            \u0027export_locations\u0027: [location],"},{"line_number":1733,"context_line":"            \u0027replica_state\u0027: replica_state,"},{"line_number":1734,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC"},{"line_number":1735,"context_line":"        }"},{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return replica_ref"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_6bf3320b","line":1734,"range":{"start_line":1734,"start_character":69,"end_line":1734,"end_character":70},"updated":"2016-08-03 15:39:05.000000000","message":"trailing comma.","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"bce0ffef32ccf10c295ba5ad279ed1731bbe82d4","unresolved":false,"context_lines":[{"line_number":1731,"context_line":"        replica_ref \u003d {"},{"line_number":1732,"context_line":"            \u0027export_locations\u0027: [location],"},{"line_number":1733,"context_line":"            \u0027replica_state\u0027: replica_state,"},{"line_number":1734,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC"},{"line_number":1735,"context_line":"        }"},{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return replica_ref"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_9bd33b38","line":1734,"range":{"start_line":1734,"start_character":69,"end_line":1734,"end_character":70},"in_reply_to":"bacf61ea_6bf3320b","updated":"2016-08-04 02:05:25.000000000","message":"Done","commit_id":"54b5483d8e5f5a77f348f9751a41fbad9718b115"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"            # each active replica, so if a replica pair id is recorded for"},{"line_number":1698,"context_line":"            # this share, it means active replica already has a replication,"},{"line_number":1699,"context_line":"            # can not create anymore."},{"line_number":1700,"context_line":"            msg \u003d _LW(\u0027Active replica %s already has a replication.\u0027)"},{"line_number":1701,"context_line":"            LOG.warning(msg, active_replica[\u0027id\u0027])"},{"line_number":1702,"context_line":"            raise exception.ReplicationException("},{"line_number":1703,"context_line":"                reason\u003dmsg % active_replica[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_ddc59d8e","line":1700,"range":{"start_line":1700,"start_character":23,"end_line":1700,"end_character":66},"updated":"2016-08-10 03:28:16.000000000","message":"Wish we could say what you\u0027ve said in the comment above in a succinct way:\n\n\"Cannot create more than one replica for share %s.\"","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"            # each active replica, so if a replica pair id is recorded for"},{"line_number":1698,"context_line":"            # this share, it means active replica already has a replication,"},{"line_number":1699,"context_line":"            # can not create anymore."},{"line_number":1700,"context_line":"            msg \u003d _LW(\u0027Active replica %s already has a replication.\u0027)"},{"line_number":1701,"context_line":"            LOG.warning(msg, active_replica[\u0027id\u0027])"},{"line_number":1702,"context_line":"            raise exception.ReplicationException("},{"line_number":1703,"context_line":"                reason\u003dmsg % active_replica[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_3dedd925","line":1700,"range":{"start_line":1700,"start_character":18,"end_line":1700,"end_character":22},"updated":"2016-08-10 03:28:16.000000000","message":"_\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"            # each active replica, so if a replica pair id is recorded for"},{"line_number":1698,"context_line":"            # this share, it means active replica already has a replication,"},{"line_number":1699,"context_line":"            # can not create anymore."},{"line_number":1700,"context_line":"            msg \u003d _LW(\u0027Active replica %s already has a replication.\u0027)"},{"line_number":1701,"context_line":"            LOG.warning(msg, active_replica[\u0027id\u0027])"},{"line_number":1702,"context_line":"            raise exception.ReplicationException("},{"line_number":1703,"context_line":"                reason\u003dmsg % active_replica[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_376048a5","line":1700,"range":{"start_line":1700,"start_character":18,"end_line":1700,"end_character":22},"in_reply_to":"9ad45d7e_3dedd925","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"            # each active replica, so if a replica pair id is recorded for"},{"line_number":1698,"context_line":"            # this share, it means active replica already has a replication,"},{"line_number":1699,"context_line":"            # can not create anymore."},{"line_number":1700,"context_line":"            msg \u003d _LW(\u0027Active replica %s already has a replication.\u0027)"},{"line_number":1701,"context_line":"            LOG.warning(msg, active_replica[\u0027id\u0027])"},{"line_number":1702,"context_line":"            raise exception.ReplicationException("},{"line_number":1703,"context_line":"                reason\u003dmsg % active_replica[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_575b3cf6","line":1700,"range":{"start_line":1700,"start_character":23,"end_line":1700,"end_character":66},"in_reply_to":"9ad45d7e_ddc59d8e","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1698,"context_line":"            # this share, it means active replica already has a replication,"},{"line_number":1699,"context_line":"            # can not create anymore."},{"line_number":1700,"context_line":"            msg \u003d _LW(\u0027Active replica %s already has a replication.\u0027)"},{"line_number":1701,"context_line":"            LOG.warning(msg, active_replica[\u0027id\u0027])"},{"line_number":1702,"context_line":"            raise exception.ReplicationException("},{"line_number":1703,"context_line":"                reason\u003dmsg % active_replica[\u0027id\u0027])"},{"line_number":1704,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_fd8ce180","line":1701,"range":{"start_line":1701,"start_character":0,"end_line":1701,"end_character":50},"updated":"2016-08-10 03:28:16.000000000","message":"This should be LOG.error","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1698,"context_line":"            # this share, it means active replica already has a replication,"},{"line_number":1699,"context_line":"            # can not create anymore."},{"line_number":1700,"context_line":"            msg \u003d _LW(\u0027Active replica %s already has a replication.\u0027)"},{"line_number":1701,"context_line":"            LOG.warning(msg, active_replica[\u0027id\u0027])"},{"line_number":1702,"context_line":"            raise exception.ReplicationException("},{"line_number":1703,"context_line":"                reason\u003dmsg % active_replica[\u0027id\u0027])"},{"line_number":1704,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_b7743868","line":1701,"range":{"start_line":1701,"start_character":0,"end_line":1701,"end_character":50},"in_reply_to":"9ad45d7e_fd8ce180","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1719,"context_line":"                remote_fs_id\u003dself.helper.get_fsid_by_name(new_share_name)"},{"line_number":1720,"context_line":"            )"},{"line_number":1721,"context_line":"        except Exception:"},{"line_number":1722,"context_line":"            LOG.exception(_LE(\u0027Create replication pair on host %s failed.\u0027),"},{"line_number":1723,"context_line":"                          active_replica[\u0027host\u0027])"},{"line_number":1724,"context_line":"            raise"},{"line_number":1725,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_206492e2","line":1722,"range":{"start_line":1722,"start_character":31,"end_line":1722,"end_character":73},"updated":"2016-08-10 03:28:16.000000000","message":"\"Failed to create a replication pair with host %s\"","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1719,"context_line":"                remote_fs_id\u003dself.helper.get_fsid_by_name(new_share_name)"},{"line_number":1720,"context_line":"            )"},{"line_number":1721,"context_line":"        except Exception:"},{"line_number":1722,"context_line":"            LOG.exception(_LE(\u0027Create replication pair on host %s failed.\u0027),"},{"line_number":1723,"context_line":"                          active_replica[\u0027host\u0027])"},{"line_number":1724,"context_line":"            raise"},{"line_number":1725,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_f76a3080","line":1722,"range":{"start_line":1722,"start_character":31,"end_line":1722,"end_character":73},"in_reply_to":"9ad45d7e_206492e2","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1731,"context_line":"        replica_ref \u003d {"},{"line_number":1732,"context_line":"            \u0027export_locations\u0027: [location],"},{"line_number":1733,"context_line":"            \u0027replica_state\u0027: replica_state,"},{"line_number":1734,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC,"},{"line_number":1735,"context_line":"        }"},{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return replica_ref"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_c0d93685","line":1734,"range":{"start_line":1734,"start_character":12,"end_line":1734,"end_character":71},"updated":"2016-08-10 03:28:16.000000000","message":"Is this because you won\u0027t apply the access rules?","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1731,"context_line":"        replica_ref \u003d {"},{"line_number":1732,"context_line":"            \u0027export_locations\u0027: [location],"},{"line_number":1733,"context_line":"            \u0027replica_state\u0027: replica_state,"},{"line_number":1734,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC,"},{"line_number":1735,"context_line":"        }"},{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return replica_ref"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_b7971847","line":1734,"range":{"start_line":1734,"start_character":12,"end_line":1734,"end_character":71},"in_reply_to":"9ad45d7e_c0d93685","updated":"2016-08-10 09:47:06.000000000","message":"Yes. I think it\u0027s not necessary to update access rules to new replica, because the secondary of huawei replication can\u0027t be accessed.","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1743,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1744,"context_line":"        if replica_pair_id is None:"},{"line_number":1745,"context_line":"            msg \u003d _LE(\"No replication pair id recorded for share %s.\")"},{"line_number":1746,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1747,"context_line":"            return common_constants.STATUS_ERROR"},{"line_number":1748,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_60d16a57","line":1745,"range":{"start_line":1745,"start_character":43,"end_line":1745,"end_character":45},"updated":"2016-08-10 03:28:16.000000000","message":"ID","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1743,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1744,"context_line":"        if replica_pair_id is None:"},{"line_number":1745,"context_line":"            msg \u003d _LE(\"No replication pair id recorded for share %s.\")"},{"line_number":1746,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1747,"context_line":"            return common_constants.STATUS_ERROR"},{"line_number":1748,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_378a081c","line":1745,"range":{"start_line":1745,"start_character":43,"end_line":1745,"end_character":45},"in_reply_to":"9ad45d7e_60d16a57","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1754,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1755,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1756,"context_line":"        if replica_pair_id is None:"},{"line_number":1757,"context_line":"            msg \u003d _LE(\"No replication pair id recorded for share %s.\")"},{"line_number":1758,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1759,"context_line":"            raise exception.ReplicationException("},{"line_number":1760,"context_line":"                reason\u003dmsg % replica[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_a042420e","line":1757,"range":{"start_line":1757,"start_character":43,"end_line":1757,"end_character":45},"updated":"2016-08-10 03:28:16.000000000","message":"ID","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1754,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1755,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1756,"context_line":"        if replica_pair_id is None:"},{"line_number":1757,"context_line":"            msg \u003d _LE(\"No replication pair id recorded for share %s.\")"},{"line_number":1758,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1759,"context_line":"            raise exception.ReplicationException("},{"line_number":1760,"context_line":"                reason\u003dmsg % replica[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_403b869c","line":1757,"range":{"start_line":1757,"start_character":18,"end_line":1757,"end_character":21},"updated":"2016-08-10 03:28:16.000000000","message":"_\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1754,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1755,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1756,"context_line":"        if replica_pair_id is None:"},{"line_number":1757,"context_line":"            msg \u003d _LE(\"No replication pair id recorded for share %s.\")"},{"line_number":1758,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1759,"context_line":"            raise exception.ReplicationException("},{"line_number":1760,"context_line":"                reason\u003dmsg % replica[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_178f042b","line":1757,"range":{"start_line":1757,"start_character":18,"end_line":1757,"end_character":21},"in_reply_to":"9ad45d7e_403b869c","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1754,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1755,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1756,"context_line":"        if replica_pair_id is None:"},{"line_number":1757,"context_line":"            msg \u003d _LE(\"No replication pair id recorded for share %s.\")"},{"line_number":1758,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1759,"context_line":"            raise exception.ReplicationException("},{"line_number":1760,"context_line":"                reason\u003dmsg % replica[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_778000f8","line":1757,"range":{"start_line":1757,"start_character":43,"end_line":1757,"end_character":45},"in_reply_to":"9ad45d7e_a042420e","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1787,"context_line":"                        old_active_replica[\u0027id\u0027])"},{"line_number":1788,"context_line":"            cleared_old_active_access \u003d False"},{"line_number":1789,"context_line":""},{"line_number":1790,"context_line":"        new_active_update \u003d {"},{"line_number":1791,"context_line":"            \u0027id\u0027: replica[\u0027id\u0027],"},{"line_number":1792,"context_line":"            \u0027replica_state\u0027: common_constants.REPLICA_STATE_ACTIVE,"},{"line_number":1793,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_ACTIVE}"},{"line_number":1794,"context_line":"        if not updated_new_active_access:"},{"line_number":1795,"context_line":"            new_active_update[\u0027access_rules_status\u0027] \u003d ("},{"line_number":1796,"context_line":"                common_constants.STATUS_OUT_OF_SYNC)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_206e5295","line":1793,"range":{"start_line":1790,"start_character":28,"end_line":1793,"end_character":66},"updated":"2016-08-10 03:28:16.000000000","message":"dictionary wrapping please..\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1787,"context_line":"                        old_active_replica[\u0027id\u0027])"},{"line_number":1788,"context_line":"            cleared_old_active_access \u003d False"},{"line_number":1789,"context_line":""},{"line_number":1790,"context_line":"        new_active_update \u003d {"},{"line_number":1791,"context_line":"            \u0027id\u0027: replica[\u0027id\u0027],"},{"line_number":1792,"context_line":"            \u0027replica_state\u0027: common_constants.REPLICA_STATE_ACTIVE,"},{"line_number":1793,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_ACTIVE}"},{"line_number":1794,"context_line":"        if not updated_new_active_access:"},{"line_number":1795,"context_line":"            new_active_update[\u0027access_rules_status\u0027] \u003d ("},{"line_number":1796,"context_line":"                common_constants.STATUS_OUT_OF_SYNC)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_b77ef816","line":1793,"range":{"start_line":1790,"start_character":28,"end_line":1793,"end_character":66},"in_reply_to":"9ad45d7e_206e5295","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1791,"context_line":"            \u0027id\u0027: replica[\u0027id\u0027],"},{"line_number":1792,"context_line":"            \u0027replica_state\u0027: common_constants.REPLICA_STATE_ACTIVE,"},{"line_number":1793,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_ACTIVE}"},{"line_number":1794,"context_line":"        if not updated_new_active_access:"},{"line_number":1795,"context_line":"            new_active_update[\u0027access_rules_status\u0027] \u003d ("},{"line_number":1796,"context_line":"                common_constants.STATUS_OUT_OF_SYNC)"},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"        # get replica state for new secondary after switch over"},{"line_number":1799,"context_line":"        replica_state \u003d self.replica_mgr.get_replica_state(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_c0f5b6cb","line":1796,"range":{"start_line":1794,"start_character":8,"end_line":1796,"end_character":52},"updated":"2016-08-10 03:28:16.000000000","message":"new_active_update[\u0027access_rules_status\u0027] \u003d (common_constants.STATUS_ACTIVE if updated_new_active_rules else common_constants.STATUS_OUT_OF_SYNC)","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1791,"context_line":"            \u0027id\u0027: replica[\u0027id\u0027],"},{"line_number":1792,"context_line":"            \u0027replica_state\u0027: common_constants.REPLICA_STATE_ACTIVE,"},{"line_number":1793,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_ACTIVE}"},{"line_number":1794,"context_line":"        if not updated_new_active_access:"},{"line_number":1795,"context_line":"            new_active_update[\u0027access_rules_status\u0027] \u003d ("},{"line_number":1796,"context_line":"                common_constants.STATUS_OUT_OF_SYNC)"},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"        # get replica state for new secondary after switch over"},{"line_number":1799,"context_line":"        replica_state \u003d self.replica_mgr.get_replica_state(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_977bf427","line":1796,"range":{"start_line":1794,"start_character":8,"end_line":1796,"end_character":52},"in_reply_to":"9ad45d7e_c0f5b6cb","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"        # get replica state for new secondary after switch over"},{"line_number":1799,"context_line":"        replica_state \u003d self.replica_mgr.get_replica_state(replica_pair_id)"},{"line_number":1800,"context_line":""},{"line_number":1801,"context_line":"        old_active_update \u003d {"},{"line_number":1802,"context_line":"            \u0027id\u0027: old_active_replica[\u0027id\u0027],"},{"line_number":1803,"context_line":"            \u0027replica_state\u0027: replica_state,"},{"line_number":1804,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC}"},{"line_number":1805,"context_line":"        if not cleared_old_active_access:"},{"line_number":1806,"context_line":"            old_active_update[\u0027access_rules_status\u0027] \u003d ("},{"line_number":1807,"context_line":"                common_constants.STATUS_ACTIVE)"},{"line_number":1808,"context_line":""},{"line_number":1809,"context_line":"        return [new_active_update, old_active_update]"},{"line_number":1810,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_602dea45","line":1807,"range":{"start_line":1801,"start_character":28,"end_line":1807,"end_character":47},"updated":"2016-08-10 03:28:16.000000000","message":"same..","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"        # get replica state for new secondary after switch over"},{"line_number":1799,"context_line":"        replica_state \u003d self.replica_mgr.get_replica_state(replica_pair_id)"},{"line_number":1800,"context_line":""},{"line_number":1801,"context_line":"        old_active_update \u003d {"},{"line_number":1802,"context_line":"            \u0027id\u0027: old_active_replica[\u0027id\u0027],"},{"line_number":1803,"context_line":"            \u0027replica_state\u0027: replica_state,"},{"line_number":1804,"context_line":"            \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC}"},{"line_number":1805,"context_line":"        if not cleared_old_active_access:"},{"line_number":1806,"context_line":"            old_active_update[\u0027access_rules_status\u0027] \u003d ("},{"line_number":1807,"context_line":"                common_constants.STATUS_ACTIVE)"},{"line_number":1808,"context_line":""},{"line_number":1809,"context_line":"        return [new_active_update, old_active_update]"},{"line_number":1810,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_f774f036","line":1807,"range":{"start_line":1801,"start_character":28,"end_line":1807,"end_character":47},"in_reply_to":"9ad45d7e_602dea45","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1814,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1815,"context_line":"        if replica_pair_id is None:"},{"line_number":1816,"context_line":"            msg \u003d _LW(\"No replication pair id recorded for share %(share)s. \""},{"line_number":1817,"context_line":"                      \"Continue to delete replica %(replica)s.\")"},{"line_number":1818,"context_line":"            LOG.warning(msg, {\u0027share\u0027: replica[\u0027share_id\u0027],"},{"line_number":1819,"context_line":"                              \u0027replica\u0027: replica[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_a0b522ef","line":1816,"range":{"start_line":1816,"start_character":18,"end_line":1816,"end_character":21},"updated":"2016-08-10 03:28:16.000000000","message":"_","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1814,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1815,"context_line":"        if replica_pair_id is None:"},{"line_number":1816,"context_line":"            msg \u003d _LW(\"No replication pair id recorded for share %(share)s. \""},{"line_number":1817,"context_line":"                      \"Continue to delete replica %(replica)s.\")"},{"line_number":1818,"context_line":"            LOG.warning(msg, {\u0027share\u0027: replica[\u0027share_id\u0027],"},{"line_number":1819,"context_line":"                              \u0027replica\u0027: replica[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_d771ec45","line":1816,"range":{"start_line":1816,"start_character":18,"end_line":1816,"end_character":21},"in_reply_to":"9ad45d7e_a0b522ef","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1832,"context_line":"    def create_replicated_snapshot(self, context, replica_list,"},{"line_number":1833,"context_line":"                                   replica_snapshots,"},{"line_number":1834,"context_line":"                                   share_server\u003dNone):"},{"line_number":1835,"context_line":"        # because huawei array doesn\u0027t support snapshot replication now,"},{"line_number":1836,"context_line":"        # so we actually just create snapshot for active replica here,"},{"line_number":1837,"context_line":"        # don\u0027t transfer the snapshot created to the respective replicas."},{"line_number":1838,"context_line":"        updates \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_009cee67","line":1835,"range":{"start_line":1835,"start_character":10,"end_line":1835,"end_character":17},"updated":"2016-08-10 03:28:16.000000000","message":"remove word..","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1832,"context_line":"    def create_replicated_snapshot(self, context, replica_list,"},{"line_number":1833,"context_line":"                                   replica_snapshots,"},{"line_number":1834,"context_line":"                                   share_server\u003dNone):"},{"line_number":1835,"context_line":"        # because huawei array doesn\u0027t support snapshot replication now,"},{"line_number":1836,"context_line":"        # so we actually just create snapshot for active replica here,"},{"line_number":1837,"context_line":"        # don\u0027t transfer the snapshot created to the respective replicas."},{"line_number":1838,"context_line":"        updates \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_1796e43e","line":1835,"range":{"start_line":1835,"start_character":10,"end_line":1835,"end_character":17},"in_reply_to":"9ad45d7e_009cee67","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1839,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1840,"context_line":""},{"line_number":1841,"context_line":"        for snapshot in replica_snapshots:"},{"line_number":1842,"context_line":"            if snapshot[\u0027share_instance_id\u0027] \u003d\u003d active_replica[\u0027id\u0027]:"},{"line_number":1843,"context_line":"                self.create_snapshot(snapshot, share_server)"},{"line_number":1844,"context_line":"                updates.append({\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":1845,"context_line":"                                \u0027status\u0027: common_constants.STATUS_AVAILABLE})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_e07d5a1d","line":1842,"range":{"start_line":1842,"start_character":24,"end_line":1842,"end_character":43},"updated":"2016-08-10 03:28:16.000000000","message":"\u0027share_id\u0027\n\nis the same thing, you should prefer this key instead..","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1839,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1840,"context_line":""},{"line_number":1841,"context_line":"        for snapshot in replica_snapshots:"},{"line_number":1842,"context_line":"            if snapshot[\u0027share_instance_id\u0027] \u003d\u003d active_replica[\u0027id\u0027]:"},{"line_number":1843,"context_line":"                self.create_snapshot(snapshot, share_server)"},{"line_number":1844,"context_line":"                updates.append({\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":1845,"context_line":"                                \u0027status\u0027: common_constants.STATUS_AVAILABLE})"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_7797603a","line":1842,"range":{"start_line":1842,"start_character":24,"end_line":1842,"end_character":43},"in_reply_to":"9ad45d7e_e07d5a1d","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1859,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1860,"context_line":""},{"line_number":1861,"context_line":"        for snapshot in replica_snapshots:"},{"line_number":1862,"context_line":"            if snapshot[\u0027share_instance_id\u0027] \u003d\u003d active_replica[\u0027id\u0027]:"},{"line_number":1863,"context_line":"                self.delete_snapshot(snapshot, share_server)"},{"line_number":1864,"context_line":""},{"line_number":1865,"context_line":"            updates.append({\u0027id\u0027: snapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_00aa2e70","line":1862,"range":{"start_line":1862,"start_character":24,"end_line":1862,"end_character":44},"updated":"2016-08-10 03:28:16.000000000","message":"same comment..","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1859,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1860,"context_line":""},{"line_number":1861,"context_line":"        for snapshot in replica_snapshots:"},{"line_number":1862,"context_line":"            if snapshot[\u0027share_instance_id\u0027] \u003d\u003d active_replica[\u0027id\u0027]:"},{"line_number":1863,"context_line":"                self.delete_snapshot(snapshot, share_server)"},{"line_number":1864,"context_line":""},{"line_number":1865,"context_line":"            updates.append({\u0027id\u0027: snapshot[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_579cdc5c","line":1862,"range":{"start_line":1862,"start_character":24,"end_line":1862,"end_character":44},"in_reply_to":"9ad45d7e_00aa2e70","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d11ae89d2e6ff706fc727d427ad3082d70f5bd4c","unresolved":false,"context_lines":[{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"    def create_replica(self, context, replica_list, new_replica,"},{"line_number":1689,"context_line":"                       access_rules, replica_snapshots, share_server\u003dNone):"},{"line_number":1690,"context_line":"        \"\"\"Create a new share, and create a remote replication pair\"\"\""},{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1693,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_1948cecb","line":1690,"updated":"2016-08-10 13:43:25.000000000","message":"nit: missing period","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7075a7dbece3d85b5ecb952de41af32aad94a9d6","unresolved":false,"context_lines":[{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"    def create_replica(self, context, replica_list, new_replica,"},{"line_number":1689,"context_line":"                       access_rules, replica_snapshots, share_server\u003dNone):"},{"line_number":1690,"context_line":"        \"\"\"Create a new share, and create a remote replication pair\"\"\""},{"line_number":1691,"context_line":""},{"line_number":1692,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1693,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_02f02966","line":1690,"in_reply_to":"9ad45d7e_1948cecb","updated":"2016-08-11 09:16:03.000000000","message":"Done","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d11ae89d2e6ff706fc727d427ad3082d70f5bd4c","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        if replica_pair_id is None:"},{"line_number":1817,"context_line":"            msg \u003d _(\"No replication pair ID recorded for share %(share)s. \""},{"line_number":1818,"context_line":"                    \"Continue to delete replica %(replica)s.\")"},{"line_number":1819,"context_line":"            LOG.warning(msg, {\u0027share\u0027: replica[\u0027share_id\u0027],"},{"line_number":1820,"context_line":"                              \u0027replica\u0027: replica[\u0027id\u0027]})"},{"line_number":1821,"context_line":"        else:"},{"line_number":1822,"context_line":"            self.replica_mgr.delete_replication_pair(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_ef4d2c3f","line":1819,"updated":"2016-08-10 13:43:25.000000000","message":"Use _LW for warning msg.","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7075a7dbece3d85b5ecb952de41af32aad94a9d6","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"        if replica_pair_id is None:"},{"line_number":1817,"context_line":"            msg \u003d _(\"No replication pair ID recorded for share %(share)s. \""},{"line_number":1818,"context_line":"                    \"Continue to delete replica %(replica)s.\")"},{"line_number":1819,"context_line":"            LOG.warning(msg, {\u0027share\u0027: replica[\u0027share_id\u0027],"},{"line_number":1820,"context_line":"                              \u0027replica\u0027: replica[\u0027id\u0027]})"},{"line_number":1821,"context_line":"        else:"},{"line_number":1822,"context_line":"            self.replica_mgr.delete_replication_pair(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_22ebad79","line":1819,"in_reply_to":"9ad45d7e_ef4d2c3f","updated":"2016-08-11 09:16:03.000000000","message":"Done","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"289dd36576f86cd2950a450997108086eb0fded2","unresolved":false,"context_lines":[{"line_number":1839,"context_line":"        updates \u003d []"},{"line_number":1840,"context_line":"        active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1841,"context_line":""},{"line_number":1842,"context_line":"        for snapshot in replica_snapshots:"},{"line_number":1843,"context_line":"            if snapshot[\u0027share_id\u0027] \u003d\u003d active_replica[\u0027id\u0027]:"},{"line_number":1844,"context_line":"                self.create_snapshot(snapshot, share_server)"},{"line_number":1845,"context_line":"                updates.append({\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":1846,"context_line":"                                \u0027status\u0027: common_constants.STATUS_AVAILABLE})"},{"line_number":1847,"context_line":"            else:"},{"line_number":1848,"context_line":"                # because we don\u0027t create snapshots for respective replicas,"},{"line_number":1849,"context_line":"                # return status by STATUS_ERROR."},{"line_number":1850,"context_line":"                updates.append({\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":1851,"context_line":"                                \u0027status\u0027: common_constants.STATUS_ERROR})"},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"        return updates"},{"line_number":1854,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad45d7e_5308da2d","line":1851,"range":{"start_line":1842,"start_character":8,"end_line":1851,"end_character":73},"updated":"2016-08-12 15:12:44.000000000","message":"This is absolutely not OK.  A Manila driver may not advertise both replication and snapshots if it cannot replicate snapshots.  If you want to add a config option to make the driver advertise one or the other, that would work, but then you would need your CI to run in both modes to prove they both operate as expected.","commit_id":"72af6fd3d60ef00efbcfdc82e46cc2b6b4f43bcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"            err_msg \u003d _(\u0027Config file invalid. SnapshotSupport and \u0027"},{"line_number":1267,"context_line":"                        \u0027ReplicationSupport can not both be set to True.\u0027)"},{"line_number":1268,"context_line":"            LOG.error(err_msg)"},{"line_number":1269,"context_line":"            raise exception.InvalidInput(reason\u003derr_msg)"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"    def check_service(self):"},{"line_number":1272,"context_line":"        running_status \u003d self.helper._get_cifs_service_status()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_750e87e6","line":1269,"range":{"start_line":1269,"start_character":28,"end_line":1269,"end_character":40},"updated":"2016-08-25 00:34:09.000000000","message":"BadConfigurationException","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"            err_msg \u003d _(\u0027Config file invalid. SnapshotSupport and \u0027"},{"line_number":1267,"context_line":"                        \u0027ReplicationSupport can not both be set to True.\u0027)"},{"line_number":1268,"context_line":"            LOG.error(err_msg)"},{"line_number":1269,"context_line":"            raise exception.InvalidInput(reason\u003derr_msg)"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"    def check_service(self):"},{"line_number":1272,"context_line":"        running_status \u003d self.helper._get_cifs_service_status()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_586d7a31","line":1269,"range":{"start_line":1269,"start_character":28,"end_line":1269,"end_character":40},"in_reply_to":"1ac06dbe_750e87e6","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.snapshot_support \u003d False"},{"line_number":67,"context_line":"        self.replication_support \u003d False"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _setup_rpc_server(self, endpoints):"},{"line_number":70,"context_line":"        host \u003d \"%s@%s\" % (CONF.host, self.configuration.config_group)"},{"line_number":71,"context_line":"        target \u003d messaging.Target(topic\u003dself.rpc_client.topic, server\u003dhost)"},{"line_number":72,"context_line":"        self.rpc_server \u003d rpc.get_server(target, endpoints)"},{"line_number":73,"context_line":"        self.rpc_server.start()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def connect(self):"},{"line_number":76,"context_line":"        \"\"\"Try to connect to V3 server.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_714f74bd","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":31},"updated":"2016-08-27 00:59:14.000000000","message":"not covered by unit tests:\n\nhttp://logs.openstack.org/86/331586/17/check/manila-coverage-db-ubuntu-xenial/4ae3f35/cover/manila_share_drivers_huawei_v3_connection_py.html","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.snapshot_support \u003d False"},{"line_number":67,"context_line":"        self.replication_support \u003d False"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _setup_rpc_server(self, endpoints):"},{"line_number":70,"context_line":"        host \u003d \"%s@%s\" % (CONF.host, self.configuration.config_group)"},{"line_number":71,"context_line":"        target \u003d messaging.Target(topic\u003dself.rpc_client.topic, server\u003dhost)"},{"line_number":72,"context_line":"        self.rpc_server \u003d rpc.get_server(target, endpoints)"},{"line_number":73,"context_line":"        self.rpc_server.start()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def connect(self):"},{"line_number":76,"context_line":"        \"\"\"Try to connect to V3 server.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_22cbd854","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":31},"in_reply_to":"fa7ab95a_714f74bd","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def connect(self):"},{"line_number":76,"context_line":"        \"\"\"Try to connect to V3 server.\"\"\""},{"line_number":77,"context_line":"        self.helper.login()"},{"line_number":78,"context_line":"        self._setup_rpc_server([self.replica_mgr])"},{"line_number":79,"context_line":"        self._setup_conf()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _setup_conf(self):"},{"line_number":82,"context_line":"        root \u003d self.helper._read_xml()"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_b1c73c11","line":79,"range":{"start_line":78,"start_character":0,"end_line":79,"end_character":26},"updated":"2016-08-27 00:59:14.000000000","message":"same","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def connect(self):"},{"line_number":76,"context_line":"        \"\"\"Try to connect to V3 server.\"\"\""},{"line_number":77,"context_line":"        self.helper.login()"},{"line_number":78,"context_line":"        self._setup_rpc_server([self.replica_mgr])"},{"line_number":79,"context_line":"        self._setup_conf()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _setup_conf(self):"},{"line_number":82,"context_line":"        root \u003d self.helper._read_xml()"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_42c61c4a","line":79,"range":{"start_line":78,"start_character":0,"end_line":79,"end_character":26},"in_reply_to":"fa7ab95a_b1c73c11","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":1765,"context_line":"                             share_server\u003dNone):"},{"line_number":1766,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1767,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1768,"context_line":"        if replica_pair_id is None:"},{"line_number":1769,"context_line":"            msg \u003d _LE(\"No replication pair ID recorded for share %s.\")"},{"line_number":1770,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1771,"context_line":"            return common_constants.STATUS_ERROR"},{"line_number":1772,"context_line":""},{"line_number":1773,"context_line":"        self.replica_mgr.update_replication_pair_state(replica_pair_id)"},{"line_number":1774,"context_line":"        return self.replica_mgr.get_replica_state(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_d1f1206c","line":1771,"range":{"start_line":1768,"start_character":0,"end_line":1771,"end_character":48},"updated":"2016-08-27 00:59:14.000000000","message":"not covered by unit tests:\n\nhttp://logs.openstack.org/86/331586/17/check/manila-coverage-db-ubuntu-xenial/4ae3f35/cover/manila_share_drivers_huawei_v3_connection_py.html#n1769","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":1765,"context_line":"                             share_server\u003dNone):"},{"line_number":1766,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1767,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1768,"context_line":"        if replica_pair_id is None:"},{"line_number":1769,"context_line":"            msg \u003d _LE(\"No replication pair ID recorded for share %s.\")"},{"line_number":1770,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1771,"context_line":"            return common_constants.STATUS_ERROR"},{"line_number":1772,"context_line":""},{"line_number":1773,"context_line":"        self.replica_mgr.update_replication_pair_state(replica_pair_id)"},{"line_number":1774,"context_line":"        return self.replica_mgr.get_replica_state(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_62c5e03a","line":1771,"range":{"start_line":1768,"start_character":0,"end_line":1771,"end_character":48},"in_reply_to":"fa7ab95a_d1f1206c","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":1777,"context_line":"                        share_server\u003dNone):"},{"line_number":1778,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1779,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1780,"context_line":"        if replica_pair_id is None:"},{"line_number":1781,"context_line":"            msg \u003d _(\"No replication pair ID recorded for share %s.\")"},{"line_number":1782,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1783,"context_line":"            raise exception.ReplicationException("},{"line_number":1784,"context_line":"                reason\u003dmsg % replica[\u0027share_id\u0027])"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"        try:"},{"line_number":1787,"context_line":"            self.replica_mgr.switch_over(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_f1e8e47e","line":1784,"range":{"start_line":1780,"start_character":0,"end_line":1784,"end_character":49},"updated":"2016-08-27 00:59:14.000000000","message":"same","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":1777,"context_line":"                        share_server\u003dNone):"},{"line_number":1778,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1779,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1780,"context_line":"        if replica_pair_id is None:"},{"line_number":1781,"context_line":"            msg \u003d _(\"No replication pair ID recorded for share %s.\")"},{"line_number":1782,"context_line":"            LOG.error(msg, replica[\u0027share_id\u0027])"},{"line_number":1783,"context_line":"            raise exception.ReplicationException("},{"line_number":1784,"context_line":"                reason\u003dmsg % replica[\u0027share_id\u0027])"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"        try:"},{"line_number":1787,"context_line":"            self.replica_mgr.switch_over(replica_pair_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_82c0242c","line":1784,"range":{"start_line":1780,"start_character":0,"end_line":1784,"end_character":49},"in_reply_to":"fa7ab95a_f1e8e47e","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":1796,"context_line":"        try:"},{"line_number":1797,"context_line":"            self.update_access(replica, access_rules, [], [], share_server)"},{"line_number":1798,"context_line":"        except Exception:"},{"line_number":1799,"context_line":"            LOG.warning(_LW(\u0027Failed to set access rules to \u0027"},{"line_number":1800,"context_line":"                            \u0027new active replica %s.\u0027),"},{"line_number":1801,"context_line":"                        replica[\u0027id\u0027])"},{"line_number":1802,"context_line":"            updated_new_active_access \u003d False"},{"line_number":1803,"context_line":""},{"line_number":1804,"context_line":"        old_active_replica \u003d share_utils.get_active_replica(replica_list)"},{"line_number":1805,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_91f8784b","line":1802,"range":{"start_line":1799,"start_character":0,"end_line":1802,"end_character":45},"updated":"2016-08-27 00:59:14.000000000","message":"same","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":1806,"context_line":"        try:"},{"line_number":1807,"context_line":"            self.clear_access(old_active_replica, share_server)"},{"line_number":1808,"context_line":"        except Exception:"},{"line_number":1809,"context_line":"            LOG.warning(_LW(\"Failed to clear access rules from \""},{"line_number":1810,"context_line":"                            \"old active replica %s.\"),"},{"line_number":1811,"context_line":"                        old_active_replica[\u0027id\u0027])"},{"line_number":1812,"context_line":"            cleared_old_active_access \u003d False"},{"line_number":1813,"context_line":""},{"line_number":1814,"context_line":"        new_active_update \u003d {"},{"line_number":1815,"context_line":"            \u0027id\u0027: replica[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_51fef038","line":1812,"range":{"start_line":1809,"start_character":0,"end_line":1812,"end_character":45},"updated":"2016-08-27 00:59:14.000000000","message":"same","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":1806,"context_line":"        try:"},{"line_number":1807,"context_line":"            self.clear_access(old_active_replica, share_server)"},{"line_number":1808,"context_line":"        except Exception:"},{"line_number":1809,"context_line":"            LOG.warning(_LW(\"Failed to clear access rules from \""},{"line_number":1810,"context_line":"                            \"old active replica %s.\"),"},{"line_number":1811,"context_line":"                        old_active_replica[\u0027id\u0027])"},{"line_number":1812,"context_line":"            cleared_old_active_access \u003d False"},{"line_number":1813,"context_line":""},{"line_number":1814,"context_line":"        new_active_update \u003d {"},{"line_number":1815,"context_line":"            \u0027id\u0027: replica[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_a2dd2816","line":1812,"range":{"start_line":1809,"start_character":0,"end_line":1812,"end_character":45},"in_reply_to":"fa7ab95a_51fef038","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"                       replica, share_server\u003dNone):"},{"line_number":1837,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1838,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1839,"context_line":"        if replica_pair_id is None:"},{"line_number":1840,"context_line":"            msg \u003d _LW(\"No replication pair ID recorded for share %(share)s. \""},{"line_number":1841,"context_line":"                      \"Continue to delete replica %(replica)s.\")"},{"line_number":1842,"context_line":"            LOG.warning(msg, {\u0027share\u0027: replica[\u0027share_id\u0027],"},{"line_number":1843,"context_line":"                              \u0027replica\u0027: replica[\u0027id\u0027]})"},{"line_number":1844,"context_line":"        else:"},{"line_number":1845,"context_line":"            self.replica_mgr.delete_replication_pair(replica_pair_id)"},{"line_number":1846,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_b1957ce5","line":1843,"range":{"start_line":1839,"start_character":0,"end_line":1843,"end_character":56},"updated":"2016-08-27 00:59:14.000000000","message":"same","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"                       replica, share_server\u003dNone):"},{"line_number":1837,"context_line":"        replica_pair_id \u003d self.private_storage.get(replica[\u0027share_id\u0027],"},{"line_number":1838,"context_line":"                                                   \u0027replica_pair_id\u0027)"},{"line_number":1839,"context_line":"        if replica_pair_id is None:"},{"line_number":1840,"context_line":"            msg \u003d _LW(\"No replication pair ID recorded for share %(share)s. \""},{"line_number":1841,"context_line":"                      \"Continue to delete replica %(replica)s.\")"},{"line_number":1842,"context_line":"            LOG.warning(msg, {\u0027share\u0027: replica[\u0027share_id\u0027],"},{"line_number":1843,"context_line":"                              \u0027replica\u0027: replica[\u0027id\u0027]})"},{"line_number":1844,"context_line":"        else:"},{"line_number":1845,"context_line":"            self.replica_mgr.delete_replication_pair(replica_pair_id)"},{"line_number":1846,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_e2e730e2","line":1843,"range":{"start_line":1839,"start_character":0,"end_line":1843,"end_character":56},"in_reply_to":"fa7ab95a_b1957ce5","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"}],"manila/share/drivers/huawei/v3/helper.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        return False, None"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"    def get_array_info(self):"},{"line_number":1337,"context_line":"        url \u003d \"/system/\""},{"line_number":1338,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1339,"context_line":"        self._assert_rest_result(result, _(\u0027Get array info error.\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_9ac1cb31","line":1336,"range":{"start_line":1336,"start_character":8,"end_line":1336,"end_character":22},"updated":"2016-07-18 09:37:48.000000000","message":"This method could be private.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"505fc368cad883f1899969241d876f90addca36b","unresolved":false,"context_lines":[{"line_number":1337,"context_line":"        url \u003d \"/system/\""},{"line_number":1338,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1339,"context_line":"        self._assert_rest_result(result, _(\u0027Get array info error.\u0027))"},{"line_number":1340,"context_line":"        return result.get(\u0027data\u0027, None)"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def find_array_version(self):"},{"line_number":1343,"context_line":"        info \u003d self.get_array_info()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_d1d2c2d1","line":1340,"range":{"start_line":1340,"start_character":7,"end_line":1340,"end_character":8},"updated":"2016-06-23 06:31:43.000000000","message":"Add the \u0027data\u0027 check: \"_assert_data_in_result\".","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"505fc368cad883f1899969241d876f90addca36b","unresolved":false,"context_lines":[{"line_number":1337,"context_line":"        url \u003d \"/system/\""},{"line_number":1338,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1339,"context_line":"        self._assert_rest_result(result, _(\u0027Get array info error.\u0027))"},{"line_number":1340,"context_line":"        return result.get(\u0027data\u0027, None)"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":"    def find_array_version(self):"},{"line_number":1343,"context_line":"        info \u003d self.get_array_info()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_a8b86fe6","line":1340,"range":{"start_line":1340,"start_character":15,"end_line":1340,"end_character":39},"updated":"2016-06-23 06:31:43.000000000","message":"None is the default for dict\u0027 get method. s/result.get(\u0027data\u0027, None)/result.get(\u0027data\u0027)","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1350,"context_line":"    def get_all_remote_devices(self):"},{"line_number":1351,"context_line":"        url \u003d \"/remote_device\""},{"line_number":1352,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1353,"context_line":"        self._assert_rest_result(result, _(\u0027Get remote devices error.\u0027))"},{"line_number":1354,"context_line":"        return result.get(\u0027data\u0027, [])"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"    def get_remote_device_by_wwn(self, wwn):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_da3503f8","line":1353,"range":{"start_line":1353,"start_character":47,"end_line":1353,"end_character":48},"updated":"2016-07-18 09:37:48.000000000","message":"all","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"        for device in devices:"},{"line_number":1359,"context_line":"            if device.get(\u0027WWN\u0027) \u003d\u003d wwn:"},{"line_number":1360,"context_line":"                return device"},{"line_number":1361,"context_line":"        return {}"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"    def create_replica_pair(self, pair_params):"},{"line_number":1364,"context_line":"        url \u003d \"/REPLICATIONPAIR\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_1daaf5d4","line":1361,"range":{"start_line":1361,"start_character":15,"end_line":1361,"end_character":17},"updated":"2016-07-18 09:37:48.000000000","message":"raise exception instead.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"                return device"},{"line_number":1361,"context_line":"        return {}"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"    def create_replica_pair(self, pair_params):"},{"line_number":1364,"context_line":"        url \u003d \"/REPLICATIONPAIR\""},{"line_number":1365,"context_line":"        data \u003d jsonutils.dumps(pair_params)"},{"line_number":1366,"context_line":"        result \u003d self.call(url, data, \"POST\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_1df835e5","line":1363,"range":{"start_line":1363,"start_character":8,"end_line":1363,"end_character":27},"updated":"2016-07-18 09:37:48.000000000","message":"create_replication_pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"        url \u003d \"/REPLICATIONPAIR\""},{"line_number":1365,"context_line":"        data \u003d jsonutils.dumps(pair_params)"},{"line_number":1366,"context_line":"        result \u003d self.call(url, data, \"POST\")"},{"line_number":1367,"context_line":"        msg \u003d _(\u0027Create replication error.\u0027)"},{"line_number":1368,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1369,"context_line":"        self._assert_data_in_result(result, msg)"},{"line_number":1370,"context_line":"        return result[\u0027data\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_fd9a81c4","line":1367,"range":{"start_line":1367,"start_character":35,"end_line":1367,"end_character":36},"updated":"2016-07-18 09:37:48.000000000","message":"Include some key pair infos.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1369,"context_line":"        self._assert_data_in_result(result, msg)"},{"line_number":1370,"context_line":"        return result[\u0027data\u0027]"},{"line_number":1371,"context_line":""},{"line_number":1372,"context_line":"    def split_pair(self, pair_id):"},{"line_number":1373,"context_line":"        url \u003d \u0027/REPLICATIONPAIR/split\u0027"},{"line_number":1374,"context_line":"        data \u003d {\"ID\": pair_id,"},{"line_number":1375,"context_line":"                \"TYPE\": \"263\"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_dd621dad","line":1372,"range":{"start_line":1372,"start_character":8,"end_line":1372,"end_character":18},"updated":"2016-07-18 09:37:48.000000000","message":"split_replication_pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1376,"context_line":"        data \u003d jsonutils.dumps(data)"},{"line_number":1377,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1378,"context_line":""},{"line_number":1379,"context_line":"        msg \u003d _(\u0027Split pair error.\u0027)"},{"line_number":1380,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def switch_pair(self, pair_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_1db5d5cc","line":1379,"range":{"start_line":1379,"start_character":22,"end_line":1379,"end_character":23},"updated":"2016-07-18 09:37:48.000000000","message":"Include the pair id.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1379,"context_line":"        msg \u003d _(\u0027Split pair error.\u0027)"},{"line_number":1380,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def switch_pair(self, pair_id):"},{"line_number":1383,"context_line":"        url \u003d \u0027/REPLICATIONPAIR/switch\u0027"},{"line_number":1384,"context_line":"        data \u003d {\"ID\": pair_id,"},{"line_number":1385,"context_line":"                \"TYPE\": \"263\"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_bdf2c998","line":1382,"range":{"start_line":1382,"start_character":8,"end_line":1382,"end_character":19},"updated":"2016-07-18 09:37:48.000000000","message":"switch_replication_pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1386,"context_line":"        data \u003d jsonutils.dumps(data)"},{"line_number":1387,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1388,"context_line":""},{"line_number":1389,"context_line":"        msg \u003d _(\u0027Switch over pair error.\u0027)"},{"line_number":1390,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"    def delete_pair(self, pair_id, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_1d1155ad","line":1389,"range":{"start_line":1389,"start_character":28,"end_line":1389,"end_character":29},"updated":"2016-07-18 09:37:48.000000000","message":"Include the pair id.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1389,"context_line":"        msg \u003d _(\u0027Switch over pair error.\u0027)"},{"line_number":1390,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"    def delete_pair(self, pair_id, force\u003dFalse):"},{"line_number":1393,"context_line":"        url \u003d \"/REPLICATIONPAIR/\" + pair_id"},{"line_number":1394,"context_line":"        data \u003d None"},{"line_number":1395,"context_line":"        if force:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_bde5a9a9","line":1392,"range":{"start_line":1392,"start_character":8,"end_line":1392,"end_character":19},"updated":"2016-07-18 09:37:48.000000000","message":"delete_replication_pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1393,"context_line":"        url \u003d \"/REPLICATIONPAIR/\" + pair_id"},{"line_number":1394,"context_line":"        data \u003d None"},{"line_number":1395,"context_line":"        if force:"},{"line_number":1396,"context_line":"            data \u003d {\"ISLOCALDELETE\": force}"},{"line_number":1397,"context_line":"            data \u003d jsonutils.dumps(data)"},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"        result \u003d self.call(url, data, \"DELETE\")"},{"line_number":1400,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_80131a5c","line":1397,"range":{"start_line":1396,"start_character":12,"end_line":1397,"end_character":40},"updated":"2016-07-18 09:37:48.000000000","message":"could be merged to one line","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"505fc368cad883f1899969241d876f90addca36b","unresolved":false,"context_lines":[{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"        result \u003d self.call(url, data, \"DELETE\")"},{"line_number":1400,"context_line":""},{"line_number":1401,"context_line":"        msg \u003d _(\u0027delete_replication error.\u0027)"},{"line_number":1402,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"    def sync_pair(self, pair_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_9cea110e","line":1401,"range":{"start_line":1401,"start_character":17,"end_line":1401,"end_character":36},"updated":"2016-06-23 06:31:43.000000000","message":"_(\u0027Delete a replication pair %s error\u0027), % pair_id","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1401,"context_line":"        msg \u003d _(\u0027delete_replication error.\u0027)"},{"line_number":1402,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"    def sync_pair(self, pair_id):"},{"line_number":1405,"context_line":"        url \u003d \"/REPLICATIONPAIR/sync\""},{"line_number":1406,"context_line":"        data \u003d {\"ID\": pair_id,"},{"line_number":1407,"context_line":"                \"TYPE\": \"263\"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_a01a9e6c","line":1404,"range":{"start_line":1404,"start_character":8,"end_line":1404,"end_character":17},"updated":"2016-07-18 09:37:48.000000000","message":"sync_replication_pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1408,"context_line":"        data \u003d jsonutils.dumps(data)"},{"line_number":1409,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1410,"context_line":""},{"line_number":1411,"context_line":"        msg \u003d _(\u0027Sync pair error.\u0027)"},{"line_number":1412,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1413,"context_line":""},{"line_number":1414,"context_line":"    def cancel_pair_secodary_write_lock(self, pair_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_20250eab","line":1411,"updated":"2016-07-18 09:37:48.000000000","message":"Include the pair id.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1411,"context_line":"        msg \u003d _(\u0027Sync pair error.\u0027)"},{"line_number":1412,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1413,"context_line":""},{"line_number":1414,"context_line":"    def cancel_pair_secodary_write_lock(self, pair_id):"},{"line_number":1415,"context_line":"        url \u003d \"/REPLICATIONPAIR/CANCEL_SECODARY_WRITE_LOCK\""},{"line_number":1416,"context_line":"        data \u003d {\"ID\": pair_id,"},{"line_number":1417,"context_line":"                \"TYPE\": \"263\"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_c0b99230","line":1414,"range":{"start_line":1414,"start_character":20,"end_line":1414,"end_character":28},"updated":"2016-07-18 09:37:48.000000000","message":"secondary","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2d0a5e7de6b22d26cab30d2b04e0413a43b34bdc","unresolved":false,"context_lines":[{"line_number":1417,"context_line":"                \"TYPE\": \"263\"}"},{"line_number":1418,"context_line":"        data \u003d jsonutils.dumps(data)"},{"line_number":1419,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1420,"context_line":"        msg \u003d _(\u0027Cancel pair secodary write lock error.\u0027)"},{"line_number":1421,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    def set_pair_secodary_write_lock(self, pair_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_2b85da06","line":1420,"range":{"start_line":1420,"start_character":29,"end_line":1420,"end_character":37},"updated":"2016-07-14 08:28:03.000000000","message":"secondary","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"        msg \u003d _(\u0027Cancel pair secodary write lock error.\u0027)"},{"line_number":1421,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    def set_pair_secodary_write_lock(self, pair_id):"},{"line_number":1424,"context_line":"        url \u003d \"/REPLICATIONPAIR/SET_SECODARY_WRITE_LOCK\""},{"line_number":1425,"context_line":"        data \u003d {\"ID\": pair_id,"},{"line_number":1426,"context_line":"                \"TYPE\": \"263\"}"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_40a5a202","line":1423,"range":{"start_line":1423,"start_character":17,"end_line":1423,"end_character":25},"updated":"2016-07-18 09:37:48.000000000","message":"secondary","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"        share_name \u003d share_name.replace(\"-\", \"_\")"},{"line_number":1434,"context_line":"        url \u003d \"/REPLICATIONPAIR?filter\u003dLOCALRESNAME:\" + share_name"},{"line_number":1435,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1436,"context_line":"        msg \u003d _(\u0027Get pair failed.\u0027)"},{"line_number":1437,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1438,"context_line":"        data \u003d result.get(\u0027data\u0027, [])"},{"line_number":1439,"context_line":"        if len(data) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_601d460f","line":1436,"updated":"2016-07-18 09:37:48.000000000","message":"Include share name.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":1434,"context_line":"        url \u003d \"/REPLICATIONPAIR?filter\u003dLOCALRESNAME:\" + share_name"},{"line_number":1435,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1436,"context_line":"        msg \u003d _(\u0027Get pair failed.\u0027)"},{"line_number":1437,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1438,"context_line":"        data \u003d result.get(\u0027data\u0027, [])"},{"line_number":1439,"context_line":"        if len(data) \u003e 0:"},{"line_number":1440,"context_line":"            return data[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_20b98eea","line":1437,"updated":"2016-07-18 09:37:48.000000000","message":"Add _assert_data_in_result.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"        if (result[\u0027error\u0027][\u0027code\u0027] \u003d\u003d"},{"line_number":1417,"context_line":"                constants.ERROR_REPLICATION_PAIR_NOT_EXIST):"},{"line_number":1418,"context_line":"            LOG.warning(_LW(\u0027Replication pair %s not exist while deleting.\u0027),"},{"line_number":1419,"context_line":"                        pair_id)"},{"line_number":1420,"context_line":"            return"},{"line_number":1421,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_c0cdb65e","line":1418,"range":{"start_line":1418,"start_character":49,"end_line":1418,"end_character":73},"updated":"2016-08-10 03:28:16.000000000","message":"was not found.","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"        if (result[\u0027error\u0027][\u0027code\u0027] \u003d\u003d"},{"line_number":1417,"context_line":"                constants.ERROR_REPLICATION_PAIR_NOT_EXIST):"},{"line_number":1418,"context_line":"            LOG.warning(_LW(\u0027Replication pair %s not exist while deleting.\u0027),"},{"line_number":1419,"context_line":"                        pair_id)"},{"line_number":1420,"context_line":"            return"},{"line_number":1421,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_f7ab5073","line":1418,"range":{"start_line":1418,"start_character":49,"end_line":1418,"end_character":73},"in_reply_to":"9ad45d7e_c0cdb65e","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":1399,"context_line":"    def delete_replication_pair(self, pair_id, force\u003dFalse):"},{"line_number":1400,"context_line":"        url \u003d \"/REPLICATIONPAIR/\" + pair_id"},{"line_number":1401,"context_line":"        data \u003d None"},{"line_number":1402,"context_line":"        if force:"},{"line_number":1403,"context_line":"            data \u003d jsonutils.dumps({\"ISLOCALDELETE\": 1})"},{"line_number":1404,"context_line":"        result \u003d self.call(url, data, \"DELETE\")"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"        if (result[\u0027error\u0027][\u0027code\u0027] \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_b1bc9c6d","line":1403,"range":{"start_line":1402,"start_character":0,"end_line":1403,"end_character":56},"updated":"2016-08-27 00:59:14.000000000","message":"not covered by unit tests:\n\nhttp://logs.openstack.org/86/331586/17/check/manila-coverage-db-ubuntu-xenial/4ae3f35/cover/manila_share_drivers_huawei_v3_helper_py.html#n1402","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":1399,"context_line":"    def delete_replication_pair(self, pair_id, force\u003dFalse):"},{"line_number":1400,"context_line":"        url \u003d \"/REPLICATIONPAIR/\" + pair_id"},{"line_number":1401,"context_line":"        data \u003d None"},{"line_number":1402,"context_line":"        if force:"},{"line_number":1403,"context_line":"            data \u003d jsonutils.dumps({\"ISLOCALDELETE\": 1})"},{"line_number":1404,"context_line":"        result \u003d self.call(url, data, \"DELETE\")"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"        if (result[\u0027error\u0027][\u0027code\u0027] \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_62dc0013","line":1403,"range":{"start_line":1402,"start_character":0,"end_line":1403,"end_character":56},"in_reply_to":"fa7ab95a_b1bc9c6d","updated":"2016-08-27 03:59:31.000000000","message":"actually not used right now, so removed.","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"}],"manila/share/drivers/huawei/v3/replication.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2d0a5e7de6b22d26cab30d2b04e0413a43b34bdc","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                remote_device_wwn)\r"},{"line_number":45,"context_line":"            pair_params \u003d {\r"},{"line_number":46,"context_line":"                \"LOCALRESID\": local_id,\r"},{"line_number":47,"context_line":"                \"LOCALRESTYPE\": \u002740\u0027,\r"},{"line_number":48,"context_line":"                \"REMOTEDEVICEID\": remote_device_info.get(\u0027ID\u0027),\r"},{"line_number":49,"context_line":"                \"REMOTEDEVICENAME\": remote_device_info.get(\u0027NAME\u0027),\r"},{"line_number":50,"context_line":"                \"REMOTERESID\": remote_fs_id,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_ab50aad5","line":47,"range":{"start_line":47,"start_character":31,"end_line":47,"end_character":36},"updated":"2016-07-14 08:28:03.000000000","message":"Suggest using meaningful constant instead.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2d0a5e7de6b22d26cab30d2b04e0413a43b34bdc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \"REMOTEDEVICENAME\": remote_device_info.get(\u0027NAME\u0027),\r"},{"line_number":50,"context_line":"                \"REMOTERESID\": remote_fs_id,\r"},{"line_number":51,"context_line":"                \"REPLICATIONMODEL\": constants.REPLICA_ASYNC_MODEL,\r"},{"line_number":52,"context_line":"                \"RECOVERYPOLICY\": \u00272\u0027,\r"},{"line_number":53,"context_line":"                \"SYNCHRONIZETYPE\": \u00271\u0027,\r"},{"line_number":54,"context_line":"                \"SPEED\": constants.REPLICA_SPEED,\r"},{"line_number":55,"context_line":"            }\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_eb0752c7","line":52,"range":{"start_line":52,"start_character":34,"end_line":52,"end_character":37},"updated":"2016-07-14 08:28:03.000000000","message":"ditto","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"        return constants.REPLICA_PAIR_SUCCESS\r"},{"line_number":64,"context_line":"\r"},{"line_number":65,"context_line":"    def get_pair_info(self, replica_info):\r"},{"line_number":66,"context_line":"        replica_name \u003d replica_info[\u0027name\u0027]\r"},{"line_number":67,"context_line":"        try:\r"},{"line_number":68,"context_line":"            pair_info \u003d self.helper.get_replica_pair_by_share_name(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_6bafe7e3","line":65,"range":{"start_line":65,"start_character":28,"end_line":65,"end_character":40},"updated":"2016-07-19 03:58:39.000000000","message":"Could only pass replica_name parameter.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"        return constants.REPLICA_PAIR_SUCCESS\r"},{"line_number":64,"context_line":"\r"},{"line_number":65,"context_line":"    def get_pair_info(self, replica_info):\r"},{"line_number":66,"context_line":"        replica_name \u003d replica_info[\u0027name\u0027]\r"},{"line_number":67,"context_line":"        try:\r"},{"line_number":68,"context_line":"            pair_info \u003d self.helper.get_replica_pair_by_share_name(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_b7202af9","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":21},"updated":"2016-07-18 09:37:48.000000000","message":"This method could be private.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"\r"},{"line_number":82,"context_line":"        return pair_info\r"},{"line_number":83,"context_line":"\r"},{"line_number":84,"context_line":"    def get_replica_data_status(self, replica_info):\r"},{"line_number":85,"context_line":"        pair_info \u003d self.get_pair_info(replica_info)\r"},{"line_number":86,"context_line":"        if not pair_info:\r"},{"line_number":87,"context_line":"            return common_constants.STATUS_ERROR\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_d7080cdc","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":31},"updated":"2016-07-19 03:58:39.000000000","message":"get_replica_state","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"11060e8d9b7b5af11f43ef17bb213cbbeedb926f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        pair_info \u003d self.get_pair_info(replica_info)\r"},{"line_number":86,"context_line":"        if not pair_info:\r"},{"line_number":87,"context_line":"            return common_constants.STATUS_ERROR\r"},{"line_number":88,"context_line":"        else:\r"},{"line_number":89,"context_line":"            if (pair_info[\u0027HEALTHSTATUS\u0027] !\u003d\r"},{"line_number":90,"context_line":"                    constants.REPLICA_HEALTH_STATUS_NORMAL):\r"},{"line_number":91,"context_line":"                return common_constants.STATUS_ERROR\r"},{"line_number":92,"context_line":"\r"},{"line_number":93,"context_line":"        if strutils.bool_from_string(pair_info[\u0027ISPRIMARY\u0027]):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_c4c7e243","line":90,"range":{"start_line":88,"start_character":8,"end_line":90,"end_character":59},"updated":"2016-06-22 06:53:49.000000000","message":"You can combine these two statements into one elif","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"    def wait_replica_ready(self, replica, interval\u003dNone, timeout\u003dNone):\r"},{"line_number":120,"context_line":"        LOG.debug(\u0027Wait synchronize complete.\u0027)\r"},{"line_number":121,"context_line":"        running_status_normal \u003d (constants.REPLICA_RUNNING_STATUS_NORMAL,\r"},{"line_number":122,"context_line":"                                 constants.REPLICA_RUNNING_STATUS_SYNCED)\r"},{"line_number":123,"context_line":"        running_status_sync \u003d (constants.REPLICA_RUNNING_STATUS_SYNC,\r"},{"line_number":124,"context_line":"                               constants.REPLICA_RUNNING_STATUS_INITIAL_SYNC)\r"},{"line_number":125,"context_line":"        health_status_normal \u003d constants.REPLICA_HEALTH_STATUS_NORMAL\r"},{"line_number":126,"context_line":"\r"},{"line_number":127,"context_line":"        def _replica_ready():\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_17e104ff","line":124,"range":{"start_line":121,"start_character":0,"end_line":124,"end_character":77},"updated":"2016-07-19 03:58:39.000000000","message":"These tuples could be defined in constants file.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        health_status_normal \u003d constants.REPLICA_HEALTH_STATUS_NORMAL\r"},{"line_number":126,"context_line":"\r"},{"line_number":127,"context_line":"        def _replica_ready():\r"},{"line_number":128,"context_line":"            pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":129,"context_line":"            if ((pair_info[\u0027RUNNINGSTATUS\u0027] in running_status_normal)\r"},{"line_number":130,"context_line":"                    and (pair_info[\u0027HEALTHSTATUS\u0027] in health_status_normal)):\r"},{"line_number":131,"context_line":"                return True\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_f726f0b8","line":128,"range":{"start_line":128,"start_character":12,"end_line":128,"end_character":21},"updated":"2016-07-19 03:58:39.000000000","message":"pair_info could be None, check it first before using.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"11060e8d9b7b5af11f43ef17bb213cbbeedb926f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"\r"},{"line_number":127,"context_line":"        def _replica_ready():\r"},{"line_number":128,"context_line":"            pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":129,"context_line":"            if ((pair_info[\u0027RUNNINGSTATUS\u0027] in running_status_normal)\r"},{"line_number":130,"context_line":"                    and (pair_info[\u0027HEALTHSTATUS\u0027] in health_status_normal)):\r"},{"line_number":131,"context_line":"                return True\r"},{"line_number":132,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_6479cefc","line":129,"range":{"start_line":129,"start_character":16,"end_line":129,"end_character":69},"updated":"2016-06-22 06:53:49.000000000","message":"Unnecessary parenthesis (also in line below)","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        def _replica_ready():\r"},{"line_number":128,"context_line":"            pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":129,"context_line":"            if ((pair_info[\u0027RUNNINGSTATUS\u0027] in running_status_normal)\r"},{"line_number":130,"context_line":"                    and (pair_info[\u0027HEALTHSTATUS\u0027] in health_status_normal)):\r"},{"line_number":131,"context_line":"                return True\r"},{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"            if not (pair_info[\u0027RUNNINGSTATUS\u0027] in running_status_sync):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_37424811","line":130,"range":{"start_line":130,"start_character":54,"end_line":130,"end_character":74},"updated":"2016-07-19 03:58:39.000000000","message":"health_status_normal is a string, not string list.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"11060e8d9b7b5af11f43ef17bb213cbbeedb926f","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                    and (pair_info[\u0027HEALTHSTATUS\u0027] in health_status_normal)):\r"},{"line_number":131,"context_line":"                return True\r"},{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"            if not (pair_info[\u0027RUNNINGSTATUS\u0027] in running_status_sync):\r"},{"line_number":134,"context_line":"                msg \u003d (_(\u0027Wait synchronize failed. Running status: %s.\u0027) %\r"},{"line_number":135,"context_line":"                       pair_info[\u0027RUNNINGSTATUS\u0027])\r"},{"line_number":136,"context_line":"                LOG.error(msg)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_04e3aaa4","line":133,"range":{"start_line":133,"start_character":12,"end_line":133,"end_character":70},"updated":"2016-06-22 06:53:49.000000000","message":"Unnecessary parenthesis, and you can write \u0027not in\u0027 instead of \u0027not (x in y)\u0027","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            if not (pair_info[\u0027RUNNINGSTATUS\u0027] in running_status_sync):\r"},{"line_number":134,"context_line":"                msg \u003d (_(\u0027Wait synchronize failed. Running status: %s.\u0027) %\r"},{"line_number":135,"context_line":"                       pair_info[\u0027RUNNINGSTATUS\u0027])\r"},{"line_number":136,"context_line":"                LOG.error(msg)\r"},{"line_number":137,"context_line":"                raise exception.ManilaException(message\u003dmsg)\r"},{"line_number":138,"context_line":"\r"},{"line_number":139,"context_line":"            return False\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_3721a8a0","line":136,"range":{"start_line":136,"start_character":26,"end_line":136,"end_character":29},"updated":"2016-07-19 03:58:39.000000000","message":"Error message should be wrapped by _LE","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self._unprotect_second(pair_id)\r"},{"line_number":167,"context_line":"        self._do_switch(pair_id)\r"},{"line_number":168,"context_line":"        self._protect_second(pair_id)\r"},{"line_number":169,"context_line":"        self._sync_data(pair_id)\r"},{"line_number":170,"context_line":"\r"},{"line_number":171,"context_line":"    def _do_delete(self, pair_id):\r"},{"line_number":172,"context_line":"        try:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_d41dcf67","line":169,"updated":"2016-07-19 03:58:39.000000000","message":"Check the result of each step.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            return False\r"},{"line_number":180,"context_line":"        return True\r"},{"line_number":181,"context_line":"\r"},{"line_number":182,"context_line":"    def _protect_second(self, pair_id):\r"},{"line_number":183,"context_line":"        try:\r"},{"line_number":184,"context_line":"            self.helper.set_pair_secodary_write_lock(pair_id)\r"},{"line_number":185,"context_line":"        except Exception as err:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_f4638e18","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":23},"updated":"2016-07-19 03:58:39.000000000","message":"_protect_secondary","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            return False\r"},{"line_number":191,"context_line":"        return True\r"},{"line_number":192,"context_line":"\r"},{"line_number":193,"context_line":"    def _unprotect_second(self, pair_id):\r"},{"line_number":194,"context_line":"        try:\r"},{"line_number":195,"context_line":"            self.helper.cancel_pair_secodary_write_lock(pair_id)\r"},{"line_number":196,"context_line":"        except Exception as err:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_54737ae7","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":25},"updated":"2016-07-19 03:58:39.000000000","message":"_unprotect_secondary","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        msg \u003d _(\"Active replica not found.\")\r"},{"line_number":210,"context_line":"        raise exception.ReplicationException(reason\u003dmsg)\r"},{"line_number":211,"context_line":"\r"},{"line_number":212,"context_line":"    def update_pair_status(self, replica_list, replica):\r"},{"line_number":213,"context_line":"        \"\"\"Update pair status\r"},{"line_number":214,"context_line":"\r"},{"line_number":215,"context_line":"        Check the replication pair role coincident with manila,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_74d2fe01","line":212,"range":{"start_line":212,"start_character":8,"end_line":212,"end_character":26},"updated":"2016-07-19 03:58:39.000000000","message":"update_pair_state","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        This may happen when promote after the primary stoped.\r"},{"line_number":218,"context_line":"        When the primary has disaster, the promote can not switch roles,\r"},{"line_number":219,"context_line":"        and just set secondary writeable.\r"},{"line_number":220,"context_line":"        After the primary recovered, the roles will not coincident with manila.\r"},{"line_number":221,"context_line":"        \"\"\"\r"},{"line_number":222,"context_line":"\r"},{"line_number":223,"context_line":"        active_replica \u003d self.get_active_replica(replica_list)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_af69d88d","line":220,"range":{"start_line":220,"start_character":55,"end_line":220,"end_character":56},"updated":"2016-06-22 02:49:33.000000000","message":"nit: missing \"be\": \n\n\u0027After the primary recovered, the roles will not be coincident with manila.\u0027","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"935f55c1656ce57fd3b6c1878d1144892c4a59cf","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        safe_to_sync_data \u003d True\r"},{"line_number":229,"context_line":"        if (strutils.bool_from_string(pair_info[\u0027ISPRIMARY\u0027])\r"},{"line_number":230,"context_line":"                and (replica[\u0027id\u0027] !\u003d active_replica[\u0027id\u0027])):\r"},{"line_number":231,"context_line":"            # Pari role is not coincident with manila\r"},{"line_number":232,"context_line":"            # need do a role switch\r"},{"line_number":233,"context_line":"            try:\r"},{"line_number":234,"context_line":"                self.switch_replica_roles(pair_info[\u0027ID\u0027])\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_ef0920df","line":231,"range":{"start_line":231,"start_character":14,"end_line":231,"end_character":18},"updated":"2016-06-22 02:49:33.000000000","message":"Pair","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":253,"context_line":"\r"},{"line_number":254,"context_line":"    def failover(self, replica):\r"},{"line_number":255,"context_line":"        pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":256,"context_line":"        if strutils.bool_from_string(pair_info[\u0027ISPRIMARY\u0027]):\r"},{"line_number":257,"context_line":"            LOG.warning(_LE(\u0027The roles are already right, no need to switch.\u0027))\r"},{"line_number":258,"context_line":"            return\r"},{"line_number":259,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_2b9faf04","line":256,"range":{"start_line":256,"start_character":37,"end_line":256,"end_character":46},"updated":"2016-07-19 03:58:39.000000000","message":"pair_info might be None, have a check before accessing it.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    def failover(self, replica):\r"},{"line_number":255,"context_line":"        pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":256,"context_line":"        if strutils.bool_from_string(pair_info[\u0027ISPRIMARY\u0027]):\r"},{"line_number":257,"context_line":"            LOG.warning(_LE(\u0027The roles are already right, no need to switch.\u0027))\r"},{"line_number":258,"context_line":"            return\r"},{"line_number":259,"context_line":"\r"},{"line_number":260,"context_line":"        try:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_abaa7f17","line":257,"range":{"start_line":257,"start_character":33,"end_line":257,"end_character":56},"updated":"2016-07-19 03:58:39.000000000","message":"replica is already active","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"abc1c9ac2f44ecc98bbae6ba19155086ef0ac250","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    def delete_pair(self, replica):\r"},{"line_number":271,"context_line":"        pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":272,"context_line":"        if not pair_info:\r"},{"line_number":273,"context_line":"            return\r"},{"line_number":274,"context_line":"        self._do_split(pair_info[\u0027ID\u0027])\r"},{"line_number":275,"context_line":"        self._do_delete(pair_info[\u0027ID\u0027])\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_5a93d3a3","line":273,"updated":"2016-07-18 09:37:48.000000000","message":"Raise an exception to tell caller that something wrong, not just return.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"79e2af4706a1857097f2f62ad95ed8255338f70c","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        pair_info \u003d self.get_pair_info(replica)\r"},{"line_number":272,"context_line":"        if not pair_info:\r"},{"line_number":273,"context_line":"            return\r"},{"line_number":274,"context_line":"        self._do_split(pair_info[\u0027ID\u0027])\r"},{"line_number":275,"context_line":"        self._do_delete(pair_info[\u0027ID\u0027])\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_20a4ee55","line":275,"range":{"start_line":274,"start_character":8,"end_line":275,"end_character":40},"updated":"2016-07-19 03:58:39.000000000","message":"Should check the result of these two methods, in case they fail.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            pair_info \u003d self._get_replication_pair_info(replica_pair_id)"},{"line_number":93,"context_line":"        except Exception:"},{"line_number":94,"context_line":"            return common_constants.STATUS_ERROR"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        return self._check_replica_state(pair_info)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_a00d2292","line":94,"range":{"start_line":94,"start_character":36,"end_line":94,"end_character":48},"updated":"2016-08-10 03:28:16.000000000","message":"Should this be OUT_OF_SYNC? I mean to ask, if you can\u0027t communicate to the backend to get the status, setting it to out_of_sync seems fine.. if it\u0027s a fatal error, we can set it to ERROR..","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            pair_info \u003d self._get_replication_pair_info(replica_pair_id)"},{"line_number":93,"context_line":"        except Exception:"},{"line_number":94,"context_line":"            return common_constants.STATUS_ERROR"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        return self._check_replica_state(pair_info)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_77ae4082","line":94,"range":{"start_line":94,"start_character":36,"end_line":94,"end_character":48},"in_reply_to":"9ad45d7e_a00d2292","updated":"2016-08-10 09:47:06.000000000","message":"Done","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d11ae89d2e6ff706fc727d427ad3082d70f5bd4c","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def create(self, local_share_info, remote_device_wwn, remote_fs_id):"},{"line_number":35,"context_line":"        try:"},{"line_number":36,"context_line":"            local_share_name \u003d local_share_info[\u0027name\u0027]"},{"line_number":37,"context_line":"            local_fs_id \u003d self.helper.get_fsid_by_name(local_share_name)"},{"line_number":38,"context_line":"            if not local_fs_id:"},{"line_number":39,"context_line":"                msg \u003d _LE(\"Local fs was not found by name %s.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_cfa2e898","line":36,"updated":"2016-08-10 13:43:25.000000000","message":"Move this line before the \"try:\" and change to the following because you referenced it in the except block.\n\nlocal_share_name \u003d local_share_info.get(\u0027name\u0027)","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7075a7dbece3d85b5ecb952de41af32aad94a9d6","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def create(self, local_share_info, remote_device_wwn, remote_fs_id):"},{"line_number":35,"context_line":"        try:"},{"line_number":36,"context_line":"            local_share_name \u003d local_share_info[\u0027name\u0027]"},{"line_number":37,"context_line":"            local_fs_id \u003d self.helper.get_fsid_by_name(local_share_name)"},{"line_number":38,"context_line":"            if not local_fs_id:"},{"line_number":39,"context_line":"                msg \u003d _LE(\"Local fs was not found by name %s.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_029789ec","line":36,"in_reply_to":"9ad45d7e_cfa2e898","updated":"2016-08-11 09:16:03.000000000","message":"Done","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d11ae89d2e6ff706fc727d427ad3082d70f5bd4c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                            local_share_info,"},{"line_number":220,"context_line":"                            remote_device_wwn,"},{"line_number":221,"context_line":"                            remote_fs_id):"},{"line_number":222,"context_line":"        \"\"\"Create replication pair for RPC call"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        This is for remote call, because replica pair can only be created"},{"line_number":225,"context_line":"        by master node."}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_2f762406","line":222,"updated":"2016-08-10 13:43:25.000000000","message":"period","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7075a7dbece3d85b5ecb952de41af32aad94a9d6","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                            local_share_info,"},{"line_number":220,"context_line":"                            remote_device_wwn,"},{"line_number":221,"context_line":"                            remote_fs_id):"},{"line_number":222,"context_line":"        \"\"\"Create replication pair for RPC call"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        This is for remote call, because replica pair can only be created"},{"line_number":225,"context_line":"        by master node."}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad45d7e_e29b5516","line":222,"in_reply_to":"9ad45d7e_2f762406","updated":"2016-08-11 09:16:03.000000000","message":"Done","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            pair_info \u003d self._get_replication_pair_info(replica_pair_id)"},{"line_number":100,"context_line":"        except Exception:"},{"line_number":101,"context_line":"            # if cannot communicate to backend, return OUT_OF_SYNC"},{"line_number":102,"context_line":"            return common_constants.REPLICA_STATE_OUT_OF_SYNC"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return self._check_replica_state(pair_info)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_b5d0fff8","line":101,"range":{"start_line":101,"start_character":12,"end_line":101,"end_character":66},"updated":"2016-08-25 00:34:09.000000000","message":"LOG this exception..","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            pair_info \u003d self._get_replication_pair_info(replica_pair_id)"},{"line_number":100,"context_line":"        except Exception:"},{"line_number":101,"context_line":"            # if cannot communicate to backend, return OUT_OF_SYNC"},{"line_number":102,"context_line":"            return common_constants.REPLICA_STATE_OUT_OF_SYNC"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return self._check_replica_state(pair_info)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b874c6fd","line":101,"range":{"start_line":101,"start_character":12,"end_line":101,"end_character":66},"in_reply_to":"1ac06dbe_b5d0fff8","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.helper.set_pair_secondary_write_lock(replica_pair_id)"},{"line_number":190,"context_line":"            self.helper.sync_replication_pair(replica_pair_id)"},{"line_number":191,"context_line":"        except Exception:"},{"line_number":192,"context_line":"            LOG.exception(_LE(\u0027Failed to completely switch over \u0027"},{"line_number":193,"context_line":"                              \u0027replication pair %s.\u0027), replica_pair_id)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            # for all the rest steps,"},{"line_number":196,"context_line":"            # because secondary share is accessible now,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_d572db48","line":193,"range":{"start_line":192,"start_character":0,"end_line":193,"end_character":71},"updated":"2016-08-25 00:34:09.000000000","message":"In this case, you should set the old primary\u0027s replica_state and status to \u0027error\u0027","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            self.helper.set_pair_secondary_write_lock(replica_pair_id)"},{"line_number":190,"context_line":"            self.helper.sync_replication_pair(replica_pair_id)"},{"line_number":191,"context_line":"        except Exception:"},{"line_number":192,"context_line":"            LOG.exception(_LE(\u0027Failed to completely switch over \u0027"},{"line_number":193,"context_line":"                              \u0027replication pair %s.\u0027), replica_pair_id)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"            # for all the rest steps,"},{"line_number":196,"context_line":"            # because secondary share is accessible now,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_585e5a46","line":193,"range":{"start_line":192,"start_character":0,"end_line":193,"end_character":71},"in_reply_to":"1ac06dbe_d572db48","updated":"2016-08-26 02:02:52.000000000","message":"If error occurs here, the following get_replica_state for old primary will return error, in the method promote_replica of connection.py.","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"}],"manila/share/drivers/huawei/v3/rpc.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2d0a5e7de6b22d26cab30d2b04e0413a43b34bdc","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"\r"},{"line_number":28,"context_line":"class server(object):\r"},{"line_number":29,"context_line":"    def __init__(self, backend_name\u003dNone):\r"},{"line_number":30,"context_line":"        self.topic \u003d \u0027huawei_v3\u0027\r"},{"line_number":31,"context_line":"        self.host \u003d \"%s@%s\" % (CONF.host, backend_name)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_0f8f4976","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":12},"updated":"2016-07-14 08:28:03.000000000","message":"Class name should be capitalized.","commit_id":"1eda8e385a7c89c0b568002e71c123c985042f25"}],"manila/share/utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b14380bdf063385b614c4c79665b47a4bc70ab0f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    return new_host"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def get_active_replica(replica_list):"},{"line_number":85,"context_line":"    for replica in replica_list:"},{"line_number":86,"context_line":"        if replica[\u0027replica_state\u0027] \u003d\u003d constants.REPLICA_STATE_ACTIVE:"},{"line_number":87,"context_line":"            return replica"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_71abf41d","line":87,"range":{"start_line":84,"start_character":0,"end_line":87,"end_character":26},"updated":"2016-08-27 00:59:14.000000000","message":"needs a unit test; and a docstring suggesting that it returns the first \u0027active\u0027 replica in a list of replicas provided.","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"26033bfaa6a1efcb26dcddf55238c55d34e68908","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    return new_host"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def get_active_replica(replica_list):"},{"line_number":85,"context_line":"    for replica in replica_list:"},{"line_number":86,"context_line":"        if replica[\u0027replica_state\u0027] \u003d\u003d constants.REPLICA_STATE_ACTIVE:"},{"line_number":87,"context_line":"            return replica"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_82d744ec","line":87,"range":{"start_line":84,"start_character":0,"end_line":87,"end_character":26},"in_reply_to":"fa7ab95a_71abf41d","updated":"2016-08-27 03:59:31.000000000","message":"Done","commit_id":"1c626ca5e5689e2863fe1c009b33c6f16903ba02"}],"manila/tests/share/drivers/huawei/test_huawei_nas.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":2410,"context_line":"        self.driver.plugin._setup_conf()"},{"line_number":2411,"context_line":"        self.driver._update_share_stats()"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"        expected \u003d dict("},{"line_number":2414,"context_line":"            share_backend_name\u003d\"fake_share_backend_name\","},{"line_number":2415,"context_line":"            driver_handles_share_servers\u003dFalse,"},{"line_number":2416,"context_line":"            vendor_name\u003d\u0027Huawei\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_7534c749","line":2413,"range":{"start_line":2413,"start_character":19,"end_line":2413,"end_character":24},"updated":"2016-08-25 00:34:09.000000000","message":"don\u0027t use the dict constructor, use {} instead..","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":2410,"context_line":"        self.driver.plugin._setup_conf()"},{"line_number":2411,"context_line":"        self.driver._update_share_stats()"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"        expected \u003d dict("},{"line_number":2414,"context_line":"            share_backend_name\u003d\"fake_share_backend_name\","},{"line_number":2415,"context_line":"            driver_handles_share_servers\u003dFalse,"},{"line_number":2416,"context_line":"            vendor_name\u003d\u0027Huawei\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b855a61e","line":2413,"range":{"start_line":2413,"start_character":19,"end_line":2413,"end_character":24},"in_reply_to":"1ac06dbe_7534c749","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":4313,"context_line":"             \u0027replica_state\u0027: common_constants.REPLICA_STATE_ACTIVE,"},{"line_number":4314,"context_line":"             \u0027access_rules_status\u0027: common_constants.STATUS_ACTIVE},"},{"line_number":4315,"context_line":"            {\u0027id\u0027: self.active_replica[\u0027id\u0027],"},{"line_number":4316,"context_line":"             \u0027replica_state\u0027: common_constants.REPLICA_STATE_IN_SYNC,"},{"line_number":4317,"context_line":"             \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC},"},{"line_number":4318,"context_line":"        ]"},{"line_number":4319,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_d51c9bc3","line":4316,"range":{"start_line":4316,"start_character":14,"end_line":4316,"end_character":69},"updated":"2016-08-25 00:34:09.000000000","message":"this should be \"error\" if you weren\u0027t able to switch over correctly..","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":4313,"context_line":"             \u0027replica_state\u0027: common_constants.REPLICA_STATE_ACTIVE,"},{"line_number":4314,"context_line":"             \u0027access_rules_status\u0027: common_constants.STATUS_ACTIVE},"},{"line_number":4315,"context_line":"            {\u0027id\u0027: self.active_replica[\u0027id\u0027],"},{"line_number":4316,"context_line":"             \u0027replica_state\u0027: common_constants.REPLICA_STATE_IN_SYNC,"},{"line_number":4317,"context_line":"             \u0027access_rules_status\u0027: common_constants.STATUS_OUT_OF_SYNC},"},{"line_number":4318,"context_line":"        ]"},{"line_number":4319,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f8356ef7","line":4316,"range":{"start_line":4316,"start_character":14,"end_line":4316,"end_character":69},"in_reply_to":"1ac06dbe_d51c9bc3","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"}],"manila_tempest_tests/config.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e102087acdd318446ce109480f39f3c4af9402ee","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                     \"Enable this feature if the driver is configured \""},{"line_number":170,"context_line":"                     \"for replication.\"),"},{"line_number":171,"context_line":"    cfg.BoolOpt(\"add_multiple_share_replicas_tests\","},{"line_number":172,"context_line":"                default\u003dFalse,"},{"line_number":173,"context_line":"                help\u003d\"Defines whether to run multiple replicas creation test \""},{"line_number":174,"context_line":"                     \"or not. Enable this if the driver can create more than \""},{"line_number":175,"context_line":"                     \"one replica for a share.\"),"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_07f5a0eb","line":172,"range":{"start_line":172,"start_character":24,"end_line":172,"end_character":29},"updated":"2016-08-12 03:16:34.000000000","message":"default should be True; you should override this option and set it to False in your CI.. \n\nall three drivers that currently run these tests can create multiple replicas per share..","commit_id":"516b920c491824a518c5b7661b455d96cb31cb15"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                help\u003d\"Defines whether to run replication tests or not. \""},{"line_number":169,"context_line":"                     \"Enable this feature if the driver is configured \""},{"line_number":170,"context_line":"                     \"for replication.\"),"},{"line_number":171,"context_line":"    cfg.BoolOpt(\"add_multiple_share_replicas_tests\","},{"line_number":172,"context_line":"                default\u003dTrue,"},{"line_number":173,"context_line":"                help\u003d\"Defines whether to run multiple replicas creation test \""},{"line_number":174,"context_line":"                     \"or not. Enable this if the driver can create more than \""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_758207ca","line":171,"range":{"start_line":171,"start_character":17,"end_line":171,"end_character":20},"updated":"2016-08-25 00:34:09.000000000","message":"run","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                help\u003d\"Defines whether to run replication tests or not. \""},{"line_number":169,"context_line":"                     \"Enable this feature if the driver is configured \""},{"line_number":170,"context_line":"                     \"for replication.\"),"},{"line_number":171,"context_line":"    cfg.BoolOpt(\"add_multiple_share_replicas_tests\","},{"line_number":172,"context_line":"                default\u003dTrue,"},{"line_number":173,"context_line":"                help\u003d\"Defines whether to run multiple replicas creation test \""},{"line_number":174,"context_line":"                     \"or not. Enable this if the driver can create more than \""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_3840b656","line":171,"range":{"start_line":171,"start_character":17,"end_line":171,"end_character":20},"in_reply_to":"1ac06dbe_758207ca","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"}],"manila_tempest_tests/tests/api/test_replication.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":178,"context_line":"    @testtools.skipUnless(CONF.share.add_multiple_share_replicas_tests,"},{"line_number":179,"context_line":"                          \u0027Multiple share replicas test is disabled.\u0027)"},{"line_number":180,"context_line":"    def test_add_multiple_share_replicas(self):"},{"line_number":181,"context_line":"        rep_domain, pools \u003d self.get_pools_for_replication_domain()"},{"line_number":182,"context_line":"        if len(pools) \u003c 3:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_b553df6b","line":179,"range":{"start_line":179,"start_character":51,"end_line":179,"end_character":58},"updated":"2016-08-25 00:34:09.000000000","message":"tests are","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @test.attr(type\u003d[base.TAG_POSITIVE, base.TAG_BACKEND])"},{"line_number":178,"context_line":"    @testtools.skipUnless(CONF.share.add_multiple_share_replicas_tests,"},{"line_number":179,"context_line":"                          \u0027Multiple share replicas test is disabled.\u0027)"},{"line_number":180,"context_line":"    def test_add_multiple_share_replicas(self):"},{"line_number":181,"context_line":"        rep_domain, pools \u003d self.get_pools_for_replication_domain()"},{"line_number":182,"context_line":"        if len(pools) \u003c 3:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_b82cc6ac","line":179,"range":{"start_line":179,"start_character":51,"end_line":179,"end_character":58},"in_reply_to":"1ac06dbe_b553df6b","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"}],"releasenotes/notes/huawei-driver-replication-8ed62c8d26ad5060.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"331350e0f09f2745581a9ee83586b0f5f1d52866","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Implement replication feature in huawei driver."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9ad45d7e_40cb861e","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":51},"updated":"2016-08-10 03:28:16.000000000","message":"Huawei driver now supports replication. It reports a replication type \u0027dr\u0027 (Disaster Recovery); so ``replication_type\u003ddr`` can be used in the share type extra specs to schedule shares to the Huawei driver when configured for replication.","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"62563f2d278e5f190bd0cd4e779de66d4b9aa3ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Implement replication feature in huawei driver."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9ad45d7e_37dfa80e","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":51},"in_reply_to":"9ad45d7e_40cb861e","updated":"2016-08-10 09:47:06.000000000","message":"Done. And Thank you very much for this complete description.","commit_id":"a6dd7c15a9e7b298cb2edf0a5bf8e1b9467a1afa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d11ae89d2e6ff706fc727d427ad3082d70f5bd4c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Huawei driver now supports replication. It reports a replication type \u0027dr\u0027(Disaster Recovery),"},{"line_number":4,"context_line":"    so \"replication_type\u003ddr\" can be used in the share type extra specs to schedule shares to the"},{"line_number":5,"context_line":"    Huawei driver when configured for replication."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9ad45d7e_2f80e48a","line":3,"updated":"2016-08-10 13:43:25.000000000","message":"This line and the one below are longer than 79 chars.","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7075a7dbece3d85b5ecb952de41af32aad94a9d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Huawei driver now supports replication. It reports a replication type \u0027dr\u0027(Disaster Recovery),"},{"line_number":4,"context_line":"    so \"replication_type\u003ddr\" can be used in the share type extra specs to schedule shares to the"},{"line_number":5,"context_line":"    Huawei driver when configured for replication."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9ad45d7e_02be6964","line":3,"in_reply_to":"9ad45d7e_2f80e48a","updated":"2016-08-11 09:16:03.000000000","message":"Done","commit_id":"2b81654cf8f7d83a6ec5ccf17ae5b479604570eb"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c47ebbb3e2c7e24fbdc45a6e42942166449f8a1a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Huawei driver now supports replication. It reports a replication type"},{"line_number":4,"context_line":"    \u0027dr\u0027(Disaster Recovery), so \"replication_type\u003ddr\" can be used in the"},{"line_number":5,"context_line":"    share type extra specs to schedule shares to the Huawei driver when"},{"line_number":6,"context_line":"    configured for replication."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"1ac06dbe_75e7a7ac","line":6,"range":{"start_line":6,"start_character":30,"end_line":6,"end_character":31},"updated":"2016-08-25 00:34:09.000000000","message":"add:\n\nin the features section:\n\n - The huawei driver now supports turning off snapshot support. Snapshot \n\n\nand \n\n\nissues:\n - When snapshot support is turned on in the Huawei driver, replication cannot be used.","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"0544faadeaedd78ada2a8ee927a15b00e383c6b6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Huawei driver now supports replication. It reports a replication type"},{"line_number":4,"context_line":"    \u0027dr\u0027(Disaster Recovery), so \"replication_type\u003ddr\" can be used in the"},{"line_number":5,"context_line":"    share type extra specs to schedule shares to the Huawei driver when"},{"line_number":6,"context_line":"    configured for replication."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"fa7ab95a_18121263","line":6,"range":{"start_line":6,"start_character":30,"end_line":6,"end_character":31},"in_reply_to":"1ac06dbe_75e7a7ac","updated":"2016-08-26 02:02:52.000000000","message":"Done","commit_id":"43b43b542f722bcc6f63e7e0475dfb083d97fef0"}]}
