)]}'
{"cinder/volume/drivers/huawei/fc_zone_helper.py":[{"author":{"_account_id":19779,"name":"Chason Chan","display_name":"chenxing","email":"chason.chan@foxmail.com","username":"chenxing"},"change_message_id":"cd28edefb7ebbf4bd6bd1e8e96361b52bd3812aa","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return fabric_connected_ports, fabric_connected_initiators"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def build_ini_targ_map(self, wwns, host_id, lun_id):"},{"line_number":107,"context_line":"        # Get the engine the LUN belongs to and all the"},{"line_number":108,"context_line":"        # controllers on this engine."},{"line_number":109,"context_line":"        lun_info \u003d self.client.get_lun_info(lun_id)"},{"line_number":110,"context_line":"        engines \u003d self.client.get_all_engines()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_43c20a87","line":108,"range":{"start_line":107,"start_character":8,"end_line":108,"end_character":37},"updated":"2015-12-31 09:43:14.000000000","message":"\"\"\"Get the engine the LUN belongs to and all the\ncontrollers on this engine.\n\"\"\"","commit_id":"b36c41be66586d8138028f8ed517fc855d3f9b18"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"27e74a834a8ad1f1757ddbdac068c0682500d30c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return fabric_connected_ports, fabric_connected_initiators"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def build_ini_targ_map(self, wwns, host_id, lun_id):"},{"line_number":107,"context_line":"        # Get the engine the LUN belongs to and all the"},{"line_number":108,"context_line":"        # controllers on this engine."},{"line_number":109,"context_line":"        lun_info \u003d self.client.get_lun_info(lun_id)"},{"line_number":110,"context_line":"        engines \u003d self.client.get_all_engines()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_da631f19","line":108,"range":{"start_line":107,"start_character":8,"end_line":108,"end_character":37},"in_reply_to":"fa69d971_43c20a87","updated":"2016-01-18 20:55:27.000000000","message":"This is just a comment to the first two lines, not to the whole function.","commit_id":"b36c41be66586d8138028f8ed517fc855d3f9b18"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"48921e8c43725fcf3ee0df0373eacba802512601","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        portg_name \u003d constants.PORTGROUP_PREFIX + host_id"},{"line_number":125,"context_line":"        view_id \u003d self.client.find_mapping_view(view_name)"},{"line_number":126,"context_line":"        portg_info \u003d self.client.get_portgroup_by_view(view_id)"},{"line_number":127,"context_line":"        portg_id \u003d portg_info[0][\u0027ID\u0027] if portg_info else None"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        init_targ_map \u003d {}"},{"line_number":130,"context_line":"        if portg_id:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_405659d3","line":127,"range":{"start_line":127,"start_character":19,"end_line":127,"end_character":32},"updated":"2016-01-04 06:40:10.000000000","message":"Maybe port_group is \"[]\", so port_group[0] will failed.","commit_id":"b36c41be66586d8138028f8ed517fc855d3f9b18"},{"author":{"_account_id":19779,"name":"Chason Chan","display_name":"chenxing","email":"chason.chan@foxmail.com","username":"chenxing"},"change_message_id":"cd28edefb7ebbf4bd6bd1e8e96361b52bd3812aa","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            portg_id \u003d self.client.get_tgt_port_group(portg_name)"},{"line_number":170,"context_line":"            if portg_id:"},{"line_number":171,"context_line":"                LOG.debug(\"Found port group %s not belonged to any view, \""},{"line_number":172,"context_line":"                          \"deleting it.\", portg_name)"},{"line_number":173,"context_line":"                ports \u003d self.client.get_fc_ports_by_portgroup(portg_id)"},{"line_number":174,"context_line":"                for port_id in ports.values():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_4393ea5b","line":171,"range":{"start_line":171,"start_character":46,"end_line":171,"end_character":47},"updated":"2015-12-31 09:43:14.000000000","message":"\"did not belong\"","commit_id":"b36c41be66586d8138028f8ed517fc855d3f9b18"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"48921e8c43725fcf3ee0df0373eacba802512601","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        if not view_id:"},{"line_number":198,"context_line":"            return error_ret"},{"line_number":199,"context_line":"        port_group \u003d self.client.get_portgroup_by_view(view_id)"},{"line_number":200,"context_line":"        portg_id \u003d port_group[0][\u0027ID\u0027]"},{"line_number":201,"context_line":"        ports \u003d self.client.get_fc_ports_by_portgroup(portg_id)"},{"line_number":202,"context_line":"        for port_id in ports.values():"},{"line_number":203,"context_line":"            self.client.remove_port_from_portgroup(portg_id, port_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_a0c0757d","line":200,"range":{"start_line":200,"start_character":19,"end_line":200,"end_character":32},"updated":"2016-01-04 06:40:10.000000000","message":"Maybe port_group is \"[]\", so port_group[0] will failed.","commit_id":"b36c41be66586d8138028f8ed517fc855d3f9b18"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"dbd3601d3998c9dd5e7892b857b602bf1362dc5d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        LOG.debug(\"Fabric connected ports: %(ports)s, \""},{"line_number":101,"context_line":"                  \"Fabric connected initiators: %(initiators)s\","},{"line_number":102,"context_line":"                  {\u0027ports\u0027: fabric_connected_ports,"},{"line_number":103,"context_line":"                   \u0027initiators\u0027: fabric_connected_initiators})"},{"line_number":104,"context_line":"        return fabric_connected_ports, fabric_connected_initiators"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_8fd7754a","line":101,"range":{"start_line":101,"start_character":61,"end_line":101,"end_character":62},"updated":"2016-01-05 01:20:17.000000000","message":"Missing . EOL","commit_id":"16405b1671248a241f2a1c5945aa26c781712028"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"dbd3601d3998c9dd5e7892b857b602bf1362dc5d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        for ini in fabric_connected_initiators:"},{"line_number":182,"context_line":"            init_targ_map[ini] \u003d weighted_ports"},{"line_number":183,"context_line":"        LOG.debug(\"build_ini_targ_map: Port group name: %(portg_name)s, \""},{"line_number":184,"context_line":"                  \"init_targ_map: %(map)s\","},{"line_number":185,"context_line":"                  {\"portg_name\": portg_name,"},{"line_number":186,"context_line":"                   \"map\": init_targ_map})"},{"line_number":187,"context_line":"        return weighted_ports, portg_id, init_targ_map"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_effb91bf","line":184,"range":{"start_line":184,"start_character":34,"end_line":184,"end_character":41},"updated":"2016-01-05 01:20:17.000000000","message":"Missing . EOL","commit_id":"16405b1671248a241f2a1c5945aa26c781712028"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"61747ff69097393f785945819cb0fbe53515dbd6","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        engines \u003d self.client.get_all_engines()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        for engine in engines:"},{"line_number":136,"context_line":"            contrs \u003d json.loads(engine[\u0027NODELIST\u0027])"},{"line_number":137,"context_line":"            engine_id \u003d engine[\u0027ID\u0027]"},{"line_number":138,"context_line":"            if lun_info[\u0027OWNINGCONTROLLER\u0027] in contrs:"},{"line_number":139,"context_line":"                LOG.debug(\"LUN %(lun_id)s belongs to engine %(engine_id)s.\","},{"line_number":140,"context_line":"                          {\"lun_id\": lun_id, \"engine_id\": engine_id})"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_28583e56","line":137,"range":{"start_line":136,"start_character":0,"end_line":137,"end_character":36},"updated":"2016-01-12 06:38:17.000000000","message":"1. contrs \u0026 engine_id both are local var, are they always be set?\n2. If lun\u0027s controller not in all get engines, what will happen? Will this scense happen? Add some comments?","commit_id":"e94656de9aec7fbf32f572417256c64e5934db76"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"61747ff69097393f785945819cb0fbe53515dbd6","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        for engine in engines:"},{"line_number":136,"context_line":"            contrs \u003d json.loads(engine[\u0027NODELIST\u0027])"},{"line_number":137,"context_line":"            engine_id \u003d engine[\u0027ID\u0027]"},{"line_number":138,"context_line":"            if lun_info[\u0027OWNINGCONTROLLER\u0027] in contrs:"},{"line_number":139,"context_line":"                LOG.debug(\"LUN %(lun_id)s belongs to engine %(engine_id)s.\","},{"line_number":140,"context_line":"                          {\"lun_id\": lun_id, \"engine_id\": engine_id})"},{"line_number":141,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_e82b0632","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":54},"updated":"2016-01-12 06:38:17.000000000","message":"We just use owningcontoller from lun_info in this function. Can we get contoller_id at the beginning.","commit_id":"e94656de9aec7fbf32f572417256c64e5934db76"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"61747ff69097393f785945819cb0fbe53515dbd6","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            engines \u003d description.replace(constants.PORTGROUP_DESCRIP_PREFIX,"},{"line_number":156,"context_line":"                                          \"\")"},{"line_number":157,"context_line":"            engines \u003d engines.split(\u0027,\u0027)"},{"line_number":158,"context_line":"            ports \u003d self.client.get_fc_ports_by_portgroup(portg_id)"},{"line_number":159,"context_line":"            if engine_id in engines:"},{"line_number":160,"context_line":"                LOG.debug(\"Have already selected ports for engine %s, just \""},{"line_number":161,"context_line":"                          \"use them.\", engine_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_1c31fca2","line":158,"range":{"start_line":158,"start_character":0,"end_line":158,"end_character":67},"updated":"2016-01-12 06:38:17.000000000","message":"It\u0027s better to put this line into \u0027if engine_id in engines\u0027 block.","commit_id":"e94656de9aec7fbf32f572417256c64e5934db76"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"61747ff69097393f785945819cb0fbe53515dbd6","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def get_init_targ_map(self, wwns, host_id):"},{"line_number":215,"context_line":"        error_ret \u003d ([], None, {})"},{"line_number":216,"context_line":"        if not host_id:"},{"line_number":217,"context_line":"            return error_ret"},{"line_number":218,"context_line":"        view_name \u003d constants.MAPPING_VIEW_PREFIX + host_id"},{"line_number":219,"context_line":"        view_id \u003d self.client.find_mapping_view(view_name)"},{"line_number":220,"context_line":"        if not view_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_fc9428e9","line":217,"range":{"start_line":217,"start_character":0,"end_line":217,"end_character":28},"updated":"2016-01-12 06:38:17.000000000","message":"Should be followed by a empty line.","commit_id":"e94656de9aec7fbf32f572417256c64e5934db76"}],"cinder/volume/drivers/huawei/huawei_driver.py":[{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"dbd3601d3998c9dd5e7892b857b602bf1362dc5d","unresolved":false,"context_lines":[{"line_number":1133,"context_line":"                FC zone enhancement"},{"line_number":1134,"context_line":"                Volume hypermetro support"},{"line_number":1135,"context_line":"        2.0.0 - Rename to HuaweiFCDriver"},{"line_number":1136,"context_line":"        2.0.1 - Manage/unmanage volume support"},{"line_number":1137,"context_line":"    \"\"\""},{"line_number":1138,"context_line":""},{"line_number":1139,"context_line":"    VERSION \u003d \"2.0.1\""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_ef9871c2","line":1136,"range":{"start_line":1136,"start_character":16,"end_line":1136,"end_character":46},"updated":"2016-01-05 01:20:17.000000000","message":"This BP is \"Balanced FC port selection when zoning\", not \"Manage/unmanage volume support\".","commit_id":"16405b1671248a241f2a1c5945aa26c781712028"}],"cinder/volume/drivers/huawei/rest_client.py":[{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"61747ff69097393f785945819cb0fbe53515dbd6","unresolved":false,"context_lines":[{"line_number":1981,"context_line":""},{"line_number":1982,"context_line":"        return result.get(\"data\", {})"},{"line_number":1983,"context_line":""},{"line_number":1984,"context_line":"    def change_portg_desc(self, portg_id, description):"},{"line_number":1985,"context_line":"        portg_info \u003d self.get_portg_info(portg_id)"},{"line_number":1986,"context_line":"        new_description \u003d portg_info.get(\u0027DESCRIPTION\u0027) + \u0027,\u0027 + description"},{"line_number":1987,"context_line":"        url \u003d \"/portgroup/%s\" % portg_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_9c516c65","line":1984,"range":{"start_line":1984,"start_character":8,"end_line":1984,"end_character":25},"updated":"2016-01-12 06:38:17.000000000","message":"A better name maybe append_portg_desc.","commit_id":"e94656de9aec7fbf32f572417256c64e5934db76"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"d07135a07c3c6cd577e17ec48fa91dfcb2e2bc70","unresolved":false,"context_lines":[{"line_number":1803,"context_line":"        if \u0027data\u0027 in result:"},{"line_number":1804,"context_line":"            return result[\"data\"][\"AVAILABLEHOSTLUNIDLIST\"]"},{"line_number":1805,"context_line":""},{"line_number":1806,"context_line":"    def create_metrogroup(self, name, domain_id):"},{"line_number":1807,"context_line":"        url \u003d \"/HyperMetro_ConsistentGroup/\""},{"line_number":1808,"context_line":"        data \u003d {\"NAME\": name,"},{"line_number":1809,"context_line":"                \"TYPE\": \"15364\","},{"line_number":1810,"context_line":"                \"DESCRIPTION\": \"\","},{"line_number":1811,"context_line":"                \"RECOVERYPOLICY\": \"1\","},{"line_number":1812,"context_line":"                \"SPEED\": \"2\","},{"line_number":1813,"context_line":"                \"PRIORITYSTATIONTYPE\": \"0\","},{"line_number":1814,"context_line":"                \"DOMAINID\": domain_id}"},{"line_number":1815,"context_line":"        result \u003d self.call(url, data, \"POST\")"},{"line_number":1816,"context_line":""},{"line_number":1817,"context_line":"        msg \u003d _(\u0027create hypermetro group error.\u0027)"},{"line_number":1818,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1819,"context_line":"        if \u0027data\u0027 in result:"},{"line_number":1820,"context_line":"            return result[\"data\"][\"ID\"]"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"    def delete_metrogroup(self, metrogroup_id):"},{"line_number":1823,"context_line":"        url \u003d \"/HyperMetro_ConsistentGroup/\" + metrogroup_id"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_6d10ff59","line":1820,"range":{"start_line":1806,"start_character":4,"end_line":1820,"end_character":39},"updated":"2016-01-14 06:46:19.000000000","message":"Drop the functions about metrogroup.","commit_id":"077f6d0fb5d6a220cf8d0b0bb99619010a67e57d"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"d07135a07c3c6cd577e17ec48fa91dfcb2e2bc70","unresolved":false,"context_lines":[{"line_number":1819,"context_line":"        if \u0027data\u0027 in result:"},{"line_number":1820,"context_line":"            return result[\"data\"][\"ID\"]"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":"    def delete_metrogroup(self, metrogroup_id):"},{"line_number":1823,"context_line":"        url \u003d \"/HyperMetro_ConsistentGroup/\" + metrogroup_id"},{"line_number":1824,"context_line":"        data \u003d {\"TYPE\": \"15364\","},{"line_number":1825,"context_line":"                \"ID\": metrogroup_id"},{"line_number":1826,"context_line":"                }"},{"line_number":1827,"context_line":"        result \u003d self.call(url, data, \"POST\")"},{"line_number":1828,"context_line":""},{"line_number":1829,"context_line":"        msg \u003d _(\u0027create hypermetro group error.\u0027)"},{"line_number":1830,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1831,"context_line":""},{"line_number":1832,"context_line":"    def get_metrogroup(self, metrogroup_id):"},{"line_number":1833,"context_line":"        url \u003d \"/HyperMetro_ConsistentGroup/\" + metrogroup_id"},{"line_number":1834,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":1835,"context_line":""},{"line_number":1836,"context_line":"        msg \u003d _(\u0027Get hypermetro group error.\u0027)"},{"line_number":1837,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1838,"context_line":""},{"line_number":1839,"context_line":"    def stop_metrogroup(self, metrogroup_id):"},{"line_number":1840,"context_line":"        url \u003d \"/HyperMetro_ConsistentGroup/stop\""},{"line_number":1841,"context_line":"        data \u003d {\"TYPE\": \"15364\","},{"line_number":1842,"context_line":"                \"ID\": metrogroup_id"},{"line_number":1843,"context_line":"                }"},{"line_number":1844,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"        msg \u003d _(\u0027stop hypermetro group error.\u0027)"},{"line_number":1847,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"    def sync_metrogroup(self, metrogroup_id):"},{"line_number":1850,"context_line":"        url \u003d \"/HyperMetro_ConsistentGroup/sync\""},{"line_number":1851,"context_line":"        data \u003d {\"TYPE\": \"15364\","},{"line_number":1852,"context_line":"                \"ID\": metrogroup_id"},{"line_number":1853,"context_line":"                }"},{"line_number":1854,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1855,"context_line":""},{"line_number":1856,"context_line":"        msg \u003d _(\u0027sync hypermetro group error.\u0027)"},{"line_number":1857,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"    def add_metro_to_metrogroup(self, metrogroup_id, metro_id):"},{"line_number":1860,"context_line":"        url \u003d \"/hyperMetro/associate/pair\""},{"line_number":1861,"context_line":"        data \u003d {\"TYPE\": \"15364\","},{"line_number":1862,"context_line":"                \"ID\": metrogroup_id,"},{"line_number":1863,"context_line":"                \"ASSOCIATEOBJTYPE\": \"15361\","},{"line_number":1864,"context_line":"                \"ASSOCIATEOBJID\": metro_id}"},{"line_number":1865,"context_line":"        result \u003d self.call(url, data, \"PUT\")"},{"line_number":1866,"context_line":""},{"line_number":1867,"context_line":"        msg \u003d _(\u0027Add hypermetro to metrogroup error.\u0027)"},{"line_number":1868,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1869,"context_line":""},{"line_number":1870,"context_line":"    def remove_metro_from_metrogroup(self, metrogroup_id, metro_id):"},{"line_number":1871,"context_line":"        url \u003d \"/hyperMetro/associate/pair\""},{"line_number":1872,"context_line":"        data \u003d {\"TYPE\": \"15364\","},{"line_number":1873,"context_line":"                \"ID\": metrogroup_id,"},{"line_number":1874,"context_line":"                \"ASSOCIATEOBJTYPE\": \"15361\","},{"line_number":1875,"context_line":"                \"ASSOCIATEOBJID\": metro_id}"},{"line_number":1876,"context_line":"        result \u003d self.call(url, data, \"DELETE\")"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        msg \u003d _(\u0027Delete hypermetro from metrogroup error.\u0027)"},{"line_number":1879,"context_line":"        self._assert_rest_result(result, msg)"},{"line_number":1880,"context_line":""},{"line_number":1881,"context_line":"    def get_portgs_by_portid(self, port_id):"},{"line_number":1882,"context_line":"        portgs \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"da6ed579_ed04ef18","line":1879,"range":{"start_line":1822,"start_character":4,"end_line":1879,"end_character":45},"updated":"2016-01-14 06:46:19.000000000","message":"Same.","commit_id":"077f6d0fb5d6a220cf8d0b0bb99619010a67e57d"}]}
