)]}'
{"manila/share/drivers/qnap/api.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e5fd5d57a98f6525fb6519ef9c59c131e5f5b079","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            \u0027vol_size\u0027: six.text_type(share[\u0027size\u0027]) + \u0027GB\u0027,"},{"line_number":198,"context_line":"            \u0027threshold\u0027: \u002780\u0027,"},{"line_number":199,"context_line":"            \u0027dedup\u0027: \u0027sha512\u0027 if kwargs[\u0027qnap_deduplication\u0027] else \u0027off\u0027,"},{"line_number":200,"context_line":"            \u0027compression\u0027: \u00271\u0027 if kwargs[\u0027qnap_compression\u0027] is True else \u00270\u0027,"},{"line_number":201,"context_line":"            \u0027thin_pro\u0027: \u00271\u0027 if kwargs[\u0027qnap_thin_provision\u0027] is True else \u00270\u0027,"},{"line_number":202,"context_line":"            \u0027cache\u0027: \u00271\u0027 if kwargs[\u0027qnap_ssd_cache\u0027] else \u00270\u0027,"},{"line_number":203,"context_line":"            \u0027cifs_enable\u0027: \u00270\u0027 if share_proto \u003d\u003d \u0027NFS\u0027 else \u00271\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_b3a3549e","line":200,"range":{"start_line":200,"start_character":33,"end_line":200,"end_character":68},"updated":"2017-10-09 08:19:25.000000000","message":"if if kwargs[\u0027qnap_compression\u0027] is True  /  if kwargs[\u0027qnap_compression\u0027]?","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ef71ea16f7e1a36e20be1ee7f31a3128c3a90a8e","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            \u0027vol_size\u0027: six.text_type(share[\u0027size\u0027]) + \u0027GB\u0027,"},{"line_number":198,"context_line":"            \u0027threshold\u0027: \u002780\u0027,"},{"line_number":199,"context_line":"            \u0027dedup\u0027: \u0027sha512\u0027 if kwargs[\u0027qnap_deduplication\u0027] else \u0027off\u0027,"},{"line_number":200,"context_line":"            \u0027compression\u0027: \u00271\u0027 if kwargs[\u0027qnap_compression\u0027] is True else \u00270\u0027,"},{"line_number":201,"context_line":"            \u0027thin_pro\u0027: \u00271\u0027 if kwargs[\u0027qnap_thin_provision\u0027] is True else \u00270\u0027,"},{"line_number":202,"context_line":"            \u0027cache\u0027: \u00271\u0027 if kwargs[\u0027qnap_ssd_cache\u0027] else \u00270\u0027,"},{"line_number":203,"context_line":"            \u0027cifs_enable\u0027: \u00270\u0027 if share_proto \u003d\u003d \u0027NFS\u0027 else \u00271\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_7156562c","line":200,"range":{"start_line":200,"start_character":33,"end_line":200,"end_character":68},"in_reply_to":"7f515b1d_b3a3549e","updated":"2017-10-24 03:51:10.000000000","message":"\u003e if if kwargs[\u0027qnap_compression\u0027] is True  /  if kwargs[\u0027qnap_compression\u0027]?\n\nThe value of these arguments should be boolean value.","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e5fd5d57a98f6525fb6519ef9c59c131e5f5b079","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            \u0027compression\u0027: \u00271\u0027 if share_dict[\u0027compression\u0027] else \u00270\u0027,"},{"line_number":505,"context_line":"            \u0027thin_pro\u0027: \u00271\u0027 if share_dict[\u0027thin_provision\u0027] else \u00270\u0027,"},{"line_number":506,"context_line":"            \u0027cache\u0027: \u00271\u0027 if share_dict[\u0027ssd_cache\u0027] else \u00270\u0027,"},{"line_number":507,"context_line":"            \u0027cifs_enable\u0027: \u00270\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027 else \u00271\u0027,"},{"line_number":508,"context_line":"            \u0027nfs_enable\u0027: \u00270\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027CIFS\u0027 else \u00271\u0027,"},{"line_number":509,"context_line":"            \u0027afp_enable\u0027: \u00270\u0027,"},{"line_number":510,"context_line":"            \u0027ftp_enable\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_33076485","line":507,"range":{"start_line":507,"start_character":27,"end_line":507,"end_character":77},"updated":"2017-10-09 08:19:25.000000000","message":"It should be better if you change it to \"\u0027cifs_enable\u0027:  \u00271\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027CIFS\u0027 else \u00270\u0027\"\n\n\n\u0027nfs_enable\u0027: \u00271\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027 else \u00270\u0027\n\n\nIf there is another protocol it will have a problem.","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ef71ea16f7e1a36e20be1ee7f31a3128c3a90a8e","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            \u0027compression\u0027: \u00271\u0027 if share_dict[\u0027compression\u0027] else \u00270\u0027,"},{"line_number":505,"context_line":"            \u0027thin_pro\u0027: \u00271\u0027 if share_dict[\u0027thin_provision\u0027] else \u00270\u0027,"},{"line_number":506,"context_line":"            \u0027cache\u0027: \u00271\u0027 if share_dict[\u0027ssd_cache\u0027] else \u00270\u0027,"},{"line_number":507,"context_line":"            \u0027cifs_enable\u0027: \u00270\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027 else \u00271\u0027,"},{"line_number":508,"context_line":"            \u0027nfs_enable\u0027: \u00270\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027CIFS\u0027 else \u00271\u0027,"},{"line_number":509,"context_line":"            \u0027afp_enable\u0027: \u00270\u0027,"},{"line_number":510,"context_line":"            \u0027ftp_enable\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_113ba2eb","line":507,"range":{"start_line":507,"start_character":27,"end_line":507,"end_character":77},"in_reply_to":"7f515b1d_33076485","updated":"2017-10-24 03:51:10.000000000","message":"Done","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"5faca422720d7b0f97ccffaac1246cfdd082e04e","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            \u0027cifs_enable\u0027: \u00271\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027CIFS\u0027 else \u00270\u0027,"},{"line_number":507,"context_line":"            \u0027nfs_enable\u0027: \u00271\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027 else \u00270\u0027,"},{"line_number":508,"context_line":"            \u0027afp_enable\u0027: \u00270\u0027,"},{"line_number":509,"context_line":"            \u0027ftp_enable\u0027: \u00270\u0027,"},{"line_number":510,"context_line":"            \u0027hidden\u0027: \u00270\u0027,"},{"line_number":511,"context_line":"            \u0027oplocks\u0027: \u00271\u0027,"},{"line_number":512,"context_line":"            \u0027sync\u0027: \u0027always\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_23bbaf0e","line":509,"range":{"start_line":509,"start_character":12,"end_line":509,"end_character":30},"updated":"2017-11-15 10:03:27.000000000","message":"Does this relate to one of the following items? \n- Thin Provisioning\n - SSD Cache\n - Deduplication\n - Compression","commit_id":"93a8113dff1ccf0d89b66fc499341db096e95cc3"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"fd253b960bc0a7a437adc3cbdf31ed64614b2f15","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            \u0027cifs_enable\u0027: \u00271\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027CIFS\u0027 else \u00270\u0027,"},{"line_number":507,"context_line":"            \u0027nfs_enable\u0027: \u00271\u0027 if share_dict[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027 else \u00270\u0027,"},{"line_number":508,"context_line":"            \u0027afp_enable\u0027: \u00270\u0027,"},{"line_number":509,"context_line":"            \u0027ftp_enable\u0027: \u00270\u0027,"},{"line_number":510,"context_line":"            \u0027hidden\u0027: \u00270\u0027,"},{"line_number":511,"context_line":"            \u0027oplocks\u0027: \u00271\u0027,"},{"line_number":512,"context_line":"            \u0027sync\u0027: \u0027always\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_25659346","line":509,"range":{"start_line":509,"start_character":12,"end_line":509,"end_character":30},"in_reply_to":"1f485f77_23bbaf0e","updated":"2017-11-19 02:38:26.000000000","message":"No, it is not. I should fix it later.","commit_id":"93a8113dff1ccf0d89b66fc499341db096e95cc3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f14bbaa5f83bbac96f4921805c4a27a2804142df","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    @_connection_checker"},{"line_number":589,"context_line":"    def edit_host(self, hostname, ipv4_list):"},{"line_number":590,"context_line":"        \"\"\"Execute edit_host API.\"\"\""},{"line_number":591,"context_line":"        params \u003d {"},{"line_number":592,"context_line":"            \u0027module\u0027: \u0027hosts\u0027,"},{"line_number":593,"context_line":"            \u0027func\u0027: \u0027apply_sethost\u0027,"},{"line_number":594,"context_line":"            \u0027name\u0027: hostname,"},{"line_number":595,"context_line":"            \u0027ipaddr_v4\u0027: ipv4_list,"},{"line_number":596,"context_line":"            \u0027sid\u0027: self.sid,"},{"line_number":597,"context_line":"        }"},{"line_number":598,"context_line":"        sanitized_params \u003d self._sanitize_params(params)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"        # urlencode with True parameter to parse ipv4_list"},{"line_number":601,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params, True)"},{"line_number":602,"context_line":"        url \u003d (\u0027/cgi-bin/accessrights/accessrightsRequest.cgi?%s\u0027 %"},{"line_number":603,"context_line":"               sanitized_params)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)"},{"line_number":606,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])"},{"line_number":607,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:"},{"line_number":608,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_SESSION_EXPIRED)"},{"line_number":609,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:"},{"line_number":610,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    @_connection_checker"},{"line_number":613,"context_line":"    def delete_host(self, hostname):"},{"line_number":614,"context_line":"        \"\"\"Execute delete_host API.\"\"\""},{"line_number":615,"context_line":"        params \u003d {"},{"line_number":616,"context_line":"            \u0027module\u0027: \u0027hosts\u0027,"},{"line_number":617,"context_line":"            \u0027func\u0027: \u0027apply_delhost\u0027,"},{"line_number":618,"context_line":"            \u0027host_name\u0027: hostname,"},{"line_number":619,"context_line":"            \u0027sid\u0027: self.sid,"},{"line_number":620,"context_line":"        }"},{"line_number":621,"context_line":"        sanitized_params \u003d self._sanitize_params(params)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)"},{"line_number":624,"context_line":"        url \u003d (\u0027/cgi-bin/accessrights/accessrightsRequest.cgi?%s\u0027 %"},{"line_number":625,"context_line":"               sanitized_params)"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)"},{"line_number":628,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])"},{"line_number":629,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:"},{"line_number":630,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_SESSION_EXPIRED)"},{"line_number":631,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:"},{"line_number":632,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    @_connection_checker"},{"line_number":635,"context_line":"    def set_nfs_access(self, sharename, access, host_name):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_9ee6aee8","line":632,"range":{"start_line":589,"start_character":0,"end_line":632,"end_character":72},"updated":"2017-11-21 12:22:34.000000000","message":"Maybe you could just combine those two functions. The only different value is \"ipv4_list\". You cloud just set ipv4_list to None by the default.\n\nif ipv4_list:\n   params[\u0027ipaddr_v4\u0027] \u003d ipv4_list","commit_id":"15bdbd356aec7595a36ff679f0ad9060d2538eb0"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"b0c4dfc8fdc16882c477d1b53ab904ab96196d38","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    @_connection_checker"},{"line_number":589,"context_line":"    def edit_host(self, hostname, ipv4_list):"},{"line_number":590,"context_line":"        \"\"\"Execute edit_host API.\"\"\""},{"line_number":591,"context_line":"        params \u003d {"},{"line_number":592,"context_line":"            \u0027module\u0027: \u0027hosts\u0027,"},{"line_number":593,"context_line":"            \u0027func\u0027: \u0027apply_sethost\u0027,"},{"line_number":594,"context_line":"            \u0027name\u0027: hostname,"},{"line_number":595,"context_line":"            \u0027ipaddr_v4\u0027: ipv4_list,"},{"line_number":596,"context_line":"            \u0027sid\u0027: self.sid,"},{"line_number":597,"context_line":"        }"},{"line_number":598,"context_line":"        sanitized_params \u003d self._sanitize_params(params)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"        # urlencode with True parameter to parse ipv4_list"},{"line_number":601,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params, True)"},{"line_number":602,"context_line":"        url \u003d (\u0027/cgi-bin/accessrights/accessrightsRequest.cgi?%s\u0027 %"},{"line_number":603,"context_line":"               sanitized_params)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)"},{"line_number":606,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])"},{"line_number":607,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:"},{"line_number":608,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_SESSION_EXPIRED)"},{"line_number":609,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:"},{"line_number":610,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    @_connection_checker"},{"line_number":613,"context_line":"    def delete_host(self, hostname):"},{"line_number":614,"context_line":"        \"\"\"Execute delete_host API.\"\"\""},{"line_number":615,"context_line":"        params \u003d {"},{"line_number":616,"context_line":"            \u0027module\u0027: \u0027hosts\u0027,"},{"line_number":617,"context_line":"            \u0027func\u0027: \u0027apply_delhost\u0027,"},{"line_number":618,"context_line":"            \u0027host_name\u0027: hostname,"},{"line_number":619,"context_line":"            \u0027sid\u0027: self.sid,"},{"line_number":620,"context_line":"        }"},{"line_number":621,"context_line":"        sanitized_params \u003d self._sanitize_params(params)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)"},{"line_number":624,"context_line":"        url \u003d (\u0027/cgi-bin/accessrights/accessrightsRequest.cgi?%s\u0027 %"},{"line_number":625,"context_line":"               sanitized_params)"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)"},{"line_number":628,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])"},{"line_number":629,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:"},{"line_number":630,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_SESSION_EXPIRED)"},{"line_number":631,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:"},{"line_number":632,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    @_connection_checker"},{"line_number":635,"context_line":"    def set_nfs_access(self, sharename, access, host_name):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_795f4441","line":632,"range":{"start_line":589,"start_character":0,"end_line":632,"end_character":72},"in_reply_to":"ff82abbf_9ee6aee8","updated":"2017-11-22 08:18:08.000000000","message":"I prefer not to combine these two functions. There are two reasons. First, the purpose of edit_host() function is to update the attribute of \"host\" in QNAP NAS. On the other hand, delete_host() is to remove the \"host\" in NAS. For now, the different parts between edit_host() and delete_host() are only the value of params[\"func\"] and params[\"ipaddr_v4\"]. There might be more options can be set in edit_host() function in the future. \nSecond, there are kinds of NAS model and firmware version supported in QNAP manila driver. There might be different implementation version of edit_host() and delete_host() function in the future.\nDue to the compatibility, I prefer not to combine these two functions.","commit_id":"15bdbd356aec7595a36ff679f0ad9060d2538eb0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f14bbaa5f83bbac96f4921805c4a27a2804142df","unresolved":false,"context_lines":[{"line_number":653,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_SESSION_EXPIRED)"},{"line_number":654,"context_line":"        # share does not exist"},{"line_number":655,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d \u0027-204003\u0027:"},{"line_number":656,"context_line":"            return"},{"line_number":657,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:"},{"line_number":658,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_beaff292","line":656,"range":{"start_line":656,"start_character":5,"end_line":656,"end_character":18},"updated":"2017-11-21 12:22:34.000000000","message":"Could you add a warning log?","commit_id":"15bdbd356aec7595a36ff679f0ad9060d2538eb0"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"b0c4dfc8fdc16882c477d1b53ab904ab96196d38","unresolved":false,"context_lines":[{"line_number":653,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_SESSION_EXPIRED)"},{"line_number":654,"context_line":"        # share does not exist"},{"line_number":655,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d \u0027-204003\u0027:"},{"line_number":656,"context_line":"            return"},{"line_number":657,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:"},{"line_number":658,"context_line":"            raise exception.ShareBackendException(msg\u003dMSG_UNEXPECT_RESP)"},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_643c5bbf","line":656,"range":{"start_line":656,"start_character":5,"end_line":656,"end_character":18},"in_reply_to":"ff82abbf_beaff292","updated":"2017-11-22 08:18:08.000000000","message":"Done","commit_id":"15bdbd356aec7595a36ff679f0ad9060d2538eb0"}],"manila/share/drivers/qnap/qnap.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e5fd5d57a98f6525fb6519ef9c59c131e5f5b079","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027Compression value for created QNAP shares.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027qnap_deduplication\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Deduplication value for created QNAP shares.\u0027),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027qnap_ssd_cache\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027SSD Cache value for created QNAP shares.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_d3101003","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":24},"updated":"2017-10-09 08:19:25.000000000","message":"Could you add \"Dedupe cannot be enabled without thin_provision.\"  in qnap_deduplication help message?","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ef71ea16f7e1a36e20be1ee7f31a3128c3a90a8e","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027Compression value for created QNAP shares.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027qnap_deduplication\u0027,"},{"line_number":62,"context_line":"                default\u003dFalse,"},{"line_number":63,"context_line":"                help\u003d\u0027Deduplication value for created QNAP shares.\u0027),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027qnap_ssd_cache\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027SSD Cache value for created QNAP shares.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_11b84274","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":24},"in_reply_to":"7f515b1d_d3101003","updated":"2017-10-24 03:51:10.000000000","message":"Done","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e5fd5d57a98f6525fb6519ef9c59c131e5f5b079","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            self.api_executor \u003d self._create_api_executor()"},{"line_number":101,"context_line":"        except Exception:"},{"line_number":102,"context_line":"            LOG.exception(\u0027Failed to create HTTP client. Check IP \u0027"},{"line_number":103,"context_line":"                              \u0027address, port, username, password and make \u0027"},{"line_number":104,"context_line":"                              \u0027sure the array version is compatible.\u0027)"},{"line_number":105,"context_line":"            raise"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_53fc20b4","line":103,"range":{"start_line":103,"start_character":25,"end_line":103,"end_character":30},"updated":"2017-10-09 08:19:25.000000000","message":"Why it need to be changed?","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ef71ea16f7e1a36e20be1ee7f31a3128c3a90a8e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            self.api_executor \u003d self._create_api_executor()"},{"line_number":101,"context_line":"        except Exception:"},{"line_number":102,"context_line":"            LOG.exception(\u0027Failed to create HTTP client. Check IP \u0027"},{"line_number":103,"context_line":"                              \u0027address, port, username, password and make \u0027"},{"line_number":104,"context_line":"                              \u0027sure the array version is compatible.\u0027)"},{"line_number":105,"context_line":"            raise"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_b173aee7","line":103,"range":{"start_line":103,"start_character":25,"end_line":103,"end_character":30},"in_reply_to":"7f515b1d_53fc20b4","updated":"2017-10-24 03:51:10.000000000","message":"Done","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e5fd5d57a98f6525fb6519ef9c59c131e5f5b079","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        compression \u003d self.private_storage.get(share[\u0027id\u0027], \u0027compression\u0027)"},{"line_number":376,"context_line":"        deduplication \u003d self.private_storage.get(share[\u0027id\u0027], \u0027deduplication\u0027)"},{"line_number":377,"context_line":"        ssd_cache \u003d self.private_storage.get(share[\u0027id\u0027], \u0027ssd_cache\u0027)"},{"line_number":378,"context_line":"        LOG.debug(\u0027thin_provision: %s\u0027, thin_provision)"},{"line_number":379,"context_line":"        LOG.debug(\u0027compression: %s\u0027, compression)"},{"line_number":380,"context_line":"        LOG.debug(\u0027deduplication: %s\u0027, deduplication)"},{"line_number":381,"context_line":"        LOG.debug(\u0027ssd_cache: %s\u0027, ssd_cache)"},{"line_number":382,"context_line":"        share_dict \u003d {"},{"line_number":383,"context_line":"            \u0027sharename\u0027: volName,"},{"line_number":384,"context_line":"            \u0027old_sharename\u0027: volName,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_d336d051","line":381,"range":{"start_line":378,"start_character":8,"end_line":381,"end_character":45},"updated":"2017-10-09 08:19:25.000000000","message":"How about debug those info in one debug log?","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ef71ea16f7e1a36e20be1ee7f31a3128c3a90a8e","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        compression \u003d self.private_storage.get(share[\u0027id\u0027], \u0027compression\u0027)"},{"line_number":376,"context_line":"        deduplication \u003d self.private_storage.get(share[\u0027id\u0027], \u0027deduplication\u0027)"},{"line_number":377,"context_line":"        ssd_cache \u003d self.private_storage.get(share[\u0027id\u0027], \u0027ssd_cache\u0027)"},{"line_number":378,"context_line":"        LOG.debug(\u0027thin_provision: %s\u0027, thin_provision)"},{"line_number":379,"context_line":"        LOG.debug(\u0027compression: %s\u0027, compression)"},{"line_number":380,"context_line":"        LOG.debug(\u0027deduplication: %s\u0027, deduplication)"},{"line_number":381,"context_line":"        LOG.debug(\u0027ssd_cache: %s\u0027, ssd_cache)"},{"line_number":382,"context_line":"        share_dict \u003d {"},{"line_number":383,"context_line":"            \u0027sharename\u0027: volName,"},{"line_number":384,"context_line":"            \u0027old_sharename\u0027: volName,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_717d36b0","line":381,"range":{"start_line":378,"start_character":8,"end_line":381,"end_character":45},"in_reply_to":"7f515b1d_d336d051","updated":"2017-10-24 03:51:10.000000000","message":"Done","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e5fd5d57a98f6525fb6519ef9c59c131e5f5b079","unresolved":false,"context_lines":[{"line_number":642,"context_line":"                    raise exception.InvalidShareAccess(reason\u003dreason)"},{"line_number":643,"context_line":"        else:"},{"line_number":644,"context_line":"            # create a host for share"},{"line_number":645,"context_line":"                    self.api_executor.add_host(host_name, access_to)"},{"line_number":646,"context_line":"        if access_level \u003d\u003d constants.ACCESS_LEVEL_RO:"},{"line_number":647,"context_line":"            self.api_executor.set_nfs_access(vol_name, 1, host_name)"},{"line_number":648,"context_line":"        elif access_level \u003d\u003d constants.ACCESS_LEVEL_RW:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_13cd8830","line":645,"range":{"start_line":645,"start_character":12,"end_line":645,"end_character":20},"updated":"2017-10-09 08:19:25.000000000","message":"There\u0027s too much blanks.","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ef71ea16f7e1a36e20be1ee7f31a3128c3a90a8e","unresolved":false,"context_lines":[{"line_number":642,"context_line":"                    raise exception.InvalidShareAccess(reason\u003dreason)"},{"line_number":643,"context_line":"        else:"},{"line_number":644,"context_line":"            # create a host for share"},{"line_number":645,"context_line":"                    self.api_executor.add_host(host_name, access_to)"},{"line_number":646,"context_line":"        if access_level \u003d\u003d constants.ACCESS_LEVEL_RO:"},{"line_number":647,"context_line":"            self.api_executor.set_nfs_access(vol_name, 1, host_name)"},{"line_number":648,"context_line":"        elif access_level \u003d\u003d constants.ACCESS_LEVEL_RW:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f4e5783_514c7a9d","line":645,"range":{"start_line":645,"start_character":12,"end_line":645,"end_character":20},"in_reply_to":"7f515b1d_13cd8830","updated":"2017-10-24 03:51:10.000000000","message":"Done","commit_id":"b2bc15d826eefb0a9a7b944b695ba1fddddb98c8"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"5faca422720d7b0f97ccffaac1246cfdd082e04e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,"},{"line_number":54,"context_line":"               required\u003dTrue,"},{"line_number":55,"context_line":"               help\u003d\u0027Pool within which QNAP shares must be created.\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027qnap_thin_provision\u0027,"},{"line_number":57,"context_line":"                default\u003dTrue,"},{"line_number":58,"context_line":"                help\u003d\u0027Thin-provision value for created QNAP shares.\u0027),"},{"line_number":59,"context_line":"    cfg.BoolOpt(\u0027qnap_compression\u0027,"},{"line_number":60,"context_line":"                default\u003dTrue,"},{"line_number":61,"context_line":"                help\u003d\u0027Compression value for created QNAP shares.\u0027),"},{"line_number":62,"context_line":"    cfg.BoolOpt(\u0027qnap_deduplication\u0027,"},{"line_number":63,"context_line":"                default\u003dFalse,"},{"line_number":64,"context_line":"                help\u003d\u0027Deduplication value for created QNAP shares. The\u0027"},{"line_number":65,"context_line":"                     \u0027deduplication feature cannot be enabled without\u0027"},{"line_number":66,"context_line":"                     \u0027 thin provisioning is enabled.\u0027),"},{"line_number":67,"context_line":"    cfg.BoolOpt(\u0027qnap_ssd_cache\u0027,"},{"line_number":68,"context_line":"                default\u003dFalse,"},{"line_number":69,"context_line":"                help\u003d\u0027SSD Cache value for created QNAP shares.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_032c3300","line":66,"range":{"start_line":56,"start_character":3,"end_line":66,"end_character":55},"updated":"2017-11-15 10:03:27.000000000","message":"We already have the common capabilities named thin_provisioning, compression, dedupe [1]. But you added\nthose new repeated capabilities for qnap. How about if the share type with both thin_provisioning and qnap_thin_provision? Maybe you should just use the common capabilities in your driver, or at least you should confirm the common capabilities in your driver if you really have to add your own capabilities. or may well be missing something?\n\n[1] https://github.com/openstack/manila/blob/master/doc/source/admin/capabilities_and_extra_specs.rst","commit_id":"93a8113dff1ccf0d89b66fc499341db096e95cc3"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"fd253b960bc0a7a437adc3cbdf31ed64614b2f15","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,"},{"line_number":54,"context_line":"               required\u003dTrue,"},{"line_number":55,"context_line":"               help\u003d\u0027Pool within which QNAP shares must be created.\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027qnap_thin_provision\u0027,"},{"line_number":57,"context_line":"                default\u003dTrue,"},{"line_number":58,"context_line":"                help\u003d\u0027Thin-provision value for created QNAP shares.\u0027),"},{"line_number":59,"context_line":"    cfg.BoolOpt(\u0027qnap_compression\u0027,"},{"line_number":60,"context_line":"                default\u003dTrue,"},{"line_number":61,"context_line":"                help\u003d\u0027Compression value for created QNAP shares.\u0027),"},{"line_number":62,"context_line":"    cfg.BoolOpt(\u0027qnap_deduplication\u0027,"},{"line_number":63,"context_line":"                default\u003dFalse,"},{"line_number":64,"context_line":"                help\u003d\u0027Deduplication value for created QNAP shares. The\u0027"},{"line_number":65,"context_line":"                     \u0027deduplication feature cannot be enabled without\u0027"},{"line_number":66,"context_line":"                     \u0027 thin provisioning is enabled.\u0027),"},{"line_number":67,"context_line":"    cfg.BoolOpt(\u0027qnap_ssd_cache\u0027,"},{"line_number":68,"context_line":"                default\u003dFalse,"},{"line_number":69,"context_line":"                help\u003d\u0027SSD Cache value for created QNAP shares.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_05cdf72f","line":66,"range":{"start_line":56,"start_character":3,"end_line":66,"end_character":55},"in_reply_to":"1f485f77_032c3300","updated":"2017-11-19 02:38:26.000000000","message":"Thanks for your suggestion, our driver will only use the common capabilities.","commit_id":"93a8113dff1ccf0d89b66fc499341db096e95cc3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"6212b432f8216b3338aa7e8f66db85a91dd6f840","unresolved":false,"context_lines":[{"line_number":331,"context_line":"            self.configuration.qnap_poolname,"},{"line_number":332,"context_line":"            create_share_name,"},{"line_number":333,"context_line":"            share_proto,"},{"line_number":334,"context_line":"            qnap_thin_provision\u003dself.configuration.qnap_thin_provision,"},{"line_number":335,"context_line":"            qnap_compression\u003dself.configuration.qnap_compression,"},{"line_number":336,"context_line":"            qnap_deduplication\u003dself.configuration.qnap_deduplication,"},{"line_number":337,"context_line":"            qnap_ssd_cache\u003dself.configuration.qnap_ssd_cache)"},{"line_number":338,"context_line":"        retryCount \u003d 5"},{"line_number":339,"context_line":"        retrySleepTime \u003d 5"},{"line_number":340,"context_line":"        while retryCount \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_bf2675cd","line":337,"range":{"start_line":334,"start_character":7,"end_line":337,"end_character":61},"updated":"2017-11-16 03:41:17.000000000","message":"Above\nWhat I am trying to say is that we have to check the common capabilities (like thin_provision,..) in share type first, and we can get it by share_types.get_share_type_extra_specs(share[\u0027share_type_id\u0027]) \nhttps://github.com/openstack/manila/blob/master/manila/share/drivers/cephfs/driver.py#L227.\n\n\nIf you want to add you own capabilities, like qnap_ssd_cache, you should set the key to qnap:ssd_cache, and get the value of the qnap:ssd_cache key from share type. like ssd_cache\u003d extra_specs.get(\"qnap:ssd_cache\", False). Please don\u0027t just get the value from the configuration options (self.configuration.qnap_ssd_cache).","commit_id":"93a8113dff1ccf0d89b66fc499341db096e95cc3"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"fd253b960bc0a7a437adc3cbdf31ed64614b2f15","unresolved":false,"context_lines":[{"line_number":331,"context_line":"            self.configuration.qnap_poolname,"},{"line_number":332,"context_line":"            create_share_name,"},{"line_number":333,"context_line":"            share_proto,"},{"line_number":334,"context_line":"            qnap_thin_provision\u003dself.configuration.qnap_thin_provision,"},{"line_number":335,"context_line":"            qnap_compression\u003dself.configuration.qnap_compression,"},{"line_number":336,"context_line":"            qnap_deduplication\u003dself.configuration.qnap_deduplication,"},{"line_number":337,"context_line":"            qnap_ssd_cache\u003dself.configuration.qnap_ssd_cache)"},{"line_number":338,"context_line":"        retryCount \u003d 5"},{"line_number":339,"context_line":"        retrySleepTime \u003d 5"},{"line_number":340,"context_line":"        while retryCount \u003e 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_65fcab3d","line":337,"range":{"start_line":334,"start_character":7,"end_line":337,"end_character":61},"in_reply_to":"1f485f77_bf2675cd","updated":"2017-11-19 02:38:26.000000000","message":"Thanks for your suggestion, our driver will get value from common capabilities and extra spec instead of from the configuration options.","commit_id":"93a8113dff1ccf0d89b66fc499341db096e95cc3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b46495d3d8061cfd558305dc3e67de6a4498b25d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,"},{"line_number":42,"context_line":"               required\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d\u0027The URL to manage QNAP Storage.\u0027),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027qnap_share_ip\u0027,"},{"line_number":45,"context_line":"               required\u003dTrue,"},{"line_number":46,"context_line":"               help\u003d\u0027NAS share IP for mounting shares.\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027qnap_nas_login\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_c2724212","line":44,"range":{"start_line":44,"start_character":2,"end_line":44,"end_character":14},"updated":"2017-11-20 02:53:58.000000000","message":"Is this any related to \"This adds enhanced supports to the QNAP Manila driver\":\n - Thin Provisioning\n - SSD Cache\n - Deduplication\n - Compression","commit_id":"df113d1e6ddcda59a986bd904c0327569b9ded9e"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"96470335e52539766fadd6977d65abc4b59c38b4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,"},{"line_number":42,"context_line":"               required\u003dTrue,"},{"line_number":43,"context_line":"               help\u003d\u0027The URL to manage QNAP Storage.\u0027),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027qnap_share_ip\u0027,"},{"line_number":45,"context_line":"               required\u003dTrue,"},{"line_number":46,"context_line":"               help\u003d\u0027NAS share IP for mounting shares.\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027qnap_nas_login\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_e1f724f5","line":44,"range":{"start_line":44,"start_character":2,"end_line":44,"end_character":14},"in_reply_to":"ff82abbf_c2724212","updated":"2017-11-21 05:09:05.000000000","message":"No, it is not. I will revert it.","commit_id":"df113d1e6ddcda59a986bd904c0327569b9ded9e"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"b46495d3d8061cfd558305dc3e67de6a4498b25d","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        LOG.debug(\u0027share: %s\u0027, share.__dict__)"},{"line_number":297,"context_line":"        extra_specs \u003d share_types.get_extra_specs_from_share(share)"},{"line_number":298,"context_line":"        LOG.debug(\u0027extra_specs: %s\u0027, extra_specs)"},{"line_number":299,"context_line":"        qnap_thin_provision \u003d (extra_specs.get(\"thin_provisioning\","},{"line_number":300,"context_line":"                               \u0027true\u0027).lower() \u003d\u003d \u0027true\u0027)"},{"line_number":301,"context_line":"        qnap_compression \u003d (extra_specs.get(\"compression\", \u0027true\u0027).lower()"},{"line_number":302,"context_line":"                            \u003d\u003d \u0027true\u0027)"},{"line_number":303,"context_line":"        qnap_deduplication \u003d (extra_specs.get(\"dedupe\", \u0027false\u0027).lower()"},{"line_number":304,"context_line":"                              \u003d\u003d \u0027true\u0027)"},{"line_number":305,"context_line":"        qnap_ssd_cache \u003d (extra_specs.get(\"qnap:ssd_cache\", \u0027false\u0027).lower()"},{"line_number":306,"context_line":"                          \u003d\u003d \u0027true\u0027)"},{"line_number":307,"context_line":"        LOG.debug(\u0027qnap_thin_provision: %(qnap_thin_provision)s \u0027"},{"line_number":308,"context_line":"                  \u0027qnap_compression: %(qnap_compression)s\u0027"},{"line_number":309,"context_line":"                  \u0027qnap_deduplication: %(qnap_deduplication)s\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_c255621f","line":306,"range":{"start_line":299,"start_character":0,"end_line":306,"end_character":36},"updated":"2017-11-20 02:53:58.000000000","message":"The extra_specs could be \"key\u003dthin_provisioning value\u003d\u003cis\u003e true\". If you only compare the \u0027true\u0027 value, it is not consistent with the common capabilities rule.\nPlease see the following links.\nhttps://github.com/openstack/manila/blob/master/manila/share/share_types.py#L332\nhttps://github.com/openstack/manila/blob/a9952a63f18d812b91c6c44d6840ae6e8392630f/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py#L498","commit_id":"df113d1e6ddcda59a986bd904c0327569b9ded9e"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"96470335e52539766fadd6977d65abc4b59c38b4","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        LOG.debug(\u0027share: %s\u0027, share.__dict__)"},{"line_number":297,"context_line":"        extra_specs \u003d share_types.get_extra_specs_from_share(share)"},{"line_number":298,"context_line":"        LOG.debug(\u0027extra_specs: %s\u0027, extra_specs)"},{"line_number":299,"context_line":"        qnap_thin_provision \u003d (extra_specs.get(\"thin_provisioning\","},{"line_number":300,"context_line":"                               \u0027true\u0027).lower() \u003d\u003d \u0027true\u0027)"},{"line_number":301,"context_line":"        qnap_compression \u003d (extra_specs.get(\"compression\", \u0027true\u0027).lower()"},{"line_number":302,"context_line":"                            \u003d\u003d \u0027true\u0027)"},{"line_number":303,"context_line":"        qnap_deduplication \u003d (extra_specs.get(\"dedupe\", \u0027false\u0027).lower()"},{"line_number":304,"context_line":"                              \u003d\u003d \u0027true\u0027)"},{"line_number":305,"context_line":"        qnap_ssd_cache \u003d (extra_specs.get(\"qnap:ssd_cache\", \u0027false\u0027).lower()"},{"line_number":306,"context_line":"                          \u003d\u003d \u0027true\u0027)"},{"line_number":307,"context_line":"        LOG.debug(\u0027qnap_thin_provision: %(qnap_thin_provision)s \u0027"},{"line_number":308,"context_line":"                  \u0027qnap_compression: %(qnap_compression)s\u0027"},{"line_number":309,"context_line":"                  \u0027qnap_deduplication: %(qnap_deduplication)s\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_41e61047","line":306,"range":{"start_line":299,"start_character":0,"end_line":306,"end_character":36},"in_reply_to":"ff82abbf_c255621f","updated":"2017-11-21 05:09:05.000000000","message":"Thanks for your review, now I check the capability value by share_types.parse_boolean_extra_spec()","commit_id":"df113d1e6ddcda59a986bd904c0327569b9ded9e"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"98143d4f41ae5da149022359e3606121f7c15f2f","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            \"qos\": False,"},{"line_number":272,"context_line":"            \"dedupe\": [True, False],"},{"line_number":273,"context_line":"            \"compression\": [True, False],"},{"line_number":274,"context_line":"            \"thin_provisioning\": [True, False],"},{"line_number":275,"context_line":"        }"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        data \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff82abbf_82504bd6","line":274,"range":{"start_line":274,"start_character":46,"end_line":274,"end_character":47},"updated":"2017-11-23 12:14:40.000000000","message":"Do you have to use capabilities scheduler to filer your backend by qnap ssd_cache capabilities, if yes, you have to add qnap_ssd_cache capability in update stats info and report to scheduler service.\nhttps://github.com/openstack/manila/blob/master/doc/source/admin/capabilities_and_extra_specs.rst\nhttps://github.com/openstack/manila/blob/master/manila/share/drivers/huawei/v3/connection.py#L331","commit_id":"597f941be798934147ab8598f6873a4a16769145"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"7e2bff92487df8400fb94cb15bcd878c90264e0a","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            \"qos\": False,"},{"line_number":272,"context_line":"            \"dedupe\": [True, False],"},{"line_number":273,"context_line":"            \"compression\": [True, False],"},{"line_number":274,"context_line":"            \"thin_provisioning\": [True, False],"},{"line_number":275,"context_line":"        }"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        data \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff82abbf_50743f68","line":274,"range":{"start_line":274,"start_character":46,"end_line":274,"end_character":47},"in_reply_to":"ff82abbf_82504bd6","updated":"2017-11-24 03:29:46.000000000","message":"Thanks for your remind, we will report qnap_ssd_cache capability info for capability scheduler to filter our backend.","commit_id":"597f941be798934147ab8598f6873a4a16769145"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"19ffca21ae498211593b674d16af0951e0fb9e81","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        extra_specs \u003d share_types.get_extra_specs_from_share(share)"},{"line_number":299,"context_line":"        LOG.debug(\u0027extra_specs: %s\u0027, extra_specs)"},{"line_number":300,"context_line":"        qnap_thin_provision \u003d share_types.parse_boolean_extra_spec("},{"line_number":301,"context_line":"            \u0027thin_provisioning\u0027, extra_specs.get(\"thin_provisioning\", \u0027true\u0027))"},{"line_number":302,"context_line":"        qnap_compression \u003d share_types.parse_boolean_extra_spec("},{"line_number":303,"context_line":"            \u0027compression\u0027, extra_specs.get(\"compression\", \u0027true\u0027))"},{"line_number":304,"context_line":"        qnap_deduplication \u003d share_types.parse_boolean_extra_spec("}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_c0238155","line":301,"range":{"start_line":301,"start_character":49,"end_line":301,"end_character":68},"updated":"2017-11-27 01:38:39.000000000","message":"By the way, the key also support \"capabilities:thin_provisioning\". Would you like to add it?","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"c35bac904fb030bd35f485d9ca8a33a474a6e4d5","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        extra_specs \u003d share_types.get_extra_specs_from_share(share)"},{"line_number":299,"context_line":"        LOG.debug(\u0027extra_specs: %s\u0027, extra_specs)"},{"line_number":300,"context_line":"        qnap_thin_provision \u003d share_types.parse_boolean_extra_spec("},{"line_number":301,"context_line":"            \u0027thin_provisioning\u0027, extra_specs.get(\"thin_provisioning\", \u0027true\u0027))"},{"line_number":302,"context_line":"        qnap_compression \u003d share_types.parse_boolean_extra_spec("},{"line_number":303,"context_line":"            \u0027compression\u0027, extra_specs.get(\"compression\", \u0027true\u0027))"},{"line_number":304,"context_line":"        qnap_deduplication \u003d share_types.parse_boolean_extra_spec("}],"source_content_type":"text/x-python","patch_set":14,"id":"9f91af0f_0e1e130c","line":301,"range":{"start_line":301,"start_character":49,"end_line":301,"end_character":68},"in_reply_to":"ff82abbf_c0238155","updated":"2017-12-28 09:24:04.000000000","message":"Yes, we would like to add it. Thanks.","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"828f531b838a81e68e7a334bddb12204e631a9ac","unresolved":false,"context_lines":[{"line_number":437,"context_line":"    @utils.retry(exception\u003dexception.ShareBackendException,"},{"line_number":438,"context_line":"                 interval\u003d3,"},{"line_number":439,"context_line":"                 retries\u003d5)"},{"line_number":440,"context_line":"    @utils.synchronized(\u0027qnap-create_snapshot\u0027)"},{"line_number":441,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":442,"context_line":"        \"\"\"Create a snapshot.\"\"\""},{"line_number":443,"context_line":"        LOG.debug(\u0027snapshot[share][share_id]: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_14ebf612","line":440,"range":{"start_line":440,"start_character":4,"end_line":440,"end_character":47},"updated":"2017-11-25 07:48:02.000000000","message":"Does this relate to one of the following items? \n- Thin Provisioning\n - SSD Cache\n - Deduplication\n - Compression","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"c35bac904fb030bd35f485d9ca8a33a474a6e4d5","unresolved":false,"context_lines":[{"line_number":437,"context_line":"    @utils.retry(exception\u003dexception.ShareBackendException,"},{"line_number":438,"context_line":"                 interval\u003d3,"},{"line_number":439,"context_line":"                 retries\u003d5)"},{"line_number":440,"context_line":"    @utils.synchronized(\u0027qnap-create_snapshot\u0027)"},{"line_number":441,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":442,"context_line":"        \"\"\"Create a snapshot.\"\"\""},{"line_number":443,"context_line":"        LOG.debug(\u0027snapshot[share][share_id]: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_918dcdd4","line":440,"range":{"start_line":440,"start_character":4,"end_line":440,"end_character":47},"in_reply_to":"ff82abbf_14ebf612","updated":"2017-12-28 09:24:04.000000000","message":"This is not related to this patch, I will fix it in another patch first.","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"828f531b838a81e68e7a334bddb12204e631a9ac","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        return {\u0027provider_location\u0027: snapshot_id}"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    @utils.synchronized(\u0027qnap-delete_snapshot\u0027)"},{"line_number":495,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":496,"context_line":"        \"\"\"Delete a snapshot.\"\"\""},{"line_number":497,"context_line":"        LOG.debug(\u0027Entering delete_snapshot. The deleted snapshot\u003d%(snap)s\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_34f07afe","line":494,"range":{"start_line":494,"start_character":4,"end_line":494,"end_character":47},"updated":"2017-11-25 07:48:02.000000000","message":"Does this relate to one of the following items? \n- Thin Provisioning\n - SSD Cache\n - Deduplication\n - Compression","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"c35bac904fb030bd35f485d9ca8a33a474a6e4d5","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        return {\u0027provider_location\u0027: snapshot_id}"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    @utils.synchronized(\u0027qnap-delete_snapshot\u0027)"},{"line_number":495,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":496,"context_line":"        \"\"\"Delete a snapshot.\"\"\""},{"line_number":497,"context_line":"        LOG.debug(\u0027Entering delete_snapshot. The deleted snapshot\u003d%(snap)s\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_31c081e1","line":494,"range":{"start_line":494,"start_character":4,"end_line":494,"end_character":47},"in_reply_to":"ff82abbf_34f07afe","updated":"2017-12-28 09:24:04.000000000","message":"This is not related to this patch, I will fix it in another patch first.","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"828f531b838a81e68e7a334bddb12204e631a9ac","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    @utils.retry(exception\u003dexception.ShareBackendException,"},{"line_number":511,"context_line":"                 interval\u003d3,"},{"line_number":512,"context_line":"                 retries\u003d5)"},{"line_number":513,"context_line":"    @utils.synchronized(\u0027qnap-create_share_from_snapshot\u0027)"},{"line_number":514,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":515,"context_line":"                                   share_server\u003dNone):"},{"line_number":516,"context_line":"        \"\"\"Create a share from a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_d4f02e00","line":513,"range":{"start_line":513,"start_character":4,"end_line":513,"end_character":58},"updated":"2017-11-25 07:48:02.000000000","message":"Does this relate to one of the following items? \n- Thin Provisioning\n - SSD Cache\n - Deduplication\n - Compression","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"c35bac904fb030bd35f485d9ca8a33a474a6e4d5","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    @utils.retry(exception\u003dexception.ShareBackendException,"},{"line_number":511,"context_line":"                 interval\u003d3,"},{"line_number":512,"context_line":"                 retries\u003d5)"},{"line_number":513,"context_line":"    @utils.synchronized(\u0027qnap-create_share_from_snapshot\u0027)"},{"line_number":514,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":515,"context_line":"                                   share_server\u003dNone):"},{"line_number":516,"context_line":"        \"\"\"Create a share from a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_51c505f0","line":513,"range":{"start_line":513,"start_character":4,"end_line":513,"end_character":58},"in_reply_to":"ff82abbf_d4f02e00","updated":"2017-12-28 09:24:04.000000000","message":"This is not related to this patch, I will fix it in another patch first.","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"828f531b838a81e68e7a334bddb12204e631a9ac","unresolved":false,"context_lines":[{"line_number":744,"context_line":"            LOG.warning(\u0027The denied rule is invalid and does not exist.\u0027)"},{"line_number":745,"context_line":"            return"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        vol_name \u003d self.private_storage.get(share[\u0027id\u0027], \u0027volName\u0027)"},{"line_number":748,"context_line":"        vol_name_timestamp \u003d self._get_timestamp_from_vol_name(vol_name)"},{"line_number":749,"context_line":"        host_name \u003d self._gen_host_name(vol_name_timestamp, access_level)"},{"line_number":750,"context_line":"        LOG.debug(\u0027vol_name:%s\u0027, vol_name)"},{"line_number":751,"context_line":"        LOG.debug(\u0027access_level:%s\u0027, access_level)"},{"line_number":752,"context_line":"        LOG.debug(\u0027host_name:%s\u0027, host_name)"},{"line_number":753,"context_line":"        host_list \u003d self.api_executor.get_host_list()"},{"line_number":754,"context_line":"        LOG.debug(\u0027host_list:%s\u0027, host_list)"},{"line_number":755,"context_line":"        vol_host_list \u003d self._get_vol_host(host_list, vol_name_timestamp)"},{"line_number":756,"context_line":"        # if share already have host, remove ip from host"},{"line_number":757,"context_line":"        if len(vol_host_list) \u003e 0:"},{"line_number":758,"context_line":"            # for now, only one host would exist"},{"line_number":759,"context_line":"            for vol_host in vol_host_list:"},{"line_number":760,"context_line":"                if vol_host[\u0027name\u0027] \u003d\u003d host_name:"},{"line_number":761,"context_line":"                    ipv4_list \u003d []"},{"line_number":762,"context_line":"                    ipv4_list.extend(vol_host[\u0027ipv4\u0027])"},{"line_number":763,"context_line":"                    if access_to in ipv4_list:"},{"line_number":764,"context_line":"                        ipv4_list.remove(access_to)"},{"line_number":765,"context_line":"                    LOG.debug(\u0027vol_host[\"ipv4\"]: %s\u0027, vol_host[\u0027ipv4\u0027])"},{"line_number":766,"context_line":"                    LOG.debug(\u0027ipv4_list: %s\u0027, ipv4_list)"},{"line_number":767,"context_line":"                    if len(ipv4_list) \u003d\u003d 0:  # if list empty, remove the host"},{"line_number":768,"context_line":"                        self.api_executor.set_nfs_access("},{"line_number":769,"context_line":"                            vol_name, 2, host_name)"},{"line_number":770,"context_line":"                        self.api_executor.delete_host(host_name)"},{"line_number":771,"context_line":"                    else:"},{"line_number":772,"context_line":"                        self.api_executor.edit_host(host_name, ipv4_list)"},{"line_number":773,"context_line":"                else:"},{"line_number":774,"context_line":"                    # No match type of host, do nothing"},{"line_number":775,"context_line":"                    pass"},{"line_number":776,"context_line":"        else:"},{"line_number":777,"context_line":"            # Host not found, do nothing"},{"line_number":778,"context_line":"            pass"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def _check_share_access(self, share_proto, access_type):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_548f3e74","line":777,"range":{"start_line":747,"start_character":7,"end_line":777,"end_character":40},"updated":"2017-11-25 07:48:02.000000000","message":"Does this relate to one of the following items? \n- Thin Provisioning\n - SSD Cache\n - Deduplication\n - Compression","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"c35bac904fb030bd35f485d9ca8a33a474a6e4d5","unresolved":false,"context_lines":[{"line_number":744,"context_line":"            LOG.warning(\u0027The denied rule is invalid and does not exist.\u0027)"},{"line_number":745,"context_line":"            return"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        vol_name \u003d self.private_storage.get(share[\u0027id\u0027], \u0027volName\u0027)"},{"line_number":748,"context_line":"        vol_name_timestamp \u003d self._get_timestamp_from_vol_name(vol_name)"},{"line_number":749,"context_line":"        host_name \u003d self._gen_host_name(vol_name_timestamp, access_level)"},{"line_number":750,"context_line":"        LOG.debug(\u0027vol_name:%s\u0027, vol_name)"},{"line_number":751,"context_line":"        LOG.debug(\u0027access_level:%s\u0027, access_level)"},{"line_number":752,"context_line":"        LOG.debug(\u0027host_name:%s\u0027, host_name)"},{"line_number":753,"context_line":"        host_list \u003d self.api_executor.get_host_list()"},{"line_number":754,"context_line":"        LOG.debug(\u0027host_list:%s\u0027, host_list)"},{"line_number":755,"context_line":"        vol_host_list \u003d self._get_vol_host(host_list, vol_name_timestamp)"},{"line_number":756,"context_line":"        # if share already have host, remove ip from host"},{"line_number":757,"context_line":"        if len(vol_host_list) \u003e 0:"},{"line_number":758,"context_line":"            # for now, only one host would exist"},{"line_number":759,"context_line":"            for vol_host in vol_host_list:"},{"line_number":760,"context_line":"                if vol_host[\u0027name\u0027] \u003d\u003d host_name:"},{"line_number":761,"context_line":"                    ipv4_list \u003d []"},{"line_number":762,"context_line":"                    ipv4_list.extend(vol_host[\u0027ipv4\u0027])"},{"line_number":763,"context_line":"                    if access_to in ipv4_list:"},{"line_number":764,"context_line":"                        ipv4_list.remove(access_to)"},{"line_number":765,"context_line":"                    LOG.debug(\u0027vol_host[\"ipv4\"]: %s\u0027, vol_host[\u0027ipv4\u0027])"},{"line_number":766,"context_line":"                    LOG.debug(\u0027ipv4_list: %s\u0027, ipv4_list)"},{"line_number":767,"context_line":"                    if len(ipv4_list) \u003d\u003d 0:  # if list empty, remove the host"},{"line_number":768,"context_line":"                        self.api_executor.set_nfs_access("},{"line_number":769,"context_line":"                            vol_name, 2, host_name)"},{"line_number":770,"context_line":"                        self.api_executor.delete_host(host_name)"},{"line_number":771,"context_line":"                    else:"},{"line_number":772,"context_line":"                        self.api_executor.edit_host(host_name, ipv4_list)"},{"line_number":773,"context_line":"                else:"},{"line_number":774,"context_line":"                    # No match type of host, do nothing"},{"line_number":775,"context_line":"                    pass"},{"line_number":776,"context_line":"        else:"},{"line_number":777,"context_line":"            # Host not found, do nothing"},{"line_number":778,"context_line":"            pass"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"    def _check_share_access(self, share_proto, access_type):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff82abbf_b1b33198","line":777,"range":{"start_line":747,"start_character":7,"end_line":777,"end_character":40},"in_reply_to":"ff82abbf_548f3e74","updated":"2017-12-28 09:24:04.000000000","message":"This is not related to this patch, I will fix it in another patch first.","commit_id":"b98a74ebb2f4bf684055ce565728a07b5fba77b2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"34999919a33589c7f545d1c11d850419343bf815","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        if (qnap_deduplication and not qnap_thin_provision):"},{"line_number":326,"context_line":"            msg \u003d _(\"Dedupe cannot be enabled without thin_provisioning.\")"},{"line_number":327,"context_line":"            LOG.debug(\u0027Dedupe cannot be enabled without thin_provisioning.\u0027)"},{"line_number":328,"context_line":"            raise exception.BadConfigurationException(reason\u003dmsg)"},{"line_number":329,"context_line":"        self.api_executor.create_share("},{"line_number":330,"context_line":"            share,"},{"line_number":331,"context_line":"            self.configuration.qnap_poolname,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f91af0f_9c4b3486","line":328,"range":{"start_line":328,"start_character":28,"end_line":328,"end_character":53},"updated":"2017-12-28 22:24:42.000000000","message":"ShareBackendException or Invalid\n\nthis isn\u0027t a driver configuration issue, this is an issue with the share type used by the user","commit_id":"d4715e42f73290aded8b99a625840f6142ada35c"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"ce6af4ec2360ab1f075ba6d3f2d67f8c0522cb91","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        if (qnap_deduplication and not qnap_thin_provision):"},{"line_number":326,"context_line":"            msg \u003d _(\"Dedupe cannot be enabled without thin_provisioning.\")"},{"line_number":327,"context_line":"            LOG.debug(\u0027Dedupe cannot be enabled without thin_provisioning.\u0027)"},{"line_number":328,"context_line":"            raise exception.BadConfigurationException(reason\u003dmsg)"},{"line_number":329,"context_line":"        self.api_executor.create_share("},{"line_number":330,"context_line":"            share,"},{"line_number":331,"context_line":"            self.configuration.qnap_poolname,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f91af0f_74276466","line":328,"range":{"start_line":328,"start_character":28,"end_line":328,"end_character":53},"in_reply_to":"9f91af0f_9c4b3486","updated":"2017-12-29 08:50:11.000000000","message":"Done","commit_id":"d4715e42f73290aded8b99a625840f6142ada35c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"20158b23f53e55dba9dc8ca1d5fbf06f5ac85c85","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        _metadata \u003d {}"},{"line_number":812,"context_line":"        vol_no \u003d existing_share.find(\u0027vol_no\u0027).text"},{"line_number":813,"context_line":"        vol \u003d self.api_executor.get_specific_volinfo(vol_no)"},{"line_number":814,"context_line":"        thin_provision \u003d vol.find(\u0027thin_pro\u0027).text \u003d\u003d \u00271\u0027"},{"line_number":815,"context_line":"        compression \u003d vol.find(\u0027compression\u0027).text \u003d\u003d \u00271\u0027"},{"line_number":816,"context_line":"        deduplication \u003d not (vol.find(\u0027dedup\u0027).text \u003d\u003d \u0027off\u0027)"},{"line_number":817,"context_line":"        ssd_cache \u003d vol.find(\u0027cache\u0027).text \u003d\u003d \u00271\u0027"},{"line_number":818,"context_line":"        LOG.debug(\u0027thin_provision: %(thin_provision)s \u0027"},{"line_number":819,"context_line":"                  \u0027compression: %(compression)s \u0027"},{"line_number":820,"context_line":"                  \u0027deduplication: %(deduplication)s \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_8de5e9aa","line":817,"range":{"start_line":813,"start_character":8,"end_line":817,"end_character":49},"updated":"2018-01-05 02:05:17.000000000","message":"You must be getting these from the share type and not the existing share. manage share can be specified with a new share type.","commit_id":"92cf2d2bb66e0db58d6c4177c4ede19772fa009a"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"1c2c3cefcfbcc6b03cb2d168b51dee63ae818081","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        _metadata \u003d {}"},{"line_number":812,"context_line":"        vol_no \u003d existing_share.find(\u0027vol_no\u0027).text"},{"line_number":813,"context_line":"        vol \u003d self.api_executor.get_specific_volinfo(vol_no)"},{"line_number":814,"context_line":"        thin_provision \u003d vol.find(\u0027thin_pro\u0027).text \u003d\u003d \u00271\u0027"},{"line_number":815,"context_line":"        compression \u003d vol.find(\u0027compression\u0027).text \u003d\u003d \u00271\u0027"},{"line_number":816,"context_line":"        deduplication \u003d not (vol.find(\u0027dedup\u0027).text \u003d\u003d \u0027off\u0027)"},{"line_number":817,"context_line":"        ssd_cache \u003d vol.find(\u0027cache\u0027).text \u003d\u003d \u00271\u0027"},{"line_number":818,"context_line":"        LOG.debug(\u0027thin_provision: %(thin_provision)s \u0027"},{"line_number":819,"context_line":"                  \u0027compression: %(compression)s \u0027"},{"line_number":820,"context_line":"                  \u0027deduplication: %(deduplication)s \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_72463d52","line":817,"range":{"start_line":813,"start_character":8,"end_line":817,"end_character":49},"in_reply_to":"9f91af0f_8de5e9aa","updated":"2018-01-05 07:06:00.000000000","message":"Done","commit_id":"92cf2d2bb66e0db58d6c4177c4ede19772fa009a"}],"manila/tests/share/drivers/qnap/test_qnap.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f14bbaa5f83bbac96f4921805c4a27a2804142df","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                       \u0027qnapadmin\u0027, \u0027Storage Pool 1\u0027,"},{"line_number":260,"context_line":"                       private_storage\u003dmock_private_storage)"},{"line_number":261,"context_line":"        self.mock_object(share_types, \u0027get_extra_specs_from_share\u0027,"},{"line_number":262,"context_line":"                         mock.Mock(return_value\u003d{}))"},{"line_number":263,"context_line":"        self.driver.create_share(\u0027context\u0027, self.share)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        mock_api_return \u003d mock_api_executor.return_value"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_3eed22ef","line":262,"range":{"start_line":262,"start_character":48,"end_line":262,"end_character":50},"updated":"2017-11-21 12:22:34.000000000","message":"Could you test for the real value of extra specs.\nsuch as return_value\u003d{\u0027thin_provision\u0027: \"\u003cis\u003e true\", ....}","commit_id":"15bdbd356aec7595a36ff679f0ad9060d2538eb0"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"b0c4dfc8fdc16882c477d1b53ab904ab96196d38","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                       \u0027qnapadmin\u0027, \u0027Storage Pool 1\u0027,"},{"line_number":260,"context_line":"                       private_storage\u003dmock_private_storage)"},{"line_number":261,"context_line":"        self.mock_object(share_types, \u0027get_extra_specs_from_share\u0027,"},{"line_number":262,"context_line":"                         mock.Mock(return_value\u003d{}))"},{"line_number":263,"context_line":"        self.driver.create_share(\u0027context\u0027, self.share)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        mock_api_return \u003d mock_api_executor.return_value"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_446a77b3","line":262,"range":{"start_line":262,"start_character":48,"end_line":262,"end_character":50},"in_reply_to":"ff82abbf_3eed22ef","updated":"2017-11-22 08:18:08.000000000","message":"Done","commit_id":"15bdbd356aec7595a36ff679f0ad9060d2538eb0"}],"releasenotes/notes/qnap-enhance-support-53848fda525b7ea4.yaml":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"1b94bb44c8460133ce006a74a95baca0f16cc04a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add enhanced supports to the QNAP Manila driver, including"},{"line_number":5,"context_line":"    \u0027Thin Provisioning\u0027, \u0027SSD Cache\u0027, \u0027Deduplication\u0027 and \u0027Compression\u0027."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"1f485f77_3f67dbeb","line":4,"updated":"2017-11-19 11:38:58.000000000","message":"You should use quotes like ``this`` instead of \u0027this\u0027 for the features.  I suggest:\n\nAdd support for the following enhanced features to the QNAP Manil driver: ``Thin Provisioning``, ``SSD Cache``, ``Deduplication`` and ``Compression``.","commit_id":"df113d1e6ddcda59a986bd904c0327569b9ded9e"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"96470335e52539766fadd6977d65abc4b59c38b4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add enhanced supports to the QNAP Manila driver, including"},{"line_number":5,"context_line":"    \u0027Thin Provisioning\u0027, \u0027SSD Cache\u0027, \u0027Deduplication\u0027 and \u0027Compression\u0027."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ff82abbf_21898c74","line":4,"in_reply_to":"1f485f77_3f67dbeb","updated":"2017-11-21 05:09:05.000000000","message":"Thanks for your review, I have updated it according to your suggestion.","commit_id":"df113d1e6ddcda59a986bd904c0327569b9ded9e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"20158b23f53e55dba9dc8ca1d5fbf06f5ac85c85","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add enhanced supports to the QNAP Manila driver, including"},{"line_number":5,"context_line":"    ``Thin Provisioning``, ``SSD Cache``, ``Deduplication``"},{"line_number":6,"context_line":"    and ``Compression``."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"9f91af0f_2dee1d88","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":7},"updated":"2018-01-05 02:05:17.000000000","message":"Added","commit_id":"92cf2d2bb66e0db58d6c4177c4ede19772fa009a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"20158b23f53e55dba9dc8ca1d5fbf06f5ac85c85","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add enhanced supports to the QNAP Manila driver, including"},{"line_number":5,"context_line":"    ``Thin Provisioning``, ``SSD Cache``, ``Deduplication``"},{"line_number":6,"context_line":"    and ``Compression``."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"9f91af0f_6df4255c","line":4,"range":{"start_line":4,"start_character":24,"end_line":4,"end_character":25},"updated":"2018-01-05 02:05:17.000000000","message":"support","commit_id":"92cf2d2bb66e0db58d6c4177c4ede19772fa009a"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"1c2c3cefcfbcc6b03cb2d168b51dee63ae818081","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add enhanced supports to the QNAP Manila driver, including"},{"line_number":5,"context_line":"    ``Thin Provisioning``, ``SSD Cache``, ``Deduplication``"},{"line_number":6,"context_line":"    and ``Compression``."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"9f91af0f_1277b1a2","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":7},"in_reply_to":"9f91af0f_2dee1d88","updated":"2018-01-05 07:06:00.000000000","message":"Done","commit_id":"92cf2d2bb66e0db58d6c4177c4ede19772fa009a"},{"author":{"_account_id":26134,"name":"Chris Yang","email":"chrisyang@qnap.com","username":"chrisyang"},"change_message_id":"1c2c3cefcfbcc6b03cb2d168b51dee63ae818081","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add enhanced supports to the QNAP Manila driver, including"},{"line_number":5,"context_line":"    ``Thin Provisioning``, ``SSD Cache``, ``Deduplication``"},{"line_number":6,"context_line":"    and ``Compression``."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"9f91af0f_327af587","line":4,"range":{"start_line":4,"start_character":24,"end_line":4,"end_character":25},"in_reply_to":"9f91af0f_6df4255c","updated":"2018-01-05 07:06:00.000000000","message":"Done","commit_id":"92cf2d2bb66e0db58d6c4177c4ede19772fa009a"}]}
