)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"classes that enforces the driver to implement the needed"},{"line_number":13,"context_line":"functionality."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The huawei_helper.py is to long, the code structure"},{"line_number":16,"context_line":"should be adjustmented."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4fa6434b397becccab75ceb1f181394a278b249a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bab921fb_77bb6ec5","line":15,"updated":"2015-04-23 11:39:32.000000000","message":"s/to/too/","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":12,"context_line":"classes that enforces the driver to implement the needed"},{"line_number":13,"context_line":"functionality."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The huawei_helper.py is to long, the code structure"},{"line_number":16,"context_line":"should be adjustmented."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4fa6434b397becccab75ceb1f181394a278b249a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bab921fb_c8e354a3","line":15,"in_reply_to":"bab921fb_77bb6ec5","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"functionality."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The huawei_helper.py is to long, the code structure"},{"line_number":16,"context_line":"should be adjustmented."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4fa6434b397becccab75ceb1f181394a278b249a"},{"line_number":19,"context_line":"Partially implements: blueprint huawei-manila-driver-refactor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bab921fb_17cb1255","line":16,"updated":"2015-04-23 11:39:32.000000000","message":"s/adjustmented/adjusted/","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":13,"context_line":"functionality."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The huawei_helper.py is to long, the code structure"},{"line_number":16,"context_line":"should be adjustmented."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4fa6434b397becccab75ceb1f181394a278b249a"},{"line_number":19,"context_line":"Partially implements: blueprint huawei-manila-driver-refactor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bab921fb_a8e02097","line":16,"in_reply_to":"bab921fb_17cb1255","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Huawei manila driver code refactoring"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Huawei manila driver code should be restructured."},{"line_number":10,"context_line":"Instead of using a lose interface definition of share"},{"line_number":11,"context_line":"drivers use the ABC python library to build abstract"},{"line_number":12,"context_line":"classes that enforces the driver to implement the needed"},{"line_number":13,"context_line":"functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bab921fb_366a0aef","line":10,"updated":"2015-04-25 21:26:20.000000000","message":"lose -\u003e loose","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Huawei manila driver code refactoring"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Huawei manila driver code should be restructured."},{"line_number":10,"context_line":"Instead of using a lose interface definition of share"},{"line_number":11,"context_line":"drivers use the ABC python library to build abstract"},{"line_number":12,"context_line":"classes that enforces the driver to implement the needed"},{"line_number":13,"context_line":"functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7ad32947_49cfb1b0","line":10,"in_reply_to":"bab921fb_366a0aef","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Huawei manila driver code should be restructured."},{"line_number":10,"context_line":"Instead of using a lose interface definition of share"},{"line_number":11,"context_line":"drivers use the ABC python library to build abstract"},{"line_number":12,"context_line":"classes that enforces the driver to implement the needed"},{"line_number":13,"context_line":"functionality."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bab921fb_16426668","line":11,"updated":"2015-04-25 21:26:20.000000000","message":"Add a \",\"  between \"drivers\" and \"use the ABC......\".","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Huawei manila driver code should be restructured."},{"line_number":10,"context_line":"Instead of using a lose interface definition of share"},{"line_number":11,"context_line":"drivers use the ABC python library to build abstract"},{"line_number":12,"context_line":"classes that enforces the driver to implement the needed"},{"line_number":13,"context_line":"functionality."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7ad32947_29c5958d","line":11,"in_reply_to":"bab921fb_16426668","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"should be adjusted."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4fa6434b397becccab75ceb1f181394a278b249a"},{"line_number":19,"context_line":"Partially implements: huawei-manila-driver-refactor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bab921fb_767c02b5","line":19,"updated":"2015-04-25 21:26:20.000000000","message":"Partial-Implements","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":16,"context_line":"should be adjusted."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4fa6434b397becccab75ceb1f181394a278b249a"},{"line_number":19,"context_line":"Partially implements: huawei-manila-driver-refactor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7ad32947_a93765af","line":19,"in_reply_to":"bab921fb_767c02b5","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"}],"CMessage_Manila_refactor.txt":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Huawei manila driver code refactoring\r"},{"line_number":2,"context_line":"\r"},{"line_number":3,"context_line":"The Huawei manila driver code should be restructured.\r"},{"line_number":4,"context_line":"Instead of using a lose interface definition of share\r"}],"source_content_type":"text/plain","patch_set":4,"id":"bab921fb_7653e239","line":1,"updated":"2015-04-25 21:26:20.000000000","message":"This file should be removed. The information is already in the commit message.","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e8bcc2a86a30e82f5887c6ee0ffd52acabc0573c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Huawei manila driver code refactoring\r"},{"line_number":2,"context_line":"\r"},{"line_number":3,"context_line":"The Huawei manila driver code should be restructured.\r"},{"line_number":4,"context_line":"Instead of using a lose interface definition of share\r"}],"source_content_type":"text/plain","patch_set":4,"id":"5ad0253b_93097898","line":1,"in_reply_to":"bab921fb_7653e239","updated":"2015-04-29 12:19:30.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"}],"manila/share/drivers/huawei/base.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_371176ad","line":1,"updated":"2015-04-23 11:39:32.000000000","message":"s/2014/2015/","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"11b32f6029fc7068336cb9de98ef3840dcacf140","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_b533c5aa","line":1,"in_reply_to":"bab921fb_371176ad","updated":"2015-04-25 08:49:19.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \"\"\"Get number of network interfaces to be created.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def login(self):"},{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_share_from_snapshot(self, share, snapshot,"},{"line_number":62,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_373a9637","line":59,"updated":"2015-04-23 11:39:32.000000000","message":"Details?","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \"\"\"Get number of network interfaces to be created.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def login(self):"},{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_share_from_snapshot(self, share, snapshot,"},{"line_number":62,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_a87ca0b5","line":59,"in_reply_to":"bab921fb_373a9637","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_share_from_snapshot(self, share, snapshot,"},{"line_number":62,"context_line":"                                   share_server\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_972ba2eb","line":63,"updated":"2015-04-23 11:39:32.000000000","message":"\"\"\"\n\nCreates share from existing snapshot\n\n\"\"\"\n\n?","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_share_from_snapshot(self, share, snapshot,"},{"line_number":62,"context_line":"                                   share_server\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_6851e835","line":63,"in_reply_to":"bab921fb_972ba2eb","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def create_share_from_snapshot(self, share, snapshot,"},{"line_number":62,"context_line":"                                   share_server\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":67,"context_line":"        \"\"\"Retrieve status info from share group.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_d7c47a41","line":64,"updated":"2015-04-23 11:39:32.000000000","message":"\"pass\" is redundant when you have docstring","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def create_share_from_snapshot(self, share, snapshot,"},{"line_number":62,"context_line":"                                   share_server\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":67,"context_line":"        \"\"\"Retrieve status info from share group.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_28477078","line":64,"in_reply_to":"bab921fb_d7c47a41","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":67,"context_line":"        \"\"\"Retrieve status info from share group.\"\"\""},{"line_number":68,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_37ecd6c6","line":67,"updated":"2015-04-23 11:39:32.000000000","message":"s/status/stats/","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        pass"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":67,"context_line":"        \"\"\"Retrieve status info from share group.\"\"\""},{"line_number":68,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_baa294fb","line":67,"in_reply_to":"bab921fb_37ecd6c6","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":67,"context_line":"        \"\"\"Retrieve status info from share group.\"\"\""},{"line_number":68,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_97dde216","line":68,"updated":"2015-04-23 11:39:32.000000000","message":"ditto","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":67,"context_line":"        \"\"\"Retrieve status info from share group.\"\"\""},{"line_number":68,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_9aa35000","line":68,"in_reply_to":"bab921fb_97dde216","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"}],"manila/share/drivers/huawei/huawei_nas.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027manila_huawei_conf_file\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027/etc/manila/manila_huawei_conf.xml\u0027,"},{"line_number":30,"context_line":"               help\u003d\u0027The configuration file for the Manila Huawei driver.\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027huawei_share_backend\u0027,"},{"line_number":32,"context_line":"               default\u003dNone,"},{"line_number":33,"context_line":"               help\u003d\u0027Share backend.\u0027),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_f76ade19","line":31,"updated":"2015-04-23 11:39:32.000000000","message":"It is unclear what to do with this option without investigation of code. So, i guess name  and help message should be more descriptive.","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027manila_huawei_conf_file\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027/etc/manila/manila_huawei_conf.xml\u0027,"},{"line_number":30,"context_line":"               help\u003d\u0027The configuration file for the Manila Huawei driver.\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027huawei_share_backend\u0027,"},{"line_number":32,"context_line":"               default\u003dNone,"},{"line_number":33,"context_line":"               help\u003d\u0027Share backend.\u0027),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_3a13245d","line":31,"in_reply_to":"bab921fb_f76ade19","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def do_setup(self, context):"},{"line_number":70,"context_line":"        \"\"\"Any initialization the huawei nas driver does while starting.\"\"\""},{"line_number":71,"context_line":"        LOG.debug(\"Do setup the plugin.\")"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":75,"context_line":"        \"\"\"Create a share.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_d777da00","line":72,"updated":"2015-04-23 11:39:32.000000000","message":"\"pass\" is redundant.","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def do_setup(self, context):"},{"line_number":70,"context_line":"        \"\"\"Any initialization the huawei nas driver does while starting.\"\"\""},{"line_number":71,"context_line":"        LOG.debug(\"Do setup the plugin.\")"},{"line_number":72,"context_line":"        pass"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":75,"context_line":"        \"\"\"Create a share.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_da28a888","line":72,"in_reply_to":"bab921fb_d777da00","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":56,"context_line":"        if self.configuration:"},{"line_number":57,"context_line":"            self.configuration.append_config_values(huawei_opts)"},{"line_number":58,"context_line":"            backend_driver \u003d \u0027manila.share.drivers.huawei.\u0027 + \\"},{"line_number":59,"context_line":"                self.configuration.safe_get(\u0027huawei_share_backend\u0027)"},{"line_number":60,"context_line":"            self.plugin \u003d importutils.import_object(backend_driver,"},{"line_number":61,"context_line":"                                                    self.configuration)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_762ac291","line":58,"updated":"2015-04-25 21:26:20.000000000","message":"Use () instead of \\","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)"},{"line_number":56,"context_line":"        if self.configuration:"},{"line_number":57,"context_line":"            self.configuration.append_config_values(huawei_opts)"},{"line_number":58,"context_line":"            backend_driver \u003d \u0027manila.share.drivers.huawei.\u0027 + \\"},{"line_number":59,"context_line":"                self.configuration.safe_get(\u0027huawei_share_backend\u0027)"},{"line_number":60,"context_line":"            self.plugin \u003d importutils.import_object(backend_driver,"},{"line_number":61,"context_line":"                                                    self.configuration)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_69ca6da3","line":58,"in_reply_to":"bab921fb_762ac291","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1e641e9b96754f872a59251ebccadde99c37eba","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               help\u003d\u0027The configuration file for the Manila Huawei driver.\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027huawei_share_backend\u0027,"},{"line_number":39,"context_line":"               default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027The Share backend associated with the huawei \u0027"},{"line_number":41,"context_line":"                    \u0027storage model.\u0027),"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_08cc0888","line":40,"updated":"2015-05-13 09:05:28.000000000","message":"Share-\u003eshare","commit_id":"1dfc58b9bfad34cbbb33d5baf3cc51db6211194b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2ca95fbe56c42383af23bf6f9f260d1c518f7f1d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               help\u003d\u0027The configuration file for the Manila Huawei driver.\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027huawei_share_backend\u0027,"},{"line_number":39,"context_line":"               default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027The Share backend associated with the huawei \u0027"},{"line_number":41,"context_line":"                    \u0027storage model.\u0027),"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_43c8d974","line":40,"in_reply_to":"9a0c5dc1_08cc0888","updated":"2015-05-14 07:34:08.000000000","message":"Done","commit_id":"1dfc58b9bfad34cbbb33d5baf3cc51db6211194b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"a1e641e9b96754f872a59251ebccadde99c37eba","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        if self.configuration:"},{"line_number":64,"context_line":"            self.configuration.append_config_values(huawei_opts)"},{"line_number":65,"context_line":"            driver_mode \u003d self.configuration.safe_get(\u0027huawei_share_backend\u0027)"},{"line_number":66,"context_line":"            backend_driver \u003d HUAWEI_UNIFIED_DRIVER_REGISTRY.get(driver_mode)"},{"line_number":67,"context_line":"            self.plugin \u003d importutils.import_object(backend_driver,"},{"line_number":68,"context_line":"                                                    self.configuration)"},{"line_number":69,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_08008833","line":66,"updated":"2015-05-13 09:05:28.000000000","message":"If the returned backend_driver is None, can the following code handle this exception?","commit_id":"1dfc58b9bfad34cbbb33d5baf3cc51db6211194b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2ca95fbe56c42383af23bf6f9f260d1c518f7f1d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        if self.configuration:"},{"line_number":64,"context_line":"            self.configuration.append_config_values(huawei_opts)"},{"line_number":65,"context_line":"            driver_mode \u003d self.configuration.safe_get(\u0027huawei_share_backend\u0027)"},{"line_number":66,"context_line":"            backend_driver \u003d HUAWEI_UNIFIED_DRIVER_REGISTRY.get(driver_mode)"},{"line_number":67,"context_line":"            self.plugin \u003d importutils.import_object(backend_driver,"},{"line_number":68,"context_line":"                                                    self.configuration)"},{"line_number":69,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_83ced181","line":66,"in_reply_to":"9a0c5dc1_08008833","updated":"2015-05-14 07:34:08.000000000","message":"Done","commit_id":"1dfc58b9bfad34cbbb33d5baf3cc51db6211194b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f68ea16d52e9db55e99effaabbf6c6deac0fad7c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                      {\u0027filename\u0027: filename,"},{"line_number":81,"context_line":"                       \u0027err\u0027: err})"},{"line_number":82,"context_line":"        product \u003d root.findtext(\u0027Storage/Product\u0027)"},{"line_number":83,"context_line":"        if product not in HUAWEI_UNIFIED_DRIVER_REGISTRY.keys():"},{"line_number":84,"context_line":"            raise exception.InvalidInput("},{"line_number":85,"context_line":"                reason\u003d_(\u0027Storage %s is not supported.\u0027) % product)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a016987_465587c4","line":83,"updated":"2015-05-14 08:12:57.000000000","message":"This check could be combined with the following \"backend_driver\" result, which would be None if \"product\" not in HUAWEI_UNIFIED_DRIVER_REGISTRY. But this way is also OK.","commit_id":"215915f2bbc9c71cbe097afda6178e411d6c2e90"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"HUAWEI_CMODE_PATH \u003d \u0027manila.share.drivers.huawei\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"HUAWEI_UNIFIED_DRIVER_REGISTRY \u003d {"},{"line_number":31,"context_line":"    \u0027V3\u0027: HUAWEI_CMODE_PATH + \u0027.v3.connection.V3StorageConnection\u0027,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_7e58aa32","line":30,"updated":"2015-05-18 09:47:06.000000000","message":"Place for mapping already exists: https://github.com/openstack/manila/blob/74d98bad/manila/share/manager.py#L85\n\nSo, please, reuse it.\n\nAlso, there is no need to dedicated separate var \"HUAWEI_CMODE_PATH\" as far as it is used only once.","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"HUAWEI_CMODE_PATH \u003d \u0027manila.share.drivers.huawei\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"HUAWEI_UNIFIED_DRIVER_REGISTRY \u003d {"},{"line_number":31,"context_line":"    \u0027V3\u0027: HUAWEI_CMODE_PATH + \u0027.v3.connection.V3StorageConnection\u0027,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_146ab2b3","line":30,"in_reply_to":"7a016987_7e58aa32","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"HUAWEI_UNIFIED_DRIVER_REGISTRY \u003d {"},{"line_number":30,"context_line":"    \u0027V3\u0027: \u0027manila.share.drivers.huawei.v3.connection.V3StorageConnection\u0027,"},{"line_number":31,"context_line":"}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_7ea6c054","line":30,"updated":"2015-05-26 13:11:52.000000000","message":"Please, see comment for patch-set 10. One of two parts was not addressed - https://review.openstack.org/#/c/176637/10..13/manila/share/drivers/huawei/huawei_nas.py","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"HUAWEI_UNIFIED_DRIVER_REGISTRY \u003d {"},{"line_number":30,"context_line":"    \u0027V3\u0027: \u0027manila.share.drivers.huawei.v3.connection.V3StorageConnection\u0027,"},{"line_number":31,"context_line":"}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_0174f2fa","line":30,"in_reply_to":"7a016987_7ea6c054","updated":"2015-05-27 03:43:41.000000000","message":"Thanks for the review.\nThe HUAWEI_UNIFIED_DRIVER_REGISTRY is similar to the following:\nhttps://github.com/openstack/manila/blob/master/manila/share/drivers/netapp/common.py line 37.\n\nIt need redefined in huawei_nas.py.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            tree \u003d ET.parse(filename)"},{"line_number":76,"context_line":"            root \u003d tree.getroot()"},{"line_number":77,"context_line":"        except Exception as err:"},{"line_number":78,"context_line":"            LOG.error(_LE(\u0027Read Huawei config file(%(filename)s)\u0027"},{"line_number":79,"context_line":"                      \u0027 for Manila error: %(err)s\u0027) %"},{"line_number":80,"context_line":"                      {\u0027filename\u0027: filename,"},{"line_number":81,"context_line":"                       \u0027err\u0027: err})"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_fe3e30d9","line":78,"updated":"2015-05-26 13:11:52.000000000","message":"If you get here, then you got error. If you got error then var \"root\" will not be initialized and on line 82 you will get NameError exception.\n\nSo, need to fix it and cover with unit tests.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            tree \u003d ET.parse(filename)"},{"line_number":76,"context_line":"            root \u003d tree.getroot()"},{"line_number":77,"context_line":"        except Exception as err:"},{"line_number":78,"context_line":"            LOG.error(_LE(\u0027Read Huawei config file(%(filename)s)\u0027"},{"line_number":79,"context_line":"                      \u0027 for Manila error: %(err)s\u0027) %"},{"line_number":80,"context_line":"                      {\u0027filename\u0027: filename,"},{"line_number":81,"context_line":"                       \u0027err\u0027: err})"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_f2e3e631","line":78,"in_reply_to":"7a016987_fe3e30d9","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"261c17c0e2636d23a95861c9f6712006d667d7b2","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def do_setup(self, context):"},{"line_number":91,"context_line":"        \"\"\"Any initialization the huawei nas driver does while starting.\"\"\""},{"line_number":92,"context_line":"        LOG.debug(\"Do setup the plugin.\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":95,"context_line":"        \"\"\"Create a share.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_8f2192a0","line":92,"updated":"2015-06-01 04:09:13.000000000","message":"It seems you could have called self.plugin.do_setup, and done the login there instead of in __init__.  No big deal, though.","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6170176204b6fa0c89eba3f433d756b1f7f7a23c","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def do_setup(self, context):"},{"line_number":91,"context_line":"        \"\"\"Any initialization the huawei nas driver does while starting.\"\"\""},{"line_number":92,"context_line":"        LOG.debug(\"Do setup the plugin.\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":95,"context_line":"        \"\"\"Create a share.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_adf9afca","line":92,"in_reply_to":"7a016987_8f2192a0","updated":"2015-06-02 06:41:26.000000000","message":"Done","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"261c17c0e2636d23a95861c9f6712006d667d7b2","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":101,"context_line":"                                   share_server\u003dNone):"},{"line_number":102,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\""},{"line_number":103,"context_line":"        LOG.debug(\"Create share from snapshot.\")"},{"line_number":104,"context_line":"        raise NotImplementedError()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_f4657d1d","line":103,"updated":"2015-06-01 04:09:13.000000000","message":"This will have to work before the end of the Liberty cycle, although it needn\u0027t prevent the merge of this refactoring.","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"}],"manila/share/drivers/huawei/v3/connection.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_7765ae43","line":1,"updated":"2015-04-23 11:39:32.000000000","message":"2015?","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_7a23dca7","line":1,"in_reply_to":"bab921fb_7765ae43","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":67,"context_line":"                if fs_id is not None:"},{"line_number":68,"context_line":"                    self.helper._delete_fs(fs_id)"},{"line_number":69,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.helper._create_share(share_name, fs_id, share_proto)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_b74b46b0","line":69,"updated":"2015-04-23 11:39:32.000000000","message":"Line 66 will raise original error. Why do you need this additional exception?","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"99233e22cdfd4e475df0a04558a6fca1997ca05e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        if not share:"},{"line_number":91,"context_line":"            err_msg \u003d (_(\"Create a snapshot,share fs id is empty.\"))"},{"line_number":92,"context_line":"            LOG.error(err_msg)"},{"line_number":93,"context_line":"            raise exception.InvalidInput(reason\u003derr_msg)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_b0574159","line":91,"updated":"2015-04-25 20:21:06.000000000","message":"\"snapshot, share\"","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        if not share:"},{"line_number":91,"context_line":"            err_msg \u003d (_(\"Create a snapshot,share fs id is empty.\"))"},{"line_number":92,"context_line":"            LOG.error(err_msg)"},{"line_number":93,"context_line":"            raise exception.InvalidInput(reason\u003derr_msg)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_818fdd22","line":91,"in_reply_to":"bab921fb_b0574159","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"99233e22cdfd4e475df0a04558a6fca1997ca05e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        snapshot_id \u003d self.helper._get_snapshot_id(sharefsid, snap_name)"},{"line_number":115,"context_line":"        snapshot_flag \u003d self.helper._check_snapshot_id_exist(snapshot_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if snapshot_flag is True:"},{"line_number":118,"context_line":"            self.helper._delete_snapshot(snapshot_id)"},{"line_number":119,"context_line":"        else:"},{"line_number":120,"context_line":"            LOG.warn(_LW(\"Can not find snapshot %s in array.\"), snap_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_301e91bb","line":117,"updated":"2015-04-25 20:21:06.000000000","message":"if snapshot_flag:\n\nhttps://www.python.org/dev/peps/pep-0008/#programming-recommendations","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        snapshot_id \u003d self.helper._get_snapshot_id(sharefsid, snap_name)"},{"line_number":115,"context_line":"        snapshot_flag \u003d self.helper._check_snapshot_id_exist(snapshot_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if snapshot_flag is True:"},{"line_number":118,"context_line":"            self.helper._delete_snapshot(snapshot_id)"},{"line_number":119,"context_line":"        else:"},{"line_number":120,"context_line":"            LOG.warn(_LW(\"Can not find snapshot %s in array.\"), snap_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_0f23f9be","line":117,"in_reply_to":"bab921fb_301e91bb","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"99233e22cdfd4e475df0a04558a6fca1997ca05e","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.warn(_LW(\"Can not find snapshot %s in array.\"), snap_name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":123,"context_line":"        \"\"\"Communicate with EMCNASClient to get the stats.\"\"\""},{"line_number":124,"context_line":"        capacity \u003d self._get_capacity()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        stats_dict[\"pools\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_b08061c0","line":123,"updated":"2015-04-25 20:21:06.000000000","message":"Why is a Huawei driver communicating with EMCNASClient?  This comment seems rather out of place.","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.warn(_LW(\"Can not find snapshot %s in array.\"), snap_name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":123,"context_line":"        \"\"\"Communicate with EMCNASClient to get the stats.\"\"\""},{"line_number":124,"context_line":"        capacity \u003d self._get_capacity()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        stats_dict[\"pools\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_b6017a3a","line":123,"in_reply_to":"bab921fb_b08061c0","updated":"2015-04-25 21:26:20.000000000","message":"+1.  Looks like a copy and paste error:).","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.warn(_LW(\"Can not find snapshot %s in array.\"), snap_name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":123,"context_line":"        \"\"\"Communicate with EMCNASClient to get the stats.\"\"\""},{"line_number":124,"context_line":"        capacity \u003d self._get_capacity()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        stats_dict[\"pools\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_4199c56d","line":123,"in_reply_to":"bab921fb_b08061c0","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.warn(_LW(\"Can not find snapshot %s in array.\"), snap_name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":123,"context_line":"        \"\"\"Communicate with EMCNASClient to get the stats.\"\"\""},{"line_number":124,"context_line":"        capacity \u003d self._get_capacity()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        stats_dict[\"pools\"] \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_8f36e901","line":123,"in_reply_to":"bab921fb_b6017a3a","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if not share:"},{"line_number":144,"context_line":"            LOG.warn(_LW(\u0027The share was not found. share_name:%s\u0027), share_name)"},{"line_number":145,"context_line":"            fsid \u003d self.helper._get_fsid_by_name(share_name)"},{"line_number":146,"context_line":"            if fsid:"},{"line_number":147,"context_line":"                self.helper._delete_fs(fsid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_5697beeb","line":144,"updated":"2015-04-25 21:26:20.000000000","message":"share_name -\u003e Share name:","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if not share:"},{"line_number":144,"context_line":"            LOG.warn(_LW(\u0027The share was not found. share_name:%s\u0027), share_name)"},{"line_number":145,"context_line":"            fsid \u003d self.helper._get_fsid_by_name(share_name)"},{"line_number":146,"context_line":"            if fsid:"},{"line_number":147,"context_line":"                self.helper._delete_fs(fsid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_cf55011e","line":144,"in_reply_to":"bab921fb_5697beeb","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"99233e22cdfd4e475df0a04558a6fca1997ca05e","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            LOG.warn(_LW(\u0027Only ip access type allowed.\u0027))"},{"line_number":230,"context_line":"            return"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":233,"context_line":"            LOG.warn(_LW(\u0027Only user access type allowed.\u0027))"},{"line_number":234,"context_line":"            return"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_50da25e9","line":232,"updated":"2015-04-25 20:21:06.000000000","message":"Could use elif here.","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            LOG.warn(_LW(\u0027Only ip access type allowed.\u0027))"},{"line_number":230,"context_line":"            return"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":233,"context_line":"            LOG.warn(_LW(\u0027Only user access type allowed.\u0027))"},{"line_number":234,"context_line":"            return"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_ef58bd58","line":232,"in_reply_to":"bab921fb_50da25e9","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"99233e22cdfd4e475df0a04558a6fca1997ca05e","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            message \u003d _(\u0027Only IP access type is allowed for NFS shares.\u0027)"},{"line_number":258,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmessage)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        if share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":261,"context_line":"            message \u003d _(\u0027Only USER access type is allowed for CIFS shares.\u0027)"},{"line_number":262,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmessage)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_f0eff984","line":260,"updated":"2015-04-25 20:21:06.000000000","message":"Same.","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            message \u003d _(\u0027Only IP access type is allowed for NFS shares.\u0027)"},{"line_number":258,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmessage)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        if share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":261,"context_line":"            message \u003d _(\u0027Only USER access type is allowed for CIFS shares.\u0027)"},{"line_number":262,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmessage)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_0f5c194a","line":260,"in_reply_to":"bab921fb_f0eff984","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"129dfe97f71517de4c745cc3dd6cdb737e680410","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def delete_share(self, share, share_server\u003dNone):"},{"line_number":138,"context_line":"        \"\"\"Delete share.\"\"\""},{"line_number":139,"context_line":"        share_name \u003d share[\u0027name\u0027]"},{"line_number":140,"context_line":"        share_type \u003d self.helper._get_share_type(share[\u0027share_proto\u0027])"},{"line_number":141,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if not share:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_ce9ce36b","line":140,"updated":"2015-04-29 12:42:43.000000000","message":"Meaning \"share_type\" is used for different purpose in Manila. So, this is confusing.","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b149cfc4579cf446abf91da3900c31d85d31a14e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def delete_share(self, share, share_server\u003dNone):"},{"line_number":138,"context_line":"        \"\"\"Delete share.\"\"\""},{"line_number":139,"context_line":"        share_name \u003d share[\u0027name\u0027]"},{"line_number":140,"context_line":"        share_type \u003d self.helper._get_share_type(share[\u0027share_proto\u0027])"},{"line_number":141,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        if not share:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_06409155","line":140,"in_reply_to":"5ad0253b_ce9ce36b","updated":"2015-04-30 07:16:23.000000000","message":"Done","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"129dfe97f71517de4c745cc3dd6cdb737e680410","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if fsid:"},{"line_number":147,"context_line":"                self.helper._delete_fs(fsid)"},{"line_number":148,"context_line":"                return"},{"line_number":149,"context_line":"            LOG.warn(_LW(\u0027The filesystem was not found.\u0027))"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        share_id \u003d share[\u0027ID\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_2e7d971c","line":149,"updated":"2015-04-29 12:42:43.000000000","message":"Why do you need line 149 when you have line 144?","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b149cfc4579cf446abf91da3900c31d85d31a14e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if fsid:"},{"line_number":147,"context_line":"                self.helper._delete_fs(fsid)"},{"line_number":148,"context_line":"                return"},{"line_number":149,"context_line":"            LOG.warn(_LW(\u0027The filesystem was not found.\u0027))"},{"line_number":150,"context_line":"            return"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        share_id \u003d share[\u0027ID\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_263b8ded","line":149,"in_reply_to":"5ad0253b_2e7d971c","updated":"2015-04-30 07:16:23.000000000","message":"Because line 149 is filesystem(fsid) not found, line 144 is share not found.  line 144 can not replace line 149.","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"129dfe97f71517de4c745cc3dd6cdb737e680410","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                LOG.error(msg)"},{"line_number":344,"context_line":"                raise exception.InvalidShare(data\u003dmsg)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"},{"line_number":347,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_conf_file(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_4eaa13d6","line":346,"updated":"2015-04-29 12:42:43.000000000","message":"Do you really need here common code \"looping call\"?\n\nThis logic can be simplified and usage of remote module can be omitted.\n\nSee example that does the same: https://github.com/openstack/python-manilaclient/blob/4243d873/manilaclient/tests/functional/client.py#L69","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c3850e37e90105952e073be569e0b410ef56a8d6","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                LOG.error(msg)"},{"line_number":344,"context_line":"                raise exception.InvalidShare(data\u003dmsg)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"},{"line_number":347,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_conf_file(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_ed8f52ca","line":346,"in_reply_to":"3acd31a7_7b17d7a3","updated":"2015-05-18 07:32:49.000000000","message":"Done","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"68862a701eeff724fcc0cbf080c8c0126cc7bf48","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                LOG.error(msg)"},{"line_number":344,"context_line":"                raise exception.InvalidShare(data\u003dmsg)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"},{"line_number":347,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_conf_file(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aca2d91_99ec1b91","line":346,"in_reply_to":"3acd31a7_7b17d7a3","updated":"2015-05-13 06:02:15.000000000","message":"Please see comments in patch 27.\n\nhttps://review.openstack.org/#/c/133193/27/cinder/volume/drivers/huawei/rest_common.py\n\n\t\nJay Bryant\t\tDec 17 3:59 AM\nGiven the code has been like this in the past I am assuming it hasn\u0027t caused issues, but for the future I would consider making this a fixed interval looping call.\n\nxing-yang\t\tDec 17 5:05 AM\n\nI would suggest using loopingcall which is non-blocking. Also suggest making 30 seconds configurable rather than hard-coded. Can you also add a space between # and the text?","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"cb2598499e2bf1db76eeff842d9255db7b2d1964","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                LOG.error(msg)"},{"line_number":344,"context_line":"                raise exception.InvalidShare(data\u003dmsg)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"},{"line_number":347,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_conf_file(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_7b17d7a3","line":346,"in_reply_to":"3acd31a7_e141ff3a","updated":"2015-04-30 09:06:00.000000000","message":"What do you mean by \"global\"? \"time.sleep\" affects only one thread, not whole process. Anyway, I see that this code is just moved from another module, so, you are free to have it as it is already.","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b149cfc4579cf446abf91da3900c31d85d31a14e","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                LOG.error(msg)"},{"line_number":344,"context_line":"                raise exception.InvalidShare(data\u003dmsg)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"},{"line_number":347,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_conf_file(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_e141ff3a","line":346,"in_reply_to":"5ad0253b_4eaa13d6","updated":"2015-04-30 07:16:23.000000000","message":"Before I using this method that have been reviewed, Because sleep is a global pause.","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f454c3643ee9cdc126e05aa5c3559a7eb8c61863","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                LOG.error(msg)"},{"line_number":344,"context_line":"                raise exception.InvalidShare(data\u003dmsg)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_inner)"},{"line_number":347,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_conf_file(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_c819248a","line":346,"in_reply_to":"5ad0253b_4eaa13d6","updated":"2015-05-18 08:33:47.000000000","message":"Done","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"9c9d54dfd5882d43f8ed1e1b43e75510fc3bc9ae","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if self.configuration:"},{"line_number":39,"context_line":"            self.helper \u003d helper.RestHelper(self.configuration)"},{"line_number":40,"context_line":"        else:"},{"line_number":41,"context_line":"            raise exception.InvalidShare(_(\"Huawei configuration missing.\"))"},{"line_number":42,"context_line":"        self.helper.login()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create_share(self, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_1730a69d","line":41,"updated":"2015-05-15 13:40:00.000000000","message":"exception.InvalidShare is not the suitable exception for this type of error. Use exception.Invalid exception or (better) create your own exception in manila/exception.py (example: https://github.com/openstack/manila/blob/36bc96be35c6e0f2acb0775114f530e1bbff6989/manila/exception.py#L517-L526)","commit_id":"101c7e49ea83d7324f9f80a43d0419f02eb33683"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6d9a2b1b7f8c5b783d039344358d5c284cf13263","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if self.configuration:"},{"line_number":39,"context_line":"            self.helper \u003d helper.RestHelper(self.configuration)"},{"line_number":40,"context_line":"        else:"},{"line_number":41,"context_line":"            raise exception.InvalidShare(_(\"Huawei configuration missing.\"))"},{"line_number":42,"context_line":"        self.helper.login()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create_share(self, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_0dacee32","line":41,"in_reply_to":"7a016987_1730a69d","updated":"2015-05-18 07:33:12.000000000","message":"Done","commit_id":"101c7e49ea83d7324f9f80a43d0419f02eb33683"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def create_share(self, share, share_server\u003dNone):"},{"line_number":44,"context_line":"        \"\"\"Create a share.\"\"\""},{"line_number":45,"context_line":"        LOG.debug(\"Create a share.\")"},{"line_number":46,"context_line":"        share_name \u003d share[\u0027name\u0027]"},{"line_number":47,"context_line":"        share_proto \u003d share[\u0027share_proto\u0027]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_fe913a9a","line":45,"updated":"2015-05-18 09:47:06.000000000","message":"https://review.openstack.org/#/c/176637/10/manila/share/drivers/huawei/huawei_nas.py writes the same. So, in logs you will have two same messages. Do you really need it?","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def create_share(self, share, share_server\u003dNone):"},{"line_number":44,"context_line":"        \"\"\"Create a share.\"\"\""},{"line_number":45,"context_line":"        LOG.debug(\"Create a share.\")"},{"line_number":46,"context_line":"        share_name \u003d share[\u0027name\u0027]"},{"line_number":47,"context_line":"        share_proto \u003d share[\u0027share_proto\u0027]"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_a3896628","line":45,"in_reply_to":"7a016987_fe913a9a","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            while not (self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":60,"context_line":"                                            fs[\u0027RUNNINGSTATUS\u0027])"},{"line_number":61,"context_line":"                       or time.time() \u003e end_time):"},{"line_number":62,"context_line":"                time.sleep(int(wait_interval))"},{"line_number":63,"context_line":"                fs \u003d self.helper._get_fs_info_by_id(fs_id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            if not self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_febffaf8","line":62,"updated":"2015-05-18 09:47:06.000000000","message":"I guess better to make sure that \"wait_interval\" is integer in method \"_get_wait_interval\" and do not do type conversion in place of call.","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            while not (self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":60,"context_line":"                                            fs[\u0027RUNNINGSTATUS\u0027])"},{"line_number":61,"context_line":"                       or time.time() \u003e end_time):"},{"line_number":62,"context_line":"                time.sleep(int(wait_interval))"},{"line_number":63,"context_line":"                fs \u003d self.helper._get_fs_info_by_id(fs_id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            if not self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_a91387b7","line":62,"in_reply_to":"7a016987_febffaf8","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                        fs[\u0027RUNNINGSTATUS\u0027]):"},{"line_number":67,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":68,"context_line":"        except Exception:"},{"line_number":69,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":70,"context_line":"                if fs_id is not None:"},{"line_number":71,"context_line":"                    self.helper._delete_fs(fs_id)"},{"line_number":72,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_1e48962c","line":69,"updated":"2015-05-18 09:47:06.000000000","message":"Why do you need \"with excutils.save_and_reraise_exception\" when you raise your own error below?","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                        fs[\u0027RUNNINGSTATUS\u0027]):"},{"line_number":67,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":68,"context_line":"        except Exception:"},{"line_number":69,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":70,"context_line":"                if fs_id is not None:"},{"line_number":71,"context_line":"                    self.helper._delete_fs(fs_id)"},{"line_number":72,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_89168ba5","line":69,"in_reply_to":"7a016987_1e48962c","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def check_fs_status(self, health_status, running_status):"},{"line_number":85,"context_line":"        if (health_status \u003d\u003d constants.STATUS_FS_HEALTH"},{"line_number":86,"context_line":"           and running_status \u003d\u003d constants.STATUS_FS_RUNNING):"},{"line_number":87,"context_line":"            return True"},{"line_number":88,"context_line":"        else:"},{"line_number":89,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_de68be89","line":86,"updated":"2015-05-18 09:47:06.000000000","message":"Strange that PEP8 does not fail here.\n\nContinuation of if statement should have 8 symbols of indentation. You have here 3.","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def check_fs_status(self, health_status, running_status):"},{"line_number":85,"context_line":"        if (health_status \u003d\u003d constants.STATUS_FS_HEALTH"},{"line_number":86,"context_line":"           and running_status \u003d\u003d constants.STATUS_FS_RUNNING):"},{"line_number":87,"context_line":"            return True"},{"line_number":88,"context_line":"        else:"},{"line_number":89,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_09ce1b5a","line":86,"in_reply_to":"7a016987_de68be89","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if not share:"},{"line_number":101,"context_line":"            err_msg \u003d (_(\"Create a snapshot,share fs id is empty.\"))"},{"line_number":102,"context_line":"            LOG.error(err_msg)"},{"line_number":103,"context_line":"            raise exception.InvalidInput(reason\u003derr_msg)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_be2d0248","line":101,"updated":"2015-05-18 09:47:06.000000000","message":"Maybe \"Can not create snapshot, because share_id is not provided.\" ?","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        share \u003d self.helper._get_share_by_name(share_name, share_type)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if not share:"},{"line_number":101,"context_line":"            err_msg \u003d (_(\"Create a snapshot,share fs id is empty.\"))"},{"line_number":102,"context_line":"            LOG.error(err_msg)"},{"line_number":103,"context_line":"            raise exception.InvalidInput(reason\u003derr_msg)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_dea67e52","line":101,"in_reply_to":"7a016987_be2d0248","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            LOG.error(err_msg)"},{"line_number":347,"context_line":"            raise exception.InvalidInput(err_msg)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        if (not resturl) or (not username) or (not pwd):"},{"line_number":350,"context_line":"            err_msg \u003d (_("},{"line_number":351,"context_line":"                \u0027_check_conf_file: Config file invalid. RestURL,\u0027"},{"line_number":352,"context_line":"                \u0027 UserName and UserPassword must be set.\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_9ee126d3","line":349,"updated":"2015-05-18 09:47:06.000000000","message":"This condition can and should be simplified:\n\n\"\"\"\n\nif not (resturl and username and pwd):\n\n\"\"\"","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            LOG.error(err_msg)"},{"line_number":347,"context_line":"            raise exception.InvalidInput(err_msg)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        if (not resturl) or (not username) or (not pwd):"},{"line_number":350,"context_line":"            err_msg \u003d (_("},{"line_number":351,"context_line":"                \u0027_check_conf_file: Config file invalid. RestURL,\u0027"},{"line_number":352,"context_line":"                \u0027 UserName and UserPassword must be set.\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_3e7912c9","line":349,"in_reply_to":"7a016987_9ee126d3","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8f611f7f66cff9fbe37bc687a69f17334ac570e","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        service \u003d self.helper._get_nfs_service_status()"},{"line_number":369,"context_line":"        if ((service[\u0027RUNNINGSTATUS\u0027] !\u003d constants.STATUS_SERVICE_RUNNING) or"},{"line_number":370,"context_line":"           (service[\u0027SUPPORTV3\u0027] \u003d\u003d \u0027false\u0027) or"},{"line_number":371,"context_line":"           (service[\u0027SUPPORTV4\u0027] \u003d\u003d \u0027false\u0027)):"},{"line_number":372,"context_line":"            self.helper._start_nfs_service_status()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_3ee912e7","line":370,"updated":"2015-05-18 09:47:06.000000000","message":"Same as above. Should be indentation of 8 symbols.","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"50030223a76ba678445a3a22b812708c61d13066","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        service \u003d self.helper._get_nfs_service_status()"},{"line_number":369,"context_line":"        if ((service[\u0027RUNNINGSTATUS\u0027] !\u003d constants.STATUS_SERVICE_RUNNING) or"},{"line_number":370,"context_line":"           (service[\u0027SUPPORTV3\u0027] \u003d\u003d \u0027false\u0027) or"},{"line_number":371,"context_line":"           (service[\u0027SUPPORTV4\u0027] \u003d\u003d \u0027false\u0027)):"},{"line_number":372,"context_line":"            self.helper._start_nfs_service_status()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_89e1ebd2","line":370,"in_reply_to":"7a016987_3ee912e7","updated":"2015-05-18 12:51:24.000000000","message":"Done","commit_id":"3ba5b9e8175ed03726dacdb0c2f5048ce8d9e7ee"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2e9588716d567204558f8025dd95d73bbc9e380e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        sharefsid \u003d self.helper._get_fsid_by_name(share_name)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if sharefsid is None:"},{"line_number":118,"context_line":"            LOG.warn(_LW(\u0027Delete snapshot share id %s fs has been deleted.\u0027),"},{"line_number":119,"context_line":"                     snap_name)"},{"line_number":120,"context_line":"            return"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_f0342dfc","line":118,"updated":"2015-05-26 01:46:05.000000000","message":"Please use LOG.warning.  LOG.warn is deprecated.  Same applies to other places.","commit_id":"edc4da328fd2e2ec8617ea2329d0b56571afd503"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"35c1d906963a9918222fd56e2e1f00199414f53a","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        sharefsid \u003d self.helper._get_fsid_by_name(share_name)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if sharefsid is None:"},{"line_number":118,"context_line":"            LOG.warn(_LW(\u0027Delete snapshot share id %s fs has been deleted.\u0027),"},{"line_number":119,"context_line":"                     snap_name)"},{"line_number":120,"context_line":"            return"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_e66113aa","line":118,"in_reply_to":"7a016987_f0342dfc","updated":"2015-05-26 03:06:46.000000000","message":"Done","commit_id":"edc4da328fd2e2ec8617ea2329d0b56571afd503"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if not self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":64,"context_line":"                                        fs[\u0027RUNNINGSTATUS\u0027]):"},{"line_number":65,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            if fs_id is not None:"},{"line_number":68,"context_line":"                self.helper._delete_fs(fs_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_b16469e5","line":65,"updated":"2015-05-26 13:11:52.000000000","message":"Can you please add more details to error message? For the moment it is not as useful as could be.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if not self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":64,"context_line":"                                        fs[\u0027RUNNINGSTATUS\u0027]):"},{"line_number":65,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            if fs_id is not None:"},{"line_number":68,"context_line":"                self.helper._delete_fs(fs_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_acf2b56d","line":65,"in_reply_to":"7a016987_450e7de6","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"49ebd769c5535f785a574aab1e5e4c09f68bd7cc","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if not self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":64,"context_line":"                                        fs[\u0027RUNNINGSTATUS\u0027]):"},{"line_number":65,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            if fs_id is not None:"},{"line_number":68,"context_line":"                self.helper._delete_fs(fs_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_450e7de6","line":65,"in_reply_to":"7a016987_b16469e5","updated":"2015-05-26 20:41:59.000000000","message":"\u0027The status of filesystem error.\u0027 is not even a valid sentence.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if not self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":64,"context_line":"                                        fs[\u0027RUNNINGSTATUS\u0027]):"},{"line_number":65,"context_line":"                raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            if fs_id is not None:"},{"line_number":68,"context_line":"                self.helper._delete_fs(fs_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_ccedf18f","line":65,"in_reply_to":"7a016987_b16469e5","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            if fs_id is not None:"},{"line_number":68,"context_line":"                self.helper._delete_fs(fs_id)"},{"line_number":69,"context_line":"            raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.helper._create_share(share_name, fs_id, share_proto)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_f171c1a9","line":69,"updated":"2015-05-26 13:11:52.000000000","message":"Same here.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        except Exception:"},{"line_number":67,"context_line":"            if fs_id is not None:"},{"line_number":68,"context_line":"                self.helper._delete_fs(fs_id)"},{"line_number":69,"context_line":"            raise exception.InvalidShare(\u0027The status of filesystem error.\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.helper._create_share(share_name, fs_id, share_proto)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_8cb5b97f","line":69,"in_reply_to":"7a016987_f171c1a9","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        except Exception:"},{"line_number":74,"context_line":"            if fs_id is not None:"},{"line_number":75,"context_line":"                self.helper._delete_fs(fs_id)"},{"line_number":76,"context_line":"            raise exception.InvalidShare(\u0027Create a share fail.\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        location \u003d self._get_location_path(share_name, share_proto)"},{"line_number":79,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_91b84d2c","line":76,"updated":"2015-05-26 13:11:52.000000000","message":"Share ID? Also, in logs you will not have original exception and its trace. It would be hard to get know the root cause for error.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"49ebd769c5535f785a574aab1e5e4c09f68bd7cc","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        except Exception:"},{"line_number":74,"context_line":"            if fs_id is not None:"},{"line_number":75,"context_line":"                self.helper._delete_fs(fs_id)"},{"line_number":76,"context_line":"            raise exception.InvalidShare(\u0027Create a share fail.\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        location \u003d self._get_location_path(share_name, share_proto)"},{"line_number":79,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_c5f02dcc","line":76,"in_reply_to":"7a016987_91b84d2c","updated":"2015-05-26 20:41:59.000000000","message":"\u0027Create a share fail.\u0027 is also invalid English.  Please find a local editor to review and correct the messages emitted by your driver.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        except Exception:"},{"line_number":74,"context_line":"            if fs_id is not None:"},{"line_number":75,"context_line":"                self.helper._delete_fs(fs_id)"},{"line_number":76,"context_line":"            raise exception.InvalidShare(\u0027Create a share fail.\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        location \u003d self._get_location_path(share_name, share_proto)"},{"line_number":79,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_871fd25a","line":76,"in_reply_to":"7a016987_91b84d2c","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        except Exception:"},{"line_number":74,"context_line":"            if fs_id is not None:"},{"line_number":75,"context_line":"                self.helper._delete_fs(fs_id)"},{"line_number":76,"context_line":"            raise exception.InvalidShare(\u0027Create a share fail.\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        location \u003d self._get_location_path(share_name, share_proto)"},{"line_number":79,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_6724d6ae","line":76,"in_reply_to":"7a016987_c5f02dcc","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        share_client_type \u003d self.helper._get_share_client_type(share_proto)"},{"line_number":236,"context_line":"        access_type \u003d access[\u0027access_type\u0027]"},{"line_number":237,"context_line":"        if share_proto \u003d\u003d \u0027NFS\u0027 and access_type !\u003d \u0027ip\u0027:"},{"line_number":238,"context_line":"            LOG.warning(_LW(\u0027Only ip access type allowed.\u0027))"},{"line_number":239,"context_line":"            return"},{"line_number":240,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":241,"context_line":"            LOG.warning(_LW(\u0027Only user access type allowed.\u0027))"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_f144211c","line":238,"updated":"2015-05-26 13:11:52.000000000","message":"Need to specify that ip access allowed exactly for \"NFS\" protocol.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        share_client_type \u003d self.helper._get_share_client_type(share_proto)"},{"line_number":236,"context_line":"        access_type \u003d access[\u0027access_type\u0027]"},{"line_number":237,"context_line":"        if share_proto \u003d\u003d \u0027NFS\u0027 and access_type !\u003d \u0027ip\u0027:"},{"line_number":238,"context_line":"            LOG.warning(_LW(\u0027Only ip access type allowed.\u0027))"},{"line_number":239,"context_line":"            return"},{"line_number":240,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":241,"context_line":"            LOG.warning(_LW(\u0027Only user access type allowed.\u0027))"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_c79a6ac5","line":238,"in_reply_to":"7a016987_f144211c","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            LOG.warning(_LW(\u0027Only ip access type allowed.\u0027))"},{"line_number":239,"context_line":"            return"},{"line_number":240,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":241,"context_line":"            LOG.warning(_LW(\u0027Only user access type allowed.\u0027))"},{"line_number":242,"context_line":"            return"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        access_to \u003d access[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_b147c91c","line":241,"updated":"2015-05-26 13:11:52.000000000","message":"Same here.","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            LOG.warning(_LW(\u0027Only ip access type allowed.\u0027))"},{"line_number":239,"context_line":"            return"},{"line_number":240,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027 and access_type !\u003d \u0027user\u0027:"},{"line_number":241,"context_line":"            LOG.warning(_LW(\u0027Only user access type allowed.\u0027))"},{"line_number":242,"context_line":"            return"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        access_to \u003d access[\u0027access_to\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_87a47208","line":241,"in_reply_to":"7a016987_b147c91c","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"24292d10f5e9547cf360065ca840f429aa2dabc2","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        share \u003d self.helper._get_share_by_name(share[\u0027name\u0027], share_type)"},{"line_number":274,"context_line":"        if not share:"},{"line_number":275,"context_line":"            err_msg \u003d (_(\u0027Can not get share.\u0027))"},{"line_number":276,"context_line":"            LOG.error(err_msg)"},{"line_number":277,"context_line":"            raise exception.InvalidShareAccess(reason\u003derr_msg)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_51cf75b3","line":275,"updated":"2015-05-26 13:11:52.000000000","message":"Share ID/Name?","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1cf5f9226faaf7434e660d1fe09f079dfaee102a","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        share \u003d self.helper._get_share_by_name(share[\u0027name\u0027], share_type)"},{"line_number":274,"context_line":"        if not share:"},{"line_number":275,"context_line":"            err_msg \u003d (_(\u0027Can not get share.\u0027))"},{"line_number":276,"context_line":"            LOG.error(err_msg)"},{"line_number":277,"context_line":"            raise exception.InvalidShareAccess(reason\u003derr_msg)"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_870eb2e3","line":275,"in_reply_to":"7a016987_51cf75b3","updated":"2015-05-27 03:43:41.000000000","message":"Done","commit_id":"83e2545395ebe9acb5c50762f7bfd175d5937c1b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"261c17c0e2636d23a95861c9f6712006d667d7b2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class V3StorageConnection(driver.HuaweiBase):"},{"line_number":31,"context_line":"    \"\"\"Helper class for Huawei OceanStor V3 storage system.\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, configuration):"},{"line_number":34,"context_line":"        super(V3StorageConnection, self).__init__(configuration)"},{"line_number":35,"context_line":"        self.configuration \u003d configuration"},{"line_number":36,"context_line":"        if self.configuration:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_ef4fe668","line":33,"updated":"2015-06-01 04:09:13.000000000","message":"While your overall unit test coverage looks good, I don\u0027t see any coverage for this method, which it seems you would want to have.","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6170176204b6fa0c89eba3f433d756b1f7f7a23c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class V3StorageConnection(driver.HuaweiBase):"},{"line_number":31,"context_line":"    \"\"\"Helper class for Huawei OceanStor V3 storage system.\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, configuration):"},{"line_number":34,"context_line":"        super(V3StorageConnection, self).__init__(configuration)"},{"line_number":35,"context_line":"        self.configuration \u003d configuration"},{"line_number":36,"context_line":"        if self.configuration:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_524ad784","line":33,"in_reply_to":"7a016987_ef4fe668","updated":"2015-06-02 06:41:26.000000000","message":"Done","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"76f49497179376987871f34c4a4c23f1a4f7dc58","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, configuration):"},{"line_number":34,"context_line":"        super(V3StorageConnection, self).__init__(configuration)"},{"line_number":35,"context_line":"        self.configuration \u003d configuration"},{"line_number":36,"context_line":"        if self.configuration:"},{"line_number":37,"context_line":"            self.helper \u003d helper.RestHelper(self.configuration)"},{"line_number":38,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_9bbd51b3","line":35,"updated":"2015-06-01 10:36:07.000000000","message":"not needed. it\u0027s already done in the base class","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6170176204b6fa0c89eba3f433d756b1f7f7a23c","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, configuration):"},{"line_number":34,"context_line":"        super(V3StorageConnection, self).__init__(configuration)"},{"line_number":35,"context_line":"        self.configuration \u003d configuration"},{"line_number":36,"context_line":"        if self.configuration:"},{"line_number":37,"context_line":"            self.helper \u003d helper.RestHelper(self.configuration)"},{"line_number":38,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_22a14eaa","line":35,"in_reply_to":"7a016987_9bbd51b3","updated":"2015-06-02 06:41:26.000000000","message":"Done","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"76f49497179376987871f34c4a4c23f1a4f7dc58","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            fs \u003d self.helper._get_fs_info_by_id(fs_id)"},{"line_number":55,"context_line":"            end_time \u003d time.time() + timeout"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            while not (self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":58,"context_line":"                                            fs[\u0027RUNNINGSTATUS\u0027])"},{"line_number":59,"context_line":"                       or time.time() \u003e end_time):"},{"line_number":60,"context_line":"                time.sleep(wait_interval)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_3b81bdc3","line":57,"updated":"2015-06-01 10:36:07.000000000","message":"For that kind of check/wait/timeout loops, there is the retrying library which is already in OpenStack\u0027s global-requirements.txt and used by oslo.concurrency. See https://pypi.python.org/pypi/retrying . But fine for me to leave it as it is now. Just a hint for the future.","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"95889fcd7669a9707dd9e6f95e09df076a352a14","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            fs \u003d self.helper._get_fs_info_by_id(fs_id)"},{"line_number":55,"context_line":"            end_time \u003d time.time() + timeout"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            while not (self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":58,"context_line":"                                            fs[\u0027RUNNINGSTATUS\u0027])"},{"line_number":59,"context_line":"                       or time.time() \u003e end_time):"},{"line_number":60,"context_line":"                time.sleep(wait_interval)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_80e8d97d","line":57,"in_reply_to":"5afe65bd_c75e0c76","updated":"2015-06-02 18:49:47.000000000","message":"zhongjun, you don\u0027t have to change anything here.  Thomas suggested that in the future you could use the retrying library for code that must retry something.  That might be a simplification, but again, just an observation.","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"97792138833f767c788c201a2a6fe806a4b8c129","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            fs \u003d self.helper._get_fs_info_by_id(fs_id)"},{"line_number":55,"context_line":"            end_time \u003d time.time() + timeout"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            while not (self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":58,"context_line":"                                            fs[\u0027RUNNINGSTATUS\u0027])"},{"line_number":59,"context_line":"                       or time.time() \u003e end_time):"},{"line_number":60,"context_line":"                time.sleep(wait_interval)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_c2b2b148","line":57,"in_reply_to":"7a016987_3b81bdc3","updated":"2015-06-01 14:06:46.000000000","message":"+1.  Thanks, Thomas, I hadn\u0027t seen this library.","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c87f6158443298ed3818e0a10ed5e1f996678148","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            fs \u003d self.helper._get_fs_info_by_id(fs_id)"},{"line_number":55,"context_line":"            end_time \u003d time.time() + timeout"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"            while not (self.check_fs_status(fs[\u0027HEALTHSTATUS\u0027],"},{"line_number":58,"context_line":"                                            fs[\u0027RUNNINGSTATUS\u0027])"},{"line_number":59,"context_line":"                       or time.time() \u003e end_time):"},{"line_number":60,"context_line":"                time.sleep(wait_interval)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_c75e0c76","line":57,"in_reply_to":"7a016987_3b81bdc3","updated":"2015-06-02 01:35:28.000000000","message":"Thanks for review my code.\nIn patch 5:\nValeriy Ponomaryov\t\tApr 29 8:42 PM\nDo you really need here common code \"looping call\"?\nThis logic can be simplified and usage of remote module can be omitted.\nSee example that does the same: https://github.com/openstack/python-manilaclient/blob/4243d873/manilaclient/tests/functional/client.py#L69\n\nSo, I am really confused. This logic is simply. Whether I should use the simplest code(\u0027sleep\u0027) or a library(\u0027looping call\u0027 or \u0027retrying\u0027).","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"}],"manila/share/drivers/huawei/v3/helper.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":561,"context_line":"        self._assert_rest_result(result, \u0027Get partition by name error!\u0027)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        if \"data\" in result:"},{"line_number":564,"context_line":"            for item in result[\u0027data\u0027]:"},{"line_number":565,"context_line":"                LOG.debug(\u0027_get_partition_id_by_name item %(item)s\u0027,"},{"line_number":566,"context_line":"                          {\u0027item\u0027: item})"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_d7fc7a40","line":563,"updated":"2015-04-23 11:39:32.000000000","message":"Lines 563-564 can be simplified to one:\n\n\"\"\"\n\nfor datum in result.get(\u0027data\u0027, []):\n\n\"\"\"","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":561,"context_line":"        self._assert_rest_result(result, \u0027Get partition by name error!\u0027)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        if \"data\" in result:"},{"line_number":564,"context_line":"            for item in result[\u0027data\u0027]:"},{"line_number":565,"context_line":"                LOG.debug(\u0027_get_partition_id_by_name item %(item)s\u0027,"},{"line_number":566,"context_line":"                          {\u0027item\u0027: item})"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_ba54d4fe","line":563,"in_reply_to":"bab921fb_d7fc7a40","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f4294ea5efb59aa37bf0f6c91f8bdd548b326949","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027:"},{"line_number":403,"context_line":"            share_client_type \u003d \"CIFS_SHARE_AUTH_CLIENT\""},{"line_number":404,"context_line":"        else:"},{"line_number":405,"context_line":"            raise exception.InvalidShareAccess("},{"line_number":406,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)"},{"line_number":407,"context_line":"                        % share_proto))"},{"line_number":408,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_3e6eb22f","line":405,"updated":"2015-05-28 09:38:42.000000000","message":"\"InvalidShareAccess\" is not proper exception for unsupported share protocol.","commit_id":"0e08d125520da86bfd9cc3dc75af9623e490a968"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6a457423e5c1b04fe3efcf3d3b658a3c1eb019bc","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027:"},{"line_number":403,"context_line":"            share_client_type \u003d \"CIFS_SHARE_AUTH_CLIENT\""},{"line_number":404,"context_line":"        else:"},{"line_number":405,"context_line":"            raise exception.InvalidShareAccess("},{"line_number":406,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)"},{"line_number":407,"context_line":"                        % share_proto))"},{"line_number":408,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_408628dc","line":405,"in_reply_to":"7a016987_3e6eb22f","updated":"2015-05-28 09:53:19.000000000","message":"Done","commit_id":"0e08d125520da86bfd9cc3dc75af9623e490a968"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"f4294ea5efb59aa37bf0f6c91f8bdd548b326949","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027:"},{"line_number":508,"context_line":"            share_type \u003d \"CIFSHARE\""},{"line_number":509,"context_line":"        else:"},{"line_number":510,"context_line":"            raise exception.InvalidShareAccess("},{"line_number":511,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)"},{"line_number":512,"context_line":"                        % share_proto))"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_de72fe10","line":510,"updated":"2015-05-28 09:38:42.000000000","message":"Same here.","commit_id":"0e08d125520da86bfd9cc3dc75af9623e490a968"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6a457423e5c1b04fe3efcf3d3b658a3c1eb019bc","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        elif share_proto \u003d\u003d \u0027CIFS\u0027:"},{"line_number":508,"context_line":"            share_type \u003d \"CIFSHARE\""},{"line_number":509,"context_line":"        else:"},{"line_number":510,"context_line":"            raise exception.InvalidShareAccess("},{"line_number":511,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)"},{"line_number":512,"context_line":"                        % share_proto))"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_a0795cfe","line":510,"in_reply_to":"7a016987_de72fe10","updated":"2015-05-28 09:53:19.000000000","message":"Done","commit_id":"0e08d125520da86bfd9cc3dc75af9623e490a968"}],"manila/tests/share/drivers/huawei/test_huawei_nas.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"class FakeHuaweiNasDriver(huawei_nas.HuaweiNasDriver):"},{"line_number":240,"context_line":"    \"\"\"Fake Huawei Storage, Rewrite some methods of HuaweiNasDriver.\"\"\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":243,"context_line":"        huawei_nas.HuaweiNasDriver.__init__(self, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_77c12ee4","line":240,"updated":"2015-04-23 11:39:32.000000000","message":"Better to remove part \"Rewrite some methods of HuaweiNasDriver\".","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"class FakeHuaweiNasDriver(huawei_nas.HuaweiNasDriver):"},{"line_number":240,"context_line":"    \"\"\"Fake Huawei Storage, Rewrite some methods of HuaweiNasDriver.\"\"\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":243,"context_line":"        huawei_nas.HuaweiNasDriver.__init__(self, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_7a719ca7","line":240,"in_reply_to":"bab921fb_77c12ee4","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"class FakeV3StorageConnection(connection.V3StorageConnection):"},{"line_number":248,"context_line":"    \"\"\"Fake Huawei Storage, Rewrite some methods of V3StorageConnection.\"\"\""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def __init__(self, configuration):"},{"line_number":251,"context_line":"        self.helper \u003d FakeHuaweiNasHelper(configuration)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_37bbb674","line":248,"updated":"2015-04-23 11:39:32.000000000","message":"Better to remove part \"Rewrite some methods of V3StorageConnection\".","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"class FakeV3StorageConnection(connection.V3StorageConnection):"},{"line_number":248,"context_line":"    \"\"\"Fake Huawei Storage, Rewrite some methods of V3StorageConnection.\"\"\""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def __init__(self, configuration):"},{"line_number":251,"context_line":"        self.helper \u003d FakeHuaweiNasHelper(configuration)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_9a6c70d1","line":248,"in_reply_to":"bab921fb_37bbb674","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"68cad14d557d15a1d737b6525510e5a012b019a8","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        }"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self.share_server \u003d None"},{"line_number":349,"context_line":"#        self.fake_helper \u003d mock.Mock()"},{"line_number":350,"context_line":"#        self.driver._helpers \u003d {\u0027FAKE\u0027: self.fake_helper}"},{"line_number":351,"context_line":"        self.driver._licenses \u003d [\u0027fake\u0027]"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_b7a7c64e","line":349,"updated":"2015-04-23 11:39:32.000000000","message":"Why do you need it commented?","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"c533618dc3a11bef75a8411b7b2185c979f1da37","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        }"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self.share_server \u003d None"},{"line_number":349,"context_line":"#        self.fake_helper \u003d mock.Mock()"},{"line_number":350,"context_line":"#        self.driver._helpers \u003d {\u0027FAKE\u0027: self.fake_helper}"},{"line_number":351,"context_line":"        self.driver._licenses \u003d [\u0027fake\u0027]"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_fa46cc4d","line":349,"in_reply_to":"bab921fb_b7a7c64e","updated":"2015-04-25 08:16:27.000000000","message":"Done","commit_id":"32867250db7b89a6eb04e184af6b96b72bb5f29d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c09bc686d9c75a60734e9109ec8d54c1da88580c","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self.configuration.network_config_group \u003d \u0027fake_network_config_group\u0027"},{"line_number":272,"context_line":"        self.configuration.share_backend_name \u003d \u0027fake_share_backend_name\u0027"},{"line_number":273,"context_line":"        self.configuration.huawei_share_backend \u003d \\"},{"line_number":274,"context_line":"            \u0027fake_share_backend\u0027"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        self.configuration.manila_huawei_conf_file \u003d self.fake_conf_file"},{"line_number":277,"context_line":"        self.configuration.driver_handles_share_servers \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab921fb_b6af3a29","line":274,"updated":"2015-04-25 21:26:20.000000000","message":"Please use () instead of \\","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"680b6603bd54a20515b1667a51a00f7b6ffbc308","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self.configuration.network_config_group \u003d \u0027fake_network_config_group\u0027"},{"line_number":272,"context_line":"        self.configuration.share_backend_name \u003d \u0027fake_share_backend_name\u0027"},{"line_number":273,"context_line":"        self.configuration.huawei_share_backend \u003d \\"},{"line_number":274,"context_line":"            \u0027fake_share_backend\u0027"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        self.configuration.manila_huawei_conf_file \u003d self.fake_conf_file"},{"line_number":277,"context_line":"        self.configuration.driver_handles_share_servers \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ad32947_044cfb40","line":274,"in_reply_to":"bab921fb_b6af3a29","updated":"2015-04-29 12:19:04.000000000","message":"Done","commit_id":"c22440dd6531f4a4a349374fb234a3908681d950"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"129dfe97f71517de4c745cc3dd6cdb737e680410","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_conf_product_fail(self):"},{"line_number":383,"context_line":"        tmp_dir \u003d tempfile.mkdtemp()"},{"line_number":384,"context_line":"        fake_fail_conf_file \u003d tmp_dir + \u0027/manila_huawei_conf.xml\u0027"},{"line_number":385,"context_line":"        self.create_fake_conf_file(fake_fail_conf_file,"},{"line_number":386,"context_line":"                                   product_flag\u003dFalse)"},{"line_number":387,"context_line":"        self.driver.plugin.configuration.manila_huawei_conf_file \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"5ad0253b_2ed23701","line":384,"updated":"2015-04-29 12:42:43.000000000","message":"\"fake_fail_conf_file\" should be defined in method \"setUp\" and reused then. Same about line 391 and similar.","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b149cfc4579cf446abf91da3900c31d85d31a14e","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_conf_product_fail(self):"},{"line_number":383,"context_line":"        tmp_dir \u003d tempfile.mkdtemp()"},{"line_number":384,"context_line":"        fake_fail_conf_file \u003d tmp_dir + \u0027/manila_huawei_conf.xml\u0027"},{"line_number":385,"context_line":"        self.create_fake_conf_file(fake_fail_conf_file,"},{"line_number":386,"context_line":"                                   product_flag\u003dFalse)"},{"line_number":387,"context_line":"        self.driver.plugin.configuration.manila_huawei_conf_file \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_d226cf15","line":384,"in_reply_to":"5ad0253b_2ed23701","updated":"2015-04-30 07:16:23.000000000","message":"Done","commit_id":"6fee18d222128fa29b76212e3e6c5364919fdd16"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"f2adf24f88023761f2bbc355dd4ad4e0836c5590","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        data \u003d None"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if self.test_normal:"},{"line_number":95,"context_line":"            if url \u003d\u003d \"/xx/sessions\" or url \u003d\u003d \"sessions\":"},{"line_number":96,"context_line":"                data \u003d data_session(url)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            if url \u003d\u003d \"storagepool\":"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_99b92f18","line":95,"updated":"2015-05-19 01:50:31.000000000","message":"Why all these \"if url \u003d\u003d\" condition checks don\u0027t use \"if elif\" statement?","commit_id":"f13c6297b51673c45d952d6214938581c680708d"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"261c17c0e2636d23a95861c9f6712006d667d7b2","unresolved":false,"context_lines":[{"line_number":528,"context_line":"                          self.share_nfs,"},{"line_number":529,"context_line":"                          self.share_server)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def test_create_share_nfs_status_fail(self):"},{"line_number":532,"context_line":"        self.driver.plugin.helper.login()"},{"line_number":533,"context_line":"        self.driver.plugin.helper.fs_status_flag \u003d False"},{"line_number":534,"context_line":"        self.assertRaises(exception.InvalidShare,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a016987_94b76984","line":531,"updated":"2015-06-01 04:09:13.000000000","message":"This test is consistently 100 times slower than any of your other unit tests.  Can you find a way to speed it up?","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"95889fcd7669a9707dd9e6f95e09df076a352a14","unresolved":false,"context_lines":[{"line_number":528,"context_line":"                          self.share_nfs,"},{"line_number":529,"context_line":"                          self.share_server)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def test_create_share_nfs_status_fail(self):"},{"line_number":532,"context_line":"        self.driver.plugin.helper.login()"},{"line_number":533,"context_line":"        self.driver.plugin.helper.fs_status_flag \u003d False"},{"line_number":534,"context_line":"        self.assertRaises(exception.InvalidShare,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_c35edbe8","line":531,"in_reply_to":"5afe65bd_4d17dbed","updated":"2015-06-02 18:49:47.000000000","message":"Thanks!","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6170176204b6fa0c89eba3f433d756b1f7f7a23c","unresolved":false,"context_lines":[{"line_number":528,"context_line":"                          self.share_nfs,"},{"line_number":529,"context_line":"                          self.share_server)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def test_create_share_nfs_status_fail(self):"},{"line_number":532,"context_line":"        self.driver.plugin.helper.login()"},{"line_number":533,"context_line":"        self.driver.plugin.helper.fs_status_flag \u003d False"},{"line_number":534,"context_line":"        self.assertRaises(exception.InvalidShare,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_4d17dbed","line":531,"in_reply_to":"7a016987_94b76984","updated":"2015-06-02 06:41:26.000000000","message":"Done","commit_id":"b17036f17d24d794806bebc34bf59640f83f67ff"}]}
